Loading fs/orangefs/devorangefs-req.c +12 −42 Original line number Diff line number Diff line Loading @@ -716,37 +716,6 @@ struct ORANGEFS_dev_map_desc32 { __s32 count; }; static unsigned long translate_dev_map26(unsigned long args, long *error) { struct ORANGEFS_dev_map_desc32 __user *p32 = (void __user *)args; /* * Depending on the architecture, allocate some space on the * user-call-stack based on our expected layout. */ struct ORANGEFS_dev_map_desc __user *p = compat_alloc_user_space(sizeof(*p)); compat_uptr_t addr; *error = 0; /* get the ptr from the 32 bit user-space */ if (get_user(addr, &p32->ptr)) goto err; /* try to put that into a 64-bit layout */ if (put_user(compat_ptr(addr), &p->ptr)) goto err; /* copy the remaining fields */ if (copy_in_user(&p->total_size, &p32->total_size, sizeof(__s32))) goto err; if (copy_in_user(&p->size, &p32->size, sizeof(__s32))) goto err; if (copy_in_user(&p->count, &p32->count, sizeof(__s32))) goto err; return (unsigned long)p; err: *error = -EFAULT; return 0; } /* * 32 bit user-space apps' ioctl handlers when kernel modules * is compiled as a 64 bit one Loading @@ -755,25 +724,26 @@ static long orangefs_devreq_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long args) { long ret; unsigned long arg = args; /* Check for properly constructed commands */ ret = check_ioctl_command(cmd); if (ret < 0) return ret; if (cmd == ORANGEFS_DEV_MAP) { /* * convert the arguments to what we expect internally * in kernel space */ arg = translate_dev_map26(args, &ret); if (ret < 0) { gossip_err("Could not translate dev map\n"); return ret; } struct ORANGEFS_dev_map_desc desc; struct ORANGEFS_dev_map_desc32 d32; if (copy_from_user(&d32, (void __user *)args, sizeof(d32))) return -EFAULT; desc.ptr = compat_ptr(d32.ptr); desc.total_size = d32.total_size; desc.size = d32.size; desc.count = d32.count; return orangefs_bufmap_initialize(&desc); } /* no other ioctl requires translation */ return dispatch_ioctl_command(cmd, arg); return dispatch_ioctl_command(cmd, args); } #endif /* CONFIG_COMPAT is in .config */ Loading Loading
fs/orangefs/devorangefs-req.c +12 −42 Original line number Diff line number Diff line Loading @@ -716,37 +716,6 @@ struct ORANGEFS_dev_map_desc32 { __s32 count; }; static unsigned long translate_dev_map26(unsigned long args, long *error) { struct ORANGEFS_dev_map_desc32 __user *p32 = (void __user *)args; /* * Depending on the architecture, allocate some space on the * user-call-stack based on our expected layout. */ struct ORANGEFS_dev_map_desc __user *p = compat_alloc_user_space(sizeof(*p)); compat_uptr_t addr; *error = 0; /* get the ptr from the 32 bit user-space */ if (get_user(addr, &p32->ptr)) goto err; /* try to put that into a 64-bit layout */ if (put_user(compat_ptr(addr), &p->ptr)) goto err; /* copy the remaining fields */ if (copy_in_user(&p->total_size, &p32->total_size, sizeof(__s32))) goto err; if (copy_in_user(&p->size, &p32->size, sizeof(__s32))) goto err; if (copy_in_user(&p->count, &p32->count, sizeof(__s32))) goto err; return (unsigned long)p; err: *error = -EFAULT; return 0; } /* * 32 bit user-space apps' ioctl handlers when kernel modules * is compiled as a 64 bit one Loading @@ -755,25 +724,26 @@ static long orangefs_devreq_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long args) { long ret; unsigned long arg = args; /* Check for properly constructed commands */ ret = check_ioctl_command(cmd); if (ret < 0) return ret; if (cmd == ORANGEFS_DEV_MAP) { /* * convert the arguments to what we expect internally * in kernel space */ arg = translate_dev_map26(args, &ret); if (ret < 0) { gossip_err("Could not translate dev map\n"); return ret; } struct ORANGEFS_dev_map_desc desc; struct ORANGEFS_dev_map_desc32 d32; if (copy_from_user(&d32, (void __user *)args, sizeof(d32))) return -EFAULT; desc.ptr = compat_ptr(d32.ptr); desc.total_size = d32.total_size; desc.size = d32.size; desc.count = d32.count; return orangefs_bufmap_initialize(&desc); } /* no other ioctl requires translation */ return dispatch_ioctl_command(cmd, arg); return dispatch_ioctl_command(cmd, args); } #endif /* CONFIG_COMPAT is in .config */ Loading