summaryrefslogtreecommitdiffstats
path: root/net/core/sock_diag.c
diff options
context:
space:
mode:
authorNicolas Dichtel2013-06-05 15:30:55 +0200
committerDavid S. Miller2013-06-11 07:23:32 +0200
commited13998c319b050fc9abdb73915859dfdbe1fb38 (patch)
tree347c9ba28d34f2ab94823f8d52c0d223e00c036f /net/core/sock_diag.c
parenttuntap: fix a possible race between queue selection and changing queues (diff)
downloadkernel-qcow2-linux-ed13998c319b050fc9abdb73915859dfdbe1fb38.tar.gz
kernel-qcow2-linux-ed13998c319b050fc9abdb73915859dfdbe1fb38.tar.xz
kernel-qcow2-linux-ed13998c319b050fc9abdb73915859dfdbe1fb38.zip
sock_diag: fix filter code sent to userspace
Filters need to be translated to real BPF code for userland, like SO_GETFILTER. Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/sock_diag.c')
-rw-r--r--net/core/sock_diag.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c
index d5bef0b0f639..a0e9cf6379de 100644
--- a/net/core/sock_diag.c
+++ b/net/core/sock_diag.c
@@ -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();