mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
[NETFILTER]: ebt_mark: add or/and/xor action support to mark target
The following patch adds or/and/xor functionality for the mark target, while staying backwards compatible. Signed-off-by: Bart De Schuymer <[email protected]> Signed-off-by: Patrick McHardy <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
9d02002d2d
commit
b18dfa90c0
2 changed files with 29 additions and 4 deletions
|
|
@ -22,24 +22,37 @@ static int ebt_target_mark(struct sk_buff **pskb, unsigned int hooknr,
|
|||
const void *data, unsigned int datalen)
|
||||
{
|
||||
struct ebt_mark_t_info *info = (struct ebt_mark_t_info *)data;
|
||||
int action = info->target & -16;
|
||||
|
||||
if ((*pskb)->nfmark != info->mark)
|
||||
if (action == MARK_SET_VALUE)
|
||||
(*pskb)->nfmark = info->mark;
|
||||
else if (action == MARK_OR_VALUE)
|
||||
(*pskb)->nfmark |= info->mark;
|
||||
else if (action == MARK_AND_VALUE)
|
||||
(*pskb)->nfmark &= info->mark;
|
||||
else
|
||||
(*pskb)->nfmark ^= info->mark;
|
||||
|
||||
return info->target;
|
||||
return info->target | -16;
|
||||
}
|
||||
|
||||
static int ebt_target_mark_check(const char *tablename, unsigned int hookmask,
|
||||
const struct ebt_entry *e, void *data, unsigned int datalen)
|
||||
{
|
||||
struct ebt_mark_t_info *info = (struct ebt_mark_t_info *)data;
|
||||
int tmp;
|
||||
|
||||
if (datalen != EBT_ALIGN(sizeof(struct ebt_mark_t_info)))
|
||||
return -EINVAL;
|
||||
if (BASE_CHAIN && info->target == EBT_RETURN)
|
||||
tmp = info->target | -16;
|
||||
if (BASE_CHAIN && tmp == EBT_RETURN)
|
||||
return -EINVAL;
|
||||
CLEAR_BASE_CHAIN_BIT;
|
||||
if (INVALID_TARGET)
|
||||
if (tmp < -NUM_STANDARD_TARGETS || tmp >= 0)
|
||||
return -EINVAL;
|
||||
tmp = info->target & -16;
|
||||
if (tmp != MARK_SET_VALUE && tmp != MARK_OR_VALUE &&
|
||||
tmp != MARK_AND_VALUE && tmp != MARK_XOR_VALUE)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue