diff --git a/blacklist.conf b/blacklist.conf index d59c08e..10d5cb4 100644 --- a/blacklist.conf +++ b/blacklist.conf @@ -818,3 +818,4 @@ f81fead027ecbb525c29d681eb95a222e76306a3 # correction in a comment only 7fce8d6eccbc31a561d07c79f359ad09f0424347 # already have it as part of a different commit 9dba4d24cbb5524dd39ab1e08886373b17f07ff2 # breaks KABI d43b020b0f82c088ef8ff3196ef00575a97d200e # bug introduced by 4831967640916 not present +838d6d3461db0fdbf33fc5f8a69c27b50b4a46da # breaks KABI diff --git a/patches.suse/net-accept-UFOv6-packages-in-virtio_net_hdr_to_skb.patch b/patches.suse/net-accept-UFOv6-packages-in-virtio_net_hdr_to_skb.patch new file mode 100644 index 0000000..820bdff --- /dev/null +++ b/patches.suse/net-accept-UFOv6-packages-in-virtio_net_hdr_to_skb.patch @@ -0,0 +1,73 @@ +Patch-mainline: v5.16-rc7 +Git-commit: 7e5cced9ca84df52d874aca6b632f930b3dc5bc6 +References: git-fixes +From: Willem de Bruijn +Date: Mon, 20 Dec 2021 09:49:01 -0500 +Subject: [PATCH] net: accept UFOv6 packages in virtio_net_hdr_to_skb + +Skb with skb->protocol 0 at the time of virtio_net_hdr_to_skb may have +a protocol inferred from virtio_net_hdr with virtio_net_hdr_set_proto. + +Unlike TCP, UDP does not have separate types for IPv4 and IPv6. Type +VIRTIO_NET_HDR_GSO_UDP is guessed to be IPv4/UDP. As of the below +commit, UFOv6 packets are dropped due to not matching the protocol as +obtained from dev_parse_header_protocol. + +Invert the test to take that L2 protocol field as starting point and +pass both UFOv4 and UFOv6 for VIRTIO_NET_HDR_GSO_UDP. + +Fixes: 924a9bc362a5 ("net: check if protocol extracted by virtio_net_hdr_set_proto is correct") +Link: https://lore.kernel.org/netdev/CABcq3pG9GRCYqFDBAJ48H1vpnnX=41u+MhQnayF1ztLH4WX0Fw@mail.gmail.com/ +Reported-by: Andrew Melnichenko +Signed-off-by: Willem de Bruijn +Link: https://lore.kernel.org/r/20211220144901.2784030-1-willemdebruijn.kernel@gmail.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Juergen Gross +--- + include/linux/virtio_net.h | 22 ++++++++++++++++++++-- + 1 file changed, 20 insertions(+), 2 deletions(-) + +diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h +index 04e87f4b9417..22dd48c82560 100644 +--- a/include/linux/virtio_net.h ++++ b/include/linux/virtio_net.h +@@ -7,6 +7,21 @@ + #include + #include + ++static inline bool virtio_net_hdr_match_proto(__be16 protocol, __u8 gso_type) ++{ ++ switch (gso_type & ~VIRTIO_NET_HDR_GSO_ECN) { ++ case VIRTIO_NET_HDR_GSO_TCPV4: ++ return protocol == cpu_to_be16(ETH_P_IP); ++ case VIRTIO_NET_HDR_GSO_TCPV6: ++ return protocol == cpu_to_be16(ETH_P_IPV6); ++ case VIRTIO_NET_HDR_GSO_UDP: ++ return protocol == cpu_to_be16(ETH_P_IP) || ++ protocol == cpu_to_be16(ETH_P_IPV6); ++ default: ++ return false; ++ } ++} ++ + static inline int virtio_net_hdr_set_proto(struct sk_buff *skb, + const struct virtio_net_hdr *hdr) + { +@@ -88,9 +103,12 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb, + if (!skb->protocol) { + __be16 protocol = dev_parse_header_protocol(skb); + +- virtio_net_hdr_set_proto(skb, hdr); +- if (protocol && protocol != skb->protocol) ++ if (!protocol) ++ virtio_net_hdr_set_proto(skb, hdr); ++ else if (!virtio_net_hdr_match_proto(protocol, hdr->gso_type)) + return -EINVAL; ++ else ++ skb->protocol = protocol; + } + retry: + if (!skb_flow_dissect_flow_keys_basic(NULL, skb, &keys, +-- +2.35.3 + diff --git a/patches.suse/net-skip-virtio_net_hdr_set_proto-if-protocol-alread.patch b/patches.suse/net-skip-virtio_net_hdr_set_proto-if-protocol-alread.patch new file mode 100644 index 0000000..5a423d8 --- /dev/null +++ b/patches.suse/net-skip-virtio_net_hdr_set_proto-if-protocol-alread.patch @@ -0,0 +1,44 @@ +Patch-mainline: v5.16-rc7 +Git-commit: 1ed1d592113959f00cc552c3b9f47ca2d157768f +References: git-fixes +From: Willem de Bruijn +Date: Mon, 20 Dec 2021 09:50:27 -0500 +Subject: [PATCH] net: skip virtio_net_hdr_set_proto if protocol already set + +virtio_net_hdr_set_proto infers skb->protocol from the virtio_net_hdr +gso_type, to avoid packets getting dropped for lack of a proto type. + +Its protocol choice is a guess, especially in the case of UFO, where +the single VIRTIO_NET_HDR_GSO_UDP label covers both UFOv4 and UFOv6. + +Skip this best effort if the field is already initialized. Whether +explicitly from userspace, or implicitly based on an earlier call to +dev_parse_header_protocol (which is more robust, but was introduced +after this patch). + +Fixes: 9d2f67e43b73 ("net/packet: fix packet drop as of virtio gso") +Signed-off-by: Willem de Bruijn +Link: https://lore.kernel.org/r/20211220145027.2784293-1-willemdebruijn.kernel@gmail.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Juergen Gross +--- + include/linux/virtio_net.h | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h +index 22dd48c82560..a960de68ac69 100644 +--- a/include/linux/virtio_net.h ++++ b/include/linux/virtio_net.h +@@ -25,6 +25,9 @@ static inline bool virtio_net_hdr_match_proto(__be16 protocol, __u8 gso_type) + static inline int virtio_net_hdr_set_proto(struct sk_buff *skb, + const struct virtio_net_hdr *hdr) + { ++ if (skb->protocol) ++ return 0; ++ + switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) { + case VIRTIO_NET_HDR_GSO_TCPV4: + case VIRTIO_NET_HDR_GSO_UDP: +-- +2.35.3 + diff --git a/patches.suse/net-virtio_net_hdr_to_skb-count-transport-header-in-.patch b/patches.suse/net-virtio_net_hdr_to_skb-count-transport-header-in-.patch new file mode 100644 index 0000000..2c6c5a4 --- /dev/null +++ b/patches.suse/net-virtio_net_hdr_to_skb-count-transport-header-in-.patch @@ -0,0 +1,73 @@ +Patch-mainline: v5.16-rc2 +Git-commit: cf9acc90c80ecbee00334aa85d92f4e74014bcff +References: git-fixes +From: Jonathan Davies +Date: Tue, 16 Nov 2021 17:42:42 +0000 +Subject: [PATCH] net: virtio_net_hdr_to_skb: count transport header in UFO + +virtio_net_hdr_to_skb does not set the skb's gso_size and gso_type +correctly for UFO packets received via virtio-net that are a little over +the GSO size. This can lead to problems elsewhere in the networking +stack, e.g. ovs_vport_send dropping over-sized packets if gso_size is +not set. + +This is due to the comparison + + if (skb->len - p_off > gso_size) + +not properly accounting for the transport layer header. + +p_off includes the size of the transport layer header (thlen), so +skb->len - p_off is the size of the TCP/UDP payload. + +gso_size is read from the virtio-net header. For UFO, fragmentation +happens at the IP level so does not need to include the UDP header. + +Hence the calculation could be comparing a TCP/UDP payload length with +an IP payload length, causing legitimate virtio-net packets to have +lack gso_type/gso_size information. + +Example: a UDP packet with payload size 1473 has IP payload size 1481. +If the guest used UFO, it is not fragmented and the virtio-net header's +flags indicate that it is a GSO frame (VIRTIO_NET_HDR_GSO_UDP), with +gso_size = 1480 for an MTU of 1500. skb->len will be 1515 and p_off +will be 42, so skb->len - p_off = 1473. Hence the comparison fails, and +shinfo->gso_size and gso_type are not set as they should be. + +Instead, add the UDP header length before comparing to gso_size when +using UFO. In this way, it is the size of the IP payload that is +compared to gso_size. + +Fixes: 6dd912f82680 ("net: check untrusted gso_size at kernel entry") +Signed-off-by: Jonathan Davies +Reviewed-by: Willem de Bruijn +Signed-off-by: David S. Miller +Signed-off-by: Juergen Gross +--- + include/linux/virtio_net.h | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h +index b465f8f3e554..04e87f4b9417 100644 +--- a/include/linux/virtio_net.h ++++ b/include/linux/virtio_net.h +@@ -120,10 +120,15 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb, + + if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) { + u16 gso_size = __virtio16_to_cpu(little_endian, hdr->gso_size); ++ unsigned int nh_off = p_off; + struct skb_shared_info *shinfo = skb_shinfo(skb); + ++ /* UFO may not include transport header in gso_size. */ ++ if (gso_type & SKB_GSO_UDP) ++ nh_off -= thlen; ++ + /* Too small packets are not really GSO ones. */ +- if (skb->len - p_off > gso_size) { ++ if (skb->len - nh_off > gso_size) { + shinfo->gso_size = gso_size; + shinfo->gso_type = gso_type; + +-- +2.35.3 + diff --git a/patches.suse/tools-virtio-compile-with-pthread.patch b/patches.suse/tools-virtio-compile-with-pthread.patch new file mode 100644 index 0000000..4232547 --- /dev/null +++ b/patches.suse/tools-virtio-compile-with-pthread.patch @@ -0,0 +1,36 @@ +Patch-mainline: v5.18-rc1 +Git-commit: f03560a57c1f60db6ac23ffd9714e1c69e2f95c7 +References: git-fixes +From: "Michael S. Tsirkin" +Date: Sun, 20 Mar 2022 07:02:14 -0400 +Subject: [PATCH] tools/virtio: compile with -pthread + +When using pthreads, one has to compile and link with -lpthread, +otherwise e.g. glibc is not guaranteed to be reentrant. + +This replaces -lpthread. + +Reported-by: Matthew Wilcox +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Juergen Gross +--- + tools/virtio/Makefile | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/tools/virtio/Makefile b/tools/virtio/Makefile +index 0d7bbe49359d..1b25cc7c64bb 100644 +--- a/tools/virtio/Makefile ++++ b/tools/virtio/Makefile +@@ -5,7 +5,8 @@ virtio_test: virtio_ring.o virtio_test.o + vringh_test: vringh_test.o vringh.o virtio_ring.o + + CFLAGS += -g -O2 -Werror -Wno-maybe-uninitialized -Wall -I. -I../include/ -I ../../usr/include/ -Wno-pointer-sign -fno-strict-overflow -fno-strict-aliasing -fno-common -MMD -U_FORTIFY_SOURCE -include ../../include/linux/kconfig.h +-LDFLAGS += -lpthread ++CFLAGS += -pthread ++LDFLAGS += -pthread + vpath %.c ../../drivers/virtio ../../drivers/vhost + mod: + ${MAKE} -C `pwd`/../.. M=`pwd`/vhost_test V=${V} +-- +2.35.3 + diff --git a/patches.suse/tools-virtio-fix-the-vringh-test-for-virtio-ring-cha.patch b/patches.suse/tools-virtio-fix-the-vringh-test-for-virtio-ring-cha.patch new file mode 100644 index 0000000..fc4fb14 --- /dev/null +++ b/patches.suse/tools-virtio-fix-the-vringh-test-for-virtio-ring-cha.patch @@ -0,0 +1,148 @@ +Patch-mainline: v6.2-rc7 +Git-commit: 3f7b75abf41cc4143aa295f62acbb060a012868d +References: git-fixes +From: Shunsuke Mie +Date: Tue, 10 Jan 2023 12:43:10 +0900 +Subject: [PATCH] tools/virtio: fix the vringh test for virtio ring changes + +Fix the build caused by missing kmsan_handle_dma() and is_power_of_2() that +are used in drivers/virtio/virtio_ring.c. + +Signed-off-by: Shunsuke Mie +Message-Id: <20230110034310.779744-1-mie@igel.co.jp> +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Juergen Gross +--- + tools/virtio/linux/bug.h | 8 +++----- + tools/virtio/linux/build_bug.h | 7 +++++++ + tools/virtio/linux/cpumask.h | 7 +++++++ + tools/virtio/linux/gfp.h | 7 +++++++ + tools/virtio/linux/kernel.h | 1 + + tools/virtio/linux/kmsan.h | 12 ++++++++++++ + tools/virtio/linux/scatterlist.h | 1 + + tools/virtio/linux/topology.h | 7 +++++++ + 8 files changed, 45 insertions(+), 5 deletions(-) + create mode 100644 tools/virtio/linux/build_bug.h + create mode 100644 tools/virtio/linux/cpumask.h + create mode 100644 tools/virtio/linux/gfp.h + create mode 100644 tools/virtio/linux/kmsan.h + create mode 100644 tools/virtio/linux/topology.h + +diff --git a/tools/virtio/linux/bug.h b/tools/virtio/linux/bug.h +index 813baf13f62a..51a919083d9b 100644 +--- a/tools/virtio/linux/bug.h ++++ b/tools/virtio/linux/bug.h +@@ -1,13 +1,11 @@ + /* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef BUG_H +-#define BUG_H ++#ifndef _LINUX_BUG_H ++#define _LINUX_BUG_H + + #include + + #define BUG_ON(__BUG_ON_cond) assert(!(__BUG_ON_cond)) + +-#define BUILD_BUG_ON(x) +- + #define BUG() abort() + +-#endif /* BUG_H */ ++#endif /* _LINUX_BUG_H */ +diff --git a/tools/virtio/linux/build_bug.h b/tools/virtio/linux/build_bug.h +new file mode 100644 +index 000000000000..cdbb75e28a60 +--- /dev/null ++++ b/tools/virtio/linux/build_bug.h +@@ -0,0 +1,7 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++#ifndef _LINUX_BUILD_BUG_H ++#define _LINUX_BUILD_BUG_H ++ ++#define BUILD_BUG_ON(x) ++ ++#endif /* _LINUX_BUILD_BUG_H */ +diff --git a/tools/virtio/linux/cpumask.h b/tools/virtio/linux/cpumask.h +new file mode 100644 +index 000000000000..307da69d6b26 +--- /dev/null ++++ b/tools/virtio/linux/cpumask.h +@@ -0,0 +1,7 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++#ifndef _LINUX_CPUMASK_H ++#define _LINUX_CPUMASK_H ++ ++#include ++ ++#endif /* _LINUX_CPUMASK_H */ +diff --git a/tools/virtio/linux/gfp.h b/tools/virtio/linux/gfp.h +new file mode 100644 +index 000000000000..43d146f236f1 +--- /dev/null ++++ b/tools/virtio/linux/gfp.h +@@ -0,0 +1,7 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++#ifndef __LINUX_GFP_H ++#define __LINUX_GFP_H ++ ++#include ++ ++#endif +diff --git a/tools/virtio/linux/kernel.h b/tools/virtio/linux/kernel.h +index 21593bf97755..8b877167933d 100644 +--- a/tools/virtio/linux/kernel.h ++++ b/tools/virtio/linux/kernel.h +@@ -10,6 +10,7 @@ + #include + + #include ++#include + #include + #include + #include +diff --git a/tools/virtio/linux/kmsan.h b/tools/virtio/linux/kmsan.h +new file mode 100644 +index 000000000000..272b5aa285d5 +--- /dev/null ++++ b/tools/virtio/linux/kmsan.h +@@ -0,0 +1,12 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++#ifndef _LINUX_KMSAN_H ++#define _LINUX_KMSAN_H ++ ++#include ++ ++inline void kmsan_handle_dma(struct page *page, size_t offset, size_t size, ++ enum dma_data_direction dir) ++{ ++} ++ ++#endif /* _LINUX_KMSAN_H */ +diff --git a/tools/virtio/linux/scatterlist.h b/tools/virtio/linux/scatterlist.h +index 369ee308b668..74d9e1825748 100644 +--- a/tools/virtio/linux/scatterlist.h ++++ b/tools/virtio/linux/scatterlist.h +@@ -2,6 +2,7 @@ + #ifndef SCATTERLIST_H + #define SCATTERLIST_H + #include ++#include + + struct scatterlist { + unsigned long page_link; +diff --git a/tools/virtio/linux/topology.h b/tools/virtio/linux/topology.h +new file mode 100644 +index 000000000000..910794afb993 +--- /dev/null ++++ b/tools/virtio/linux/topology.h +@@ -0,0 +1,7 @@ ++/* SPDX-License-Identifier: GPL-2.0 */ ++#ifndef _LINUX_TOPOLOGY_H ++#define _LINUX_TOPOLOGY_H ++ ++#include ++ ++#endif /* _LINUX_TOPOLOGY_H */ +-- +2.35.3 + diff --git a/patches.suse/tools-virtio-fix-virtio_test-execution.patch b/patches.suse/tools-virtio-fix-virtio_test-execution.patch new file mode 100644 index 0000000..c08cd61 --- /dev/null +++ b/patches.suse/tools-virtio-fix-virtio_test-execution.patch @@ -0,0 +1,36 @@ +Patch-mainline: 5.17 +Git-commit: 32f1b53fe8f03d962423ba81f8e92af5839814da +References: git-fixes +From: Stefano Garzarella +Date: Tue, 18 Jan 2022 16:06:31 +0100 +Subject: [PATCH] tools/virtio: fix virtio_test execution + +virtio_test hangs on __vring_new_virtqueue() because `vqs_list_lock` +is not initialized. + +Let's initialize it in vdev_info_init(). + +Signed-off-by: Stefano Garzarella +Link: https://lore.kernel.org/r/20220118150631.167015-1-sgarzare@redhat.com +Signed-off-by: Michael S. Tsirkin +Acked-by: Jason Wang +Signed-off-by: Juergen Gross +--- + tools/virtio/virtio_test.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/tools/virtio/virtio_test.c b/tools/virtio/virtio_test.c +index cb3f29c09aff..23f142af544a 100644 +--- a/tools/virtio/virtio_test.c ++++ b/tools/virtio/virtio_test.c +@@ -130,6 +130,7 @@ static void vdev_info_init(struct vdev_info* dev, unsigned long long features) + memset(dev, 0, sizeof *dev); + dev->vdev.features = features; + INIT_LIST_HEAD(&dev->vdev.vqs); ++ spin_lock_init(&dev->vdev.vqs_list_lock); + dev->buf_size = 1024; + dev->buf = malloc(dev->buf_size); + assert(dev->buf); +-- +2.35.3 + diff --git a/patches.suse/tools-virtio-initialize-spinlocks-in-vring_test.c.patch b/patches.suse/tools-virtio-initialize-spinlocks-in-vring_test.c.patch new file mode 100644 index 0000000..8bc89e6 --- /dev/null +++ b/patches.suse/tools-virtio-initialize-spinlocks-in-vring_test.c.patch @@ -0,0 +1,46 @@ +Patch-mainline: v6.2-rc3 +Git-commit: c262f75cb6bb5a63828e72ce3b8fe808e5029479 +References: git-fixes +From: =?UTF-8?q?Ricardo=20Ca=C3=B1uelo?= +Date: Wed, 12 Oct 2022 08:29:49 +0200 +Subject: [PATCH] tools/virtio: initialize spinlocks in vring_test.c +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The virtio_device vqs_list spinlocks must be initialized before use to +prevent functions that manipulate the device virtualqueues, such as +vring_new_virtqueue(), from blocking indefinitely. + +Signed-off-by: Ricardo Cañuelo +Message-Id: <20221012062949.1526176-1-ricardo.canuelo@collabora.com> +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Xuan Zhuo +Signed-off-by: Juergen Gross +--- + tools/virtio/vringh_test.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/tools/virtio/vringh_test.c b/tools/virtio/vringh_test.c +index fa87b58bd5fa..98ff808d6f0c 100644 +--- a/tools/virtio/vringh_test.c ++++ b/tools/virtio/vringh_test.c +@@ -308,6 +308,7 @@ static int parallel_test(u64 features, + + gvdev.vdev.features = features; + INIT_LIST_HEAD(&gvdev.vdev.vqs); ++ spin_lock_init(&gvdev.vdev.vqs_list_lock); + gvdev.to_host_fd = to_host[1]; + gvdev.notifies = 0; + +@@ -455,6 +456,7 @@ int main(int argc, char *argv[]) + getrange = getrange_iov; + vdev.features = 0; + INIT_LIST_HEAD(&vdev.vqs); ++ spin_lock_init(&vdev.vqs_list_lock); + + while (argv[1]) { + if (strcmp(argv[1], "--indirect") == 0) +-- +2.35.3 + diff --git a/patches.suse/vdpa-fix-use-after-free-on-vp_vdpa_remove.patch b/patches.suse/vdpa-fix-use-after-free-on-vp_vdpa_remove.patch new file mode 100644 index 0000000..53ddfc9 --- /dev/null +++ b/patches.suse/vdpa-fix-use-after-free-on-vp_vdpa_remove.patch @@ -0,0 +1,59 @@ +Patch-mainline: 5.17 +Git-commit: eb057b44dbe35ae14527830236a92f51de8f9184 +References: git-fixes +From: Zhang Min +Date: Tue, 1 Mar 2022 17:10:59 +0800 +Subject: [PATCH] vdpa: fix use-after-free on vp_vdpa_remove + +When vp_vdpa driver is unbind, vp_vdpa is freed in vdpa_unregister_device +and then vp_vdpa->mdev.pci_dev is dereferenced in vp_modern_remove, +triggering use-after-free. + +Call Trace of unbinding driver free vp_vdpa : +do_syscall_64 + vfs_write + kernfs_fop_write_iter + device_release_driver_internal + pci_device_remove + vp_vdpa_remove + vdpa_unregister_device + kobject_release + device_release + kfree + +Call Trace of dereference vp_vdpa->mdev.pci_dev: +vp_modern_remove + pci_release_selected_regions + pci_release_region + pci_resource_len + pci_resource_end + (dev)->resource[(bar)].end + +Signed-off-by: Zhang Min +Signed-off-by: Yi Wang +Link: https://lore.kernel.org/r/20220301091059.46869-1-wang.yi59@zte.com.cn +Signed-off-by: Michael S. Tsirkin +Fixes: 64b9f64f80a6 ("vdpa: introduce virtio pci driver") +Reviewed-by: Stefano Garzarella +Signed-off-by: Juergen Gross +--- + drivers/vdpa/virtio_pci/vp_vdpa.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/vdpa/virtio_pci/vp_vdpa.c b/drivers/vdpa/virtio_pci/vp_vdpa.c +index a57e381e830b..cce101e6a940 100644 +--- a/drivers/vdpa/virtio_pci/vp_vdpa.c ++++ b/drivers/vdpa/virtio_pci/vp_vdpa.c +@@ -533,8 +533,8 @@ static void vp_vdpa_remove(struct pci_dev *pdev) + { + struct vp_vdpa *vp_vdpa = pci_get_drvdata(pdev); + +- vdpa_unregister_device(&vp_vdpa->vdpa); + vp_modern_remove(&vp_vdpa->mdev); ++ vdpa_unregister_device(&vp_vdpa->vdpa); + } + + static struct pci_driver vp_vdpa_driver = { +-- +2.35.3 + diff --git a/patches.suse/vhost-net-Clear-the-pending-messages-when-the-backen.patch b/patches.suse/vhost-net-Clear-the-pending-messages-when-the-backen.patch new file mode 100644 index 0000000..e578482 --- /dev/null +++ b/patches.suse/vhost-net-Clear-the-pending-messages-when-the-backen.patch @@ -0,0 +1,82 @@ +Patch-mainline: v6.2-rc7 +Git-commit: 9526f9a2b762af16be94a72aca5d65c677d28f50 +References: git-fixes +From: Eric Auger +Date: Tue, 17 Jan 2023 10:15:18 -0500 +Subject: [PATCH] vhost/net: Clear the pending messages when the backend is + removed + +When the vhost iotlb is used along with a guest virtual iommu +and the guest gets rebooted, some MISS messages may have been +recorded just before the reboot and spuriously executed by +the virtual iommu after the reboot. + +As vhost does not have any explicit reset user API, +VHOST_NET_SET_BACKEND looks a reasonable point where to clear +the pending messages, in case the backend is removed. + +Export vhost_clear_msg() and call it in vhost_net_set_backend() +when fd == -1. + +Signed-off-by: Eric Auger +Suggested-by: Jason Wang +Fixes: 6b1e6cc7855b0 ("vhost: new device IOTLB API") +Message-Id: <20230117151518.44725-3-eric.auger@redhat.com> +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Juergen Gross +--- + drivers/vhost/net.c | 3 +++ + drivers/vhost/vhost.c | 3 ++- + drivers/vhost/vhost.h | 1 + + 3 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c +index 9af19b0cf3b7..4c538b30fd76 100644 +--- a/drivers/vhost/net.c ++++ b/drivers/vhost/net.c +@@ -1511,6 +1511,9 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) + nvq = &n->vqs[index]; + mutex_lock(&vq->mutex); + ++ if (fd == -1) ++ vhost_clear_msg(&n->dev); ++ + /* Verify that ring has been setup correctly. */ + if (!vhost_vq_access_ok(vq)) { + r = -EFAULT; +diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c +index cbe72bfd2f1f..43c9770b86e5 100644 +--- a/drivers/vhost/vhost.c ++++ b/drivers/vhost/vhost.c +@@ -661,7 +661,7 @@ void vhost_dev_stop(struct vhost_dev *dev) + } + EXPORT_SYMBOL_GPL(vhost_dev_stop); + +-static void vhost_clear_msg(struct vhost_dev *dev) ++void vhost_clear_msg(struct vhost_dev *dev) + { + struct vhost_msg_node *node, *n; + +@@ -679,6 +679,7 @@ static void vhost_clear_msg(struct vhost_dev *dev) + + spin_unlock(&dev->iotlb_lock); + } ++EXPORT_SYMBOL_GPL(vhost_clear_msg); + + void vhost_dev_cleanup(struct vhost_dev *dev) + { +diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h +index d9109107af08..790b296271f1 100644 +--- a/drivers/vhost/vhost.h ++++ b/drivers/vhost/vhost.h +@@ -181,6 +181,7 @@ long vhost_dev_ioctl(struct vhost_dev *, unsigned int ioctl, void __user *argp); + long vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *argp); + bool vhost_vq_access_ok(struct vhost_virtqueue *vq); + bool vhost_log_access_ok(struct vhost_dev *); ++void vhost_clear_msg(struct vhost_dev *dev); + + int vhost_get_vq_desc(struct vhost_virtqueue *, + struct iovec iov[], unsigned int iov_count, +-- +2.35.3 + diff --git a/patches.suse/virtio-net-Keep-stop-to-follow-mirror-sequence-of-op.patch b/patches.suse/virtio-net-Keep-stop-to-follow-mirror-sequence-of-op.patch new file mode 100644 index 0000000..d7090bb --- /dev/null +++ b/patches.suse/virtio-net-Keep-stop-to-follow-mirror-sequence-of-op.patch @@ -0,0 +1,42 @@ +Patch-mainline: v6.2-rc7 +Git-commit: 63b114042d8a9c02d9939889177c36dbdb17a588 +References: git-fixes +From: Parav Pandit +Date: Thu, 2 Feb 2023 18:35:16 +0200 +Subject: [PATCH] virtio-net: Keep stop() to follow mirror sequence of open() + +Cited commit in fixes tag frees rxq xdp info while RQ NAPI is +still enabled and packet processing may be ongoing. + +Follow the mirror sequence of open() in the stop() callback. +This ensures that when rxq info is unregistered, no rx +packet processing is ongoing. + +Fixes: 754b8a21a96d ("virtio_net: setup xdp_rxq_info") +Acked-by: Michael S. Tsirkin +Reviewed-by: Jiri Pirko +Signed-off-by: Parav Pandit +Link: https://lore.kernel.org/r/20230202163516.12559-1-parav@nvidia.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Juergen Gross +--- + drivers/net/virtio_net.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c +index 6df14dd5bf46..61e33e4dd0cd 100644 +--- a/drivers/net/virtio_net.c ++++ b/drivers/net/virtio_net.c +@@ -2158,8 +2158,8 @@ static int virtnet_close(struct net_device *dev) + cancel_delayed_work_sync(&vi->refill); + + for (i = 0; i < vi->max_queue_pairs; i++) { +- xdp_rxq_info_unreg(&vi->rq[i].xdp_rxq); + napi_disable(&vi->rq[i].napi); ++ xdp_rxq_info_unreg(&vi->rq[i].xdp_rxq); + virtnet_napi_tx_disable(&vi->sq[i].napi); + } + +-- +2.35.3 + diff --git a/patches.suse/virtio-net-execute-xdp_do_flush-before-napi_complete.patch b/patches.suse/virtio-net-execute-xdp_do_flush-before-napi_complete.patch new file mode 100644 index 0000000..c854738 --- /dev/null +++ b/patches.suse/virtio-net-execute-xdp_do_flush-before-napi_complete.patch @@ -0,0 +1,62 @@ +Patch-mainline: v6.2-rc7 +Git-commit: ad7e615f646c9b5b2cf655cdfb9d91a28db4f25a +References: git-fixes +From: Magnus Karlsson +Date: Wed, 25 Jan 2023 08:48:59 +0100 +Subject: [PATCH] virtio-net: execute xdp_do_flush() before + napi_complete_done() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Make sure that xdp_do_flush() is always executed before +napi_complete_done(). This is important for two reasons. First, a +redirect to an XSKMAP assumes that a call to xdp_do_redirect() from +napi context X on CPU Y will be followed by a xdp_do_flush() from the +same napi context and CPU. This is not guaranteed if the +napi_complete_done() is executed before xdp_do_flush(), as it tells +the napi logic that it is fine to schedule napi context X on another +CPU. Details from a production system triggering this bug using the +veth driver can be found following the first link below. + +The second reason is that the XDP_REDIRECT logic in itself relies on +being inside a single NAPI instance through to the xdp_do_flush() call +for RCU protection of all in-kernel data structures. Details can be +found in the second link below. + +Fixes: 186b3c998c50 ("virtio-net: support XDP_REDIRECT") +Signed-off-by: Magnus Karlsson +Acked-by: Toke Høiland-Jørgensen +Link: https://lore.kernel.org/r/20221220185903.1105011-1-sbohrer@cloudflare.com +Link: https://lore.kernel.org/all/20210624160609.292325-1-toke@redhat.com/ +Acked-by: Michael S. Tsirkin +Signed-off-by: Jakub Kicinski +Signed-off-by: Juergen Gross +--- + drivers/net/virtio_net.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c +index 18b3de854aeb..6df14dd5bf46 100644 +--- a/drivers/net/virtio_net.c ++++ b/drivers/net/virtio_net.c +@@ -1677,13 +1677,13 @@ static int virtnet_poll(struct napi_struct *napi, int budget) + + received = virtnet_receive(rq, budget, &xdp_xmit); + ++ if (xdp_xmit & VIRTIO_XDP_REDIR) ++ xdp_do_flush(); ++ + /* Out of packets? */ + if (received < budget) + virtqueue_napi_complete(napi, rq->vq, received); + +- if (xdp_xmit & VIRTIO_XDP_REDIR) +- xdp_do_flush(); +- + if (xdp_xmit & VIRTIO_XDP_TX) { + sq = virtnet_xdp_get_sq(vi); + if (virtqueue_kick_prepare(sq->vq) && virtqueue_notify(sq->vq)) { +-- +2.35.3 + diff --git a/patches.suse/virtio_net-bugfix-overflow-inside-xdp_linearize_page.patch b/patches.suse/virtio_net-bugfix-overflow-inside-xdp_linearize_page.patch new file mode 100644 index 0000000..fde1c3b --- /dev/null +++ b/patches.suse/virtio_net-bugfix-overflow-inside-xdp_linearize_page.patch @@ -0,0 +1,57 @@ +Patch-mainline: v6.3 +Git-commit: 853618d5886bf94812f31228091cd37d308230f7 +References: git-fixes +From: Xuan Zhuo +Date: Fri, 14 Apr 2023 14:08:35 +0800 +Subject: [PATCH] virtio_net: bugfix overflow inside xdp_linearize_page() + +Here we copy the data from the original buf to the new page. But we +not check that it may be overflow. + +As long as the size received(including vnethdr) is greater than 3840 +(PAGE_SIZE -VIRTIO_XDP_HEADROOM). Then the memcpy will overflow. + +And this is completely possible, as long as the MTU is large, such +as 4096. In our test environment, this will cause crash. Since crash is +caused by the written memory, it is meaningless, so I do not include it. + +Fixes: 72979a6c3590 ("virtio_net: xdp, add slowpath case for non contiguous buffers") +Signed-off-by: Xuan Zhuo +Acked-by: Jason Wang +Acked-by: Michael S. Tsirkin +Signed-off-by: David S. Miller +Signed-off-by: Juergen Gross +--- + drivers/net/virtio_net.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c +index 2396c28c0122..ea1bd4bb326d 100644 +--- a/drivers/net/virtio_net.c ++++ b/drivers/net/virtio_net.c +@@ -814,8 +814,13 @@ static struct page *xdp_linearize_page(struct receive_queue *rq, + int page_off, + unsigned int *len) + { +- struct page *page = alloc_page(GFP_ATOMIC); ++ int tailroom = SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); ++ struct page *page; ++ ++ if (page_off + *len + tailroom > PAGE_SIZE) ++ return NULL; + ++ page = alloc_page(GFP_ATOMIC); + if (!page) + return NULL; + +@@ -823,7 +828,6 @@ static struct page *xdp_linearize_page(struct receive_queue *rq, + page_off += *len; + + while (--*num_buf) { +- int tailroom = SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); + unsigned int buflen; + void *buf; + int off; +-- +2.35.3 + diff --git a/patches.suse/virtio_net-split-free_unused_bufs.patch b/patches.suse/virtio_net-split-free_unused_bufs.patch new file mode 100644 index 0000000..174d9c7 --- /dev/null +++ b/patches.suse/virtio_net-split-free_unused_bufs.patch @@ -0,0 +1,88 @@ +Patch-mainline: v6.0-rc1 +Git-commit: 6e345f8c7cd029ad3aaece15ad4425ac26e4eb63 +References: git-fixes +From: Xuan Zhuo +Date: Mon, 1 Aug 2022 14:38:59 +0800 +Subject: [PATCH] virtio_net: split free_unused_bufs() + +This patch separates two functions for freeing sq buf and rq buf from +free_unused_bufs(). + +When supporting the enable/disable tx/rq queue in the future, it is +necessary to support separate recovery of a sq buf or a rq buf. + +Signed-off-by: Xuan Zhuo +Acked-by: Jason Wang +Message-Id: <20220801063902.129329-40-xuanzhuo@linux.alibaba.com> +Signed-off-by: Michael S. Tsirkin +Signed-off-by: Juergen Gross +--- + drivers/net/virtio_net.c | 41 ++++++++++++++++++++++++---------------- + 1 file changed, 25 insertions(+), 16 deletions(-) + +diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c +index 204bfe49d6b4..8cad913926e5 100644 +--- a/drivers/net/virtio_net.c ++++ b/drivers/net/virtio_net.c +@@ -3168,6 +3168,27 @@ static void free_receive_page_frags(struct virtnet_info *vi) + put_page(vi->rq[i].alloc_frag.page); + } + ++static void virtnet_sq_free_unused_buf(struct virtqueue *vq, void *buf) ++{ ++ if (!is_xdp_frame(buf)) ++ dev_kfree_skb(buf); ++ else ++ xdp_return_frame(ptr_to_xdp(buf)); ++} ++ ++static void virtnet_rq_free_unused_buf(struct virtqueue *vq, void *buf) ++{ ++ struct virtnet_info *vi = vq->vdev->priv; ++ int i = vq2rxq(vq); ++ ++ if (vi->mergeable_rx_bufs) ++ put_page(virt_to_head_page(buf)); ++ else if (vi->big_packets) ++ give_pages(&vi->rq[i], buf); ++ else ++ put_page(virt_to_head_page(buf)); ++} ++ + static void free_unused_bufs(struct virtnet_info *vi) + { + void *buf; +@@ -3175,26 +3196,14 @@ static void free_unused_bufs(struct virtnet_info *vi) + + for (i = 0; i < vi->max_queue_pairs; i++) { + struct virtqueue *vq = vi->sq[i].vq; +- while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) { +- if (!is_xdp_frame(buf)) +- dev_kfree_skb(buf); +- else +- xdp_return_frame(ptr_to_xdp(buf)); +- } ++ while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) ++ virtnet_sq_free_unused_buf(vq, buf); + } + + for (i = 0; i < vi->max_queue_pairs; i++) { + struct virtqueue *vq = vi->rq[i].vq; +- +- while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) { +- if (vi->mergeable_rx_bufs) { +- put_page(virt_to_head_page(buf)); +- } else if (vi->big_packets) { +- give_pages(&vi->rq[i], buf); +- } else { +- put_page(virt_to_head_page(buf)); +- } +- } ++ while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) ++ virtnet_rq_free_unused_buf(vq, buf); + } + } + +-- +2.35.3 + diff --git a/patches.suse/virtio_net-suppress-cpu-stall-when-free_unused_bufs.patch b/patches.suse/virtio_net-suppress-cpu-stall-when-free_unused_bufs.patch new file mode 100644 index 0000000..fc51b31 --- /dev/null +++ b/patches.suse/virtio_net-suppress-cpu-stall-when-free_unused_bufs.patch @@ -0,0 +1,42 @@ +Patch-mainline: v6.4-rc1 +Git-commit: f8bb5104394560e29017c25bcade4c6b7aabd108 +References: git-fixes +From: Wenliang Wang +Date: Thu, 4 May 2023 10:27:06 +0800 +Subject: [PATCH] virtio_net: suppress cpu stall when free_unused_bufs + +For multi-queue and large ring-size use case, the following error +occurred when free_unused_bufs: +rcu: INFO: rcu_sched self-detected stall on CPU. + +Fixes: 986a4f4d452d ("virtio_net: multiqueue support") +Signed-off-by: Wenliang Wang +Acked-by: Michael S. Tsirkin +Signed-off-by: David S. Miller +Signed-off-by: Juergen Gross +--- + drivers/net/virtio_net.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c +index 8d8038538fc4..a12ae26db0e2 100644 +--- a/drivers/net/virtio_net.c ++++ b/drivers/net/virtio_net.c +@@ -3560,12 +3560,14 @@ static void free_unused_bufs(struct virtnet_info *vi) + struct virtqueue *vq = vi->sq[i].vq; + while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) + virtnet_sq_free_unused_buf(vq, buf); ++ cond_resched(); + } + + for (i = 0; i < vi->max_queue_pairs; i++) { + struct virtqueue *vq = vi->rq[i].vq; + while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) + virtnet_rq_free_unused_buf(vq, buf); ++ cond_resched(); + } + } + +-- +2.35.3 + diff --git a/series.conf b/series.conf index f8196bf..82517fd 100644 --- a/series.conf +++ b/series.conf @@ -7341,6 +7341,7 @@ patches.suse/net-mlx5-E-Switch-return-error-if-encap-isn-t-suppor.patch patches.suse/net-usb-r8152-Add-MAC-passthrough-support-for-more-L.patch patches.suse/net-dpaa2-eth-fix-use-after-free-in-dpaa2_eth_remove.patch + patches.suse/net-virtio_net_hdr_to_skb-count-transport-header-in-.patch patches.suse/NFC-reorganize-the-functions-in-nci_request.patch patches.suse/NFC-reorder-the-logic-in-nfc_-un-register_device.patch patches.suse/NFC-add-NCI_UNREG-flag-to-eliminate-the-race.patch @@ -8147,6 +8148,8 @@ patches.suse/ax25-NPD-bug-when-detaching-AX25-device.patch patches.suse/qlcnic-potential-dereference-null-pointer-of-rx_queu.patch patches.suse/mac80211-fix-locking-in-ieee80211_start_ap-error-pat.patch + patches.suse/net-accept-UFOv6-packages-in-virtio_net_hdr_to_skb.patch + patches.suse/net-skip-virtio_net_hdr_set_proto-if-protocol-alread.patch patches.suse/igb-fix-deadlock-caused-by-taking-RTNL-in-RPM-resume.patch patches.suse/bonding-fix-ad_actor_system-option-setting-to-defaul.patch patches.suse/fjes-Check-for-error-irq.patch @@ -10627,6 +10630,8 @@ patches.suse/btrfs-add-missing-run-of-delayed-items-after-unlink-.patch patches.suse/virtio_console-break-out-of-buf-poll-on-remove.patch patches.suse/virtio-blk-Don-t-use-MAX_DISCARD_SEGMENTS-if-max_dis.patch + patches.suse/vdpa-fix-use-after-free-on-vp_vdpa_remove.patch + patches.suse/tools-virtio-fix-virtio_test-execution.patch patches.suse/x86-speculation-rename-retpoline_amd-to-retpoline_lfence.patch patches.suse/x86-speculation-add-eibrs-retpoline-options.patch patches.suse/documentation-hw-vuln-update-spectre-doc.patch @@ -12117,6 +12122,7 @@ patches.suse/Documentation-Fix-duplicate-statement-about-raw_spin.patch patches.suse/ACPI-CPPC-Avoid-out-of-bounds-access-when-parsing-_C.patch patches.suse/vhost_vdpa-don-t-setup-irq-offloading-when-irq_num-0.patch + patches.suse/tools-virtio-compile-with-pthread.patch patches.suse/watchdog-rti-wdt-Add-missing-pm_runtime_disable-in-p.patch patches.suse/Watchdog-sp5100_tco-Move-timer-initialization-into-f.patch patches.suse/Watchdog-sp5100_tco-Refactor-MMIO-base-address-initi.patch @@ -15627,6 +15633,7 @@ patches.suse/dpaa2-eth-trace-the-allocated-address-instead-of-pag.patch patches.suse/drm-shmem-helper-Add-missing-vunmap-on-error.patch patches.suse/drm-gem-Properly-annotate-WW-context-on-drm_gem_lock.patch + patches.suse/virtio_net-split-free_unused_bufs.patch patches.suse/ALSA-hda-realtek-Add-quirk-for-another-Asus-K42JZ-mo.patch patches.suse/ALSA-hda-conexant-Add-quirk-for-LENOVO-20149-Noteboo.patch patches.suse/ALSA-scarlett2-Add-Focusrite-Clarett-8Pre-support.patch @@ -18349,6 +18356,7 @@ patches.suse/x86-kexec-Fix-double-free-of-elf-header-buffer.patch patches.suse/x86-asm-Fix-an-assembler-warning-with-current-binuti.patch patches.suse/x86-bugs-Flush-IBP-in-ib_prctl_set.patch + patches.suse/tools-virtio-initialize-spinlocks-in-vring_test.c.patch patches.suse/virtio_pci-modify-ENOENT-to-EINVAL.patch patches.suse/vdpa_sim-fix-possible-memory-leak-in-vdpasim_net_ini.patch patches.suse/vhost-vsock-Fix-error-handling-in-vhost_vsock_init.patch @@ -18639,6 +18647,8 @@ patches.suse/ASoC-Intel-sof_rt5682-always-set-dpcm_capture-for-am.patch patches.suse/ASoC-Intel-sof_cs42l42-always-set-dpcm_capture-for-a.patch patches.suse/ASoC-cs42l56-fix-DT-probe.patch + patches.suse/vhost-net-Clear-the-pending-messages-when-the-backen.patch + patches.suse/tools-virtio-fix-the-vringh-test-for-virtio-ring-cha.patch patches.suse/platform-x86-thinkpad_acpi-Fix-thinklight-LED-bright.patch patches.suse/platform-x86-touchscreen_dmi-Add-Chuwi-Vi8-CWI501-DM.patch patches.suse/watchdog-diag288_wdt-do-not-use-stack-buffers-for-ha.patch @@ -18646,6 +18656,7 @@ patches.suse/bus-sunxi-rsb-Fix-error-handling-in-sunxi_rsb_init.patch patches.suse/arm64-dts-imx8mm-Fix-pad-control-for-UART1_DTE_RX.patch patches.suse/qede-execute-xdp_do_flush-before-napi_complete_done.patch + patches.suse/virtio-net-execute-xdp_do_flush-before-napi_complete.patch patches.suse/bpf-Fix-a-possible-task-gone-issue-with-bpf_send_signal-_thread-helpers.patch patches.suse/sfc-correctly-advertise-tunneled-IPv6-segmentation.patch patches.suse/net-rose-Fix-to-not-accept-on-connected-socket.patch @@ -18659,6 +18670,7 @@ patches.suse/selftests-net-udpgso_bench_rx-tx-Stop-when-wrong-CLI.patch patches.suse/selftests-net-udpgso_bench-Fix-racing-bug-between-th.patch patches.suse/selftests-net-udpgso_bench_tx-Cater-for-pending-data.patch + patches.suse/virtio-net-Keep-stop-to-follow-mirror-sequence-of-op.patch patches.suse/can-j1939-fix-errant-WARN_ON_ONCE-in-j1939_session_d.patch patches.suse/ata-libata-Fix-sata_down_spd_limit-when-no-link-spee.patch patches.suse/mm-memcg-fix-NULL-pointer-in-mem_cgroup_track_foreign_dirty_slowpath.patch @@ -19727,6 +19739,7 @@ patches.suse/writeback-cgroup-fix-null-ptr-deref-write-in-bdi_spl.patch patches.suse/nilfs2-initialize-unused-bytes-in-segment-summary-bl.patch patches.suse/net-sched-sch_qfq-prevent-slab-out-of-bounds-in-qfq_.patch + patches.suse/virtio_net-bugfix-overflow-inside-xdp_linearize_page.patch patches.suse/sfc-Fix-use-after-free-due-to-selftest_work.patch patches.suse/bnxt_en-Do-not-initialize-PTP-on-older-P3-P4-chips.patch patches.suse/e1000e-Disable-TSO-on-i219-LM-card-to-increase-speed.patch @@ -19998,6 +20011,7 @@ patches.suse/sfc-Fix-module-EEPROM-reporting-for-QSFP-modules.patch patches.suse/netfilter-nf_tables-deactivate-anonymous-set-from-pr.patch patches.suse/igc-read-before-write-to-SRRCTL-register.patch + patches.suse/virtio_net-suppress-cpu-stall-when-free_unused_bufs.patch patches.suse/ALSA-hda-realtek-Add-quirk-for-ThinkPad-P1-Gen-6.patch patches.suse/ALSA-hda-realtek-Add-quirk-for-ASUS-UM3402YAR-using-.patch patches.suse/ALSA-hda-realtek-support-HP-Pavilion-Aero-13-be0xxx-.patch