xfrm: interface with if_id 0 should return error
[ Upstream commit 8dce43919566f06e865f7e8949f5c10d8c2493f5 ]
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 <antony.antony@secunet.com>
Reviewed-by: Eyal Birger <eyal.birger@gmail.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
37441ddadc
commit
db369047e3
@@ -643,11 +643,16 @@ static int xfrmi_newlink(struct net *src_net, struct net_device *dev,
|
|||||||
struct netlink_ext_ack *extack)
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct net *net = dev_net(dev);
|
struct net *net = dev_net(dev);
|
||||||
struct xfrm_if_parms p;
|
struct xfrm_if_parms p = {};
|
||||||
struct xfrm_if *xi;
|
struct xfrm_if *xi;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
xfrmi_netlink_parms(data, &p);
|
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);
|
xi = xfrmi_locate(net, &p);
|
||||||
if (xi)
|
if (xi)
|
||||||
return -EEXIST;
|
return -EEXIST;
|
||||||
@@ -672,7 +677,12 @@ static int xfrmi_changelink(struct net_device *dev, struct nlattr *tb[],
|
|||||||
{
|
{
|
||||||
struct xfrm_if *xi = netdev_priv(dev);
|
struct xfrm_if *xi = netdev_priv(dev);
|
||||||
struct net *net = xi->net;
|
struct net *net = xi->net;
|
||||||
struct xfrm_if_parms p;
|
struct xfrm_if_parms p = {};
|
||||||
|
|
||||||
|
if (!p.if_id) {
|
||||||
|
NL_SET_ERR_MSG(extack, "if_id must be non zero");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
xfrmi_netlink_parms(data, &p);
|
xfrmi_netlink_parms(data, &p);
|
||||||
xi = xfrmi_locate(net, &p);
|
xi = xfrmi_locate(net, &p);
|
||||||
|
|||||||
Reference in New Issue
Block a user