cfq_get_queue: fix possible NULL pointer access
authorOleg Nesterov <oleg@tv-sign.ru>
Tue, 23 Oct 2007 13:08:21 +0000 (15:08 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Mon, 29 Oct 2007 10:33:05 +0000 (11:33 +0100)
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>
block/cfq-iosched.c

index d77c9719b613272f9723ce1116e441b64efcaf05..e47a9309eb485058b72d4649f631cf0029ee3dcb 100644 (file)
@@ -1443,8 +1443,11 @@ cfq_get_queue(struct cfq_data *cfqd, int is_sync, struct task_struct *tsk,
                cfqq = *async_cfqq;
        }
 
-       if (!cfqq)
+       if (!cfqq) {
                cfqq = cfq_find_alloc_queue(cfqd, is_sync, tsk, gfp_mask);
+               if (!cfqq)
+                       return NULL;
+       }
 
        /*
         * pin the queue now that it's allocated, scheduler exit will prune it