sk_filter
if (tfile->socket.sk->sk_filter) {
if (!tfile->socket.sk->sk_filter)
BPF_PROG_TYPE(BPF_PROG_TYPE_SOCKET_FILTER, sk_filter,
bool sk_filter_charge(struct sock *sk, struct sk_filter *fp);
void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp);
struct sk_filter;
struct sk_filter __rcu *sk_filter;
err = sk_filter(sk, skb);
return sk_filter(sk, skb);
struct sk_filter *filter;
filter = rcu_dereference_protected(sk->sk_filter,
RCU_INIT_POINTER(sk->sk_filter, NULL);
struct sk_filter *filter;
filter = rcu_dereference_protected(sk->sk_filter,
static void __sk_filter_release(struct sk_filter *fp)
struct sk_filter *fp = container_of(rcu, struct sk_filter, rcu);
static void sk_filter_release(struct sk_filter *fp)
void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp)
static bool __sk_filter_charge(struct sock *sk, struct sk_filter *fp)
bool sk_filter_charge(struct sock *sk, struct sk_filter *fp)
struct sk_filter *filter;
struct sk_filter *fp, *old_fp;
old_fp = rcu_dereference_protected(sk->sk_filter,
rcu_assign_pointer(sk->sk_filter, fp);
filter = rcu_dereference(sk->sk_filter);
struct sk_filter *filter;
filter = rcu_dereference_check(sk->sk_filter,
RCU_INIT_POINTER(sk->sk_filter, NULL);
struct sk_filter *filter;
filter = rcu_dereference(sk->sk_filter);
RCU_INIT_POINTER(newsk->sk_filter, filter);
RCU_INIT_POINTER(newsk->sk_filter, NULL);
CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rx, sk_filter);
struct sk_filter *filter;
filter = rcu_dereference(sk->sk_filter);
if (rcu_access_pointer(sk->sk_filter) &&
if ((raw6_sk(sk)->checksum || rcu_access_pointer(sk->sk_filter)) &&
if (rcu_access_pointer(sk->sk_filter) &&
if (sk_filter(sk, skb)) {
if (sk_filter(sk, skb)) {
if (sk_filter(sk, skb)) {
if (sk_filter(sk, p->skb2)) {
if (sk_filter(sk, skb))
if (sk_filter(sk, skb))
struct sk_filter *filter;
filter = rcu_dereference(sk->sk_filter);
if (sk_filter(sk, skb) || skb->len < sizeof(struct sctp_chunkhdr))
if (sk_filter(other, skb) < 0) {