diff options
author | Jakub Kicinski <jakub.kicinski@netronome.com> | 2017-11-03 13:56:20 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-11-05 22:26:19 +0900 |
commit | 248f346ffe9508dee0039db4ac839cb31ba3bdec (patch) | |
tree | a7fb34eb8268d73edcbcb257c679f8e98afec568 /net/core | |
parent | 928631e05495fa1f0e9775f555b94dbcbb4e2fb5 (diff) | |
download | linux-248f346ffe9508dee0039db4ac839cb31ba3bdec.tar.gz linux-248f346ffe9508dee0039db4ac839cb31ba3bdec.tar.bz2 linux-248f346ffe9508dee0039db4ac839cb31ba3bdec.zip |
xdp: allow attaching programs loaded for specific device
Pass the netdev pointer to bpf_prog_get_type(). This way
BPF code can decide whether the device matches what the
code was loaded/translated for.
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 10cde58d3275..30b5fe32c525 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -7157,7 +7157,11 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack, __dev_xdp_attached(dev, bpf_op, NULL)) return -EBUSY; - prog = bpf_prog_get_type(fd, BPF_PROG_TYPE_XDP); + if (bpf_op == ops->ndo_bpf) + prog = bpf_prog_get_type_dev(fd, BPF_PROG_TYPE_XDP, + dev); + else + prog = bpf_prog_get_type(fd, BPF_PROG_TYPE_XDP); if (IS_ERR(prog)) return PTR_ERR(prog); } |