Skip to content

Commit 3a577e6

Browse files
idoschgregkh
authored andcommitted
vxlan: Avoid infinite loop when suppressing NS messages with invalid options
[ Upstream commit 8066e6b ] When proxy mode is enabled the vxlan device might reply to Neighbor Solicitation (NS) messages on behalf of remote hosts. In case the NS message includes the "Source link-layer address" option [1], the vxlan device will use the specified address as the link-layer destination address in its reply. To avoid an infinite loop, break out of the options parsing loop when encountering an option with length zero and disregard the NS message. This is consistent with the IPv6 ndisc code and RFC 4886 which states that "Nodes MUST silently discard an ND packet that contains an option with length zero" [2]. [1] https://tools.ietf.org/html/rfc4861#section-4.3 [2] https://tools.ietf.org/html/rfc4861#section-4.6 Fixes: 4b29dba ("vxlan: fix nonfunctional neigh_reduce()") Signed-off-by: Ido Schimmel <[email protected]> Acked-by: Nikolay Aleksandrov <[email protected]> Signed-off-by: David S. Miller <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent de9d101 commit 3a577e6

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

drivers/net/vxlan.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1924,6 +1924,10 @@ static struct sk_buff *vxlan_na_create(struct sk_buff *request,
19241924
ns_olen = request->len - skb_network_offset(request) -
19251925
sizeof(struct ipv6hdr) - sizeof(*ns);
19261926
for (i = 0; i < ns_olen-1; i += (ns->opt[i+1]<<3)) {
1927+
if (!ns->opt[i + 1]) {
1928+
kfree_skb(reply);
1929+
return NULL;
1930+
}
19271931
if (ns->opt[i] == ND_OPT_SOURCE_LL_ADDR) {
19281932
daddr = ns->opt + i + sizeof(struct nd_opt_hdr);
19291933
break;

0 commit comments

Comments
 (0)