Hi Prasad, the kernel assumes if the kernel virtual address you are
trying to access is between 0 and PAGE_SIZE you are doing NULL pointer
dereference.
For example ARM does this when printing an invalid page access fault
printk(KERN_ALERT
"Unable to handle kernel %s at virtual address %08lx\n", (addr <
PAGE_SIZE) ? "NULL pointer dereference" : "paging request", addr);
When the core accesses virtual memory it does so via pages or
sections. The page attributes for address zero are set in such a way
that any read/write/execute will trigger a page fault. This has the
side effect of making memory access to any virtual address < PAGE_SIZE
trigger page faults as well.
Regards,
-- Mark
Quoting Prasad Joshi <prasadjoshi124@xxxxxxxxx>:
Hi All,
I am trying to understand a a kernel oops report. Here are some of the
fields from the report
BUG: unable to handle kernel NULL pointer dereference at 0000000000000034
Oops: 0000 [#1] SMP
Pid: 6478, comm: cp Tainted: P 2.6.31.5-127.fc12.x86_64 #1 Inspiron 1525
RIP: 0010:[<ffffffff810faac1>] [<ffffffff810faac1>] do_sys_open+0x7a/0x10f
CR2: 0000000000000034
As I know, when a page fault occurs, the address the program attempted to
access is stored in the CR2 register. So probably the pointer is pointing to
address 0034 and is being access.
The BUG string is bit confusing, it says NULL pointer dereference at 0034, I
know the address 00034 is not valid but why is it interpreted as NULL
pointer? The NULL pointer as I know should point to address 0.
Thanks and Regards,
Prasad
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