]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - queue-6.8/netdev-let-netlink-core-handle-emsgsize-errors.patch
Fixes for 6.8
[thirdparty/kernel/stable-queue.git] / queue-6.8 / netdev-let-netlink-core-handle-emsgsize-errors.patch
1 From f776e28a960ff183e2d35cf461c32a33bcbeb0c6 Mon Sep 17 00:00:00 2001
2 From: Sasha Levin <sashal@kernel.org>
3 Date: Sat, 2 Mar 2024 21:24:07 -0800
4 Subject: netdev: let netlink core handle -EMSGSIZE errors
5
6 From: Jakub Kicinski <kuba@kernel.org>
7
8 [ Upstream commit 0b11b1c5c320555483e8a94c44549db24c289987 ]
9
10 Previous change added -EMSGSIZE handling to af_netlink, we don't
11 have to hide these errors any longer.
12
13 Theoretically the error handling changes from:
14 if (err == -EMSGSIZE)
15 to
16 if (err == -EMSGSIZE && skb->len)
17
18 everywhere, but in practice it doesn't matter.
19 All messages fit into NLMSG_GOODSIZE, so overflow of an empty
20 skb cannot happen.
21
22 Reviewed-by: Eric Dumazet <edumazet@google.com>
23 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
24 Reviewed-by: Ido Schimmel <idosch@nvidia.com>
25 Signed-off-by: David S. Miller <davem@davemloft.net>
26 Signed-off-by: Sasha Levin <sashal@kernel.org>
27 ---
28 net/core/netdev-genl.c | 15 +++------------
29 net/core/page_pool_user.c | 2 --
30 2 files changed, 3 insertions(+), 14 deletions(-)
31
32 diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c
33 index fd98936da3aec..918b109e0cf40 100644
34 --- a/net/core/netdev-genl.c
35 +++ b/net/core/netdev-genl.c
36 @@ -152,10 +152,7 @@ int netdev_nl_dev_get_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
37 }
38 rtnl_unlock();
39
40 - if (err != -EMSGSIZE)
41 - return err;
42 -
43 - return skb->len;
44 + return err;
45 }
46
47 static int
48 @@ -287,10 +284,7 @@ int netdev_nl_napi_get_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
49 }
50 rtnl_unlock();
51
52 - if (err != -EMSGSIZE)
53 - return err;
54 -
55 - return skb->len;
56 + return err;
57 }
58
59 static int
60 @@ -463,10 +457,7 @@ int netdev_nl_queue_get_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
61 }
62 rtnl_unlock();
63
64 - if (err != -EMSGSIZE)
65 - return err;
66 -
67 - return skb->len;
68 + return err;
69 }
70
71 static int netdev_genl_netdevice_event(struct notifier_block *nb,
72 diff --git a/net/core/page_pool_user.c b/net/core/page_pool_user.c
73 index 278294aca66ab..3a3277ba167b1 100644
74 --- a/net/core/page_pool_user.c
75 +++ b/net/core/page_pool_user.c
76 @@ -103,8 +103,6 @@ netdev_nl_page_pool_get_dump(struct sk_buff *skb, struct netlink_callback *cb,
77 mutex_unlock(&page_pools_lock);
78 rtnl_unlock();
79
80 - if (skb->len && err == -EMSGSIZE)
81 - return skb->len;
82 return err;
83 }
84
85 --
86 2.43.0
87