Module Name: src
Committed By: yamaguchi
Date: Tue Nov 28 05:28:37 UTC 2023
Modified Files:
src/sys/net/lagg: if_lagg.c if_laggproto.c if_laggproto.h
Log Message:
lagg(4): Fix missing IFNET_LOCK acquirement
To generate a diff of this commit:
cvs rdiff -u -r1.54 -r1.55 src/sys/net/lagg/if_lagg.c
cvs rdiff -u -r1.7 -r1.8 src/sys/net/lagg/if_laggproto.c
cvs rdiff -u -r1.19 -r1.20 src/sys/net/lagg/if_laggproto.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/net/lagg/if_lagg.c
diff -u src/sys/net/lagg/if_lagg.c:1.54 src/sys/net/lagg/if_lagg.c:1.55
--- src/sys/net/lagg/if_lagg.c:1.54 Wed Nov 22 03:49:13 2023
+++ src/sys/net/lagg/if_lagg.c Tue Nov 28 05:28:37 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: if_lagg.c,v 1.54 2023/11/22 03:49:13 yamaguchi Exp $ */
+/* $NetBSD: if_lagg.c,v 1.55 2023/11/28 05:28:37 yamaguchi Exp $ */
/*
* Copyright (c) 2005, 2006 Reyk Floeter <[email protected]>
@@ -20,7 +20,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_lagg.c,v 1.54 2023/11/22 03:49:13 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_lagg.c,v 1.55 2023/11/28 05:28:37 yamaguchi Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -114,7 +114,7 @@ static const struct lagg_proto lagg_prot
.pr_startport = lagg_common_startport,
.pr_stopport = lagg_common_stopport,
.pr_portstat = lagg_fail_portstat,
- .pr_linkstate = lagg_common_linkstate,
+ .pr_linkstate = lagg_common_linkstate_ifnet_locked,
.pr_ioctl = lagg_fail_ioctl,
},
[LAGG_PROTO_LOADBALANCE] = {
@@ -128,7 +128,7 @@ static const struct lagg_proto lagg_prot
.pr_startport = lagg_lb_startport,
.pr_stopport = lagg_lb_stopport,
.pr_portstat = lagg_lb_portstat,
- .pr_linkstate = lagg_common_linkstate,
+ .pr_linkstate = lagg_common_linkstate_ifnet_locked,
},
};
Index: src/sys/net/lagg/if_laggproto.c
diff -u src/sys/net/lagg/if_laggproto.c:1.7 src/sys/net/lagg/if_laggproto.c:1.8
--- src/sys/net/lagg/if_laggproto.c:1.7 Wed Nov 22 03:49:13 2023
+++ src/sys/net/lagg/if_laggproto.c Tue Nov 28 05:28:37 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: if_laggproto.c,v 1.7 2023/11/22 03:49:13 yamaguchi Exp $ */
+/* $NetBSD: if_laggproto.c,v 1.8 2023/11/28 05:28:37 yamaguchi Exp $ */
/*-
* SPDX-License-Identifier: BSD-2-Clause-NetBSD
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_laggproto.c,v 1.7 2023/11/22 03:49:13 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_laggproto.c,v 1.8 2023/11/28 05:28:37 yamaguchi Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -114,6 +114,8 @@ static struct lagg_port *
static void lagg_fail_linkspeed_work(struct lagg_work *, void *);
static void lagg_lb_linkspeed_work(struct lagg_work*,
void *);
+static void lagg_common_linkstate(struct lagg_proto_softc *,
+ struct lagg_port *);
static inline struct lagg_portmap *
lagg_portmap_active(struct lagg_portmaps *maps)
@@ -364,9 +366,19 @@ lagg_common_stopport(struct lagg_proto_s
pport->lpp_active = false;
}
}
+static void
+lagg_common_linkstate(struct lagg_proto_softc *psc, struct lagg_port *lp)
+{
+
+ IFNET_ASSERT_UNLOCKED(lp->lp_ifp);
+
+ IFNET_LOCK(lp->lp_ifp);
+ lagg_common_linkstate_ifnet_locked(psc, lp);
+ IFNET_UNLOCK(lp->lp_ifp);
+}
void
-lagg_common_linkstate(struct lagg_proto_softc *psc, struct lagg_port *lp)
+lagg_common_linkstate_ifnet_locked(struct lagg_proto_softc *psc, struct lagg_port *lp)
{
struct lagg_proto_port *pport;
struct ifnet *ifp, *ifp_port;
@@ -379,6 +391,8 @@ lagg_common_linkstate(struct lagg_proto_
is_active = lagg_portactive(lp);
ifp_port = lp->lp_ifp;
+ KASSERT(IFNET_LOCKED(ifp_port));
+
LAGG_PROTO_LOCK(psc);
if (!pport->lpp_running ||
pport->lpp_active == is_active) {
Index: src/sys/net/lagg/if_laggproto.h
diff -u src/sys/net/lagg/if_laggproto.h:1.19 src/sys/net/lagg/if_laggproto.h:1.20
--- src/sys/net/lagg/if_laggproto.h:1.19 Wed Nov 22 03:49:13 2023
+++ src/sys/net/lagg/if_laggproto.h Tue Nov 28 05:28:37 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: if_laggproto.h,v 1.19 2023/11/22 03:49:13 yamaguchi Exp $ */
+/* $NetBSD: if_laggproto.h,v 1.20 2023/11/28 05:28:37 yamaguchi Exp $ */
/*
* Copyright (c) 2021 Internet Initiative Japan Inc.
@@ -298,7 +298,7 @@ void lagg_common_startport(struct lagg_
struct lagg_port *);
void lagg_common_stopport(struct lagg_proto_softc *,
struct lagg_port *);
-void lagg_common_linkstate(struct lagg_proto_softc *,
+void lagg_common_linkstate_ifnet_locked(struct lagg_proto_softc *,
struct lagg_port *);
int lagg_none_attach(struct lagg_softc *,