From: Long Li Date: Tue, 29 Aug 2017 00:43:59 +0000 (-0700) Subject: scsi: storvsc: fix memory leak on ring buffer busy X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=0208eeaa650c5c866a3242201678a19e6dc4a14e;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git scsi: storvsc: fix memory leak on ring buffer busy When storvsc is sending I/O to Hyper-v, it may allocate a bigger buffer descriptor for large data payload that can't fit into a pre-allocated buffer descriptor. This bigger buffer is freed on return path. If I/O request to Hyper-v fails due to ring buffer busy, the storvsc allocated buffer descriptor should also be freed. [mkp: applied by hand] Fixes: be0cf6ca301c ("scsi: storvsc: Set the tablesize based on the information given by the host") Cc: Signed-off-by: Long Li Signed-off-by: Martin K. Petersen --- diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c index 3cc8d67783a1..5e7200f05873 100644 --- a/drivers/scsi/storvsc_drv.c +++ b/drivers/scsi/storvsc_drv.c @@ -1640,6 +1640,8 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd) put_cpu(); if (ret == -EAGAIN) { + if (payload_sz > sizeof(cmd_request->mpb)) + kfree(payload); /* no more space */ return SCSI_MLQUEUE_DEVICE_BUSY; }