drm: drm_ioctl.c sync with fixes from CVS

Apply the fixes from CVS that were outstanding for this file

Signed-off-by: Dave Airlie <airlied@linux.ie>

authored by Dave Airlie and committed by Dave Airlie fe34765b b3a80a22

+10 -5
+10 -5
drivers/char/drm/drm_ioctl.c
··· 137 137 138 138 static int drm_set_busid(drm_device_t * dev) 139 139 { 140 + int len; 141 + 140 142 if (dev->unique != NULL) 141 143 return EBUSY; 142 144 143 - dev->unique_len = 20; 145 + dev->unique_len = 40; 144 146 dev->unique = drm_alloc(dev->unique_len + 1, DRM_MEM_DRIVER); 145 147 if (dev->unique == NULL) 146 148 return ENOMEM; 147 149 148 - snprintf(dev->unique, dev->unique_len, "pci:%04x:%02x:%02x.%d", 150 + len = snprintf(dev->unique, dev->unique_len, "pci:%04x:%02x:%02x.%d", 149 151 dev->pci_domain, dev->pci_bus, dev->pci_slot, dev->pci_func); 152 + 153 + if (len > dev->unique_len) 154 + DRM_ERROR("Unique buffer overflowed\n"); 150 155 151 156 dev->devname = 152 157 drm_alloc(strlen(dev->driver->pci_driver.name) + dev->unique_len + ··· 244 239 { 245 240 drm_file_t *priv = filp->private_data; 246 241 drm_device_t *dev = priv->head->dev; 247 - drm_client_t __user *argp = (void __user *)arg; 242 + drm_client_t __user *argp = (drm_client_t __user *)arg; 248 243 drm_client_t client; 249 244 drm_file_t *pt; 250 245 int idx; ··· 267 262 client.iocs = pt->ioctl_count; 268 263 up(&dev->struct_sem); 269 264 270 - if (copy_to_user((drm_client_t __user *) arg, &client, sizeof(client))) 265 + if (copy_to_user(argp, &client, sizeof(client))) 271 266 return -EFAULT; 272 267 return 0; 273 268 } ··· 344 339 if (sv.drm_di_major != DRM_IF_MAJOR || 345 340 sv.drm_di_minor < 0 || sv.drm_di_minor > DRM_IF_MINOR) 346 341 return EINVAL; 347 - if_version = DRM_IF_VERSION(sv.drm_di_major, sv.drm_dd_minor); 342 + if_version = DRM_IF_VERSION(sv.drm_di_major, sv.drm_di_minor); 348 343 dev->if_version = DRM_MAX(if_version, dev->if_version); 349 344 if (sv.drm_di_minor >= 1) { 350 345 /*