Commit 8dce4391 authored by Antony Antony's avatar Antony Antony Committed by Steffen Klassert
Browse files

xfrm: interface with if_id 0 should return error



xfrm interface if_id = 0 would cause xfrm policy lookup errors since
Commit 9f8550e4.

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: 9f8550e4 ("xfrm: fix disable_xfrm sysctl when used on xfrm interfaces")
Signed-off-by: default avatarAntony Antony <antony.antony@secunet.com>
Reviewed-by: default avatarEyal Birger <eyal.birger@gmail.com>
Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
parent 7770a39d
Loading
Loading
Loading
Loading
+12 −2
Original line number Original line Diff line number Diff line
@@ -637,11 +637,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;
@@ -666,7 +671,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);