diff options
-rw-r--r-- | Documentation/feature-removal-schedule.txt | 3 | ||||
-rw-r--r-- | include/linux/netfilter/xt_mark.h | 5 | ||||
-rw-r--r-- | net/netfilter/xt_mark.c | 86 |
3 files changed, 10 insertions, 84 deletions
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 8862b037f0ac..5556d2300bea 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -238,9 +238,6 @@ What (Why): | |||
238 | - "forwarding" header files like ipt_mac.h in | 238 | - "forwarding" header files like ipt_mac.h in |
239 | include/linux/netfilter_ipv4/ and include/linux/netfilter_ipv6/ | 239 | include/linux/netfilter_ipv4/ and include/linux/netfilter_ipv6/ |
240 | 240 | ||
241 | - xt_mark match revision 0 | ||
242 | (superseded by xt_mark match revision 1) | ||
243 | |||
244 | - xt_recent: the old ipt_recent proc dir | 241 | - xt_recent: the old ipt_recent proc dir |
245 | (superseded by /proc/net/xt_recent) | 242 | (superseded by /proc/net/xt_recent) |
246 | 243 | ||
diff --git a/include/linux/netfilter/xt_mark.h b/include/linux/netfilter/xt_mark.h index 6fa460a3cc29..6607c8f38ea5 100644 --- a/include/linux/netfilter/xt_mark.h +++ b/include/linux/netfilter/xt_mark.h | |||
@@ -3,11 +3,6 @@ | |||
3 | 3 | ||
4 | #include <linux/types.h> | 4 | #include <linux/types.h> |
5 | 5 | ||
6 | struct xt_mark_info { | ||
7 | unsigned long mark, mask; | ||
8 | __u8 invert; | ||
9 | }; | ||
10 | |||
11 | struct xt_mark_mtinfo1 { | 6 | struct xt_mark_mtinfo1 { |
12 | __u32 mark, mask; | 7 | __u32 mark, mask; |
13 | __u8 invert; | 8 | __u8 invert; |
diff --git a/net/netfilter/xt_mark.c b/net/netfilter/xt_mark.c index 10b9e34bbc5b..1db07d8125f8 100644 --- a/net/netfilter/xt_mark.c +++ b/net/netfilter/xt_mark.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * (C) 1999-2001 Marc Boucher <marc@mbsi.ca> | 4 | * (C) 1999-2001 Marc Boucher <marc@mbsi.ca> |
5 | * Copyright © CC Computer Consultants GmbH, 2007 - 2008 | 5 | * Copyright © CC Computer Consultants GmbH, 2007 - 2008 |
6 | * Jan Engelhardt <jengelh@computergmbh.de> | 6 | * Jan Engelhardt <jengelh@medozas.de> |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
@@ -23,14 +23,6 @@ MODULE_ALIAS("ipt_mark"); | |||
23 | MODULE_ALIAS("ip6t_mark"); | 23 | MODULE_ALIAS("ip6t_mark"); |
24 | 24 | ||
25 | static bool | 25 | static bool |
26 | mark_mt_v0(const struct sk_buff *skb, const struct xt_match_param *par) | ||
27 | { | ||
28 | const struct xt_mark_info *info = par->matchinfo; | ||
29 | |||
30 | return ((skb->mark & info->mask) == info->mark) ^ info->invert; | ||
31 | } | ||
32 | |||
33 | static bool | ||
34 | mark_mt(const struct sk_buff *skb, const struct xt_match_param *par) | 26 | mark_mt(const struct sk_buff *skb, const struct xt_match_param *par) |
35 | { | 27 | { |
36 | const struct xt_mark_mtinfo1 *info = par->matchinfo; | 28 | const struct xt_mark_mtinfo1 *info = par->matchinfo; |
@@ -38,81 +30,23 @@ mark_mt(const struct sk_buff *skb, const struct xt_match_param *par) | |||
38 | return ((skb->mark & info->mask) == info->mark) ^ info->invert; | 30 | return ((skb->mark & info->mask) == info->mark) ^ info->invert; |
39 | } | 31 | } |
40 | 32 | ||
41 | static bool mark_mt_check_v0(const struct xt_mtchk_param *par) | 33 | static struct xt_match mark_mt_reg __read_mostly = { |
42 | { | 34 | .name = "mark", |
43 | const struct xt_mark_info *minfo = par->matchinfo; | 35 | .revision = 1, |
44 | 36 | .family = NFPROTO_UNSPEC, | |
45 | if (minfo->mark > 0xffffffff || minfo->mask > 0xffffffff) { | 37 | .match = mark_mt, |
46 | printk(KERN_WARNING "mark: only supports 32bit mark\n"); | 38 | .matchsize = sizeof(struct xt_mark_mtinfo1), |
47 | return false; | 39 | .me = THIS_MODULE, |
48 | } | ||
49 | return true; | ||
50 | } | ||
51 | |||
52 | #ifdef CONFIG_COMPAT | ||
53 | struct compat_xt_mark_info { | ||
54 | compat_ulong_t mark, mask; | ||
55 | u_int8_t invert; | ||
56 | u_int8_t __pad1; | ||
57 | u_int16_t __pad2; | ||
58 | }; | ||
59 | |||
60 | static void mark_mt_compat_from_user_v0(void *dst, void *src) | ||
61 | { | ||
62 | const struct compat_xt_mark_info *cm = src; | ||
63 | struct xt_mark_info m = { | ||
64 | .mark = cm->mark, | ||
65 | .mask = cm->mask, | ||
66 | .invert = cm->invert, | ||
67 | }; | ||
68 | memcpy(dst, &m, sizeof(m)); | ||
69 | } | ||
70 | |||
71 | static int mark_mt_compat_to_user_v0(void __user *dst, void *src) | ||
72 | { | ||
73 | const struct xt_mark_info *m = src; | ||
74 | struct compat_xt_mark_info cm = { | ||
75 | .mark = m->mark, | ||
76 | .mask = m->mask, | ||
77 | .invert = m->invert, | ||
78 | }; | ||
79 | return copy_to_user(dst, &cm, sizeof(cm)) ? -EFAULT : 0; | ||
80 | } | ||
81 | #endif /* CONFIG_COMPAT */ | ||
82 | |||
83 | static struct xt_match mark_mt_reg[] __read_mostly = { | ||
84 | { | ||
85 | .name = "mark", | ||
86 | .revision = 0, | ||
87 | .family = NFPROTO_UNSPEC, | ||
88 | .checkentry = mark_mt_check_v0, | ||
89 | .match = mark_mt_v0, | ||
90 | .matchsize = sizeof(struct xt_mark_info), | ||
91 | #ifdef CONFIG_COMPAT | ||
92 | .compatsize = sizeof(struct compat_xt_mark_info), | ||
93 | .compat_from_user = mark_mt_compat_from_user_v0, | ||
94 | .compat_to_user = mark_mt_compat_to_user_v0, | ||
95 | #endif | ||
96 | .me = THIS_MODULE, | ||
97 | }, | ||
98 | { | ||
99 | .name = "mark", | ||
100 | .revision = 1, | ||
101 | .family = NFPROTO_UNSPEC, | ||
102 | .match = mark_mt, | ||
103 | .matchsize = sizeof(struct xt_mark_mtinfo1), | ||
104 | .me = THIS_MODULE, | ||
105 | }, | ||
106 | }; | 40 | }; |
107 | 41 | ||
108 | static int __init mark_mt_init(void) | 42 | static int __init mark_mt_init(void) |
109 | { | 43 | { |
110 | return xt_register_matches(mark_mt_reg, ARRAY_SIZE(mark_mt_reg)); | 44 | return xt_register_match(&mark_mt_reg); |
111 | } | 45 | } |
112 | 46 | ||
113 | static void __exit mark_mt_exit(void) | 47 | static void __exit mark_mt_exit(void) |
114 | { | 48 | { |
115 | xt_unregister_matches(mark_mt_reg, ARRAY_SIZE(mark_mt_reg)); | 49 | xt_unregister_match(&mark_mt_reg); |
116 | } | 50 | } |
117 | 51 | ||
118 | module_init(mark_mt_init); | 52 | module_init(mark_mt_init); |