Skip to contentSkip to conversation

2.6test /proc/net/pnp oops.

DISCUSSION Dave Jones 3 participants 4 messages Aug 9, 2003

Subsystems (2)
lore
Share & tools
lore

Dave Jones

author
#0 lore raw

Whilst trying to figure out what kept changing the bootserver entry every few minutes, I got the following oops when I did cat /proc/net/pnp
This is from bitkeeper tree as of 24hrs ago.

Dave

Unable to handle kernel paging request at virtual address c06f977c
 printing eip:
c04f22aa
*pde = 00103027
*pte = 006f9000
Oops: 0000 [#1]
CPU:    1
EIP:    0060:[<c04f22aa>]    Not tainted
EFLAGS: 00210202

EIP is at pnp_get_info+0xc6/0x17b
eax: 00000013 ebx: ca5fd000 ecx: c05ea6c4 edx: c05ea6c3
esi: 00000003 edi: ca5fd009 ebp: c7fbff24 esp: c7fbfefc
ds: 007b es: 007b ss: 0068
Process cat (pid: 16022, threadinfo=c7fbe000 task=c2c38000)

Stack: ca5fd02e c05ea6ad 00000000 00000000 00000000 00000000 00000041 00000000 
       00000400 0804c038 c7fbff6c c0194b9e ca5fd000 c7fbff5c 00000000 00000400 
       3f344b5d 14163598 3f344b5d 14163598 cdcffc80 00000000 ca5fd000 00000000 
Call Trace:
 [<c0194b9e>] proc_file_read+0x259/0x26f
 [<c015feaf>] vfs_read+0xa1/0x10c
 [<c0160119>] sys_read+0x3f/0x5d
 [<c0109623>] syscall_call+0x7/0xb

Code: 83 3d 7c 97 6f c0 ff 74 45 0f b6 05 7f 97 6f c0 8b 55 f0 c7 
#1 lore raw
Quoted 9 lines · Dave Jones

Whilst trying to figure out what kept changing the bootserver
entry every few minutes, I got the following oops when I did cat /proc/net/pnp
This is from bitkeeper tree as of 24hrs ago.

Dave

 Unable to handle kernel paging request at virtual address c06f977c

Could you please check your System.map and verify that ic_servaddr was at 0xc06f977c?

net/ipv4/ipconfig.c renamed from net/ipv4/ipconfig.c~pnp_get_info-oops-fix +1 -1
diff -puN net/ipv4/ipconfig.c~pnp_get_info-oops-fix net/ipv4/ipconfig.c
@@ -129,7 +129,7 @@ u32 ic_myaddr __initdata = INADDR_NONE;	
 u32 ic_netmask __initdata = INADDR_NONE;	/* Netmask for local subnet */
 u32 ic_gateway __initdata = INADDR_NONE;	/* Gateway IP address */
 
-u32 ic_servaddr __initdata = INADDR_NONE;	/* Boot server IP address */
+u32 ic_servaddr = INADDR_NONE;			/* Boot server IP address */
 
 u32 root_server_addr __initdata = INADDR_NONE;	/* Address of NFS server */
 u8 root_server_path[256] __initdata = { 0, };	/* Path to mount as root */

_

#2 lore raw
Quoted 3 lines · Andrew Morton
Quoted 1 line
 Unable to handle kernel paging request at virtual address c06f977c

Could you please check your System.map and verify that ic_servaddr was at 0xc06f977c?

-ENOSYSTEMMAP
Though your patch does seem to make sense (to me at least). I'll give it a try. I certainly haven't configured anything, so it seems to be showing random junk which resolves to various random bits of the internet. Groovy. Only seems to happen on one box though.

Dave

#3 lore raw
In reply to Andrew Morton

Ok, that patch stopped the random addresses appearing in /proc/net/pnp. There are also a bunch of other vars we output in that file also marked as initdata which look like they need fixing for the same reason.

The only remaining curious item for me..
With this fixed, the bootserver is 0.0.0.0, and there's a check which skips printing it if its INADDR_NONE

There are similar checks for the nameserver entries, but they still get printed out (as 0.0.0.0)

Dave

Signature · 1 line
 Dave Jones     http://www.codemonkey.org.uk

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas:
# ChangeSet 1.1064 -> 1.1065
# net/ipv4/ipconfig.c 1.28 -> 1.29
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/08/09 [email protected] 1.1065

# mustnt be __initdata
# --------------------------------------------
#
diff -Nru a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
--- a/net/ipv4/ipconfig.c	Sat Aug  9 16:11:51 2003
+++ b/net/ipv4/ipconfig.c	Sat Aug  9 16:11:51 2003
@@ -125,14 +125,14 @@

int ic_host_name_set __initdata = 0; /* Host name set by us? */

-u32 ic_myaddr __initdata = INADDR_NONE; /* My IP address */
-u32 ic_netmask __initdata = INADDR_NONE; /* Netmask for local subnet */
-u32 ic_gateway __initdata = INADDR_NONE; /* Gateway IP address */
+u32 ic_myaddr = INADDR_NONE; /* My IP address */
+u32 ic_netmask = INADDR_NONE; /* Netmask for local subnet */
+u32 ic_gateway = INADDR_NONE; /* Gateway IP address */

-u32 ic_servaddr __initdata = INADDR_NONE; /* Boot server IP address */
+u32 ic_servaddr = INADDR_NONE; /* Boot server IP address */

-u32 root_server_addr __initdata = INADDR_NONE; /* Address of NFS server */
-u8 root_server_path[256] __initdata = { 0, }; /* Path to mount as root */
+u32 root_server_addr = INADDR_NONE; /* Address of NFS server */
+u8 root_server_path[256] = { 0, }; /* Path to mount as root */

/* Persistent data: */