• Stefano Brivio's avatar
    netfilter: ipset: Copy the right MAC address in hash:ip,mac IPv6 sets · 97664bc2
    Stefano Brivio authored
    Same as commit 1b4a7510 ("netfilter: ipset: Copy the right MAC
    address in bitmap:ip,mac and hash:ip,mac sets"), another copy and paste
    went wrong in commit 8cc4ccf5 ("netfilter: ipset: Allow matching on
    destination MAC address for mac and ipmac sets").
    
    When I fixed this for IPv4 in 1b4a7510, I didn't realise that
    hash:ip,mac sets also support IPv6 as family, and this is covered by a
    separate function, hash_ipmac6_kadt().
    
    In hash:ip,mac sets, the first dimension is the IP address, and the
    second dimension is the MAC address: check the IPSET_DIM_TWO_SRC flag
    in flags while deciding which MAC address to copy, destination or
    source.
    
    This way, mixing source and destination matches for the two dimensions
    of ip,mac hash type works as expected, also for IPv6. With this setup:
    
      ip netns add A
      ip link add veth1 type veth peer name veth2 netns A
      ip addr add 2001:db8::1/64 dev veth1
      ip -net A addr add 2001:db8::2/64 dev veth2
      ip link set veth1 up
      ip -net A link set veth2 up
    
      dst=$(ip netns exec A cat /sys/class/net/veth2/address)
    
      ip netns exec A ipset create test_hash hash:ip,mac family inet6
      ip netns exec A ipset add test_hash 2001:db8::1,${dst}
      ip netns exec A ip6tables -A INPUT -p icmpv6 --icmpv6-type 135 -j ACCEPT
      ip netns exec A ip6tables -A INPUT -m set ! --match-set test_hash src,dst -j DROP
    
    ipset now correctly matches a test packet:
    
      # ping -c1 2001:db8::2 >/dev/null
      # echo $?
      0
    Reported-by: default avatarChen, Yi <yiche@redhat.com>
    Fixes: 8cc4ccf5 ("netfilter: ipset: Allow matching on destination MAC address for mac and ipmac sets")
    Signed-off-by: default avatarStefano Brivio <sbrivio@redhat.com>
    Signed-off-by: default avatarJozsef Kadlecsik <kadlec@netfilter.org>
    97664bc2
ip_set_hash_ipmac.c 8.19 KB