Eric W. Biederman
2015-Nov-30 21:38 UTC
[Bridge] [PATCH net] bridge: Only call /sbin/bridge-stp for the initial network namespace
There is no defined mechanism to pass network namespace information into /sbin/bridge-stp therefore don't even try to invoke it except for bridge devices in the initial network namespace. It is possible for unprivileged users to cause /sbin/bridge-stp to be invoked for any network device name which if /sbin/bridge-stp does not guard against unreasonable arguments or being invoked twice on the same network device could cause problems. Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com> --- net/bridge/br_stp_if.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c index 5396ff08af32..742fa89528ab 100644 --- a/net/bridge/br_stp_if.c +++ b/net/bridge/br_stp_if.c @@ -142,7 +142,9 @@ static void br_stp_start(struct net_bridge *br) char *envp[] = { NULL }; struct net_bridge_port *p; - r = call_usermodehelper(BR_STP_PROG, argv, envp, UMH_WAIT_PROC); + r = -ENOENT; + if (dev_net(br->dev) == &init_net) + r = call_usermodehelper(BR_STP_PROG, argv, envp, UMH_WAIT_PROC); spin_lock_bh(&br->lock); -- 2.2.1
Stephen Hemminger
2015-Nov-30 22:12 UTC
[Bridge] [PATCH net] bridge: Only call /sbin/bridge-stp for the initial network namespace
On Mon, 30 Nov 2015 15:38:15 -0600 ebiederm at xmission.com (Eric W. Biederman) wrote:> > There is no defined mechanism to pass network namespace information > into /sbin/bridge-stp therefore don't even try to invoke it except > for bridge devices in the initial network namespace. > > It is possible for unprivileged users to cause /sbin/bridge-stp to be > invoked for any network device name which if /sbin/bridge-stp does not > guard against unreasonable arguments or being invoked twice on the same > network device could cause problems. > > Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com> > --- > net/bridge/br_stp_if.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c > index 5396ff08af32..742fa89528ab 100644 > --- a/net/bridge/br_stp_if.c > +++ b/net/bridge/br_stp_if.c > @@ -142,7 +142,9 @@ static void br_stp_start(struct net_bridge *br) > char *envp[] = { NULL }; > struct net_bridge_port *p; > > - r = call_usermodehelper(BR_STP_PROG, argv, envp, UMH_WAIT_PROC); > + r = -ENOENT; > + if (dev_net(br->dev) == &init_net) > + r = call_usermodehelper(BR_STP_PROG, argv, envp, UMH_WAIT_PROC);I don't think this will cause loud screams. But it might break people that use containers to run virtual networks for testing. One coding nit: Why are you afraid of using an else?
Richard Weinberger
2015-Nov-30 22:57 UTC
[Bridge] [PATCH net] bridge: Only call /sbin/bridge-stp for the initial network namespace
Am 30.11.2015 um 22:38 schrieb Eric W. Biederman:> > There is no defined mechanism to pass network namespace information > into /sbin/bridge-stp therefore don't even try to invoke it except > for bridge devices in the initial network namespace. > > It is possible for unprivileged users to cause /sbin/bridge-stp to be > invoked for any network device name which if /sbin/bridge-stp does not > guard against unreasonable arguments or being invoked twice on the same > network device could cause problems. > > Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com>Just figured that /sbin/bridge-stp is a shell script. Network interfaces can contain a lot of funny characters, maybe this is after all a security issue. Thanks, //richard
Hannes Frederic Sowa
2015-Dec-01 14:13 UTC
[Bridge] [PATCH net] bridge: Only call /sbin/bridge-stp for the initial network namespace
On Mon, Nov 30, 2015, at 22:38, Eric W. Biederman wrote:> Signed-off-by: "Eric W. Biederman" <ebiederm at xmission.com> > --- > net/bridge/br_stp_if.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c > index 5396ff08af32..742fa89528ab 100644 > --- a/net/bridge/br_stp_if.c > +++ b/net/bridge/br_stp_if.c > @@ -142,7 +142,9 @@ static void br_stp_start(struct net_bridge *br) > char *envp[] = { NULL }; > struct net_bridge_port *p; > > - r = call_usermodehelper(BR_STP_PROG, argv, envp, UMH_WAIT_PROC); > + r = -ENOENT; > + if (dev_net(br->dev) == &init_net)net_eq ?> + r = call_usermodehelper(BR_STP_PROG, argv, envp, > UMH_WAIT_PROC); > > spin_lock_bh(&br->lock); >Otherwise, ack, so far. As our /sys interfaces directories are tagged by the net namespace it would actually make sense to run bridge-stp automatically in another name space. Bye, Hannes
David Miller
2015-Dec-03 04:50 UTC
[Bridge] [PATCH net] bridge: Only call /sbin/bridge-stp for the initial network namespace
From: ebiederm at xmission.com (Eric W. Biederman) Date: Mon, 30 Nov 2015 15:38:15 -0600> + if (dev_net(br->dev) == &init_net)Please respin this using net_eq() as Hannes pointed out. Thanks.