diff mbox series

[5.10,35/38] rtnetlink: Fix missing error code in rtnl_bridge_notify()

Message ID 20210616152836.507544876@linuxfoundation.org
State Superseded
Headers show
Series None | expand

Commit Message

Greg KH June 16, 2021, 3:33 p.m. UTC
From: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>

[ Upstream commit a8db57c1d285c758adc7fb43d6e2bad2554106e1 ]

The error code is missing in this code scenario, add the error code
'-EINVAL' to the return value 'err'.

Eliminate the follow smatch warning:

net/core/rtnetlink.c:4834 rtnl_bridge_notify() warn: missing error code
'err'.

Reported-by: Abaci Robot <abaci@linux.alibaba.com>
Signed-off-by: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 net/core/rtnetlink.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Alexander Tsoy June 18, 2021, 11:58 p.m. UTC | #1
В Ср, 16/06/2021 в 17:33 +0200, Greg Kroah-Hartman пишет:
> From: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>

> 

> [ Upstream commit a8db57c1d285c758adc7fb43d6e2bad2554106e1 ]

> 

> The error code is missing in this code scenario, add the error code

> '-EINVAL' to the return value 'err'.

> 

> Eliminate the follow smatch warning:

> 

> net/core/rtnetlink.c:4834 rtnl_bridge_notify() warn: missing error code

> 'err'.


This patch breaks systemd-resolved. It is 100% reproducible on two of
my systems, but there are also systems where I cannot reproduce it. The
problem manifests itself as SERVFAIL on every DNS query.

Just reverting this patch from 5.10.45 fixes the problem for me.

> 

> Reported-by: Abaci Robot <abaci@linux.alibaba.com>

> Signed-off-by: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>

> Signed-off-by: David S. Miller <davem@davemloft.net>

> Signed-off-by: Sasha Levin <sashal@kernel.org>

> ---

>  net/core/rtnetlink.c | 4 +++-

>  1 file changed, 3 insertions(+), 1 deletion(-)

> 

> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c

> index eae8e87930cd..83894723ebee 100644

> --- a/net/core/rtnetlink.c

> +++ b/net/core/rtnetlink.c

> @@ -4842,8 +4842,10 @@ static int rtnl_bridge_notify(struct net_device

> *dev)

>         if (err < 0)

>                 goto errout;

>  

> -       if (!skb->len)

> +       if (!skb->len) {

> +               err = -EINVAL;

>                 goto errout;

> +       }

>  

>         rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC);

>         return 0;
Greg KH June 19, 2021, 6:45 a.m. UTC | #2
On Sat, Jun 19, 2021 at 02:58:28AM +0300, Alexander Tsoy wrote:
> В Ср, 16/06/2021 в 17:33 +0200, Greg Kroah-Hartman пишет:

> > From: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>

> > 

> > [ Upstream commit a8db57c1d285c758adc7fb43d6e2bad2554106e1 ]

> > 

> > The error code is missing in this code scenario, add the error code

> > '-EINVAL' to the return value 'err'.

> > 

> > Eliminate the follow smatch warning:

> > 

> > net/core/rtnetlink.c:4834 rtnl_bridge_notify() warn: missing error code

> > 'err'.

> 

> This patch breaks systemd-resolved. It is 100% reproducible on two of

> my systems, but there are also systems where I cannot reproduce it. The

> problem manifests itself as SERVFAIL on every DNS query.

> 

> Just reverting this patch from 5.10.45 fixes the problem for me.


Is Linus's tree also broken for you?  It should be reverted there first.

thanks,

greg k-h
Alexander Tsoy June 19, 2021, 1:06 p.m. UTC | #3
В Сб, 19/06/2021 в 08:45 +0200, Greg Kroah-Hartman пишет:
> On Sat, Jun 19, 2021 at 02:58:28AM +0300, Alexander Tsoy wrote:

> > В Ср, 16/06/2021 в 17:33 +0200, Greg Kroah-Hartman пишет:

> > > From: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>

> > > 

> > > [ Upstream commit a8db57c1d285c758adc7fb43d6e2bad2554106e1 ]

> > > 

> > > The error code is missing in this code scenario, add the error code

> > > '-EINVAL' to the return value 'err'.

> > > 

> > > Eliminate the follow smatch warning:

> > > 

> > > net/core/rtnetlink.c:4834 rtnl_bridge_notify() warn: missing error

> > > code

> > > 'err'.

> > 

> > This patch breaks systemd-resolved. It is 100% reproducible on two of

> > my systems, but there are also systems where I cannot reproduce it.

> > The

> > problem manifests itself as SERVFAIL on every DNS query.

> > 

> > Just reverting this patch from 5.10.45 fixes the problem for me.

> 

> Is Linus's tree also broken for you?  It should be reverted there

> first.


Looks like this patch was reverted in Linus's tree:
d2e381c4963663bca6f30c3b996fa4dbafe8fcb5 (rtnetlink: Fix regression in
bridge VLAN configuration)


Also after some investigation I think my problem was actually with
NetworkManager as systemd-networkd + systemd-resolved works fine.

$ grep ^dns /etc/NetworkManager/NetworkManager.conf 
dns=systemd-resolved

with this patch:

$ resolvectl
...
Link 4 (eno1)
Current Scopes: none
     Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS
DNSSEC=no/unsupported
   DNS Servers: 192.168.1.1 fd9f:5696:250c::1
    DNS Domain: lan

with this patch reverted:

$ resolvectl
...
Link 4 (eno1)
    Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
         Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS
DNSSEC=no/unsupported
Current DNS Server: 192.168.1.1
       DNS Servers: 192.168.1.1 fd9f:5696:250c::1
        DNS Domain: lan
diff mbox series

Patch

diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index eae8e87930cd..83894723ebee 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -4842,8 +4842,10 @@  static int rtnl_bridge_notify(struct net_device *dev)
 	if (err < 0)
 		goto errout;
 
-	if (!skb->len)
+	if (!skb->len) {
+		err = -EINVAL;
 		goto errout;
+	}
 
 	rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC);
 	return 0;