diff options
-rw-r--r-- | include/linux/filter.h | 3 | ||||
-rw-r--r-- | net/core/filter.c | 8 | ||||
-rw-r--r-- | net/core/sock_diag.c | 2 |
3 files changed, 6 insertions, 7 deletions
diff --git a/include/linux/filter.h b/include/linux/filter.h index 00640edc166f..3769341a745d 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h | |||
@@ -344,8 +344,7 @@ static inline unsigned int sk_filter_size(unsigned int proglen) | |||
344 | offsetof(struct sk_filter, insns[proglen])); | 344 | offsetof(struct sk_filter, insns[proglen])); |
345 | } | 345 | } |
346 | 346 | ||
347 | #define sk_filter_proglen(fprog) \ | 347 | #define bpf_classic_proglen(fprog) (fprog->len * sizeof(fprog->filter[0])) |
348 | (fprog->len * sizeof(fprog->filter[0])) | ||
349 | 348 | ||
350 | int sk_filter(struct sock *sk, struct sk_buff *skb); | 349 | int sk_filter(struct sock *sk, struct sk_buff *skb); |
351 | 350 | ||
diff --git a/net/core/filter.c b/net/core/filter.c index 5a6aeb1d40b8..d6cb287e4f59 100644 --- a/net/core/filter.c +++ b/net/core/filter.c | |||
@@ -813,7 +813,7 @@ EXPORT_SYMBOL(sk_chk_filter); | |||
813 | static int sk_store_orig_filter(struct sk_filter *fp, | 813 | static int sk_store_orig_filter(struct sk_filter *fp, |
814 | const struct sock_fprog *fprog) | 814 | const struct sock_fprog *fprog) |
815 | { | 815 | { |
816 | unsigned int fsize = sk_filter_proglen(fprog); | 816 | unsigned int fsize = bpf_classic_proglen(fprog); |
817 | struct sock_fprog_kern *fkprog; | 817 | struct sock_fprog_kern *fkprog; |
818 | 818 | ||
819 | fp->orig_prog = kmalloc(sizeof(*fkprog), GFP_KERNEL); | 819 | fp->orig_prog = kmalloc(sizeof(*fkprog), GFP_KERNEL); |
@@ -1001,7 +1001,7 @@ static struct sk_filter *__sk_prepare_filter(struct sk_filter *fp) | |||
1001 | int sk_unattached_filter_create(struct sk_filter **pfp, | 1001 | int sk_unattached_filter_create(struct sk_filter **pfp, |
1002 | struct sock_fprog_kern *fprog) | 1002 | struct sock_fprog_kern *fprog) |
1003 | { | 1003 | { |
1004 | unsigned int fsize = sk_filter_proglen(fprog); | 1004 | unsigned int fsize = bpf_classic_proglen(fprog); |
1005 | struct sk_filter *fp; | 1005 | struct sk_filter *fp; |
1006 | 1006 | ||
1007 | /* Make sure new filter is there and in the right amounts. */ | 1007 | /* Make sure new filter is there and in the right amounts. */ |
@@ -1053,7 +1053,7 @@ EXPORT_SYMBOL_GPL(sk_unattached_filter_destroy); | |||
1053 | int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk) | 1053 | int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk) |
1054 | { | 1054 | { |
1055 | struct sk_filter *fp, *old_fp; | 1055 | struct sk_filter *fp, *old_fp; |
1056 | unsigned int fsize = sk_filter_proglen(fprog); | 1056 | unsigned int fsize = bpf_classic_proglen(fprog); |
1057 | unsigned int sk_fsize = sk_filter_size(fprog->len); | 1057 | unsigned int sk_fsize = sk_filter_size(fprog->len); |
1058 | int err; | 1058 | int err; |
1059 | 1059 | ||
@@ -1154,7 +1154,7 @@ int sk_get_filter(struct sock *sk, struct sock_filter __user *ubuf, | |||
1154 | goto out; | 1154 | goto out; |
1155 | 1155 | ||
1156 | ret = -EFAULT; | 1156 | ret = -EFAULT; |
1157 | if (copy_to_user(ubuf, fprog->filter, sk_filter_proglen(fprog))) | 1157 | if (copy_to_user(ubuf, fprog->filter, bpf_classic_proglen(fprog))) |
1158 | goto out; | 1158 | goto out; |
1159 | 1159 | ||
1160 | /* Instead of bytes, the API requests to return the number | 1160 | /* Instead of bytes, the API requests to return the number |
diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c index a4216a4c9572..57d922320c59 100644 --- a/net/core/sock_diag.c +++ b/net/core/sock_diag.c | |||
@@ -69,7 +69,7 @@ int sock_diag_put_filterinfo(bool may_report_filterinfo, struct sock *sk, | |||
69 | goto out; | 69 | goto out; |
70 | 70 | ||
71 | fprog = filter->orig_prog; | 71 | fprog = filter->orig_prog; |
72 | flen = sk_filter_proglen(fprog); | 72 | flen = bpf_classic_proglen(fprog); |
73 | 73 | ||
74 | attr = nla_reserve(skb, attrtype, flen); | 74 | attr = nla_reserve(skb, attrtype, flen); |
75 | if (attr == NULL) { | 75 | if (attr == NULL) { |