[3] staging: vchiq_arm: remove some ugly casting

Dan Carpenter dan.carpenter at oracle.com
Mon Jan 23 03:42:18 PST 2017


Let's start treating "arg" as a user pointer instead of an unsigned
long earlier so we can remove some ugly casts.

diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
index 2cc43a724554..5caf53942604 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c
@@ -506,7 +506,8 @@ vchiq_ioc_queue_message(VCHIQ_SERVICE_HANDLE_T handle,
 				   &context, total_size);
 }
 
-static int vchiq_ioctl_create_service(struct file *file, unsigned int cmd, unsigned long arg)
+static int vchiq_ioctl_create_service(struct file *file, unsigned int cmd,
+				      VCHIQ_CREATE_SERVICE_T __user *uargs)
 {
 	VCHIQ_INSTANCE_T instance = file->private_data;
 	VCHIQ_STATUS_T status = VCHIQ_SUCCESS;
@@ -516,7 +517,7 @@ static int vchiq_ioctl_create_service(struct file *file, unsigned int cmd, unsig
 	void *userdata;
 	int srvstate;
 
-	if (copy_from_user(&args, (const void __user *)arg, sizeof(args)))
+	if (copy_from_user(&args, uargs, sizeof(args)))
 		return -EFAULT;
 
 	user_service = kmalloc(sizeof(*user_service), GFP_KERNEL);
@@ -568,9 +569,8 @@ static int vchiq_ioctl_create_service(struct file *file, unsigned int cmd, unsig
 		}
 	}
 
-	if (copy_to_user((void __user *)
-			 &(((VCHIQ_CREATE_SERVICE_T __user *)arg)->handle),
-			 &service->handle, sizeof(service->handle))) {
+	if (copy_to_user(&uargs->handle, &service->handle,
+			 sizeof(service->handle))) {
 		vchiq_remove_service(service->handle);
 		return -EFAULT;
 	}
@@ -649,7 +649,8 @@ vchiq_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 		break;
 
 	case VCHIQ_IOC_CREATE_SERVICE:
-		return vchiq_ioctl_create_service(file, cmd, arg);
+		return vchiq_ioctl_create_service(file, cmd,
+						  (void __user *)arg);
 	case VCHIQ_IOC_CLOSE_SERVICE: {
 		VCHIQ_SERVICE_HANDLE_T handle = (VCHIQ_SERVICE_HANDLE_T)arg;
 



More information about the linux-rpi-kernel mailing list