You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
netfilter: xt_CT: add alias flag
This patch adds the alias flag to support full NOTRACK target aliasing. Based on initial patch from Jozsef Kadlecsik. Acked-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hi> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
@@ -3,7 +3,11 @@
|
|||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
#define XT_CT_NOTRACK 0x1
|
enum {
|
||||||
|
XT_CT_NOTRACK = 1 << 0,
|
||||||
|
XT_CT_NOTRACK_ALIAS = 1 << 1,
|
||||||
|
XT_CT_MASK = XT_CT_NOTRACK | XT_CT_NOTRACK_ALIAS,
|
||||||
|
};
|
||||||
|
|
||||||
struct xt_ct_target_info {
|
struct xt_ct_target_info {
|
||||||
__u16 flags;
|
__u16 flags;
|
||||||
|
|||||||
+29
-3
@@ -185,9 +185,6 @@ static int xt_ct_tg_check(const struct xt_tgchk_param *par,
|
|||||||
struct nf_conn *ct;
|
struct nf_conn *ct;
|
||||||
int ret = -EOPNOTSUPP;
|
int ret = -EOPNOTSUPP;
|
||||||
|
|
||||||
if (info->flags & ~XT_CT_NOTRACK)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (info->flags & XT_CT_NOTRACK) {
|
if (info->flags & XT_CT_NOTRACK) {
|
||||||
ct = nf_ct_untracked_get();
|
ct = nf_ct_untracked_get();
|
||||||
atomic_inc(&ct->ct_general.use);
|
atomic_inc(&ct->ct_general.use);
|
||||||
@@ -256,6 +253,9 @@ static int xt_ct_tg_check_v0(const struct xt_tgchk_param *par)
|
|||||||
};
|
};
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (info->flags & ~XT_CT_NOTRACK)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
memcpy(info_v1.helper, info->helper, sizeof(info->helper));
|
memcpy(info_v1.helper, info->helper, sizeof(info->helper));
|
||||||
|
|
||||||
ret = xt_ct_tg_check(par, &info_v1);
|
ret = xt_ct_tg_check(par, &info_v1);
|
||||||
@@ -269,6 +269,21 @@ static int xt_ct_tg_check_v0(const struct xt_tgchk_param *par)
|
|||||||
|
|
||||||
static int xt_ct_tg_check_v1(const struct xt_tgchk_param *par)
|
static int xt_ct_tg_check_v1(const struct xt_tgchk_param *par)
|
||||||
{
|
{
|
||||||
|
struct xt_ct_target_info_v1 *info = par->targinfo;
|
||||||
|
|
||||||
|
if (info->flags & ~XT_CT_NOTRACK)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
return xt_ct_tg_check(par, par->targinfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int xt_ct_tg_check_v2(const struct xt_tgchk_param *par)
|
||||||
|
{
|
||||||
|
struct xt_ct_target_info_v1 *info = par->targinfo;
|
||||||
|
|
||||||
|
if (info->flags & ~XT_CT_MASK)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
return xt_ct_tg_check(par, par->targinfo);
|
return xt_ct_tg_check(par, par->targinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -350,6 +365,17 @@ static struct xt_target xt_ct_tg_reg[] __read_mostly = {
|
|||||||
.table = "raw",
|
.table = "raw",
|
||||||
.me = THIS_MODULE,
|
.me = THIS_MODULE,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "CT",
|
||||||
|
.family = NFPROTO_UNSPEC,
|
||||||
|
.revision = 2,
|
||||||
|
.targetsize = sizeof(struct xt_ct_target_info_v1),
|
||||||
|
.checkentry = xt_ct_tg_check_v2,
|
||||||
|
.destroy = xt_ct_tg_destroy_v1,
|
||||||
|
.target = xt_ct_target_v1,
|
||||||
|
.table = "raw",
|
||||||
|
.me = THIS_MODULE,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned int
|
static unsigned int
|
||||||
|
|||||||
Reference in New Issue
Block a user