summaryrefslogtreecommitdiffstats
path: root/sys/netinet
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2014-01-22 10:57:42 +0000
committerglebius <glebius@FreeBSD.org>2014-01-22 10:57:42 +0000
commit29bf6ea675b0a23441d68b5897a771632d9afa65 (patch)
treea04bb5189673b7b0bb0cad86244ce80a70d2f0cf /sys/netinet
parentce97156ddbcbae32950bb1ed413d665d53b4b1a9 (diff)
downloadFreeBSD-src-29bf6ea675b0a23441d68b5897a771632d9afa65.zip
FreeBSD-src-29bf6ea675b0a23441d68b5897a771632d9afa65.tar.gz
Fix fallout from r241923. Calculate length of payload in
pim_input() properly. While here, remove extra variable and incorrect condition before m_pullup(). Reported by: Olivier Cochard-Labbé <olivier cochard.me> Sponsored by: Nginx, Inc.
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/ip_mroute.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/sys/netinet/ip_mroute.c b/sys/netinet/ip_mroute.c
index dfc545e..35e552e 100644
--- a/sys/netinet/ip_mroute.c
+++ b/sys/netinet/ip_mroute.c
@@ -2557,14 +2557,13 @@ pim_encapcheck(const struct mbuf *m, int off, int proto, void *arg)
* is passed to if_simloop().
*/
void
-pim_input(struct mbuf *m, int off)
+pim_input(struct mbuf *m, int iphlen)
{
struct ip *ip = mtod(m, struct ip *);
struct pim *pim;
int minlen;
- int datalen = ntohs(ip->ip_len);
+ int datalen = ntohs(ip->ip_len) - iphlen;
int ip_tos;
- int iphlen = off;
/* Keep statistics */
PIMSTAT_INC(pims_rcv_total_msgs);
@@ -2594,8 +2593,7 @@ pim_input(struct mbuf *m, int off)
* Get the IP and PIM headers in contiguous memory, and
* possibly the PIM REGISTER header.
*/
- if ((m->m_flags & M_EXT || m->m_len < minlen) &&
- (m = m_pullup(m, minlen)) == 0) {
+ if (m->m_len < minlen && (m = m_pullup(m, minlen)) == 0) {
CTR1(KTR_IPMF, "%s: m_pullup() failed", __func__);
return;
}
OpenPOWER on IntegriCloud