diff options
author | Oleg Nesterov <oleg@tv-sign.ru> | 2007-10-23 09:08:21 -0400 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2007-10-29 06:33:05 -0400 |
commit | 0a0836a09ca7a27341703ef154c82e2e7f3e96f4 (patch) | |
tree | d4fb7c2a848e7160945405dd3d1bdcf9ae6efd33 /block/cfq-iosched.c | |
parent | abbeb88d00bef294ce661a9229c1dc31be064545 (diff) |
cfq_get_queue: fix possible NULL pointer access
cfq_get_queue()->cfq_find_alloc_queue() can fail, check the returned value.
Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Note that this isn't a bug at the moment, since the regular IO path
does not call this path without __GFP_WAIT set. However, it could be a
future bug, so I've applied it.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r-- | block/cfq-iosched.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index d77c9719b613..e47a9309eb48 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -1443,8 +1443,11 @@ cfq_get_queue(struct cfq_data *cfqd, int is_sync, struct task_struct *tsk, | |||
1443 | cfqq = *async_cfqq; | 1443 | cfqq = *async_cfqq; |
1444 | } | 1444 | } |
1445 | 1445 | ||
1446 | if (!cfqq) | 1446 | if (!cfqq) { |
1447 | cfqq = cfq_find_alloc_queue(cfqd, is_sync, tsk, gfp_mask); | 1447 | cfqq = cfq_find_alloc_queue(cfqd, is_sync, tsk, gfp_mask); |
1448 | if (!cfqq) | ||
1449 | return NULL; | ||
1450 | } | ||
1448 | 1451 | ||
1449 | /* | 1452 | /* |
1450 | * pin the queue now that it's allocated, scheduler exit will prune it | 1453 | * pin the queue now that it's allocated, scheduler exit will prune it |