浏览代码

[SCSI] sg: fix bio leak with a detached device

After blk_rq_map_user is successful, if we find that a device is
unavailable (was detached), we must call blk_end_request_all to free
bio(s) before blk_rq_unmap_user and blk_put_request.

Reported-by: "Dailey, Nate" <Nate.Dailey@stratus.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Tested-by: "Dailey, Nate" <Nate.Dailey@stratus.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
FUJITA Tomonori 15 年之前
父节点
当前提交
caf19d3860
共有 1 个文件被更改,包括 2 次插入0 次删除
  1. 2 0
      drivers/scsi/sg.c

+ 2 - 0
drivers/scsi/sg.c

@@ -729,6 +729,8 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp,
 		return k;	/* probably out of space --> ENOMEM */
 		return k;	/* probably out of space --> ENOMEM */
 	}
 	}
 	if (sdp->detached) {
 	if (sdp->detached) {
+		if (srp->bio)
+			blk_end_request_all(srp->rq, -EIO);
 		sg_finish_rem_req(srp);
 		sg_finish_rem_req(srp);
 		return -ENODEV;
 		return -ENODEV;
 	}
 	}