Message ID | 20220601062544.905141-2-damien.lemoal@opensource.wdc.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | sd_zbc fixes | expand |
On Wed, Jun 01, 2022 at 03:25:43PM +0900, Damien Le Moal wrote: > If sd_probe() sees an early error before sdkp->device is initialized, > sd_zbc_release_disk() is called. This causes a NULL pointer dereference > when sd_is_zoned() is called inside that function. Avoid this by > removing the call to sd_zbc_release_disk() in sd_probe() error path. > > This chnage is safe and does not result in zone information memory > leakage because the zone information for a zoned disk is allocated only > when sd_revalidate_disk() is called, at which point sdkp->disk_dev is > fully set, resulting in sd_disk_release() being called when needed to > cleanup a disk zone information using sd_zbc_release_disk(). Looks good: Reviewed-by: Christoph Hellwig <hch@lst.de>
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 749316462075..dabdc0eeb3dc 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -3542,7 +3542,6 @@ static int sd_probe(struct device *dev) out_put: put_disk(gd); out_free: - sd_zbc_release_disk(sdkp); kfree(sdkp); out: scsi_autopm_put_device(sdp);
If sd_probe() sees an early error before sdkp->device is initialized, sd_zbc_release_disk() is called. This causes a NULL pointer dereference when sd_is_zoned() is called inside that function. Avoid this by removing the call to sd_zbc_release_disk() in sd_probe() error path. This chnage is safe and does not result in zone information memory leakage because the zone information for a zoned disk is allocated only when sd_revalidate_disk() is called, at which point sdkp->disk_dev is fully set, resulting in sd_disk_release() being called when needed to cleanup a disk zone information using sd_zbc_release_disk(). Reported-by: Dongliang Mu <mudongliangabcd@gmail.com> Suggested-by: Christoph Hellwig <hch@lst.de> Fixes: 89d947561077 ("sd: Implement support for ZBC device") Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> --- drivers/scsi/sd.c | 1 - 1 file changed, 1 deletion(-)