patch-2.4.0-test8 linux/drivers/char/drm/i810_dma.c

Next file: linux/drivers/char/drm/i810_drv.c
Previous file: linux/drivers/char/drm/i810_context.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test7/linux/drivers/char/drm/i810_dma.c linux/drivers/char/drm/i810_dma.c
@@ -490,8 +490,8 @@
    	drm_i810_init_t init;
    	int retcode = 0;
 	
-   	copy_from_user_ret(&init, (drm_i810_init_t *)arg, 
-			   sizeof(init), -EFAULT);
+  	if (copy_from_user(&init, (drm_i810_init_t *)arg, sizeof(init)))
+		return -EFAULT;
 	
    	switch(init.func) {
 	 	case I810_INIT_DMA:
@@ -1005,7 +1005,8 @@
    
    	DRM_DEBUG(  "i810_control\n");
 
-	copy_from_user_ret(&ctl, (drm_control_t *)arg, sizeof(ctl), -EFAULT);
+	if (copy_from_user(&ctl, (drm_control_t *)arg, sizeof(ctl)))
+		return -EFAULT;
 	
 	switch (ctl.func) {
 	case DRM_INST_HANDLER:
@@ -1178,7 +1179,8 @@
 	int		  ret	= 0;
 	drm_lock_t	  lock;
 
-	copy_from_user_ret(&lock, (drm_lock_t *)arg, sizeof(lock), -EFAULT);
+	if (copy_from_user(&lock, (drm_lock_t *)arg, sizeof(lock)))
+		return -EFAULT;
 
 	if (lock.context == DRM_KERNEL_CONTEXT) {
 		DRM_ERROR("Process %d using kernel context %d\n",
@@ -1227,6 +1229,15 @@
 	}
 	
 	if (!ret) {
+		sigemptyset(&dev->sigmask);
+		sigaddset(&dev->sigmask, SIGSTOP);
+		sigaddset(&dev->sigmask, SIGTSTP);
+		sigaddset(&dev->sigmask, SIGTTIN);
+		sigaddset(&dev->sigmask, SIGTTOU);
+		dev->sigdata.context = lock.context;
+		dev->sigdata.lock    = dev->lock.hw_lock;
+		block_all_signals(drm_notifier, &dev->sigdata, &dev->sigmask);
+
 		if (lock.flags & _DRM_LOCK_QUIESCENT) {
 		   DRM_DEBUG("_DRM_LOCK_QUIESCENT\n");
 		   DRM_DEBUG("fred\n");
@@ -1266,8 +1277,8 @@
      					dev_priv->sarea_priv; 
 	drm_i810_vertex_t vertex;
 
-	copy_from_user_ret(&vertex, (drm_i810_vertex_t *)arg, sizeof(vertex),
-			   -EFAULT);
+	if (copy_from_user(&vertex, (drm_i810_vertex_t *)arg, sizeof(vertex)))
+		return -EFAULT;
 
    	if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
 		DRM_ERROR("i810_dma_vertex called without lock held\n");
@@ -1298,8 +1309,8 @@
 	drm_device_t *dev = priv->dev;
 	drm_i810_clear_t clear;
 
-   	copy_from_user_ret(&clear, (drm_i810_clear_t *)arg, sizeof(clear), 
-			   -EFAULT);
+   	if (copy_from_user(&clear, (drm_i810_clear_t *)arg, sizeof(clear)))
+		return -EFAULT;
    
    	if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
 		DRM_ERROR("i810_clear_bufs called without lock held\n");
@@ -1356,7 +1367,8 @@
      					dev_priv->sarea_priv; 
 
 	DRM_DEBUG("getbuf\n");
-   	copy_from_user_ret(&d, (drm_i810_dma_t *)arg, sizeof(d), -EFAULT);
+   	if (copy_from_user(&d, (drm_i810_dma_t *)arg, sizeof(d)))
+		return -EFAULT;
    
 	if(!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock)) {
 		DRM_ERROR("i810_dma called without lock held\n");
@@ -1370,7 +1382,8 @@
 	DRM_DEBUG("i810_dma: %d returning %d, granted = %d\n",
 		  current->pid, retcode, d.granted);
 
-	copy_to_user_ret((drm_dma_t *)arg, &d, sizeof(d), -EFAULT);   
+	if (copy_to_user((drm_dma_t *)arg, &d, sizeof(d)))
+		return -EFAULT;
    	sarea_priv->last_dispatch = (int) hw_status[5];
 
 	return retcode;
@@ -1395,14 +1408,16 @@
 		return -EINVAL;
 	}
    
-   	copy_from_user_ret(&d, (drm_i810_copy_t *)arg, sizeof(d), -EFAULT);
+   	if (copy_from_user(&d, (drm_i810_copy_t *)arg, sizeof(d)))
+		return -EFAULT;
 
 	if(d.idx > dma->buf_count) return -EINVAL;
 	buf = dma->buflist[ d.idx ];
    	buf_priv = buf->dev_private;
 	if (buf_priv->currently_mapped != I810_BUF_MAPPED) return -EPERM;
 
-   	copy_from_user_ret(buf_priv->virtual, d.address, d.used, -EFAULT);
+   	if (copy_from_user(buf_priv->virtual, d.address, d.used))
+		return -EFAULT;
 
    	sarea_priv->last_dispatch = (int) hw_status[5];
 

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)