• Pablo Neira Ayuso's avatar
    netfilter: nf_tables: set pktinfo->thoff at AH header if found · 568af6de
    Pablo Neira Ayuso authored
    Phil Sutter reports that IPv6 AH header matching is broken. From
    userspace, nft generates bytecode that expects to find the AH header at
    NFT_PAYLOAD_TRANSPORT_HEADER both for IPv4 and IPv6. However,
    pktinfo->thoff is set to the inner header after the AH header in IPv6,
    while in IPv4 pktinfo->thoff points to the AH header indeed. This
    behaviour is inconsistent. This patch fixes this problem by updating
    ipv6_find_hdr() to get the IP6_FH_F_AUTH flag so this function stops at
    the AH header, so both IPv4 and IPv6 pktinfo->thoff point to the AH
    header.
    
    This is also inconsistent when trying to match encapsulated headers:
    
    1) A packet that looks like IPv4 + AH + TCP dport 22 will *not* match.
    2) A packet that looks like IPv6 + AH + TCP dport 22 will match.
    Reported-by: default avatarPhil Sutter <phil@nwl.cc>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    568af6de
nf_tables_ipv6.h 1.73 KB