diff options
author | Patrick McHardy <kaber@trash.net> | 2006-09-20 15:06:25 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-09-22 18:20:04 -0400 |
commit | f1eda05386ade8dad4e8e9b48ecbd9432b6739d9 (patch) | |
tree | 956400d02fc018dbe428b63208a891ec1fb2d8e4 /net | |
parent | be7263b7b72ed9d5d25958f2b71e77e889e4845a (diff) |
[NETFILTER]: xt_connmark: add compat conversion functions
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/xt_connmark.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/net/netfilter/xt_connmark.c b/net/netfilter/xt_connmark.c index c9104d05a19c..92a5726ef237 100644 --- a/net/netfilter/xt_connmark.c +++ b/net/netfilter/xt_connmark.c | |||
@@ -81,6 +81,37 @@ destroy(const struct xt_match *match, void *matchinfo) | |||
81 | #endif | 81 | #endif |
82 | } | 82 | } |
83 | 83 | ||
84 | #ifdef CONFIG_COMPAT | ||
85 | struct compat_xt_connmark_info { | ||
86 | compat_ulong_t mark, mask; | ||
87 | u_int8_t invert; | ||
88 | u_int8_t __pad1; | ||
89 | u_int16_t __pad2; | ||
90 | }; | ||
91 | |||
92 | static void compat_from_user(void *dst, void *src) | ||
93 | { | ||
94 | struct compat_xt_connmark_info *cm = src; | ||
95 | struct xt_connmark_info m = { | ||
96 | .mark = cm->mark, | ||
97 | .mask = cm->mask, | ||
98 | .invert = cm->invert, | ||
99 | }; | ||
100 | memcpy(dst, &m, sizeof(m)); | ||
101 | } | ||
102 | |||
103 | static int compat_to_user(void __user *dst, void *src) | ||
104 | { | ||
105 | struct xt_connmark_info *m = src; | ||
106 | struct compat_xt_connmark_info cm = { | ||
107 | .mark = m->mark, | ||
108 | .mask = m->mask, | ||
109 | .invert = m->invert, | ||
110 | }; | ||
111 | return copy_to_user(dst, &cm, sizeof(cm)) ? -EFAULT : 0; | ||
112 | } | ||
113 | #endif /* CONFIG_COMPAT */ | ||
114 | |||
84 | static struct xt_match xt_connmark_match[] = { | 115 | static struct xt_match xt_connmark_match[] = { |
85 | { | 116 | { |
86 | .name = "connmark", | 117 | .name = "connmark", |
@@ -89,6 +120,11 @@ static struct xt_match xt_connmark_match[] = { | |||
89 | .match = match, | 120 | .match = match, |
90 | .destroy = destroy, | 121 | .destroy = destroy, |
91 | .matchsize = sizeof(struct xt_connmark_info), | 122 | .matchsize = sizeof(struct xt_connmark_info), |
123 | #ifdef CONFIG_COMPAT | ||
124 | .compatsize = sizeof(struct compat_xt_connmark_info), | ||
125 | .compat_from_user = compat_from_user, | ||
126 | .compat_to_user = compat_to_user, | ||
127 | #endif | ||
92 | .me = THIS_MODULE | 128 | .me = THIS_MODULE |
93 | }, | 129 | }, |
94 | { | 130 | { |