netns: simple cleanups
Subsystems (2)
cover netns: simple cleanups
A few things to cleanup, found while working on net_namespace.c:
* align netlink attribute parsing policy with their real usage,
* some constification.
Guillaume Nault (2):
netns: Parse NETNSA_FD and NETNSA_PID as signed integers
netns: constify exported functions
include/net/net_namespace.h | 10 +++++----- net/core/net_namespace.c | 18 +++++++++--------- 2 files changed, 14 insertions(+), 14 deletions(-)
Signature · 1 line
2.21.1
PATCH 1/2 netns: Parse NETNSA_FD and NETNSA_PID as signed integers
These attributes represent signed values (file descriptors and PIDs). Make that clear in nla_policy.
--- net/core/net_namespace.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
net/core/net_namespace.c +6 -6
@@ -706,8 +706,8 @@ static struct pernet_operations __net_initdata net_ns_ops = {static const struct nla_policy rtnl_net_policy[NETNSA_MAX +1 ] = { [NETNSA_NONE ] = { .type =NLA_UNSPEC }, [NETNSA_NSID ] = { .type =NLA_S32 }, - [NETNSA_PID ] = { .type =NLA_U32 }, - [NETNSA_FD ] = { .type =NLA_U32 }, + [NETNSA_PID ] = { .type =NLA_S32 }, + [NETNSA_FD ] = { .type =NLA_S32 }, [NETNSA_TARGET_NSID ] = { .type =NLA_S32 }, };
@@ -731,10 +731,10 @@ static int rtnl_net_newid(struct sk_buff *skb, struct nlmsghdr *nlh, nsid =nla_get_s32 (tb[NETNSA_NSID ]);if (tb[NETNSA_PID ]) { - peer =get_net_ns_by_pid (nla_get_u32 (tb[NETNSA_PID ])); + peer =get_net_ns_by_pid (nla_get_s32 (tb[NETNSA_PID ])); nla = tb[NETNSA_PID ]; }else if (tb[NETNSA_FD ]) { - peer =get_net_ns_by_fd (nla_get_u32 (tb[NETNSA_FD ])); + peer =get_net_ns_by_fd (nla_get_s32 (tb[NETNSA_FD ])); nla = tb[NETNSA_FD ]; }else {NL_SET_ERR_MSG (extack,"Peer netns reference is missing" );
@@ -874,10 +874,10 @@ static int rtnl_net_getid(struct sk_buff *skb, struct nlmsghdr *nlh,if (err <0 )return err;if (tb[NETNSA_PID ]) { - peer =get_net_ns_by_pid (nla_get_u32 (tb[NETNSA_PID ])); + peer =get_net_ns_by_pid (nla_get_s32 (tb[NETNSA_PID ])); nla = tb[NETNSA_PID ]; }else if (tb[NETNSA_FD ]) { - peer =get_net_ns_by_fd (nla_get_u32 (tb[NETNSA_FD ])); + peer =get_net_ns_by_fd (nla_get_s32 (tb[NETNSA_FD ])); nla = tb[NETNSA_FD ]; }else if (tb[NETNSA_NSID ]) { peer =get_net_ns_by_id (net,nla_get_s32 (tb[NETNSA_NSID ]));
Signature · 1 line
2.21.1
Re: [PATCH net-next 1/2] netns: Parse NETNSA_FD and NETNSA_PID as signed integers
Le 14/01/2020 à 23:25, Guillaume Nault a écrit :
Quoted 13 lines
These attributes represent signed values (file descriptors and PIDs). Make that clear in
nla_policy.Signed-off-by Guillaume Nault <[email protected]>--- net/core/net_namespace.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)net/core/net_namespace.c +0
-0
net/core/net_namespace.c static struct pernet_operations __net_initdata net_ns_ops = { · line 710
Quoted 7 lines
net/core/net_namespace.c +2
-2@@ -706,8 +706,8 @@ static struct pernet_operations __net_initdata net_ns_ops = {static const struct nla_policy rtnl_net_policy[NETNSA_MAX +1 ] = { [NETNSA_NONE ] = { .type =NLA_UNSPEC }, [NETNSA_NSID ] = { .type =NLA_S32 }, - [NETNSA_PID ] = { .type =NLA_U32 }, - [NETNSA_FD ] = { .type =NLA_U32 }, + [NETNSA_PID ] = { .type =NLA_S32 }, + [NETNSA_FD ] = { .type =NLA_S32 },
Please, keep them consistent with IFLA_NET_NS_*:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/core/rtnetlink.c?h=v5.5-rc6#n1793
net/core/net_namespace.c static int rtnl_net_newid(struct sk_buff *skb, struct nlmsghdr *nlh, · line 734
Quoted 9 lines
net/core/net_namespace.c +1
-1[NETNSA_TARGET_NSID] = { .type = NLA_S32 }, };@@ -731,10 +731,10 @@ static int rtnl_net_newid(struct sk_buff *skb, struct nlmsghdr *nlh, nsid =nla_get_s32 (tb[NETNSA_NSID ]);if (tb[NETNSA_PID ]) { - peer =get_net_ns_by_pid (nla_get_u32 (tb[NETNSA_PID ])); + peer =get_net_ns_by_pid (nla_get_s32 (tb[NETNSA_PID ]));
Thank you,
Nicolas
Re: [PATCH net-next 1/2] netns: Parse NETNSA_FD and NETNSA_PID as signed integers
Quoted 9 lines · Nicolas Dichtel
Le 14/01/2020 à 23:25, Guillaume Nault a écrit :
Quoted 8 lines
These attributes represent signed values (file descriptors and PIDs). Make that clear in
nla_policy.Signed-off-by Guillaume Nault <[email protected]>--- net/core/net_namespace.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
Quoted 15 lines
net/core/net_namespace.c static struct pernet_operations __net_initdata net_ns_ops = { · line 710
Quoted 12 lines
net/core/net_namespace.c +2
-2@@ -706,8 +706,8 @@ static struct pernet_operations __net_initdata net_ns_ops = {static const struct nla_policy rtnl_net_policy[NETNSA_MAX +1 ] = { [NETNSA_NONE ] = { .type =NLA_UNSPEC }, [NETNSA_NSID ] = { .type =NLA_S32 }, - [NETNSA_PID ] = { .type =NLA_U32 }, - [NETNSA_FD ] = { .type =NLA_U32 }, + [NETNSA_PID ] = { .type =NLA_S32 }, + [NETNSA_FD ] = { .type =NLA_S32 },Please, keep them consistent with IFLA_NET_NS_*:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/core/rtnetlink.c?h=v5.5-rc6#n1793
Oh right! I'll also update rtnetlink.c in v2.
Thanks!
PATCH 2/2 netns: constify exported functions
In reply to Guillaume NaultMark function parameters as 'const' where possible.
--- include/net/net_namespace.h | 10 +++++----- net/core/net_namespace.c | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-)
include/net/net_namespace.h +5 -5
@@ -347,9 +347,9 @@ static inline struct net *read_pnet(const possible_net_t *pnet)#endif int peernet2id_alloc (struct net *net,struct net *peer,gfp_t gfp); -int peernet2id (struct net *net,struct net *peer); -bool peernet_has_id (struct net *net,struct net *peer); -struct net *get_net_ns_by_id (struct net *net,int id); +int peernet2id (const struct net *net,struct net *peer); +bool peernet_has_id (const struct net *net,struct net *peer); +struct net *get_net_ns_by_id (const struct net *net,int id);struct pernet_operations {struct list_head list;
@@ -427,7 +427,7 @@ static inline void unregister_net_sysctl_table(struct ctl_table_header *header) }#endif -static inline int rt_genid_ipv4 (struct net *net) +static inline int rt_genid_ipv4 (const struct net *net) {return atomic_read (&net->ipv4.rt_genid); }
@@ -459,7 +459,7 @@ static inline void rt_genid_bump_all(struct net *net)rt_genid_bump_ipv6 (net); } -static inline int fnhe_genid (struct net *net) +static inline int fnhe_genid (const struct net *net) {return atomic_read (&net->fnhe_genid); }
net/core/net_namespace.c +3 -3
@@ -268,7 +268,7 @@ int peernet2id_alloc(struct net *net, struct net *peer, gfp_t gfp)EXPORT_SYMBOL_GPL (peernet2id_alloc);/* This function returns, if assigned, the id of a peer netns. */ -int peernet2id (struct net *net,struct net *peer) +int peernet2id (const struct net *net,struct net *peer) {int id;
@@ -283,12 +283,12 @@ EXPORT_SYMBOL(peernet2id);/* This function returns true is the peer netns has an id assigned into the * current netns. */ -bool peernet_has_id (struct net *net,struct net *peer) +bool peernet_has_id (const struct net *net,struct net *peer) {return peernet2id (net, peer) >=0 ; } -struct net *get_net_ns_by_id (struct net *net,int id) +struct net *get_net_ns_by_id (const struct net *net,int id) {struct net *peer;
Signature · 1 line
2.21.1
Re: [PATCH net-next 2/2] netns: constify exported functions
Le 14/01/2020 à 23:25, Guillaume Nault a écrit :
Quoted 3 lines
Mark function parameters as 'const' where possible.
Signed-off-by Guillaume Nault <[email protected]>