xfrm interface if_id = 0 would cause xfrm policy lookup errors since
commit 9f8550e4bd9d ("xfrm: fix disable_xfrm sysctl when used on xfrm interfaces")
Now fail to create an xfrm interface when if_id = 0
With this commit:
ip link add ipsec0 type xfrm dev lo if_id 0
Error: if_id must be non zero.
Signed-off-by: Antony Antony <redacted>
---
net/xfrm/xfrm_interface.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
@@ -637,11 +637,16 @@ static int xfrmi_newlink(struct net *src_net, struct net_device *dev,structnetlink_ext_ack*extack){structnet*net=dev_net(dev);-structxfrm_if_parmsp;+structxfrm_if_parmsp={};structxfrm_if*xi;interr;xfrmi_netlink_parms(data,&p);+if(!p.if_id){+NL_SET_ERR_MSG(extack,"if_id must be non zero");+return-EINVAL;+}+xi=xfrmi_locate(net,&p);if(xi)return-EEXIST;
@@ -666,7 +671,12 @@ static int xfrmi_changelink(struct net_device *dev, struct nlattr *tb[],{structxfrm_if*xi=netdev_priv(dev);structnet*net=xi->net;-structxfrm_if_parmsp;+structxfrm_if_parmsp={};++if(!p.if_id){+NL_SET_ERR_MSG(extack,"if_id must be non zero");+return-EINVAL;+}xfrmi_netlink_parms(data,&p);xi=xfrmi_locate(net,&p);
On Thu, Dec 9, 2021 at 5:36 PM Antony Antony [off-list ref] wrote:
quoted hunk
xfrm interface if_id = 0 would cause xfrm policy lookup errors since
commit 9f8550e4bd9d ("xfrm: fix disable_xfrm sysctl when used on xfrm interfaces")
Now fail to create an xfrm interface when if_id = 0
With this commit:
ip link add ipsec0 type xfrm dev lo if_id 0
Error: if_id must be non zero.
Signed-off-by: Antony Antony <redacted>
---
net/xfrm/xfrm_interface.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
@@ -637,11 +637,16 @@ static int xfrmi_newlink(struct net *src_net, struct net_device *dev,structnetlink_ext_ack*extack){structnet*net=dev_net(dev);-structxfrm_if_parmsp;+structxfrm_if_parmsp={};structxfrm_if*xi;interr;xfrmi_netlink_parms(data,&p);+if(!p.if_id){+NL_SET_ERR_MSG(extack,"if_id must be non zero");+return-EINVAL;+}+xi=xfrmi_locate(net,&p);if(xi)return-EEXIST;
@@ -666,7 +671,12 @@ static int xfrmi_changelink(struct net_device *dev, struct nlattr *tb[],{structxfrm_if*xi=netdev_priv(dev);structnet*net=xi->net;-structxfrm_if_parmsp;+structxfrm_if_parmsp={};++if(!p.if_id){+NL_SET_ERR_MSG(extack,"if_id must be non zero");+return-EINVAL;+}xfrmi_netlink_parms(data,&p);xi=xfrmi_locate(net,&p);
Looks good. Maybe this needs a "Fixes:" tag?
Reviewed-by: Eyal Birger <redacted>
Thanks,
Eyal.
On Fri, Dec 10, 2021 at 19:22:35 +0200, Eyal Birger wrote:
On Thu, Dec 9, 2021 at 5:36 PM Antony Antony [off-list ref] wrote:
quoted
xfrm interface if_id = 0 would cause xfrm policy lookup errors since
commit 9f8550e4bd9d ("xfrm: fix disable_xfrm sysctl when used on xfrm interfaces")
Now fail to create an xfrm interface when if_id = 0
With this commit:
ip link add ipsec0 type xfrm dev lo if_id 0
Error: if_id must be non zero.
Signed-off-by: Antony Antony <redacted>
---
net/xfrm/xfrm_interface.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
@@ -637,11 +637,16 @@ static int xfrmi_newlink(struct net *src_net, struct net_device *dev,structnetlink_ext_ack*extack){structnet*net=dev_net(dev);-structxfrm_if_parmsp;+structxfrm_if_parmsp={};structxfrm_if*xi;interr;xfrmi_netlink_parms(data,&p);+if(!p.if_id){+NL_SET_ERR_MSG(extack,"if_id must be non zero");+return-EINVAL;+}+xi=xfrmi_locate(net,&p);if(xi)return-EEXIST;
@@ -666,7 +671,12 @@ static int xfrmi_changelink(struct net_device *dev, struct nlattr *tb[],{structxfrm_if*xi=netdev_priv(dev);structnet*net=xi->net;-structxfrm_if_parmsp;+structxfrm_if_parmsp={};++if(!p.if_id){+NL_SET_ERR_MSG(extack,"if_id must be non zero");+return-EINVAL;+}xfrmi_netlink_parms(data,&p);xi=xfrmi_locate(net,&p);
Looks good. Maybe this needs a "Fixes:" tag?
I assumed this patch is not ideal for stable releases!
There is a small chance someone was depending old semi broken behavior? And they would find this patch as surprise? So I preferred not add "Fixes: " tag.
Now I notice 9f8550e4bd9d is already in stable/linux-4.19.y. So I think
Fixes tag would be fine.
I will send out a v2 with "Fixes:" tag and let Steffen choose:)
xfrm interface if_id = 0 would cause xfrm policy lookup errors since
Commit 9f8550e4bd9d.
Now explicitly fail to create an xfrm interface when if_id = 0
With this commit:
ip link add ipsec0 type xfrm dev lo if_id 0
Error: if_id must be non zero.
v1->v2 change:
- add Fixes: tag
Fixes: 9f8550e4bd9d ("xfrm: fix disable_xfrm sysctl when used on xfrm interfaces")
Signed-off-by: Antony Antony <redacted>
---
net/xfrm/xfrm_interface.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
@@ -637,11 +637,16 @@ static int xfrmi_newlink(struct net *src_net, struct net_device *dev,structnetlink_ext_ack*extack){structnet*net=dev_net(dev);-structxfrm_if_parmsp;+structxfrm_if_parmsp={};structxfrm_if*xi;interr;xfrmi_netlink_parms(data,&p);+if(!p.if_id){+NL_SET_ERR_MSG(extack,"if_id must be non zero");+return-EINVAL;+}+xi=xfrmi_locate(net,&p);if(xi)return-EEXIST;
@@ -666,7 +671,12 @@ static int xfrmi_changelink(struct net_device *dev, struct nlattr *tb[],{structxfrm_if*xi=netdev_priv(dev);structnet*net=xi->net;-structxfrm_if_parmsp;+structxfrm_if_parmsp={};++if(!p.if_id){+NL_SET_ERR_MSG(extack,"if_id must be non zero");+return-EINVAL;+}xfrmi_netlink_parms(data,&p);xi=xfrmi_locate(net,&p);
On Sun, Dec 12, 2021 at 11:34:30AM +0100, Antony Antony wrote:
xfrm interface if_id = 0 would cause xfrm policy lookup errors since
Commit 9f8550e4bd9d.
Now explicitly fail to create an xfrm interface when if_id = 0
With this commit:
ip link add ipsec0 type xfrm dev lo if_id 0
Error: if_id must be non zero.
v1->v2 change:
- add Fixes: tag
Fixes: 9f8550e4bd9d ("xfrm: fix disable_xfrm sysctl when used on xfrm interfaces")
Signed-off-by: Antony Antony <redacted>
On Sun, Dec 12, 2021 at 11:35:00AM +0100, Antony Antony wrote:
xfrm ineterface does not allow xfrm if_id = 0
fail to create or update xfrm state and policy.
With this commit:
ip xfrm policy add src 192.0.2.1 dst 192.0.2.2 dir out if_id 0
RTNETLINK answers: Invalid argument
ip xfrm state add src 192.0.2.1 dst 192.0.2.2 proto esp spi 1 \
reqid 1 mode tunnel aead 'rfc4106(gcm(aes))' \
0x1111111111111111111111111111111111111111 96 if_id 0
RTNETLINK answers: Invalid argument
v1->v2 change:
- add Fixes: tag
Fixes: 9f8550e4bd9d ("xfrm: fix disable_xfrm sysctl when used on xfrm interfaces")
Signed-off-by: Antony Antony <redacted>