Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
[linux-2.6-microblaze.git] / net / core / filter.c
index 654c346..3fa16b8 100644 (file)
 #include <net/transp_v6.h>
 #include <linux/btf_ids.h>
 
+int copy_bpf_fprog_from_user(struct sock_fprog *dst, void __user *src, int len)
+{
+       if (in_compat_syscall()) {
+               struct compat_sock_fprog f32;
+
+               if (len != sizeof(f32))
+                       return -EINVAL;
+               if (copy_from_user(&f32, src, sizeof(f32)))
+                       return -EFAULT;
+               memset(dst, 0, sizeof(*dst));
+               dst->len = f32.len;
+               dst->filter = compat_ptr(f32.filter);
+       } else {
+               if (len != sizeof(*dst))
+                       return -EINVAL;
+               if (copy_from_user(dst, src, sizeof(*dst)))
+                       return -EFAULT;
+       }
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(copy_bpf_fprog_from_user);
+
 /**
  *     sk_filter_trim_cap - run a packet through a socket filter
  *     @sk: sock associated with &sk_buff