[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#392915: xserver-xorg-video-ati: xserver freezes system when starting



On Tue, 2007-01-09 at 22:54 +0100, Andreas Johansson wrote:
> On Tue, Jan 09, 2007 at 06:18:24PM +0100, Michel Dänzer wrote:
> 
> > I'm not sure how this could happen though; can you also post the full
> > kernel output, or at least everything related to AGP and the DRI?
> 
> Sure. Attached are the entries from /var/log/messages that I believe
> matches the two Xorg log files. Below are the results of grep:ing
> for agp and drm.

Thanks. I think this is another integer overflow bug in the radeon DRM;
can you try the attached patch?


-- 
Earthling Michel Dänzer           |          http://tungstengraphics.com
Libre software enthusiast         |          Debian, X and DRI developer
diff --git a/shared-core/radeon_cp.c b/shared-core/radeon_cp.c
index 4135f4d..0fa6535 100644
--- a/shared-core/radeon_cp.c
+++ b/shared-core/radeon_cp.c
@@ -1563,8 +1563,8 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
 		if (dev_priv->flags & RADEON_IS_AGP) {
 			base = dev->agp->base;
 			/* Check if valid */
-			if ((base + dev_priv->gart_size) > dev_priv->fb_location &&
-			    base < (dev_priv->fb_location + dev_priv->fb_size)) {
+			if ((base + dev_priv->gart_size - 1) >= dev_priv->fb_location &&
+			    base < (dev_priv->fb_location + dev_priv->fb_size - 1)) {
 				DRM_INFO("Can't use AGP base @0x%08lx, won't fit\n",
 					 dev->agp->base);
 				base = 0;
@@ -1574,8 +1574,8 @@ static int radeon_do_init_cp(drm_device_t * dev, drm_radeon_init_t * init)
 		/* If not or if AGP is at 0 (Macs), try to put it elsewhere */
 		if (base == 0) {
 			base = dev_priv->fb_location + dev_priv->fb_size;
-			if (((base + dev_priv->gart_size) & 0xfffffffful)
-			    < base)
+			if (base < dev_priv->fb_location ||
+			    ((base + dev_priv->gart_size) & 0xfffffffful) < base)
 				base = dev_priv->fb_location
 					- dev_priv->gart_size;
 		}		

Reply to: