diff options
author | Jesper Dangaard Brouer <brouer@redhat.com> | 2018-01-11 11:39:09 -0500 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2018-01-12 18:10:18 -0500 |
commit | daaf24c634ab951cad3dcef28492001ef9c931d0 (patch) | |
tree | cf07c30a4bba02bda9594f2f0be69e7c5ac8e1ec | |
parent | 6bd39bc3da0f4a301fae69c4a32db2768f5118be (diff) |
bpf: simplify xdp_convert_ctx_access for xdp_rxq_info
As pointed out by Daniel Borkmann, using bpf_target_off() is not
necessary for xdp_rxq_info when extracting queue_index and
ifindex, as these members are u32 like BPF_W.
Also fix trivial spelling mistake introduced in same commit.
Fixes: 02dd3291b2f0 ("bpf: finally expose xdp_rxq_info to XDP bpf-programs")
Reported-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
-rw-r--r-- | include/uapi/linux/bpf.h | 2 | ||||
-rw-r--r-- | net/core/filter.c | 7 |
2 files changed, 4 insertions, 5 deletions
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 405317f9c064..395d261948de 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h | |||
@@ -899,7 +899,7 @@ struct xdp_md { | |||
899 | __u32 data; | 899 | __u32 data; |
900 | __u32 data_end; | 900 | __u32 data_end; |
901 | __u32 data_meta; | 901 | __u32 data_meta; |
902 | /* Below access go though struct xdp_rxq_info */ | 902 | /* Below access go through struct xdp_rxq_info */ |
903 | __u32 ingress_ifindex; /* rxq->dev->ifindex */ | 903 | __u32 ingress_ifindex; /* rxq->dev->ifindex */ |
904 | __u32 rx_queue_index; /* rxq->queue_index */ | 904 | __u32 rx_queue_index; /* rxq->queue_index */ |
905 | }; | 905 | }; |
diff --git a/net/core/filter.c b/net/core/filter.c index d4b190e63b79..db2ee8c7e1bd 100644 --- a/net/core/filter.c +++ b/net/core/filter.c | |||
@@ -4310,16 +4310,15 @@ static u32 xdp_convert_ctx_access(enum bpf_access_type type, | |||
4310 | si->dst_reg, si->dst_reg, | 4310 | si->dst_reg, si->dst_reg, |
4311 | offsetof(struct xdp_rxq_info, dev)); | 4311 | offsetof(struct xdp_rxq_info, dev)); |
4312 | *insn++ = BPF_LDX_MEM(BPF_W, si->dst_reg, si->dst_reg, | 4312 | *insn++ = BPF_LDX_MEM(BPF_W, si->dst_reg, si->dst_reg, |
4313 | bpf_target_off(struct net_device, | 4313 | offsetof(struct net_device, ifindex)); |
4314 | ifindex, 4, target_size)); | ||
4315 | break; | 4314 | break; |
4316 | case offsetof(struct xdp_md, rx_queue_index): | 4315 | case offsetof(struct xdp_md, rx_queue_index): |
4317 | *insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct xdp_buff, rxq), | 4316 | *insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct xdp_buff, rxq), |
4318 | si->dst_reg, si->src_reg, | 4317 | si->dst_reg, si->src_reg, |
4319 | offsetof(struct xdp_buff, rxq)); | 4318 | offsetof(struct xdp_buff, rxq)); |
4320 | *insn++ = BPF_LDX_MEM(BPF_W, si->dst_reg, si->dst_reg, | 4319 | *insn++ = BPF_LDX_MEM(BPF_W, si->dst_reg, si->dst_reg, |
4321 | bpf_target_off(struct xdp_rxq_info, | 4320 | offsetof(struct xdp_rxq_info, |
4322 | queue_index, 4, target_size)); | 4321 | queue_index)); |
4323 | break; | 4322 | break; |
4324 | } | 4323 | } |
4325 | 4324 | ||