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.
This commit is contained in:
parent
2e74d8c857
commit
547246a373
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=261024
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user