• Patrick McHardy's avatar
    netfilter: nf_tables: fix nft_cmp_fast failure on big endian for size < 4 · b855d416
    Patrick McHardy authored
    nft_cmp_fast is used for equality comparisions of size <= 4. For
    comparisions of size < 4 byte a mask is calculated that is applied to
    both the data from userspace (during initialization) and the register
    value (during runtime). Both values are stored using (in effect) memcpy
    to a memory area that is then interpreted as u32 by nft_cmp_fast.
    
    This works fine on little endian since smaller types have the same base
    address, however on big endian this is not true and the smaller types
    are interpreted as a big number with trailing zero bytes.
    
    The mask therefore must not include the lower bytes, but the higher bytes
    on big endian. Add a helper function that does a cpu_to_le32 to switch
    the bytes on big endian. Since we're dealing with a mask of just consequitive
    bits, this works out fine.
    Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    b855d416
nf_tables_core.c 6.43 KB