s390/zcrypt: use kvmalloc_array() instead of kzalloc()
authorHeiko Carstens <hca@linux.ibm.com>
Wed, 21 Jun 2023 08:31:23 +0000 (10:31 +0200)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Wed, 28 Jun 2023 11:57:09 +0000 (13:57 +0200)
zcrypt_unlocked_ioctl() allocates 256k with kzalloc() which is likely to
fail if memory is fragmented. To avoid that use kvmalloc_array() instead,
like it is done at several other places for the same reason.

Reviewed-by: Harald Freudenberger <freude@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
drivers/s390/crypto/zcrypt_api.c

index 444ef95d3f598ad4c6f2953da0113fda17983916..ae4759a193d30704634a4fd325c0c84adcfefafb 100644 (file)
@@ -1668,14 +1668,16 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
                size_t total_size = MAX_ZDEV_ENTRIES_EXT
                        * sizeof(struct zcrypt_device_status_ext);
 
-               device_status = kzalloc(total_size, GFP_KERNEL);
+               device_status = kvmalloc_array(MAX_ZDEV_ENTRIES_EXT,
+                                              sizeof(struct zcrypt_device_status_ext),
+                                              GFP_KERNEL);
                if (!device_status)
                        return -ENOMEM;
                zcrypt_device_status_mask_ext(device_status);
                if (copy_to_user((char __user *)arg, device_status,
                                 total_size))
                        rc = -EFAULT;
-               kfree(device_status);
+               kvfree(device_status);
                return rc;
        }
        case ZCRYPT_STATUS_MASK: {