Skip to content

Commit bffef0a

Browse files
darkyellowcatgregkh
authored andcommitted
netfilter: reject zero shift in nft_bitwise
commit fe11e5c upstream. Reject zero shift operands for nft_bitwise left and right shift expressions during initialization. The carry propagation logic computes the carry from the adjacent 32-bit word using BITS_PER_TYPE(u32) - shift. A zero shift operand turns this into a 32-bit shift, which is undefined behaviour. Reject zero shift operands in the control plane, alongside the existing check for values greater than or equal to 32, so malformed rules never reach the packet path. Fixes: 567d746 ("netfilter: bitwise: add support for shifts.") Cc: stable@kernel.org Reported-by: Yuan Tan <yuantan098@gmail.com> Reported-by: Yifan Wu <yifanwucs@gmail.com> Reported-by: Juefei Pu <tomapufckgml@gmail.com> Reported-by: Xin Liu <bird@lzu.edu.cn> Signed-off-by: Kai Ma <k4729.23098@gmail.com> Signed-off-by: Ren Wei <n05ec@lzu.edu.cn> Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 6bd1792 commit bffef0a

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

net/netfilter/nft_bitwise.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ static int nft_bitwise_init_shift(struct nft_bitwise *priv,
149149
if (err < 0)
150150
return err;
151151

152-
if (priv->data.data[0] >= BITS_PER_TYPE(u32)) {
152+
if (!priv->data.data[0] ||
153+
priv->data.data[0] >= BITS_PER_TYPE(u32)) {
153154
nft_data_release(&priv->data, desc.type);
154155
return -EINVAL;
155156
}

0 commit comments

Comments
 (0)