Skip to content

Commit 1710b85

Browse files
committed
BACKPORT: net: check for driver support in netmem TX
We should not enable netmem TX for drivers that don't declare support. Check for driver netmem TX support during devmem TX binding and fail if the driver does not have the functionality. Check for driver support in validate_xmit_skb as well. Signed-off-by: Mina Almasry <almasrymina@google.com> Acked-by: Stanislav Fomichev <sdf@fomichev.me> Signed-off-by: Pranjal Shrivastava <praan@google.com>
1 parent a6d6316 commit 1710b85

2 files changed

Lines changed: 10 additions & 0 deletions

File tree

net/core/dev.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3765,6 +3765,9 @@ static struct sk_buff *validate_xmit_skb(struct sk_buff *skb, struct net_device
37653765

37663766
skb = validate_xmit_xfrm(skb, features, again);
37673767

3768+
if (!skb_frags_readable(skb) && !dev->netmem_tx)
3769+
goto out_kfree_skb;
3770+
37683771
return skb;
37693772

37703773
out_kfree_skb:

net/core/netdev-genl.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,13 @@ int netdev_nl_bind_tx_doit(struct sk_buff *skb, struct genl_info *info)
879879
goto err_unlock;
880880
}
881881

882+
if (!netdev->netmem_tx) {
883+
err = -EOPNOTSUPP;
884+
NL_SET_ERR_MSG(info->extack,
885+
"Driver does not support netmem TX");
886+
goto err_unlock;
887+
}
888+
882889
binding = net_devmem_bind_dmabuf(netdev, DMA_TO_DEVICE, dmabuf_fd,
883890
info->extack);
884891
if (IS_ERR(binding)) {

0 commit comments

Comments
 (0)