diff options
Diffstat (limited to 'net/xfrm/xfrm_interface.c')
| -rw-r--r-- | net/xfrm/xfrm_interface.c | 14 | 
1 files changed, 12 insertions, 2 deletions
| diff --git a/net/xfrm/xfrm_interface.c b/net/xfrm/xfrm_interface.c index 41de46b5ffa9..57448fc519fc 100644 --- a/net/xfrm/xfrm_interface.c +++ b/net/xfrm/xfrm_interface.c @@ -637,11 +637,16 @@ static int xfrmi_newlink(struct net *src_net, struct net_device *dev,  			struct netlink_ext_ack *extack)  {  	struct net *net = dev_net(dev); -	struct xfrm_if_parms p; +	struct xfrm_if_parms p = {};  	struct xfrm_if *xi;  	int err;  	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[],  {  	struct xfrm_if *xi = netdev_priv(dev);  	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);  	xi = xfrmi_locate(net, &p); |