diff options
Diffstat (limited to 'drivers/net/macsec.c')
| -rw-r--r-- | drivers/net/macsec.c | 20 | 
1 files changed, 13 insertions, 7 deletions
| diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 0d580d81d910..d0d31cb99180 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -1305,7 +1305,8 @@ static struct crypto_aead *macsec_alloc_tfm(char *key, int key_len, int icv_len)  	struct crypto_aead *tfm;  	int ret; -	tfm = crypto_alloc_aead("gcm(aes)", 0, 0); +	/* Pick a sync gcm(aes) cipher to ensure order is preserved. */ +	tfm = crypto_alloc_aead("gcm(aes)", 0, CRYPTO_ALG_ASYNC);  	if (IS_ERR(tfm))  		return tfm; @@ -2640,11 +2641,12 @@ static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info)  	if (ret)  		goto rollback; -	rtnl_unlock();  	/* Force features update, since they are different for SW MACSec and  	 * HW offloading cases.  	 */  	netdev_update_features(dev); + +	rtnl_unlock();  	return 0;  rollback: @@ -3809,7 +3811,7 @@ static int macsec_changelink(struct net_device *dev, struct nlattr *tb[],  			     struct netlink_ext_ack *extack)  {  	struct macsec_dev *macsec = macsec_priv(dev); -	struct macsec_tx_sa tx_sc; +	struct macsec_tx_sc tx_sc;  	struct macsec_secy secy;  	int ret; @@ -4002,11 +4004,11 @@ static int macsec_newlink(struct net *net, struct net_device *dev,  			  struct netlink_ext_ack *extack)  {  	struct macsec_dev *macsec = macsec_priv(dev); +	rx_handler_func_t *rx_handler; +	u8 icv_len = DEFAULT_ICV_LEN;  	struct net_device *real_dev; -	int err; +	int err, mtu;  	sci_t sci; -	u8 icv_len = DEFAULT_ICV_LEN; -	rx_handler_func_t *rx_handler;  	if (!tb[IFLA_LINK])  		return -EINVAL; @@ -4033,7 +4035,11 @@ static int macsec_newlink(struct net *net, struct net_device *dev,  	if (data && data[IFLA_MACSEC_ICV_LEN])  		icv_len = nla_get_u8(data[IFLA_MACSEC_ICV_LEN]); -	dev->mtu = real_dev->mtu - icv_len - macsec_extra_len(true); +	mtu = real_dev->mtu - icv_len - macsec_extra_len(true); +	if (mtu < 0) +		dev->mtu = 0; +	else +		dev->mtu = mtu;  	rx_handler = rtnl_dereference(real_dev->rx_handler);  	if (rx_handler && rx_handler != macsec_handle_frame) |