]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 24 Sep 2020 14:09:21 +0000 (16:09 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 24 Sep 2020 14:09:21 +0000 (16:09 +0200)
added patches:
af_key-pfkey_dump-needs-parameter-validation.patch

queue-5.4/af_key-pfkey_dump-needs-parameter-validation.patch [new file with mode: 0644]

diff --git a/queue-5.4/af_key-pfkey_dump-needs-parameter-validation.patch b/queue-5.4/af_key-pfkey_dump-needs-parameter-validation.patch
new file mode 100644 (file)
index 0000000..f8a14a3
--- /dev/null
@@ -0,0 +1,46 @@
+From 37bd22420f856fcd976989f1d4f1f7ad28e1fcac Mon Sep 17 00:00:00 2001
+From: Mark Salyzyn <salyzyn@android.com>
+Date: Wed, 22 Jul 2020 04:00:53 -0700
+Subject: af_key: pfkey_dump needs parameter validation
+
+From: Mark Salyzyn <salyzyn@android.com>
+
+commit 37bd22420f856fcd976989f1d4f1f7ad28e1fcac upstream.
+
+In pfkey_dump() dplen and splen can both be specified to access the
+xfrm_address_t structure out of bounds in__xfrm_state_filter_match()
+when it calls addr_match() with the indexes.  Return EINVAL if either
+are out of range.
+
+Signed-off-by: Mark Salyzyn <salyzyn@android.com>
+Cc: netdev@vger.kernel.org
+Cc: linux-kernel@vger.kernel.org
+Cc: kernel-team@android.com
+Cc: Steffen Klassert <steffen.klassert@secunet.com>
+Cc: Herbert Xu <herbert@gondor.apana.org.au>
+Cc: "David S. Miller" <davem@davemloft.net>
+Cc: Jakub Kicinski <kuba@kernel.org>
+Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
+Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/key/af_key.c |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/net/key/af_key.c
++++ b/net/key/af_key.c
+@@ -1849,6 +1849,13 @@ static int pfkey_dump(struct sock *sk, s
+       if (ext_hdrs[SADB_X_EXT_FILTER - 1]) {
+               struct sadb_x_filter *xfilter = ext_hdrs[SADB_X_EXT_FILTER - 1];
++              if ((xfilter->sadb_x_filter_splen >=
++                      (sizeof(xfrm_address_t) << 3)) ||
++                  (xfilter->sadb_x_filter_dplen >=
++                      (sizeof(xfrm_address_t) << 3))) {
++                      mutex_unlock(&pfk->dump_lock);
++                      return -EINVAL;
++              }
+               filter = kmalloc(sizeof(*filter), GFP_KERNEL);
+               if (filter == NULL) {
+                       mutex_unlock(&pfk->dump_lock);