]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.1-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 Apr 2024 09:22:54 +0000 (11:22 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 Apr 2024 09:22:54 +0000 (11:22 +0200)
added patches:
bluetooth-btintel-fixe-build-regression.patch
net-mpls-error-out-if-inner-headers-are-not-set.patch
vmci-fix-possible-memcpy-run-time-warning-in-vmci_datagram_invoke_guest_handler.patch

queue-6.1/bluetooth-btintel-fixe-build-regression.patch [new file with mode: 0644]
queue-6.1/net-mpls-error-out-if-inner-headers-are-not-set.patch [new file with mode: 0644]
queue-6.1/series
queue-6.1/vmci-fix-possible-memcpy-run-time-warning-in-vmci_datagram_invoke_guest_handler.patch [new file with mode: 0644]

diff --git a/queue-6.1/bluetooth-btintel-fixe-build-regression.patch b/queue-6.1/bluetooth-btintel-fixe-build-regression.patch
new file mode 100644 (file)
index 0000000..481ebc1
--- /dev/null
@@ -0,0 +1,39 @@
+From 6e62ebfb49eb65bdcbfc5797db55e0ce7f79c3dd Mon Sep 17 00:00:00 2001
+From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
+Date: Fri, 23 Feb 2024 12:36:23 -0500
+Subject: Bluetooth: btintel: Fixe build regression
+
+From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
+
+commit 6e62ebfb49eb65bdcbfc5797db55e0ce7f79c3dd upstream.
+
+This fixes the following build regression:
+
+drivers-bluetooth-btintel.c-btintel_read_version()-warn:
+passing-zero-to-PTR_ERR
+
+Fixes: b79e04091010 ("Bluetooth: btintel: Fix null ptr deref in btintel_read_version")
+Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/bluetooth/btintel.c |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/bluetooth/btintel.c
++++ b/drivers/bluetooth/btintel.c
+@@ -405,13 +405,13 @@ int btintel_read_version(struct hci_dev
+       struct sk_buff *skb;
+       skb = __hci_cmd_sync(hdev, 0xfc05, 0, NULL, HCI_CMD_TIMEOUT);
+-      if (IS_ERR_OR_NULL(skb)) {
++      if (IS_ERR(skb)) {
+               bt_dev_err(hdev, "Reading Intel version information failed (%ld)",
+                          PTR_ERR(skb));
+               return PTR_ERR(skb);
+       }
+-      if (skb->len != sizeof(*ver)) {
++      if (!skb || skb->len != sizeof(*ver)) {
+               bt_dev_err(hdev, "Intel version event size mismatch");
+               kfree_skb(skb);
+               return -EILSEQ;
diff --git a/queue-6.1/net-mpls-error-out-if-inner-headers-are-not-set.patch b/queue-6.1/net-mpls-error-out-if-inner-headers-are-not-set.patch
new file mode 100644 (file)
index 0000000..d891fec
--- /dev/null
@@ -0,0 +1,111 @@
+From 025f8ad20f2e3264d11683aa9cbbf0083eefbdcd Mon Sep 17 00:00:00 2001
+From: Florian Westphal <fw@strlen.de>
+Date: Thu, 22 Feb 2024 15:03:10 +0100
+Subject: net: mpls: error out if inner headers are not set
+
+From: Florian Westphal <fw@strlen.de>
+
+commit 025f8ad20f2e3264d11683aa9cbbf0083eefbdcd upstream.
+
+mpls_gso_segment() assumes skb_inner_network_header() returns
+a valid result:
+
+  mpls_hlen = skb_inner_network_header(skb) - skb_network_header(skb);
+  if (unlikely(!mpls_hlen || mpls_hlen % MPLS_HLEN))
+        goto out;
+  if (unlikely(!pskb_may_pull(skb, mpls_hlen)))
+
+With syzbot reproducer, skb_inner_network_header() yields 0,
+skb_network_header() returns 108, so this will
+"pskb_may_pull(skb, -108)))" which triggers a newly added
+DEBUG_NET_WARN_ON_ONCE() check:
+
+------------[ cut here ]------------
+WARNING: CPU: 0 PID: 5068 at include/linux/skbuff.h:2723 pskb_may_pull_reason include/linux/skbuff.h:2723 [inline]
+WARNING: CPU: 0 PID: 5068 at include/linux/skbuff.h:2723 pskb_may_pull include/linux/skbuff.h:2739 [inline]
+WARNING: CPU: 0 PID: 5068 at include/linux/skbuff.h:2723 mpls_gso_segment+0x773/0xaa0 net/mpls/mpls_gso.c:34
+[..]
+ skb_mac_gso_segment+0x383/0x740 net/core/gso.c:53
+ nsh_gso_segment+0x40a/0xad0 net/nsh/nsh.c:108
+ skb_mac_gso_segment+0x383/0x740 net/core/gso.c:53
+ __skb_gso_segment+0x324/0x4c0 net/core/gso.c:124
+ skb_gso_segment include/net/gso.h:83 [inline]
+ [..]
+ sch_direct_xmit+0x11a/0x5f0 net/sched/sch_generic.c:327
+ [..]
+ packet_sendmsg+0x46a9/0x6130 net/packet/af_packet.c:3113
+ [..]
+
+First iteration of this patch made mpls_hlen signed and changed
+test to error out to "mpls_hlen <= 0 || ..".
+
+Eric Dumazet said:
+ > I was thinking about adding a debug check in skb_inner_network_header()
+ > if inner_network_header is zero (that would mean it is not 'set' yet),
+ > but this would trigger even after your patch.
+
+So add new skb_inner_network_header_was_set() helper and use that.
+
+The syzbot reproducer injects data via packet socket. The skb that gets
+allocated and passed down the stack has ->protocol set to NSH (0x894f)
+and gso_type set to SKB_GSO_UDP | SKB_GSO_DODGY.
+
+This gets passed to skb_mac_gso_segment(), which sees NSH as ptype to
+find a callback for.  nsh_gso_segment() retrieves next type:
+
+        proto = tun_p_to_eth_p(nsh_hdr(skb)->np);
+
+... which is MPLS (TUN_P_MPLS_UC). It updates skb->protocol and then
+calls mpls_gso_segment().  Inner offsets are all 0, so mpls_gso_segment()
+ends up with a negative header size.
+
+In case more callers rely on silent handling of such large may_pull values
+we could also 'legalize' this behaviour, either replacing the debug check
+with (len > INT_MAX) test or removing it and instead adding a comment
+before existing
+
+ if (unlikely(len > skb->len))
+    return SKB_DROP_REASON_PKT_TOO_SMALL;
+
+test in pskb_may_pull_reason(), saying that this check also implicitly
+takes care of callers that miscompute header sizes.
+
+Cc: Simon Horman <horms@kernel.org>
+Fixes: 219eee9c0d16 ("net: skbuff: add overflow debug check to pull/push helpers")
+Reported-by: syzbot+99d15fcdb0132a1e1a82@syzkaller.appspotmail.com
+Closes: https://lore.kernel.org/netdev/00000000000043b1310611e388aa@google.com/raw
+Signed-off-by: Florian Westphal <fw@strlen.de>
+Link: https://lore.kernel.org/r/20240222140321.14080-1-fw@strlen.de
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ include/linux/skbuff.h |    5 +++++
+ net/mpls/mpls_gso.c    |    3 +++
+ 2 files changed, 8 insertions(+)
+
+--- a/include/linux/skbuff.h
++++ b/include/linux/skbuff.h
+@@ -2802,6 +2802,11 @@ static inline void skb_set_inner_network
+       skb->inner_network_header += offset;
+ }
++static inline bool skb_inner_network_header_was_set(const struct sk_buff *skb)
++{
++      return skb->inner_network_header > 0;
++}
++
+ static inline unsigned char *skb_inner_mac_header(const struct sk_buff *skb)
+ {
+       return skb->head + skb->inner_mac_header;
+--- a/net/mpls/mpls_gso.c
++++ b/net/mpls/mpls_gso.c
+@@ -26,6 +26,9 @@ static struct sk_buff *mpls_gso_segment(
+       __be16 mpls_protocol;
+       unsigned int mpls_hlen;
++      if (!skb_inner_network_header_was_set(skb))
++              goto out;
++
+       skb_reset_network_header(skb);
+       mpls_hlen = skb_inner_network_header(skb) - skb_network_header(skb);
+       if (unlikely(!mpls_hlen || mpls_hlen % MPLS_HLEN))
index b42a0eacddddd9b1b58d3672d0c51b920fbcff87..b6523813ced141ffc7f219d8ad4903733ce6caee 100644 (file)
@@ -77,3 +77,6 @@ scsi-sd-usb_storage-uas-access-media-prior-to-querying-device-properties.patch
 virtio-reenable-config-if-freezing-device-failed.patch
 randomize_kstack-improve-entropy-diffusion.patch
 platform-x86-intel-vbtn-update-tablet-mode-switch-at.patch
+bluetooth-btintel-fixe-build-regression.patch
+net-mpls-error-out-if-inner-headers-are-not-set.patch
+vmci-fix-possible-memcpy-run-time-warning-in-vmci_datagram_invoke_guest_handler.patch
diff --git a/queue-6.1/vmci-fix-possible-memcpy-run-time-warning-in-vmci_datagram_invoke_guest_handler.patch b/queue-6.1/vmci-fix-possible-memcpy-run-time-warning-in-vmci_datagram_invoke_guest_handler.patch
new file mode 100644 (file)
index 0000000..a48f3d9
--- /dev/null
@@ -0,0 +1,36 @@
+From e606e4b71798cc1df20e987dde2468e9527bd376 Mon Sep 17 00:00:00 2001
+From: Vasiliy Kovalev <kovalev@altlinux.org>
+Date: Mon, 19 Feb 2024 13:53:15 +0300
+Subject: VMCI: Fix possible memcpy() run-time warning in vmci_datagram_invoke_guest_handler()
+
+From: Vasiliy Kovalev <kovalev@altlinux.org>
+
+commit e606e4b71798cc1df20e987dde2468e9527bd376 upstream.
+
+The changes are similar to those given in the commit 19b070fefd0d
+("VMCI: Fix memcpy() run-time warning in dg_dispatch_as_host()").
+
+Fix filling of the msg and msg_payload in dg_info struct, which prevents a
+possible "detected field-spanning write" of memcpy warning that is issued
+by the tracking mechanism __fortify_memcpy_chk.
+
+Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org>
+Link: https://lore.kernel.org/r/20240219105315.76955-1-kovalev@altlinux.org
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/misc/vmw_vmci/vmci_datagram.c |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/misc/vmw_vmci/vmci_datagram.c
++++ b/drivers/misc/vmw_vmci/vmci_datagram.c
+@@ -378,7 +378,8 @@ int vmci_datagram_invoke_guest_handler(s
+               dg_info->in_dg_host_queue = false;
+               dg_info->entry = dst_entry;
+-              memcpy(&dg_info->msg, dg, VMCI_DG_SIZE(dg));
++              dg_info->msg = *dg;
++              memcpy(&dg_info->msg_payload, dg + 1, dg->payload_size);
+               INIT_WORK(&dg_info->work, dg_delayed_dispatch);
+               schedule_work(&dg_info->work);