Netdev Archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next] vxlan: Return the correct errno code
@ 2021-06-07 14:44 Zheng Yongjun
  2021-06-07 14:50 ` Joe Perches
  0 siblings, 1 reply; 2+ messages in thread
From: Zheng Yongjun @ 2021-06-07 14:44 UTC (permalink / raw
  To: davem, kuba, netdev, linux-kernel; +Cc: Zheng Yongjun

When kalloc or kmemdup failed, should return ENOMEM rather than ENOBUFS.

Signed-off-by: Zheng Yongjun <zhengyongjun3@huawei.com>
---
 drivers/net/vxlan.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 02a14f1b938a..5fa7250edf5c 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -711,11 +711,11 @@ static int vxlan_fdb_append(struct vxlan_fdb *f,
 
 	rd = kmalloc(sizeof(*rd), GFP_ATOMIC);
 	if (rd == NULL)
-		return -ENOBUFS;
+		return -ENOMEM;
 
 	if (dst_cache_init(&rd->dst_cache, GFP_ATOMIC)) {
 		kfree(rd);
-		return -ENOBUFS;
+		return -ENOMEM;
 	}
 
 	rd->remote_ip = *ip;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH net-next] vxlan: Return the correct errno code
  2021-06-07 14:44 [PATCH net-next] vxlan: Return the correct errno code Zheng Yongjun
@ 2021-06-07 14:50 ` Joe Perches
  0 siblings, 0 replies; 2+ messages in thread
From: Joe Perches @ 2021-06-07 14:50 UTC (permalink / raw
  To: Zheng Yongjun, davem, kuba, netdev, linux-kernel

On Mon, 2021-06-07 at 22:44 +0800, Zheng Yongjun wrote:
> When kalloc or kmemdup failed, should return ENOMEM rather than ENOBUFS.

Why?  Where in the call chain does it matter?
Have you inspected the entire call chain and their return value tests?

> diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
[]
> @@ -711,11 +711,11 @@ static int vxlan_fdb_append(struct vxlan_fdb *f,
>  
> 
>  	rd = kmalloc(sizeof(*rd), GFP_ATOMIC);

And this should probably use kzalloc to avoid possible uninitialized members.

>  	if (rd == NULL)
> -		return -ENOBUFS;
> +		return -ENOMEM;
>  
>  	if (dst_cache_init(&rd->dst_cache, GFP_ATOMIC)) {
>  		kfree(rd);
> -		return -ENOBUFS;
> +		return -ENOMEM;
>  	}
>  
>  	rd->remote_ip = *ip;

The struct is:

include/net/vxlan.h:struct vxlan_rdst {
include/net/vxlan.h-    union vxlan_addr         remote_ip;
include/net/vxlan.h-    __be16                   remote_port;
include/net/vxlan.h-    u8                       offloaded:1;
include/net/vxlan.h-    __be32                   remote_vni;
include/net/vxlan.h-    u32                      remote_ifindex;
include/net/vxlan.h-    struct net_device        *remote_dev;
include/net/vxlan.h-    struct list_head         list;
include/net/vxlan.h-    struct rcu_head          rcu;
include/net/vxlan.h-    struct dst_cache         dst_cache;
include/net/vxlan.h-};

And the code is:

	if (dst_cache_init(&rd->dst_cache, GFP_ATOMIC)) {
		kfree(rd);
		return -ENOBUFS;
	}

	rd->remote_ip = *ip;
	rd->remote_port = port;
	rd->offloaded = false;
	rd->remote_vni = vni;
	rd->remote_ifindex = ifindex;

	list_add_tail_rcu(&rd->list, &f->remotes);

	*rdp = rd;

So it appears as if rd->remote_dev and rd->rcu are uninitialized.
I don't know if that matters, but it seems poor form.



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-06-07 14:50 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-06-07 14:44 [PATCH net-next] vxlan: Return the correct errno code Zheng Yongjun
2021-06-07 14:50 ` Joe Perches

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).