]> git.ipfire.org Git - thirdparty/xtables-addons.git/commitdiff
xt_lscan: extend info struct to support more flags (without size change)
authorJan Engelhardt <jengelh@inai.de>
Wed, 20 Jan 2021 01:50:01 +0000 (02:50 +0100)
committerJan Engelhardt <jengelh@inai.de>
Wed, 20 Jan 2021 01:50:01 +0000 (02:50 +0100)
extensions/libxt_lscan.c
extensions/xt_lscan.c
extensions/xt_lscan.h

index 4d269f925e5dec5a0b7572417b32ea78798e4e7c..c3a4aec7fa30979e325c52eb7d3db93317760bfe 100644 (file)
@@ -45,16 +45,16 @@ static int lscan_mt_parse(int c, char **argv, int invert,
 
        switch (c) {
        case 'c':
-               info->match_cn = true;
+               info->match_fl3 |= LSCAN_FL3_CN;
                return true;
        case 'g':
-               info->match_gr = true;
+               info->match_fl4 |= LSCAN_FL4_GR;
                return true;
        case 's':
-               info->match_syn = true;
+               info->match_fl2 |= LSCAN_FL2_SYN;
                return true;
        case 'x':
-               info->match_stealth = true;
+               info->match_fl1 |= LSCAN_FL1_STEALTH;
                return true;
        }
        return false;
@@ -68,13 +68,13 @@ static void lscan_mt_save(const void *ip, const struct xt_entry_match *match)
 {
        const struct xt_lscan_mtinfo *info = (const void *)(match->data);
 
-       if (info->match_stealth)
+       if (info->match_fl1 & LSCAN_FL1_STEALTH)
                printf(" --stealth ");
-       if (info->match_syn)
+       if (info->match_fl2 & LSCAN_FL2_SYN)
                printf(" --synscan ");
-       if (info->match_cn)
+       if (info->match_fl3 & LSCAN_FL3_CN)
                printf(" --cnscan ");
-       if (info->match_gr)
+       if (info->match_fl4 & LSCAN_FL4_GR)
                printf(" --grscan ");
 }
 
index 6fd6533d7e372719d24e089633f1e5689551d1db..de1ca4621949ca6ad291fd0c4489cb6fea5e0a53 100644 (file)
@@ -186,7 +186,7 @@ lscan_mt(const struct sk_buff *skb, struct xt_action_param *par)
        /* Check for invalid packets: -m conntrack --ctstate INVALID */
        ctdata = nf_ct_get(skb, &ctstate);
        if (ctdata == NULL) {
-               if (info->match_stealth)
+               if (info->match_fl1 & LSCAN_FL1_STEALTH)
                        return lscan_mt_stealth(tcph);
                /*
                 * If @ctdata is NULL, we cannot match the other scan
@@ -212,17 +212,19 @@ lscan_mt(const struct sk_buff *skb, struct xt_action_param *par)
                skb_nfmark(skb) = (skb_nfmark(skb) & ~packet_mask) ^ mark_seen;
        }
 
-       return (info->match_syn && ctdata->mark == mark_synscan) ||
-              (info->match_cn && ctdata->mark == mark_cnscan) ||
-              (info->match_gr && ctdata->mark == mark_grscan);
+       return (info->match_fl1 & LSCAN_FL1_STEALTH && ctdata->mark == mark_synscan) ||
+              (info->match_fl3 & LSCAN_FL3_CN && ctdata->mark == mark_cnscan) ||
+              (info->match_fl4 & LSCAN_FL4_GR && ctdata->mark == mark_grscan);
 }
 
 static int lscan_mt_check(const struct xt_mtchk_param *par)
 {
        const struct xt_lscan_mtinfo *info = par->matchinfo;
 
-       if ((info->match_stealth & ~1) || (info->match_syn & ~1) ||
-           (info->match_cn & ~1) || (info->match_gr & ~1)) {
+       if ((info->match_fl1 & ~LSCAN_FL1_STEALTH) ||
+           (info->match_fl2 & ~LSCAN_FL2_SYN) ||
+           (info->match_fl3 & ~LSCAN_FL3_CN) ||
+           (info->match_fl4 & ~LSCAN_FL4_GR)) {
                printk(KERN_WARNING PFX "Invalid flags\n");
                return -EINVAL;
        }
index 2cc8b02ca69833dd268c9d8fab5fe6075e7303e2..9f4822fe95e4458f0789b49c62ab737b705aa163 100644 (file)
@@ -1,8 +1,15 @@
 #ifndef _LINUX_NETFILTER_XT_LSCAN_H
 #define _LINUX_NETFILTER_XT_LSCAN_H 1
 
+enum {
+       LSCAN_FL1_STEALTH = 1 << 0,
+       LSCAN_FL2_SYN     = 1 << 0,
+       LSCAN_FL3_CN      = 1 << 0,
+       LSCAN_FL4_GR      = 1 << 0,
+};
+
 struct xt_lscan_mtinfo {
-       uint8_t match_stealth, match_syn, match_cn, match_gr;
+       uint8_t match_fl1, match_fl2, match_fl3, match_fl4;
 };
 
 #endif /* _LINUX_NETFILTER_XT_LSCAN_H */