svn commit: r261024 - head/sys/netinet

Gleb Smirnoff glebius at FreeBSD.org
Wed Jan 22 10:57:43 UTC 2014


Author: glebius
Date: Wed Jan 22 10:57:42 2014
New Revision: 261024
URL: http://svnweb.freebsd.org/changeset/base/261024

Log:
  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.

Modified:
  head/sys/netinet/ip_mroute.c

Modified: head/sys/netinet/ip_mroute.c
==============================================================================
--- head/sys/netinet/ip_mroute.c	Wed Jan 22 10:45:16 2014	(r261023)
+++ head/sys/netinet/ip_mroute.c	Wed Jan 22 10:57:42 2014	(r261024)
@@ -2557,14 +2557,13 @@ pim_encapcheck(const struct mbuf *m, int
  * 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;
     }


More information about the svn-src-all mailing list