Loading include/linux/filter.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -46,6 +46,7 @@ extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); extern int sk_detach_filter(struct sock *sk); extern int sk_detach_filter(struct sock *sk); extern int sk_chk_filter(struct sock_filter *filter, unsigned int flen); extern int sk_chk_filter(struct sock_filter *filter, unsigned int flen); extern int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, unsigned len); extern int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, unsigned len); extern void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to); #ifdef CONFIG_BPF_JIT #ifdef CONFIG_BPF_JIT #include <stdarg.h> #include <stdarg.h> Loading net/core/filter.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -778,7 +778,7 @@ int sk_detach_filter(struct sock *sk) } } EXPORT_SYMBOL_GPL(sk_detach_filter); EXPORT_SYMBOL_GPL(sk_detach_filter); static void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to) void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to) { { static const u16 decodes[] = { static const u16 decodes[] = { [BPF_S_ALU_ADD_K] = BPF_ALU|BPF_ADD|BPF_K, [BPF_S_ALU_ADD_K] = BPF_ALU|BPF_ADD|BPF_K, Loading net/core/sock_diag.c +7 −2 Original line number Original line Diff line number Diff line Loading @@ -73,8 +73,13 @@ int sock_diag_put_filterinfo(struct user_namespace *user_ns, struct sock *sk, goto out; goto out; } } if (filter) if (filter) { memcpy(nla_data(attr), filter->insns, len); struct sock_filter *fb = (struct sock_filter *)nla_data(attr); int i; for (i = 0; i < filter->len; i++, fb++) sk_decode_filter(&filter->insns[i], fb); } out: out: rcu_read_unlock(); rcu_read_unlock(); Loading Loading
include/linux/filter.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -46,6 +46,7 @@ extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); extern int sk_detach_filter(struct sock *sk); extern int sk_detach_filter(struct sock *sk); extern int sk_chk_filter(struct sock_filter *filter, unsigned int flen); extern int sk_chk_filter(struct sock_filter *filter, unsigned int flen); extern int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, unsigned len); extern int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, unsigned len); extern void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to); #ifdef CONFIG_BPF_JIT #ifdef CONFIG_BPF_JIT #include <stdarg.h> #include <stdarg.h> Loading
net/core/filter.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -778,7 +778,7 @@ int sk_detach_filter(struct sock *sk) } } EXPORT_SYMBOL_GPL(sk_detach_filter); EXPORT_SYMBOL_GPL(sk_detach_filter); static void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to) void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to) { { static const u16 decodes[] = { static const u16 decodes[] = { [BPF_S_ALU_ADD_K] = BPF_ALU|BPF_ADD|BPF_K, [BPF_S_ALU_ADD_K] = BPF_ALU|BPF_ADD|BPF_K, Loading
net/core/sock_diag.c +7 −2 Original line number Original line Diff line number Diff line Loading @@ -73,8 +73,13 @@ int sock_diag_put_filterinfo(struct user_namespace *user_ns, struct sock *sk, goto out; goto out; } } if (filter) if (filter) { memcpy(nla_data(attr), filter->insns, len); struct sock_filter *fb = (struct sock_filter *)nla_data(attr); int i; for (i = 0; i < filter->len; i++, fb++) sk_decode_filter(&filter->insns[i], fb); } out: out: rcu_read_unlock(); rcu_read_unlock(); Loading