tree f9ed5470c81bd63dba86f425a2c3731802000c79
parent 9c340d80f66faaea3522812d0d8c91d6a1b48a22
author Jens Axboe <[EMAIL PROTECTED]> Sun, 17 Apr 2005 05:25:40 -0700
committer Linus Torvalds <[EMAIL PROTECTED]> Sun, 17 Apr 2005 05:25:40 -0700
[PATCH] possible use-after-free of bio
There is a possibility that a bio will be accessed after it has been freed
on SCSI. It happens if you submit a bio with BIO_SYNC marked and the
auto-unplugging kicks the request_fn, SCSI re-enables interrupts in-between
so if the request completes between the add_request() in __make_request()
and the bio_sync() call, we could be looking at a dead bio. It's a slim
race, but it has been triggered in the Real World.
So assign bio_sync() to a local variable instead.
Signed-off-by: Jens Axboe <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
block/ll_rw_blk.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
Index: drivers/block/ll_rw_blk.c
===================================================================
--- 35ee317dd45aab96021256b8fdb06c90a05b3002/drivers/block/ll_rw_blk.c
(mode:100644 sha1:02242e8ba996872e0aa78aa78af662cdf83c732c)
+++ f9ed5470c81bd63dba86f425a2c3731802000c79/drivers/block/ll_rw_blk.c
(mode:100644 sha1:2d6934a028674fb0df6ed187643686159cdacc84)
@@ -2559,7 +2559,7 @@
static int __make_request(request_queue_t *q, struct bio *bio)
{
struct request *req, *freereq = NULL;
- int el_ret, rw, nr_sectors, cur_nr_sectors, barrier, err;
+ int el_ret, rw, nr_sectors, cur_nr_sectors, barrier, err, sync;
sector_t sector;
sector = bio->bi_sector;
@@ -2567,6 +2567,7 @@
cur_nr_sectors = bio_cur_sectors(bio);
rw = bio_data_dir(bio);
+ sync = bio_sync(bio);
/*
* low level driver can indicate that it wants pages above a
@@ -2698,7 +2699,7 @@
out:
if (freereq)
__blk_put_request(q, freereq);
- if (bio_sync(bio))
+ if (sync)
__generic_unplug_device(q);
spin_unlock_irq(q->queue_lock);
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html