Skip to content

Commit 0aa437a

Browse files
rveerama1jukkar
authored andcommitted
net: ipv6: Fix regression in IPv6 cleanup
IPv6 cleanup patch introduced a regression. Misunderstood the logic. Do not drop the packet if packet does not have ND options, just skip. Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
1 parent ac92a01 commit 0aa437a

File tree

1 file changed

+6
-18
lines changed

1 file changed

+6
-18
lines changed

subsys/net/ip/ipv6.c

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1453,15 +1453,12 @@ static enum net_verdict handle_ns_input(struct net_pkt *pkt)
14531453

14541454
net_pkt_set_ipv6_ext_opt_len(pkt, sizeof(struct net_icmpv6_ns_hdr));
14551455

1456-
ret = net_icmpv6_get_nd_opt_hdr(pkt, &nd_opt_hdr);
1457-
if (ret < 0) {
1458-
goto drop;
1459-
}
1460-
14611456
left_len = net_pkt_get_len(pkt) - (sizeof(struct net_ipv6_hdr) +
14621457
sizeof(struct net_icmp_hdr));
14631458

1464-
while (net_pkt_ipv6_ext_opt_len(pkt) < left_len) {
1459+
ret = net_icmpv6_get_nd_opt_hdr(pkt, &nd_opt_hdr);
1460+
1461+
while (!ret && net_pkt_ipv6_ext_opt_len(pkt) < left_len) {
14651462
if (!nd_opt_hdr.len) {
14661463
break;
14671464
}
@@ -1506,9 +1503,6 @@ static enum net_verdict handle_ns_input(struct net_pkt *pkt)
15061503
}
15071504

15081505
ret = net_icmpv6_get_nd_opt_hdr(pkt, &nd_opt_hdr);
1509-
if (ret < 0) {
1510-
goto drop;
1511-
}
15121506
}
15131507

15141508
if (IS_ENABLED(CONFIG_NET_ROUTING)) {
@@ -2006,15 +2000,12 @@ static enum net_verdict handle_na_input(struct net_pkt *pkt)
20062000

20072001
net_pkt_set_ipv6_ext_opt_len(pkt, sizeof(struct net_icmpv6_na_hdr));
20082002

2009-
ret = net_icmpv6_get_nd_opt_hdr(pkt, &nd_opt_hdr);
2010-
if (ret < 0) {
2011-
goto drop;
2012-
}
2013-
20142003
left_len = net_pkt_get_len(pkt) - (sizeof(struct net_ipv6_hdr) +
20152004
sizeof(struct net_icmp_hdr));
20162005

2017-
while (net_pkt_ipv6_ext_opt_len(pkt) < left_len) {
2006+
ret = net_icmpv6_get_nd_opt_hdr(pkt, &nd_opt_hdr);
2007+
2008+
while (!ret && net_pkt_ipv6_ext_opt_len(pkt) < left_len) {
20182009
if (!nd_opt_hdr.len) {
20192010
break;
20202011
}
@@ -2044,9 +2035,6 @@ static enum net_verdict handle_na_input(struct net_pkt *pkt)
20442035
}
20452036

20462037
ret = net_icmpv6_get_nd_opt_hdr(pkt, &nd_opt_hdr);
2047-
if (ret < 0) {
2048-
goto drop;
2049-
}
20502038
}
20512039

20522040
ifaddr = net_if_ipv6_addr_lookup_by_iface(net_pkt_iface(pkt),

0 commit comments

Comments
 (0)