Another (different) GP under 2.0.30 - gdb debug included

Dan Hollis (goemon@sasami.anime.net)
Mon, 21 Apr 1997 12:08:34 -0700 (PDT)


Another GP from 2.0.30. This time it came from a heavily loaded squid
cache process. This didn't happen under 2.0.29.

general protection: 0000
CPU: 0
EIP: 0010:[<00145718>]
EFLAGS: 00010213
eax: f000e987 ebx: 00000000 ecx: 01c92438 edx: f000f84d
esi: 01c924d0 edi: 0160af78 ebp: 01c92414 esp: 0160aee8
ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018
Process squid (pid: 26488, process nr: 27, stackpage=0160a000)
Stack: 01c92414 0160af7c 00000000 00000800 134c6f04 01c92438 00000000 00000199
02c7c810 026a7c18 034d65b8 0014fe1e 01c92414 0160af78 00000e66 00000800
00000000 0160af7c 00000fff 026a7bd0 08ce8678 026a7c5c 00136863 026a7c5c
Call Trace: [<0014fe1e>] [<00136863>] [<001223e6>] [<0010a54d>]
Code: 8a 40 0d a8 02 74 04 ff 4c 24 10 8b 7c 24 10 39 7b 30 0f 87

(gdb) l *0x00145718
0x145718 is in tcp_recvmsg (tcp.c:1642).
1637 while (skb != (struct sk_buff *)&sk->receive_queue)
1638 {
1639 if (before(*seq, skb->seq))
1640 break;
1641 offset = *seq - skb->seq;
1642 if (skb->h.th->syn)
1643 offset--;
1644 if (offset < skb->len)
1645 goto found_ok_skb;
1646 if (skb->h.th->fin)
(gdb) l *0x0014fe1e
0x14fe1e 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 *0x00136863
0x136863 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 *0x001223e6
0x1223e6 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.

-Dan