[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Kernel oops with highly loaded links



Hi all,

When I use a cbq on a link with low bandwidth (a serial PPP link), I
will get the following oops. 

Unable to handle kernel NULL pointer dreference at virtual address
000000a4
current->tss.cr3 = 00101000, %cr3 = 00101000
*pde = 00000000
Oops: 0000
CPU:    0
EIP:    0010:[<c015fdec>]
EFLAGS: 00010207
eax: 000000404  ebx: c0098ed0   ecx: c13503f4   edx: c0fea468
esi: 000000000  edi: c0098ed0   ebp: c07c4290   esp: c0233ee4

I found that the problems are in the file net/sched/sch_cbq.c. One
problem is in the function cbq_dequeue_prio. In this function it's
possible that borrow will be NULL. The line borrow->xstats.borrow++;
will result in a kernel oops.

Another problem is in the last line of the function cbq_update. It
contains the following line:

cbq_update_toplevel(q, ths, q->tx_borrowed);

It is possble that this function is called with q->tx_borrowed = NULL.
This will result also in a kernel oops.

To keep things working I have placed a check for NULL before these two
lines, but that is not the right solution. Does anyone have a better
idea.

Marco