Patch "scsi: sd_zbc: Fix potential memory leak" has been added to the 4.15-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
scsi: sd_zbc: Fix potential memory leak
to the 4.15-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
scsi-sd_zbc-fix-potential-memory-leak.patch
and it can be found in the queue-4.15 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
4b433924b2755a94f99258c178684a0e05c344deMon Sep 17 00:00:00 2001
From: Damien Le Moal <[email protected]>
Date: Fri, 2 Mar 2018 07:19:28 +0900
Subject: scsi: sd_zbc: Fix potential memory leak
From: Damien Le Moal <[email protected]>
commit 4b433924b2755a94f99258c178684a0e05c344de upstream.
Rework sd_zbc_check_zone_size() to avoid a memory leak due to an early return if sd_zbc_report_zones() fails.
--- drivers/scsi/sd_zbc.c | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-)
drivers/scsi/sd_zbc.c +15 -20
@@ -486,7 +486,7 @@ static int sd_zbc_check_capacity(struct*/ static int sd_zbc_check_zone_size (struct scsi_disk *sdkp) { -u64 zone_blocks; +u64 zone_blocks =0 ;sector_t block =0 ;unsigned char *buf;unsigned char *rec;
@@ -504,10 +504,8 @@ static int sd_zbc_check_zone_size(struct/* Do a report zone to get the same field */ ret =sd_zbc_report_zones (sdkp, buf,SD_ZBC_BUF_SIZE ,0 ); -if (ret) { - zone_blocks =0 ; - goto out; - } +if (ret) + goto out_free; same = buf[4 ] &0x0f ;if (same >0 ) {
@@ -547,7 +545,7 @@ static int sd_zbc_check_zone_size(struct ret =sd_zbc_report_zones (sdkp, buf,SD_ZBC_BUF_SIZE , block);if (ret) -return ret; + goto out_free; } }while (block < sdkp->capacity);
@@ -555,35 +553,32 @@ static int sd_zbc_check_zone_size(struct zone_blocks = sdkp->zone_blocks; out: -kfree (buf); -if (!zone_blocks) {if (sdkp->first_scan)sd_printk (KERN_NOTICE , sdkp,"Devices with non constant zone " "size are not supported\n" ); -return -ENODEV ; - } - -if (!is_power_of_2 (zone_blocks)) { + ret = -ENODEV ; + }else if (!is_power_of_2 (zone_blocks)) {if (sdkp->first_scan)sd_printk (KERN_NOTICE , sdkp,"Devices with non power of 2 zone " "size are not supported\n" ); -return -ENODEV ; - } - -if (logical_to_sectors (sdkp->device, zone_blocks) >UINT_MAX ) { + ret = -ENODEV ; + }else if (logical_to_sectors (sdkp->device, zone_blocks) >UINT_MAX ) {if (sdkp->first_scan)sd_printk (KERN_NOTICE , sdkp,"Zone size too large\n" ); -return -ENODEV ; + ret = -ENODEV ; + }else { + sdkp->zone_blocks = zone_blocks; + sdkp->zone_shift =ilog2 (zone_blocks); } - sdkp->zone_blocks = zone_blocks; - sdkp->zone_shift =ilog2 (zone_blocks); +out_free: +kfree (buf); -return 0 ; +return ret; }static int sd_zbc_setup (struct scsi_disk *sdkp)
Patches currently in stable-queue which might be from [email protected] are
queue-4.15/scsi-sd_zbc-fix-potential-memory-leak.patch