diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/xt_SECMARK.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/net/netfilter/xt_SECMARK.c b/net/netfilter/xt_SECMARK.c index b11b3ecbb39d..7708e2084ce2 100644 --- a/net/netfilter/xt_SECMARK.c +++ b/net/netfilter/xt_SECMARK.c | |||
@@ -72,12 +72,13 @@ static bool checkentry_selinux(struct xt_secmark_target_info *info) | |||
72 | return false; | 72 | return false; |
73 | } | 73 | } |
74 | 74 | ||
75 | err = selinux_relabel_packet_permission(sel->selsid); | 75 | err = selinux_secmark_relabel_packet_permission(sel->selsid); |
76 | if (err) { | 76 | if (err) { |
77 | printk(KERN_INFO PFX "unable to obtain relabeling permission\n"); | 77 | printk(KERN_INFO PFX "unable to obtain relabeling permission\n"); |
78 | return false; | 78 | return false; |
79 | } | 79 | } |
80 | 80 | ||
81 | selinux_secmark_refcount_inc(); | ||
81 | return true; | 82 | return true; |
82 | } | 83 | } |
83 | 84 | ||
@@ -110,11 +111,20 @@ secmark_tg_check(const char *tablename, const void *entry, | |||
110 | return true; | 111 | return true; |
111 | } | 112 | } |
112 | 113 | ||
114 | void secmark_tg_destroy(const struct xt_target *target, void *targinfo) | ||
115 | { | ||
116 | switch (mode) { | ||
117 | case SECMARK_MODE_SEL: | ||
118 | selinux_secmark_refcount_dec(); | ||
119 | } | ||
120 | } | ||
121 | |||
113 | static struct xt_target secmark_tg_reg[] __read_mostly = { | 122 | static struct xt_target secmark_tg_reg[] __read_mostly = { |
114 | { | 123 | { |
115 | .name = "SECMARK", | 124 | .name = "SECMARK", |
116 | .family = AF_INET, | 125 | .family = AF_INET, |
117 | .checkentry = secmark_tg_check, | 126 | .checkentry = secmark_tg_check, |
127 | .destroy = secmark_tg_destroy, | ||
118 | .target = secmark_tg, | 128 | .target = secmark_tg, |
119 | .targetsize = sizeof(struct xt_secmark_target_info), | 129 | .targetsize = sizeof(struct xt_secmark_target_info), |
120 | .table = "mangle", | 130 | .table = "mangle", |
@@ -124,6 +134,7 @@ static struct xt_target secmark_tg_reg[] __read_mostly = { | |||
124 | .name = "SECMARK", | 134 | .name = "SECMARK", |
125 | .family = AF_INET6, | 135 | .family = AF_INET6, |
126 | .checkentry = secmark_tg_check, | 136 | .checkentry = secmark_tg_check, |
137 | .destroy = secmark_tg_destroy, | ||
127 | .target = secmark_tg, | 138 | .target = secmark_tg, |
128 | .targetsize = sizeof(struct xt_secmark_target_info), | 139 | .targetsize = sizeof(struct xt_secmark_target_info), |
129 | .table = "mangle", | 140 | .table = "mangle", |