Re: 2.6.4-rc1-mm2

Andrew Morton
2004-03-04T00:50:34Z

Luiz Fernando Capitulino <lcapitulino@prefeitura.sp.gov.br> wrote:
>
> Em Qua, 2004-03-03 às 01:15, Andrew Morton escreveu:
> > ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.4-rc1/2.6.4-rc1-mm2/
>
> I got this:
>
> Unable to handle kernel paging request at virtual address c1d61f70
> printing eip:
> c0211f8f
> *pde = 00006063
> *pte = 01d61000
> Oops: 0000 [#1]
> DEBUG_PAGEALLOC
> CPU: 0
> EIP: 0060:[__make_request+671/1184] Not tainted VLI
> EFLAGS: 00010093
> EIP is at __make_request+0x29f/0x4a0

hm, there's a possibility of indirection through an uninitialised variable
there.

--- 25/drivers/block/ll_rw_blk.c~blk-unplug-when-max-request-queued-fix Wed Mar 3 16:03:01 2004
+++ 25-akpm/drivers/block/ll_rw_blk.c Wed Mar 3 16:03:32 2004
@@ -2004,7 +2004,8 @@ EXPORT_SYMBOL(__blk_attempt_remerge);

static int __make_request(request_queue_t *q, struct bio *bio)
{
- struct request *req, *freereq = NULL;
+ struct request *req = NULL;
+ struct request *freereq = NULL;
int el_ret, rw, nr_sectors, cur_nr_sectors, barrier, ra;
sector_t sector;

@@ -2154,7 +2155,7 @@ out:
int nr_queued = q->rq.count[READ] + q->rq.count[WRITE];

if (nr_queued == q->unplug_thresh ||
- req->nr_sectors == q->max_sectors)
+ (req && req->nr_sectors == q->max_sectors))
__generic_unplug_device(q);
}
spin_unlock_irq(q->queue_lock);

_