Loading include/linux/filter.h +1 −0 Original line number 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_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 void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to); #ifdef CONFIG_BPF_JIT #include <stdarg.h> Loading net/core/filter.c +1 −1 Original line number Diff line number Diff line Loading @@ -778,7 +778,7 @@ int sk_detach_filter(struct sock *sk) } 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[] = { [BPF_S_ALU_ADD_K] = BPF_ALU|BPF_ADD|BPF_K, Loading net/core/sock_diag.c +7 −2 Original line number 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; } if (filter) memcpy(nla_data(attr), filter->insns, len); if (filter) { 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: rcu_read_unlock(); Loading Loading
include/linux/filter.h +1 −0 Original line number 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_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 void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to); #ifdef CONFIG_BPF_JIT #include <stdarg.h> Loading
net/core/filter.c +1 −1 Original line number Diff line number Diff line Loading @@ -778,7 +778,7 @@ int sk_detach_filter(struct sock *sk) } 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[] = { [BPF_S_ALU_ADD_K] = BPF_ALU|BPF_ADD|BPF_K, Loading
net/core/sock_diag.c +7 −2 Original line number 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; } if (filter) memcpy(nla_data(attr), filter->insns, len); if (filter) { 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: rcu_read_unlock(); Loading