bpf: remove check in __cgroup_bpf_run_filter_skb
authorOliver Crumrine <ozlinuxc@gmail.com>
Fri, 9 Feb 2024 19:41:22 +0000 (14:41 -0500)
committerMartin KaFai Lau <martin.lau@kernel.org>
Tue, 13 Feb 2024 23:41:17 +0000 (15:41 -0800)
Originally, this patch removed a redundant check in
BPF_CGROUP_RUN_PROG_INET_EGRESS, as the check was already being done in
the function it called, __cgroup_bpf_run_filter_skb. For v2, it was
reccomended that I remove the check from __cgroup_bpf_run_filter_skb,
and add the checks to the other macro that calls that function,
BPF_CGROUP_RUN_PROG_INET_INGRESS.

To sum it up, checking that the socket exists and that it is a full
socket is now part of both macros BPF_CGROUP_RUN_PROG_INET_EGRESS and
BPF_CGROUP_RUN_PROG_INET_INGRESS, and it is no longer part of the
function they call, __cgroup_bpf_run_filter_skb.

v3->v4: Fixed weird merge conflict.
v2->v3: Sent to bpf-next instead of generic patch
v1->v2: Addressed feedback about where check should be removed.

Signed-off-by: Oliver Crumrine <ozlinuxc@gmail.com>
Acked-by: Stanislav Fomichev <sdf@google.com>
Link: https://lore.kernel.org/r/7lv62yiyvmj5a7eozv2iznglpkydkdfancgmbhiptrgvgan5sy@3fl3onchgdz3
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
include/linux/bpf-cgroup.h
kernel/bpf/cgroup.c

index a789266..fb3c3e7 100644 (file)
@@ -196,7 +196,8 @@ static inline bool cgroup_bpf_sock_enabled(struct sock *sk,
 ({                                                                           \
        int __ret = 0;                                                        \
        if (cgroup_bpf_enabled(CGROUP_INET_INGRESS) &&                        \
-           cgroup_bpf_sock_enabled(sk, CGROUP_INET_INGRESS))                 \
+           cgroup_bpf_sock_enabled(sk, CGROUP_INET_INGRESS) && sk &&         \
+           sk_fullsock(sk))                                                  \
                __ret = __cgroup_bpf_run_filter_skb(sk, skb,                  \
                                                    CGROUP_INET_INGRESS); \
                                                                              \
index 98e0e38..5a568bb 100644 (file)
@@ -1364,9 +1364,6 @@ int __cgroup_bpf_run_filter_skb(struct sock *sk,
        struct cgroup *cgrp;
        int ret;
 
-       if (!sk || !sk_fullsock(sk))
-               return 0;
-
        if (sk->sk_family != AF_INET && sk->sk_family != AF_INET6)
                return 0;