version 1.40, 2013/12/24 22:26:20 |
version 1.41, 2013/12/25 01:46:00 |
|
|
{ |
{ |
struct inpcbtable tcbtab; |
struct inpcbtable tcbtab; |
struct inpcb *next, *prev; |
struct inpcb *next, *prev; |
struct inpcb inpcb; |
struct inpcb inpcb, prevpcb; |
struct tcpcb tcpcb; |
struct tcpcb tcpcb; |
|
|
struct sockaddr_storage me, them; |
struct sockaddr_storage me, them; |
|
|
if (ptb->vflag >= 2) |
if (ptb->vflag >= 2) |
fprintf(stderr, "Checking PCB %p\n", next); |
fprintf(stderr, "Checking PCB %p\n", next); |
kget((u_long)next, &inpcb, sizeof(inpcb)); |
kget((u_long)next, &inpcb, sizeof(inpcb)); |
|
if (prev != NULL) { |
|
kget((u_long)prev, &prevpcb, sizeof(prevpcb)); |
|
if (TAILQ_NEXT(&prevpcb, inp_queue) != next) { |
|
if (nretry--) { |
|
warnx("PCB prev pointer insane"); |
|
goto retry; |
|
} else |
|
errx(1, "PCB prev pointer insane," |
|
" all attempts exhaused"); |
|
} |
|
} |
prev = next; |
prev = next; |
next = TAILQ_NEXT(&inpcb, inp_queue); |
next = TAILQ_NEXT(&inpcb, inp_queue); |
|
|