mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-21 21:02:24 +00:00
netfilter: ctnetlink: honor CTA_MARK_MASK when setting ctmark
Useful to only set a particular range of the conntrack mark while leaving exisiting parts of the value alone, e.g. when setting conntrack marks via NFQUEUE. Follows same scheme as MARK/CONNMARK targets, i.e. the mask defines those bits that should be altered. No mask is equal to '~0', ie. the old value is replaced by new one. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
a42b99a6e3
commit
534473c608
@ -2118,8 +2118,16 @@ ctnetlink_nfqueue_parse_ct(const struct nlattr *cda[], struct nf_conn *ct)
|
||||
return err;
|
||||
}
|
||||
#if defined(CONFIG_NF_CONNTRACK_MARK)
|
||||
if (cda[CTA_MARK])
|
||||
ct->mark = ntohl(nla_get_be32(cda[CTA_MARK]));
|
||||
if (cda[CTA_MARK]) {
|
||||
u32 mask = 0, mark, newmark;
|
||||
if (cda[CTA_MARK_MASK])
|
||||
mask = ~ntohl(nla_get_be32(cda[CTA_MARK_MASK]));
|
||||
|
||||
mark = ntohl(nla_get_be32(cda[CTA_MARK]));
|
||||
newmark = (ct->mark & mask) ^ mark;
|
||||
if (newmark != ct->mark)
|
||||
ct->mark = newmark;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user