Skip to content

Commit 88a4b7c

Browse files
committed
tgupdate: merge t/DO-NOT-MERGE-mptcp-enabled-by-default base into t/DO-NOT-MERGE-mptcp-enabled-by-default
2 parents 7c4e93d + e8628a9 commit 88a4b7c

File tree

7 files changed

+18
-51
lines changed

7 files changed

+18
-51
lines changed

include/net/mptcp.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,9 +323,9 @@ static inline void mptcpv6_handle_mapped(struct sock *sk, bool mapped) { }
323323
#endif
324324

325325
#if defined(CONFIG_MPTCP) && defined(CONFIG_BPF_SYSCALL)
326-
struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk);
326+
struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk);
327327
#else
328-
static inline struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk) { return NULL; }
328+
static inline struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk) { return NULL; }
329329
#endif
330330

331331
#if !IS_ENABLED(CONFIG_MPTCP)

kernel/bpf/cgroup.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2358,8 +2358,6 @@ cg_sockopt_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog)
23582358
#ifdef CONFIG_INET
23592359
case BPF_FUNC_tcp_sock:
23602360
return &bpf_tcp_sock_proto;
2361-
case BPF_FUNC_skc_to_mptcp_sock:
2362-
return &bpf_skc_to_mptcp_sock_proto;
23632361
#endif
23642362
case BPF_FUNC_perf_event_output:
23652363
return &bpf_event_output_data_proto;

net/core/filter.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11884,7 +11884,7 @@ const struct bpf_func_proto bpf_skc_to_unix_sock_proto = {
1188411884
BPF_CALL_1(bpf_skc_to_mptcp_sock, struct sock *, sk)
1188511885
{
1188611886
BTF_TYPE_EMIT(struct mptcp_sock);
11887-
return (unsigned long)bpf_mptcp_sock_from_sock(sk);
11887+
return (unsigned long)bpf_mptcp_sock_from_subflow(sk);
1188811888
}
1188911889

1189011890
const struct bpf_func_proto bpf_skc_to_mptcp_sock_proto = {

net/mptcp/bpf.c

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -195,15 +195,9 @@ static struct bpf_struct_ops bpf_mptcp_sched_ops = {
195195
};
196196
#endif /* CONFIG_BPF_JIT */
197197

198-
struct mptcp_sock *bpf_mptcp_sock_from_sock(struct sock *sk)
198+
struct mptcp_sock *bpf_mptcp_sock_from_subflow(struct sock *sk)
199199
{
200-
if (unlikely(!sk || !sk_fullsock(sk)))
201-
return NULL;
202-
203-
if (sk->sk_protocol == IPPROTO_MPTCP)
204-
return mptcp_sk(sk);
205-
206-
if (sk->sk_protocol == IPPROTO_TCP && sk_is_mptcp(sk))
200+
if (sk && sk_fullsock(sk) && sk->sk_protocol == IPPROTO_TCP && sk_is_mptcp(sk))
207201
return mptcp_sk(mptcp_subflow_ctx(sk)->conn);
208202

209203
return NULL;
@@ -241,24 +235,27 @@ bpf_mptcp_subflow_ctx(const struct sock *sk)
241235

242236
__bpf_kfunc static int
243237
bpf_iter_mptcp_subflow_new(struct bpf_iter_mptcp_subflow *it,
244-
struct mptcp_sock *msk)
238+
struct sock *sk)
245239
{
246240
struct bpf_iter_mptcp_subflow_kern *kit = (void *)it;
247-
struct sock *sk = (struct sock *)msk;
241+
struct mptcp_sock *msk;
248242

249243
BUILD_BUG_ON(sizeof(struct bpf_iter_mptcp_subflow_kern) >
250244
sizeof(struct bpf_iter_mptcp_subflow));
251245
BUILD_BUG_ON(__alignof__(struct bpf_iter_mptcp_subflow_kern) !=
252246
__alignof__(struct bpf_iter_mptcp_subflow));
253247

254-
kit->msk = msk;
255-
if (!msk)
248+
if (unlikely(!sk || !sk_fullsock(sk)))
256249
return -EINVAL;
257250

258-
if (!sock_owned_by_user_nocheck(sk) &&
259-
!spin_is_locked(&sk->sk_lock.slock))
251+
if (sk->sk_protocol != IPPROTO_MPTCP)
260252
return -EINVAL;
261253

254+
msk = mptcp_sk(sk);
255+
256+
msk_owned_by_me(msk);
257+
258+
kit->msk = msk;
262259
kit->pos = &msk->conn_list;
263260
return 0;
264261
}
@@ -280,23 +277,6 @@ bpf_iter_mptcp_subflow_destroy(struct bpf_iter_mptcp_subflow *it)
280277
{
281278
}
282279

283-
__bpf_kfunc static struct
284-
mptcp_sock *bpf_mptcp_sock_acquire(struct mptcp_sock *msk)
285-
{
286-
struct sock *sk = (struct sock *)msk;
287-
288-
if (sk && refcount_inc_not_zero(&sk->sk_refcnt))
289-
return msk;
290-
return NULL;
291-
}
292-
293-
__bpf_kfunc static void bpf_mptcp_sock_release(struct mptcp_sock *msk)
294-
{
295-
struct sock *sk = (struct sock *)msk;
296-
297-
WARN_ON_ONCE(!sk || !refcount_dec_not_one(&sk->sk_refcnt));
298-
}
299-
300280
__bpf_kfunc struct mptcp_subflow_context *
301281
bpf_mptcp_subflow_ctx_by_pos(const struct mptcp_sched_data *data, unsigned int pos)
302282
{
@@ -317,8 +297,6 @@ BTF_ID_FLAGS(func, bpf_mptcp_subflow_ctx, KF_RET_NULL)
317297
BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_new, KF_ITER_NEW | KF_TRUSTED_ARGS)
318298
BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_next, KF_ITER_NEXT | KF_RET_NULL)
319299
BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_destroy, KF_ITER_DESTROY)
320-
BTF_ID_FLAGS(func, bpf_mptcp_sock_acquire, KF_ACQUIRE | KF_RET_NULL)
321-
BTF_ID_FLAGS(func, bpf_mptcp_sock_release, KF_RELEASE)
322300
BTF_KFUNCS_END(bpf_mptcp_common_kfunc_ids)
323301

