diff options
author | itojun <itojun@FreeBSD.org> | 2000-10-23 07:11:01 +0000 |
---|---|---|
committer | itojun <itojun@FreeBSD.org> | 2000-10-23 07:11:01 +0000 |
commit | 4bd5d6f83f54e5831f1ee64d5968f7b2997da459 (patch) | |
tree | 196261ebbbc1d9600c322b3113121298062c58c9 /sys/netinet/tcp_timewait.c | |
parent | b7dce386972136bc112305a345dd6f9c480ac91a (diff) | |
download | FreeBSD-src-4bd5d6f83f54e5831f1ee64d5968f7b2997da459.zip FreeBSD-src-4bd5d6f83f54e5831f1ee64d5968f7b2997da459.tar.gz |
be careful on mbuf overrun on ctlinput.
short icmp6 packet may be able to panic the kernel.
sync with kame.
Diffstat (limited to 'sys/netinet/tcp_timewait.c')
-rw-r--r-- | sys/netinet/tcp_timewait.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c index 4541f4e..25c9b66 100644 --- a/sys/netinet/tcp_timewait.c +++ b/sys/netinet/tcp_timewait.c @@ -1012,6 +1012,7 @@ tcp6_ctlinput(cmd, sa, d) } else { m = NULL; ip6 = NULL; + off = 0; /* fool gcc */ } /* @@ -1036,7 +1037,11 @@ tcp6_ctlinput(cmd, sa, d) m->m_pkthdr.rcvif != NULL) s.s6_addr16[1] = htons(m->m_pkthdr.rcvif->if_index); - if (m->m_len < off + sizeof(*thp)) { + /* check if we can safely examine src and dst ports */ + if (m->m_pkthdr.len < off + sizeof(th)) + return; + + if (m->m_len < off + sizeof(th)) { /* * this should be rare case * because now MINCLSIZE is "(MHLEN + 1)", |