The branch main has been updated by glebius:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=59062fd0b2f1a159a94f97cd05a76f66eb40837c

commit 59062fd0b2f1a159a94f97cd05a76f66eb40837c
Author:     Gleb Smirnoff <[email protected]>
AuthorDate: 2025-12-05 16:29:00 +0000
Commit:     Gleb Smirnoff <[email protected]>
CommitDate: 2025-12-05 16:29:00 +0000

    netinet6: use IF_ADDR_LOCK instead of IF_AFDATA_LOCK
    
    It is not clear what exactly this function is locking against.  Seems
    like just use some generic interface lock.  The IF_AFDATA_LOCK goes
    away soon together with if_afdata[], so put at least something in its
    place.
---
 sys/netinet6/scope6.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/sys/netinet6/scope6.c b/sys/netinet6/scope6.c
index 08702a2e81ab..a683ebdec956 100644
--- a/sys/netinet6/scope6.c
+++ b/sys/netinet6/scope6.c
@@ -137,6 +137,10 @@ scope6_ioctl(u_long cmd, caddr_t data, struct ifnet *ifp)
        }
 }
 
+/*
+ * XXXGL: The use of IF_ADDR_WLOCK (previously it was IF_AFDATA_LOCK) in this
+ * function is quite strange.
+ */
 static int
 scope6_set(struct ifnet *ifp, struct scope6_id *idlist)
 {
@@ -144,11 +148,11 @@ scope6_set(struct ifnet *ifp, struct scope6_id *idlist)
        int error = 0;
        struct scope6_id *sid = NULL;
 
-       IF_AFDATA_WLOCK(ifp);
+       IF_ADDR_WLOCK(ifp);
        sid = SID(ifp);
 
        if (!sid) {     /* paranoid? */
-               IF_AFDATA_WUNLOCK(ifp);
+               IF_ADDR_WUNLOCK(ifp);
                return (EINVAL);
        }
 
@@ -171,7 +175,7 @@ scope6_set(struct ifnet *ifp, struct scope6_id *idlist)
                         */
                        if (i == IPV6_ADDR_SCOPE_INTFACELOCAL &&
                            idlist->s6id_list[i] != ifp->if_index) {
-                               IF_AFDATA_WUNLOCK(ifp);
+                               IF_ADDR_WUNLOCK(ifp);
                                return (EINVAL);
                        }
 
@@ -187,7 +191,7 @@ scope6_set(struct ifnet *ifp, struct scope6_id *idlist)
                                         * consistency for safety in later use.
                                         */
                                        NET_EPOCH_EXIT(et);
-                                       IF_AFDATA_WUNLOCK(ifp);
+                                       IF_ADDR_WUNLOCK(ifp);
                                        return (EINVAL);
                                }
                                NET_EPOCH_EXIT(et);
@@ -201,7 +205,7 @@ scope6_set(struct ifnet *ifp, struct scope6_id *idlist)
                        sid->s6id_list[i] = idlist->s6id_list[i];
                }
        }
-       IF_AFDATA_WUNLOCK(ifp);
+       IF_ADDR_WUNLOCK(ifp);
 
        return (error);
 }

Reply via email to