Check for mbuf copy failure when there are multiple multicast sockets
This partitular case is the only path where the mbuf could be NULL. udp_append() checked for a NULL mbuf only after invoking the tunneling callback. Our only in tree tunneling callback - SCTP - assumed a non NULL mbuf, and it is a bit odd to make the callbacks responsible for checking this condition. This also reduces the differences between the IPv4 and IPv6 code. MFC after: 1 month
This commit is contained in:
parent
1790920bf6
commit
5dee4f91b5
@ -316,9 +316,6 @@ udp_append(struct inpcb *inp, struct ip *ip, struct mbuf *n, int off,
|
||||
return;
|
||||
}
|
||||
|
||||
if (n == NULL)
|
||||
return;
|
||||
|
||||
off += sizeof(struct udphdr);
|
||||
|
||||
#ifdef IPSEC
|
||||
@ -578,8 +575,10 @@ udp_input(struct mbuf **mp, int *offp, int proto)
|
||||
if (last != NULL) {
|
||||
struct mbuf *n;
|
||||
|
||||
n = m_copy(m, 0, M_COPYALL);
|
||||
udp_append(last, ip, n, iphlen, &udp_in);
|
||||
if ((n = m_copy(m, 0, M_COPYALL)) != NULL) {
|
||||
udp_append(last, ip, n, iphlen,
|
||||
&udp_in);
|
||||
}
|
||||
INP_RUNLOCK(last);
|
||||
}
|
||||
last = inp;
|
||||
|
Loading…
x
Reference in New Issue
Block a user