Skip to content

Commit fde29fd

Browse files
sunichikuba-moo
authored andcommitted
ipv4: icmp: fix null-ptr-deref in icmp_build_probe()
ipv6_stub->ipv6_dev_find() may return ERR_PTR(-EAFNOSUPPORT) when the IPv6 stack is not active (CONFIG_IPV6=m and not loaded), and passing this error pointer to dev_hold() will cause a kernel crash with null-ptr-deref. Instead, silently discard the request. RFC 8335 does not appear to define a specific response for the case where an IPv6 interface identifier is syntactically valid but the implementation cannot perform the lookup at runtime, and silently dropping the request may safer than misreporting "No Such Interface". Fixes: d329ea5 ("icmp: add response to RFC 8335 PROBE messages") Signed-off-by: Yiqi Sun <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 14cf0cd commit fde29fd

1 file changed

Lines changed: 7 additions & 0 deletions

File tree

net/ipv4/icmp.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1346,6 +1346,13 @@ bool icmp_build_probe(struct sk_buff *skb, struct icmphdr *icmphdr)
13461346
if (iio->ident.addr.ctype3_hdr.addrlen != sizeof(struct in6_addr))
13471347
goto send_mal_query;
13481348
dev = ipv6_stub->ipv6_dev_find(net, &iio->ident.addr.ip_addr.ipv6_addr, dev);
1349+
/*
1350+
* If IPv6 identifier lookup is unavailable, silently
1351+
* discard the request instead of misreporting NO_IF.
1352+
*/
1353+
if (IS_ERR(dev))
1354+
return false;
1355+
13491356
dev_hold(dev);
13501357
break;
13511358
#endif

0 commit comments

Comments
 (0)