GP with 2.0.30 + pre2 patch : ksymoops + gdb info included

Dan Hollis (goemon@sasami.anime.net)
Mon, 9 Jun 1997 16:26:10 -0700 (PDT)


Linux 2.0.30 with pre-2 patch.
SYN and RST protection enabled.
No modules configured, everything is static.

I am getting this GP about once a day, it is always caused by squid.

general protection: 0000
CPU: 0
EIP: 0010:[<001460e4>]
EFLAGS: 00010213
eax: f000e987 ebx: 00000000 ecx: 00c3303c edx: f000f84d
esi: 00c330d8 edi: 000001a1 ebp: 00c33018 esp: 015b2ee8
ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018
Process squid (pid: 6498, process nr: 28, stackpage=015b2000)
Stack: 00c33018 015b2f7c 00000000 00000800 1122da8a 00c3303c 00000000 000001a1
03408018 01e83828 0123d136 00150a02 00c33018 015b2f78 00000e5e 00000800
00000000 015b2f7c 00000fff 01e837e0 0820b828 01e8386c 00136d03 01e8386c
Call Trace: [<00150a02>] [<00136d03>] [<00122627>] [<0010a54d>]
Code: 8a 40 0d a8 02 74 04 ff 4c 24 10 8b 7c 24 10 39 7b 30 0f 87
>>EIP: 1460e4 <tcp_recvmsg+170/40c>
Trace: 150a02 <inet_recvmsg+72/88>
Trace: 136d03 <sock_read+ab/c0>
Trace: 122627 <sys_read+b3/d8>
Trace: 10a54d <system_call+55/7c>

Code: 1460e4 <tcp_recvmsg+170/40c> movb 0xd(%eax),%al
Code: 1460e7 <tcp_recvmsg+173/40c> testb $0x2,%al
Code: 1460e9 <tcp_recvmsg+175/40c> je 1460ef <tcp_recvmsg+17b/40c>
Code: 1460eb <tcp_recvmsg+177/40c> decl 0x10(%esp,1)
Code: 1460ef <tcp_recvmsg+17b/40c> movl 0x10(%esp,1),%edi
Code: 1460f3 <tcp_recvmsg+17f/40c> cmpl %edi,0x30(%ebx)
Code: 1460f6 <tcp_recvmsg+182/40c> ja 90909018 <_EIP+90909018>

(gdb) l *0x001460e4
0x1460e4 is in tcp_recvmsg (tcp.c:1666).
1661 while (skb != (struct sk_buff *)&sk->receive_queue)
1662 {
1663 if (before(*seq, skb->seq))
1664 break;
1665 offset = *seq - skb->seq;
1666 if (skb->h.th->syn)
1667 offset--;
1668 if (offset < skb->len)
1669 goto found_ok_skb;
1670 if (skb->h.th->fin)
(gdb) l *0x00150a02
0x150a02 is in inet_recvmsg (af_inet.c:863).
858
859 /* We may need to bind the socket. */
860 if(inet_autobind(sk) != 0)
861 return(-EAGAIN);
862
863 return(sk->prot->recvmsg(sk, ubuf, size, noblock, flags,addr_len));
864 }
865
866
867 static int inet_sendmsg(struct socket *sock, struct msghdr *msg, int size, int noblock,
(gdb) l *0x00136d03
0x136d03 is in sock_read (socket.c:353).
348 msg.msg_iovlen=1;
349 msg.msg_control=NULL;
350 iov.iov_base=ubuf;
351 iov.iov_len=size;
352
353 return(sock->ops->recvmsg(sock, &msg, size,(file->f_flags & O_NONBLOCK), 0,&msg.msg_namelen));
354 }
355
356 /*
357 * Write data to a socket. We verify that the user area ubuf..ubuf+size-1 is
(gdb) l *0x00122627
0x122627 is in sys_read (read_write.c:132).
127 if (error)
128 goto out;
129 error = verify_area(VERIFY_WRITE,buf,count);
130 if (error)
131 goto out;
132 error = file->f_op->read(inode,file,buf,count);
133 out:
134 fput(file, inode);
135 bad_file:
136 return error;
(gdb) l *0x0010a54d
No source file for address 0x10a54d.