scsi: hpsa: Make buff allocation type unsigned
Subsystems (2)
PATCH 1/1 scsi: hpsa: Make buff allocation type unsigned
From: Kees Cook <[email protected]>
In preparation for converting the kmalloc family of allocators to the type-aware kmalloc_obj family, we need to make sure that the returned type from the allocation matches the type of the variable being assigned. (The kmalloc family returns "void *", which can be implicitly cast to any pointer type.)
The assigned type is "unsigned char **", but the converted allocation type would be "char **", whose elements point to a character type of a different signedness, so the two pointer types are not compatible. Take the size from the assignment target instead. No change in allocation size results.
Build tested ARCH=x86_64 allmodconfig with GCC 16.2.0:drivers/scsi/hpsa.o
---
Cc: Don Brace <[email protected]>
Cc: "James E.J. Bottomley" <[email protected]>
Cc: "Martin K. Petersen" <[email protected]>
Cc: <[email protected]>
Cc: <[email protected]>
--- drivers/scsi/hpsa.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/hpsa.c +1 -1
@@ -6499,7 +6499,7 @@ static int hpsa_big_passthru_ioctl(struct ctlr_info *h,return -EINVAL ;if (ioc->buf_size > ioc->malloc_size *SG_ENTRIES_IN_CMD )return -EINVAL ; - buff =kcalloc (SG_ENTRIES_IN_CMD ,sizeof (char *),GFP_KERNEL ); + buff =kcalloc (SG_ENTRIES_IN_CMD ,sizeof (*buff),GFP_KERNEL );if (!buff) { status = -ENOMEM ; goto cleanup1;
Signature · 1 line
2.34.1
Kees,
Quoted 5 lines
The assigned type is "unsigned char **", but the converted allocation type would be "char **", whose elements point to a character type of a different signedness, so the two pointer types are not compatible. Take the size from the assignment target instead. No change in allocation size results.
Applied to 7.4/scsi-staging, thanks!
Signature · 1 line
Martin K. Petersen
Quoted 6 lines · Kees Cook
In preparation for converting the kmalloc family of allocators to the type-aware
kmalloc_objfamily, we need to make sure that the returned type from the allocation matches the type of the variable being assigned. (The kmalloc family returns "void *", which can be implicitly cast to any pointer type.)
Quoted 7 lines
The assigned type is "unsigned char **", but the converted allocation type would be "char **", whose elements point to a character type of a different signedness, so the two pointer types are not compatible. Take the size from the assignment target instead. No change in allocation size results.
[...]
Applied to 7.4/scsi-queue, thanks!
[1/1] scsi: hpsa: Make buff allocation type unsigned
https://git.kernel.org/mkp/scsi/c/d0105247ca7e
Signature · 1 line
Martin K. Petersen