Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

esas2r: don't open-code memdup_user()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro bf7af0ce 1c87ea45

+3 -22
+3 -22
drivers/scsi/esas2r/esas2r_ioctl.c
··· 1289 1289 || (cmd > EXPRESS_IOCTL_MAX)) 1290 1290 return -ENOTSUPP; 1291 1291 1292 - if (!access_ok(VERIFY_WRITE, arg, sizeof(struct atto_express_ioctl))) { 1292 + ioctl = memdup_user(arg, sizeof(struct atto_express_ioctl)); 1293 + if (IS_ERR(ioctl)) { 1293 1294 esas2r_log(ESAS2R_LOG_WARN, 1294 1295 "ioctl_handler access_ok failed for cmd %d, " 1295 1296 "address %p", cmd, 1296 1297 arg); 1297 - return -EFAULT; 1298 - } 1299 - 1300 - /* allocate a kernel memory buffer for the IOCTL data */ 1301 - ioctl = kzalloc(sizeof(struct atto_express_ioctl), GFP_KERNEL); 1302 - if (ioctl == NULL) { 1303 - esas2r_log(ESAS2R_LOG_WARN, 1304 - "ioctl_handler kzalloc failed for %zu bytes", 1305 - sizeof(struct atto_express_ioctl)); 1306 - return -ENOMEM; 1307 - } 1308 - 1309 - err = __copy_from_user(ioctl, arg, sizeof(struct atto_express_ioctl)); 1310 - if (err != 0) { 1311 - esas2r_log(ESAS2R_LOG_WARN, 1312 - "copy_from_user didn't copy everything (err %d, cmd %d)", 1313 - err, 1314 - cmd); 1315 - kfree(ioctl); 1316 - 1317 - return -EFAULT; 1298 + return PTR_ERR(ioctl); 1318 1299 } 1319 1300 1320 1301 /* verify the signature */