Skip to content

Commit 029294d

Browse files
committed
Daniel Borkmann says: ==================== pull-request: bpf 2023-04-08 We've added 4 non-merge commits during the last 11 day(s) which contain a total of 5 files changed, 39 insertions(+), 6 deletions(-). The main changes are: 1) Fix BPF TCP socket iterator to use correct helper for dropping socket's refcount, that is, sock_gen_put instead of sock_put, from Martin KaFai Lau. 2) Fix a BTI exception splat in BPF trampoline-generated code on arm64, from Xu Kuohai. 3) Fix a LongArch JIT error from missing BPF_NOSPEC no-op, from George Guo. 4) Fix dynamic XDP feature detection of veth in xdp_redirect selftest, from Lorenzo Bianconi. * tag 'for-netdev' of https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf: selftests/bpf: fix xdp_redirect xdp-features selftest for veth driver bpf, arm64: Fixed a BTI error on returning to patched function LoongArch, bpf: Fix jit to skip speculation barrier opcode bpf: tcp: Use sock_gen_put instead of sock_put in bpf_iter_tcp ==================== Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents b9881d9 + 919e659 commit 029294d

File tree

5 files changed

+39
-6
lines changed

5 files changed

+39
-6
lines changed

arch/arm64/net/bpf_jit.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,4 +281,8 @@
281281
/* DMB */
282282
#define A64_DMB_ISH aarch64_insn_gen_dmb(AARCH64_INSN_MB_ISH)
283283

284+
/* ADR */
285+
#define A64_ADR(Rd, offset) \
286+
aarch64_insn_gen_adr(0, offset, Rd, AARCH64_INSN_ADR_TYPE_ADR)
287+
284288
#endif /* _BPF_JIT_H */

arch/arm64/net/bpf_jit_comp.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1900,7 +1900,8 @@ static int prepare_trampoline(struct jit_ctx *ctx, struct bpf_tramp_image *im,
19001900
restore_args(ctx, args_off, nargs);
19011901
/* call original func */
19021902
emit(A64_LDR64I(A64_R(10), A64_SP, retaddr_off), ctx);
1903-
emit(A64_BLR(A64_R(10)), ctx);
1903+
emit(A64_ADR(A64_LR, AARCH64_INSN_SIZE * 2), ctx);
1904+
emit(A64_RET(A64_R(10)), ctx);
19041905
/* store return value */
19051906
emit(A64_STR64I(A64_R(0), A64_SP, retval_off), ctx);
19061907
/* reserve a nop for bpf_tramp_image_put */

arch/loongarch/net/bpf_jit.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,6 +1022,10 @@ static int build_insn(const struct bpf_insn *insn, struct jit_ctx *ctx, bool ext
10221022
emit_atomic(insn, ctx);
10231023
break;
10241024

1025+
/* Speculation barrier */
1026+
case BPF_ST | BPF_NOSPEC:
1027+
break;
1028+
10251029
default:
10261030
pr_err("bpf_jit: unknown opcode %02x\n", code);
10271031
return -EINVAL;

net/ipv4/tcp_ipv4.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2780,7 +2780,7 @@ static int tcp_prog_seq_show(struct bpf_prog *prog, struct bpf_iter_meta *meta,
27802780
static void bpf_iter_tcp_put_batch(struct bpf_tcp_iter_state *iter)
27812781
{
27822782
while (iter->cur_sk < iter->end_sk)
2783-
sock_put(iter->batch[iter->cur_sk++]);
2783+
sock_gen_put(iter->batch[iter->cur_sk++]);
27842784
}
27852785

27862786
static int bpf_iter_tcp_realloc_batch(struct bpf_tcp_iter_state *iter,
@@ -2941,7 +2941,7 @@ static void *bpf_iter_tcp_seq_next(struct seq_file *seq, void *v, loff_t *pos)
29412941
* st->bucket. See tcp_seek_last_pos().
29422942
*/
29432943
st->offset++;
2944-
sock_put(iter->batch[iter->cur_sk++]);
2944+
sock_gen_put(iter->batch[iter->cur_sk++]);
29452945
}
29462946

29472947
if (iter->cur_sk < iter->end_sk)

tools/testing/selftests/bpf/prog_tests/xdp_do_redirect.c

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,20 +167,44 @@ void test_xdp_do_redirect(void)
167167

168168
if (!ASSERT_EQ(query_opts.feature_flags,
169169
NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
170-
NETDEV_XDP_ACT_NDO_XMIT | NETDEV_XDP_ACT_RX_SG |
171-
NETDEV_XDP_ACT_NDO_XMIT_SG,
170+
NETDEV_XDP_ACT_RX_SG,
172171
"veth_src query_opts.feature_flags"))
173172
goto out;
174173

175174
err = bpf_xdp_query(ifindex_dst, XDP_FLAGS_DRV_MODE, &query_opts);
176175
if (!ASSERT_OK(err, "veth_dst bpf_xdp_query"))
177176
goto out;
178177

178+
if (!ASSERT_EQ(query_opts.feature_flags,
179+
NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
180+
NETDEV_XDP_ACT_RX_SG,
181+
"veth_dst query_opts.feature_flags"))
182+
goto out;
183+
184+
/* Enable GRO */
185+
SYS("ethtool -K veth_src gro on");
186+
SYS("ethtool -K veth_dst gro on");
187+
188+
err = bpf_xdp_query(ifindex_src, XDP_FLAGS_DRV_MODE, &query_opts);
189+
if (!ASSERT_OK(err, "veth_src bpf_xdp_query gro on"))
190+
goto out;
191+
179192
if (!ASSERT_EQ(query_opts.feature_flags,
180193
NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
181194
NETDEV_XDP_ACT_NDO_XMIT | NETDEV_XDP_ACT_RX_SG |
182195
NETDEV_XDP_ACT_NDO_XMIT_SG,
183-
"veth_dst query_opts.feature_flags"))
196+
"veth_src query_opts.feature_flags gro on"))
197+
goto out;
198+
199+
err = bpf_xdp_query(ifindex_dst, XDP_FLAGS_DRV_MODE, &query_opts);
200+
if (!ASSERT_OK(err, "veth_dst bpf_xdp_query gro on"))
201+
goto out;
202+
203+
if (!ASSERT_EQ(query_opts.feature_flags,
204+
NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
205+
NETDEV_XDP_ACT_NDO_XMIT | NETDEV_XDP_ACT_RX_SG |
206+
NETDEV_XDP_ACT_NDO_XMIT_SG,
207+
"veth_dst query_opts.feature_flags gro on"))
184208
goto out;
185209

186210
memcpy(skel->rodata->expect_dst, &pkt_udp.eth.h_dest, ETH_ALEN);

0 commit comments

Comments
 (0)