Skip to content

Commit 9f8e716

Browse files
committed
Merge tag 'bpf-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf
Pull bpf fixes from Daniel Borkmann: - Fix a mismatching RCU unlock flavor in bpf_out_neigh_v6 (Jiawei Ye) - Fix BPF sockmap with kTLS to reject vsock and unix sockets upon kTLS context retrieval (Zijian Zhang) - Fix BPF bits iterator selftest for s390x (Hou Tao) * tag 'bpf-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf: bpf: Fix mismatched RCU unlock flavour in bpf_out_neigh_v6 bpf: Add sk_is_inet and IS_ICSK check in tls_sw_has_ctx_tx/rx selftests/bpf: Use -4095 as the bad address for bits iterator
2 parents c5f4045 + fb86c42 commit 9f8e716

File tree

3 files changed

+39
-7
lines changed

3 files changed

+39
-7
lines changed

include/net/tls.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -390,17 +390,25 @@ tls_offload_ctx_tx(const struct tls_context *tls_ctx)
390390

391391
static inline bool tls_sw_has_ctx_tx(const struct sock *sk)
392392
{
393-
struct tls_context *ctx = tls_get_ctx(sk);
393+
struct tls_context *ctx;
394+
395+
if (!sk_is_inet(sk) || !inet_test_bit(IS_ICSK, sk))
396+
return false;
394397

398+
ctx = tls_get_ctx(sk);
395399
if (!ctx)
396400
return false;
397401
return !!tls_sw_ctx_tx(ctx);
398402
}
399403

400404
static inline bool tls_sw_has_ctx_rx(const struct sock *sk)
401405
{
402-
struct tls_context *ctx = tls_get_ctx(sk);
406+
struct tls_context *ctx;
407+
408+
if (!sk_is_inet(sk) || !inet_test_bit(IS_ICSK, sk))
409+
return false;
403410

411+
ctx = tls_get_ctx(sk);
404412
if (!ctx)
405413
return false;
406414
return !!tls_sw_ctx_rx(ctx);

net/core/filter.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2249,7 +2249,7 @@ static int bpf_out_neigh_v6(struct net *net, struct sk_buff *skb,
22492249
rcu_read_unlock();
22502250
return ret;
22512251
}
2252-
rcu_read_unlock_bh();
2252+
rcu_read_unlock();
22532253
if (dst)
22542254
IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
22552255
out_drop:

tools/testing/selftests/bpf/progs/verifier_bits_iter.c

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,15 @@ __description("null pointer")
5757
__success __retval(0)
5858
int null_pointer(void)
5959
{
60-
int nr = 0;
60+
struct bpf_iter_bits iter;
61+
int err, nr = 0;
6162
int *bit;
6263

64+
err = bpf_iter_bits_new(&iter, NULL, 1);
65+
bpf_iter_bits_destroy(&iter);
66+
if (err != -EINVAL)
67+
return 1;
68+
6369
bpf_for_each(bits, bit, NULL, 1)
6470
nr++;
6571
return nr;
@@ -194,15 +200,33 @@ __description("bad words")
194200
__success __retval(0)
195201
int bad_words(void)
196202
{
197-
void *bad_addr = (void *)(3UL << 30);
198-
int nr = 0;
203+
void *bad_addr = (void *)-4095;
204+
struct bpf_iter_bits iter;
205+
volatile int nr;
199206
int *bit;
207+
int err;
208+
209+
err = bpf_iter_bits_new(&iter, bad_addr, 1);
210+
bpf_iter_bits_destroy(&iter);
211+
if (err != -EFAULT)
212+
return 1;
200213

214+
nr = 0;
201215
bpf_for_each(bits, bit, bad_addr, 1)
202216
nr++;
217+
if (nr != 0)
218+
return 2;
203219

220+
err = bpf_iter_bits_new(&iter, bad_addr, 4);
221+
bpf_iter_bits_destroy(&iter);
222+
if (err != -EFAULT)
223+
return 3;
224+
225+
nr = 0;
204226
bpf_for_each(bits, bit, bad_addr, 4)
205227
nr++;
228+
if (nr != 0)
229+
return 4;
206230

207-
return nr;
231+
return 0;
208232
}

0 commit comments

Comments
 (0)