Skip to contentSkip to conversation

Patch "netfilter: bridge: ebt_among: add missing match size checks" has been added to the 4.14-stable tree

PATCH [email protected] 2 participants 3 messages Mar 13, 2018

Subsystems (4)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

netfilter: bridge: ebt_among: add missing match size checks

to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
netfilter-bridge-ebt_among-add-missing-match-size-checks.patch
and it can be found in the queue-4.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From c4585a2823edf4d1326da44d1524ecbfda26bb37 Mon Sep 17 00:00:00 2001

From: Florian Westphal <[email protected]>
Date: Mon, 19 Feb 2018 03:01:45 +0100
Subject: netfilter: bridge: ebt_among: add missing match size checks

From: Florian Westphal <[email protected]>

commit c4585a2823edf4d1326da44d1524ecbfda26bb37 upstream.

ebt_among is special, it has a dynamic match size and is exempt from the central size checks.

Therefore it must check that the size of the match structure provided from userspace is sane by making sure em->match_size is at least the minimum size of the expected structure.

The module has such a check, but its only done after accessing a structure that might be out of bounds.

tested with: ebtables -A INPUT ... \
--among-dst fe:fe:fe:fe:fe:fe
--among-dst fe:fe:fe:fe:fe:fe --among-src fe:fe:fe:fe:ff:f,fe:fe:fe:fe:fe:fb,fe:fe:fe:fe:fc:fd,fe:fe:fe:fe:fe:fd,fe:fe:fe:fe:fe:fe --among-src fe:fe:fe:fe:ff:f,fe:fe:fe:fe:fe:fa,fe:fe:fe:fe:fe:fd,fe:fe:fe:fe:fe:fe,fe:fe:fe:fe:fe:fe

---
 net/bridge/netfilter/ebt_among.c |   21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)
net/bridge/netfilter/ebt_among.c +19 -2
@@ -172,18 +172,35 @@ ebt_among_mt(const struct sk_buff *skb,
 	return true;
 }
 
+static bool poolsize_invalid(const struct ebt_mac_wormhash *w)
+{
+	return w && w->poolsize >= (INT_MAX / sizeof(struct ebt_mac_wormhash_tuple));
+}
+
 static int ebt_among_mt_check(const struct xt_mtchk_param *par)
 {
 	const struct ebt_among_info *info = par->matchinfo;
 	const struct ebt_entry_match *em =
 		container_of(par->matchinfo, const struct ebt_entry_match, data);
-	int expected_length = sizeof(struct ebt_among_info);
+	unsigned int expected_length = sizeof(struct ebt_among_info);
 	const struct ebt_mac_wormhash *wh_dst, *wh_src;
 	int err;
 
+	if (expected_length > em->match_size)
+		return -EINVAL;
+
 	wh_dst = ebt_among_wh_dst(info);
-	wh_src = ebt_among_wh_src(info);
+	if (poolsize_invalid(wh_dst))
+		return -EINVAL;
+
 	expected_length += ebt_mac_wormhash_size(wh_dst);
+	if (expected_length > em->match_size)
+		return -EINVAL;
+
+	wh_src = ebt_among_wh_src(info);
+	if (poolsize_invalid(wh_src))
+		return -EINVAL;
+
 	expected_length += ebt_mac_wormhash_size(wh_src);
 
 	if (em->match_size != EBT_ALIGN(expected_length)) {

Patches currently in stable-queue which might be from [email protected] are

queue-4.14/netfilter-add-back-stackpointer-size-checks.patch queue-4.14/netfilter-ipv6-fix-use-after-free-write-in-nf_nat_ipv6_manip_pkt.patch queue-4.14/netfilter-ebtables-config_compat-don-t-trust-userland-offsets.patch queue-4.14/netfilter-bridge-ebt_among-add-missing-match-size-checks.patch

maintainer
#1 lore raw
Quoted 4 lines · [email protected] <[email protected]> wrote:

This is a note to let you know that I've just added the patch titled

netfilter: bridge: ebt_among: add missing match size checks

There is also

commit c8d70a700a5b486bfa8e5a7d33d805389f6e59f9
("netfilter: bridge: ebt_among: add more missing match size checks"), as the checks added in this 1st patch were not suficient.

author maintainer
#2 lore raw
Quoted 11 lines · Florian Westphal
Quoted 4 lines · [email protected] <[email protected]> wrote:

This is a note to let you know that I've just added the patch titled

netfilter: bridge: ebt_among: add missing match size checks

There is also

commit c8d70a700a5b486bfa8e5a7d33d805389f6e59f9
("netfilter: bridge: ebt_among: add more missing match size checks"), as the checks added in this 1st patch were not suficient.

Thanks, I'll queue that up when it hits Linus's tree.

greg k-h