netfilter: ipt_CLUSTERIP: check MAC address when duplicate config is set
authorTaehee Yoo <ap420073@gmail.com>
Mon, 5 Nov 2018 09:23:25 +0000 (18:23 +0900)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 18 Dec 2018 00:18:38 +0000 (01:18 +0100)
If same destination IP address config is already existing, that config is
just used. MAC address also should be same.
However, there is no MAC address checking routine.
So that MAC address checking routine is added.

test commands:
   %iptables -A INPUT -p tcp -i lo -d 192.168.0.5 --dport 80 \
   -j CLUSTERIP --new --hashmode sourceip \
   --clustermac 01:00:5e:00:00:20 --total-nodes 2 --local-node 1
   %iptables -A INPUT -p tcp -i lo -d 192.168.0.5 --dport 80 \
   -j CLUSTERIP --new --hashmode sourceip \
   --clustermac 01:00:5e:00:00:21 --total-nodes 2 --local-node 1

After this patch, above commands are disallowed.

Signed-off-by: Taehee Yoo <ap420073@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/ipv4/netfilter/ipt_CLUSTERIP.c

index d4d549a46c040270cdc8b7e44eb81c44ada9e641..b61977db9b7ffd781f5ec4b8eac4dc9a59613751 100644 (file)
@@ -509,7 +509,8 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par)
                        if (IS_ERR(config))
                                return PTR_ERR(config);
                }
-       }
+       } else if (memcmp(&config->clustermac, &cipinfo->clustermac, ETH_ALEN))
+               return -EINVAL;
 
        ret = nf_ct_netns_get(par->net, par->family);
        if (ret < 0) {