diff options
author | Patrick McHardy <kaber@trash.net> | 2014-04-12 13:17:57 +0200 |
---|---|---|
committer | Show Liu <show.liu@linaro.org> | 2014-06-18 12:03:35 +0800 |
commit | ba333bf7bb5e15038fb95354cf46ded254cf2d30 (patch) | |
tree | 3d0278cac1dff55feb7a27eb8a0db8c2efdd8c1a /block | |
parent | b4ac88da895408d8901e11661869dff317e94593 (diff) |
netfilter: nf_tables: fix nft_cmp_fast failure on big endian for size < 4
commit b855d416dc17061ebb271ea7ef1201d100531770 upstream.
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: Patrick McHardy <kaber@trash.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'block')
0 files changed, 0 insertions, 0 deletions