scsi: hpsa: Replace kmalloc() + copy_from_user() with memdup_user()

Replace kmalloc() followed by copy_from_user() with memdup_user() to
improve and simplify hpsa_passthru_ioctl().

Since memdup_user() already allocates memory, use kzalloc() in the else
branch instead of manually zeroing 'buff' using memset(0).

Return early if an error occurs and remove the 'out_kfree' label.

No functional changes intended.

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Acked-by: Don Brace <don.brace@microchip.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Thorsten Blum 2025-09-23 19:15:04 +02:00 committed by Martin K. Petersen
parent b81296591c
commit ac01fc418f
1 changed files with 6 additions and 11 deletions

View File

@ -6402,18 +6402,14 @@ static int hpsa_passthru_ioctl(struct ctlr_info *h,
return -EINVAL;
}
if (iocommand->buf_size > 0) {
buff = kmalloc(iocommand->buf_size, GFP_KERNEL);
if (buff == NULL)
return -ENOMEM;
if (iocommand->Request.Type.Direction & XFER_WRITE) {
/* Copy the data into the buffer we created */
if (copy_from_user(buff, iocommand->buf,
iocommand->buf_size)) {
rc = -EFAULT;
goto out_kfree;
}
buff = memdup_user(iocommand->buf, iocommand->buf_size);
if (IS_ERR(buff))
return PTR_ERR(buff);
} else {
memset(buff, 0, iocommand->buf_size);
buff = kzalloc(iocommand->buf_size, GFP_KERNEL);
if (!buff)
return -ENOMEM;
}
}
c = cmd_alloc(h);
@ -6473,7 +6469,6 @@ static int hpsa_passthru_ioctl(struct ctlr_info *h,
}
out:
cmd_free(h, c);
out_kfree:
kfree(buff);
return rc;
}