aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet/if_ether.c
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2022-04-08 15:46:19 +0000
committerMark Johnston <markj@FreeBSD.org>2022-04-08 15:46:19 +0000
commitdd91d8448665dd31df5be7341756394293c6e36c (patch)
tree6e2d6c3191f8c3120cdac4238821134733e0d506 /sys/netinet/if_ether.c
parentfcaf016796cc0272a8c239850fa87244eebefe13 (diff)
Diffstat (limited to 'sys/netinet/if_ether.c')
-rw-r--r--sys/netinet/if_ether.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index f54df9937936..fd0423858bb8 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -1228,16 +1228,20 @@ arp_check_update_lle(struct arphdr *ah, struct in_addr isaddr, struct ifnet *ifp
/* Calculate full link prepend to use in lle */
linkhdrsize = sizeof(linkhdr);
if (lltable_calc_llheader(ifp, AF_INET, ar_sha(ah), linkhdr,
- &linkhdrsize, &lladdr_off) != 0)
+ &linkhdrsize, &lladdr_off) != 0) {
+ LLE_WUNLOCK(la);
return;
+ }
/* Check if something has changed */
if (memcmp(la->r_linkdata, linkhdr, linkhdrsize) != 0 ||
(la->la_flags & LLE_VALID) == 0) {
/* Try to perform LLE update */
if (lltable_try_set_entry_addr(ifp, la, linkhdr, linkhdrsize,
- lladdr_off) == 0)
+ lladdr_off) == 0) {
+ LLE_WUNLOCK(la);
return;
+ }
/* Clear fast path feedback request if set */
llentry_mark_used(la);