324302
static const struct btf_kfunc_id_set bpf_mptcp_common_kfunc_set = {

tools/testing/selftests/bpf/bpf_experimental.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ extern void bpf_iter_css_destroy(struct bpf_iter_css *it) __weak __ksym;
577577

578578
struct bpf_iter_mptcp_subflow;
579579
extern int bpf_iter_mptcp_subflow_new(struct bpf_iter_mptcp_subflow *it,
580-
struct mptcp_sock *msk) __weak __ksym;
580+
struct sock *sk) __weak __ksym;
581581
extern struct mptcp_subflow_context *
582582
bpf_iter_mptcp_subflow_next(struct bpf_iter_mptcp_subflow *it) __weak __ksym;
583583
extern void

tools/testing/selftests/bpf/progs/mptcp_bpf.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,8 @@ mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow)
4343
}
4444

4545
/* ksym */
46-
extern struct mptcp_sock *bpf_mptcp_sock_acquire(struct mptcp_sock *msk) __ksym;
47-
extern void bpf_mptcp_sock_release(struct mptcp_sock *msk) __ksym;
48-
4946
extern struct mptcp_subflow_context *
5047
bpf_mptcp_subflow_ctx(const struct sock *sk) __ksym;
51-
extern struct sock *
52-
bpf_mptcp_subflow_tcp_sock(const struct mptcp_subflow_context *subflow) __ksym;
5348

5449
extern void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
5550
bool scheduled) __ksym;

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

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,19 @@ int iters_subflow(struct bpf_sockopt *ctx)
2424
if (ctx->level != SOL_TCP || ctx->optname != TCP_IS_MPTCP)
2525
return 1;
2626

27-
msk = bpf_skc_to_mptcp_sock(sk);
27+
msk = bpf_core_cast(sk, struct mptcp_sock);
2828
if (!msk || msk->pm.server_side || !msk->pm.subflows)
2929
return 1;
3030

31-
msk = bpf_mptcp_sock_acquire(msk);
32-
if (!msk)
33-
return 1;
34-
bpf_for_each(mptcp_subflow, subflow, msk) {
31+
bpf_for_each(mptcp_subflow, subflow, (struct sock *)sk) {
3532
/* Here MPTCP-specific packet scheduler kfunc can be called:
3633
* this test is not doing anything really useful, only to
3734
* verify the iteration works.
3835
*/
3936

4037
local_ids += subflow->subflow_id;
4138

42-
/* only to check the following kfunc works */
39+
/* only to check the following helper works */
4340
ssk = mptcp_subflow_tcp_sock(subflow);
4441
}
4542

@@ -58,6 +55,5 @@ int iters_subflow(struct bpf_sockopt *ctx)
5855
ids = local_ids;
5956

6057
out:
61-
bpf_mptcp_sock_release(msk);
6258
return 1;
6359
}

0 commit comments

Comments
 (0)