]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 5.10
authorSasha Levin <sashal@kernel.org>
Sat, 23 Apr 2022 23:59:36 +0000 (19:59 -0400)
committerSasha Levin <sashal@kernel.org>
Sat, 23 Apr 2022 23:59:36 +0000 (19:59 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
42 files changed:
queue-5.10/alsa-usb-audio-fix-undefined-behavior-due-to-shift-o.patch [new file with mode: 0644]
queue-5.10/arm-vexpress-spc-avoid-negative-array-index-when-smp.patch [new file with mode: 0644]
queue-5.10/arm64-dts-imx-fix-imx8-var-som-touchscreen-property-.patch [new file with mode: 0644]
queue-5.10/arm64-mm-fix-p-d_leaf.patch [new file with mode: 0644]
queue-5.10/arm64-mm-remove-pud-pmd-_table_bit-from-pud-pmd-_bad.patch [new file with mode: 0644]
queue-5.10/asoc-atmel-remove-system-clock-tree-configuration-fo.patch [new file with mode: 0644]
queue-5.10/asoc-codecs-wcd934x-do-not-switch-off-sido-buck-when.patch [new file with mode: 0644]
queue-5.10/asoc-msm8916-wcd-digital-check-failure-for-devm_snd_.patch [new file with mode: 0644]
queue-5.10/brcmfmac-sdio-fix-undefined-behavior-due-to-shift-ov.patch [new file with mode: 0644]
queue-5.10/cifs-check-the-iocb_direct-flag-not-o_direct.patch [new file with mode: 0644]
queue-5.10/dmaengine-idxd-add-ro-check-for-wq-max_batch_size-wr.patch [new file with mode: 0644]
queue-5.10/dmaengine-idxd-add-ro-check-for-wq-max_transfer_size.patch [new file with mode: 0644]
queue-5.10/dmaengine-imx-sdma-fix-error-checking-in-sdma_event_.patch [new file with mode: 0644]
queue-5.10/dmaengine-mediatek-fix-pm-usage-reference-leak-of-mt.patch [new file with mode: 0644]
queue-5.10/dpaa_eth-fix-missing-of_node_put-in-dpaa_get_ts_info.patch [new file with mode: 0644]
queue-5.10/drm-msm-mdp5-check-the-return-of-kzalloc.patch [new file with mode: 0644]
queue-5.10/esp-limit-skb_page_frag_refill-use-to-a-single-page.patch [new file with mode: 0644]
queue-5.10/igc-fix-bug-scheduling-while-atomic.patch [new file with mode: 0644]
queue-5.10/igc-fix-infinite-loop-in-release_swfw_sync.patch [new file with mode: 0644]
queue-5.10/ip6_gre-avoid-updating-tunnel-tun_hlen-in-__gre6_xmi.patch [new file with mode: 0644]
queue-5.10/ip6_gre-fix-skb_under_panic-in-__gre6_xmit.patch [new file with mode: 0644]
queue-5.10/ipv6-make-ip6_rt_gc_expire-an-atomic_t.patch [new file with mode: 0644]
queue-5.10/l3mdev-l3mdev_master_upper_ifindex_by_index_rcu-shou.patch [new file with mode: 0644]
queue-5.10/mt76-fix-undefined-behavior-due-to-shift-overflowing.patch [new file with mode: 0644]
queue-5.10/net-atlantic-avoid-out-of-bounds-indexing.patch [new file with mode: 0644]
queue-5.10/net-macb-restart-tx-only-if-queue-pointer-is-lagging.patch [new file with mode: 0644]
queue-5.10/net-packet-fix-packet_sock-xmit-return-value-checkin.patch [new file with mode: 0644]
queue-5.10/net-sched-cls_u32-fix-possible-leak-in-u32_init_knod.patch [new file with mode: 0644]
queue-5.10/net-smc-fix-sock-leak-when-release-after-smc_shutdow.patch [new file with mode: 0644]
queue-5.10/net-stmmac-use-readl_poll_timeout_atomic-in-atomic-s.patch [new file with mode: 0644]
queue-5.10/netlink-reset-network-and-mac-headers-in-netlink_dum.patch [new file with mode: 0644]
queue-5.10/nvme-add-a-quirk-to-disable-namespace-identifiers.patch [new file with mode: 0644]
queue-5.10/nvme-pci-disable-namespace-identifiers-for-qemu-cont.patch [new file with mode: 0644]
queue-5.10/platform-x86-samsung-laptop-fix-an-unsigned-comparis.patch [new file with mode: 0644]
queue-5.10/reset-tegra-bpmp-restore-handle-errors-in-bpmp-respo.patch [new file with mode: 0644]
queue-5.10/rxrpc-restore-removed-timer-deletion.patch [new file with mode: 0644]
queue-5.10/scsi-qedi-fix-failed-disconnect-handling.patch [new file with mode: 0644]
queue-5.10/selftests-mlxsw-vxlan_flooding-prevent-flooding-of-u.patch [new file with mode: 0644]
queue-5.10/series
queue-5.10/spi-spi-mtk-nor-initialize-spi-controller-after-resu.patch [new file with mode: 0644]
queue-5.10/stat-fix-inconsistency-between-struct-stat-and-struc.patch [new file with mode: 0644]
queue-5.10/vxlan-fix-error-return-code-in-vxlan_fdb_append.patch [new file with mode: 0644]

diff --git a/queue-5.10/alsa-usb-audio-fix-undefined-behavior-due-to-shift-o.patch b/queue-5.10/alsa-usb-audio-fix-undefined-behavior-due-to-shift-o.patch
new file mode 100644 (file)
index 0000000..ce83910
--- /dev/null
@@ -0,0 +1,49 @@
+From 1bbf69dc4fc6fa93523c19c9ada115abead8ce60 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 5 Apr 2022 17:15:08 +0200
+Subject: ALSA: usb-audio: Fix undefined behavior due to shift overflowing the
+ constant
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Borislav Petkov <bp@suse.de>
+
+[ Upstream commit 1ef8715975de8bd481abbd0839ed4f49d9e5b0ff ]
+
+Fix:
+
+  sound/usb/midi.c: In function ‘snd_usbmidi_out_endpoint_create’:
+  sound/usb/midi.c:1389:2: error: case label does not reduce to an integer constant
+    case USB_ID(0xfc08, 0x0101): /* Unknown vendor Cable */
+    ^~~~
+
+See https://lore.kernel.org/r/YkwQ6%2BtIH8GQpuct@zn.tnic for the gory
+details as to why it triggers with older gccs only.
+
+[ A slight correction with parentheses around the argument by tiwai ]
+
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Link: https://lore.kernel.org/r/20220405151517.29753-3-bp@alien8.de
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/usb/usbaudio.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h
+index e54a98f46549..d8e31ee03b9d 100644
+--- a/sound/usb/usbaudio.h
++++ b/sound/usb/usbaudio.h
+@@ -8,7 +8,7 @@
+  */
+ /* handling of USB vendor/product ID pairs as 32-bit numbers */
+-#define USB_ID(vendor, product) (((vendor) << 16) | (product))
++#define USB_ID(vendor, product) (((unsigned int)(vendor) << 16) | (product))
+ #define USB_ID_VENDOR(id) ((id) >> 16)
+ #define USB_ID_PRODUCT(id) ((u16)(id))
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm-vexpress-spc-avoid-negative-array-index-when-smp.patch b/queue-5.10/arm-vexpress-spc-avoid-negative-array-index-when-smp.patch
new file mode 100644 (file)
index 0000000..0cf71f5
--- /dev/null
@@ -0,0 +1,58 @@
+From 961507fe05f58d0bd3f33c86e30ad4f338bcf19c Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 31 Mar 2022 12:04:43 -0700
+Subject: ARM: vexpress/spc: Avoid negative array index when !SMP
+
+From: Kees Cook <keescook@chromium.org>
+
+[ Upstream commit b3f1dd52c991d79118f35e6d1bf4d7cb09882e38 ]
+
+When building multi_v7_defconfig+CONFIG_SMP=n, -Warray-bounds exposes
+a couple negative array index accesses:
+
+arch/arm/mach-vexpress/spc.c: In function 've_spc_clk_init':
+arch/arm/mach-vexpress/spc.c:583:21: warning: array subscript -1 is below array bounds of 'bool[2]' {aka '_Bool[2]'} [-Warray-bounds]
+  583 |   if (init_opp_table[cluster])
+      |       ~~~~~~~~~~~~~~^~~~~~~~~
+arch/arm/mach-vexpress/spc.c:556:7: note: while referencing 'init_opp_table'
+  556 |  bool init_opp_table[MAX_CLUSTERS] = { false };
+      |       ^~~~~~~~~~~~~~
+arch/arm/mach-vexpress/spc.c:592:18: warning: array subscript -1 is below array bounds of 'bool[2]' {aka '_Bool[2]'} [-Warray-bounds]
+  592 |    init_opp_table[cluster] = true;
+      |    ~~~~~~~~~~~~~~^~~~~~~~~
+arch/arm/mach-vexpress/spc.c:556:7: note: while referencing 'init_opp_table'
+  556 |  bool init_opp_table[MAX_CLUSTERS] = { false };
+      |       ^~~~~~~~~~~~~~
+
+Skip this logic when built !SMP.
+
+Link: https://lore.kernel.org/r/20220331190443.851661-1-keescook@chromium.org
+Cc: Liviu Dudau <liviu.dudau@arm.com>
+Cc: Sudeep Holla <sudeep.holla@arm.com>
+Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
+Cc: Russell King <linux@armlinux.org.uk>
+Cc: linux-arm-kernel@lists.infradead.org
+Acked-by: Liviu Dudau <liviu.dudau@arm.com>
+Signed-off-by: Kees Cook <keescook@chromium.org>
+Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm/mach-vexpress/spc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm/mach-vexpress/spc.c b/arch/arm/mach-vexpress/spc.c
+index 1da11bdb1dfb..1c6500c4e6a1 100644
+--- a/arch/arm/mach-vexpress/spc.c
++++ b/arch/arm/mach-vexpress/spc.c
+@@ -580,7 +580,7 @@ static int __init ve_spc_clk_init(void)
+               }
+               cluster = topology_physical_package_id(cpu_dev->id);
+-              if (init_opp_table[cluster])
++              if (cluster < 0 || init_opp_table[cluster])
+                       continue;
+               if (ve_init_opp_table(cpu_dev))
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm64-dts-imx-fix-imx8-var-som-touchscreen-property-.patch b/queue-5.10/arm64-dts-imx-fix-imx8-var-som-touchscreen-property-.patch
new file mode 100644 (file)
index 0000000..f378649
--- /dev/null
@@ -0,0 +1,67 @@
+From 7cfd06bb650d63e95f09d44e281feab090f610cf Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Apr 2022 14:14:41 -0500
+Subject: arm64: dts: imx: Fix imx8*-var-som touchscreen property sizes
+
+From: Rob Herring <robh@kernel.org>
+
+[ Upstream commit 1bc12d301594eafde0a8529d28d459af81053b3a ]
+
+The common touchscreen properties are all 32-bit, not 16-bit. These
+properties must not be too important as they are all ignored in case of an
+error reading them.
+
+Signed-off-by: Rob Herring <robh@kernel.org>
+Link: https://lore.kernel.org/r/Yk3moe6Hz8ELM0iS@robh.at.kernel.org'
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/boot/dts/freescale/imx8mm-var-som.dtsi | 8 ++++----
+ arch/arm64/boot/dts/freescale/imx8mn-var-som.dtsi | 8 ++++----
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/arch/arm64/boot/dts/freescale/imx8mm-var-som.dtsi b/arch/arm64/boot/dts/freescale/imx8mm-var-som.dtsi
+index 49082529764f..0fac1f3f7f47 100644
+--- a/arch/arm64/boot/dts/freescale/imx8mm-var-som.dtsi
++++ b/arch/arm64/boot/dts/freescale/imx8mm-var-som.dtsi
+@@ -89,12 +89,12 @@
+               pendown-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
+               ti,x-min = /bits/ 16 <125>;
+-              touchscreen-size-x = /bits/ 16 <4008>;
++              touchscreen-size-x = <4008>;
+               ti,y-min = /bits/ 16 <282>;
+-              touchscreen-size-y = /bits/ 16 <3864>;
++              touchscreen-size-y = <3864>;
+               ti,x-plate-ohms = /bits/ 16 <180>;
+-              touchscreen-max-pressure = /bits/ 16 <255>;
+-              touchscreen-average-samples = /bits/ 16 <10>;
++              touchscreen-max-pressure = <255>;
++              touchscreen-average-samples = <10>;
+               ti,debounce-tol = /bits/ 16 <3>;
+               ti,debounce-rep = /bits/ 16 <1>;
+               ti,settle-delay-usec = /bits/ 16 <150>;
+diff --git a/arch/arm64/boot/dts/freescale/imx8mn-var-som.dtsi b/arch/arm64/boot/dts/freescale/imx8mn-var-som.dtsi
+index 7f356edf9f91..f6287f174355 100644
+--- a/arch/arm64/boot/dts/freescale/imx8mn-var-som.dtsi
++++ b/arch/arm64/boot/dts/freescale/imx8mn-var-som.dtsi
+@@ -70,12 +70,12 @@
+               pendown-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
+               ti,x-min = /bits/ 16 <125>;
+-              touchscreen-size-x = /bits/ 16 <4008>;
++              touchscreen-size-x = <4008>;
+               ti,y-min = /bits/ 16 <282>;
+-              touchscreen-size-y = /bits/ 16 <3864>;
++              touchscreen-size-y = <3864>;
+               ti,x-plate-ohms = /bits/ 16 <180>;
+-              touchscreen-max-pressure = /bits/ 16 <255>;
+-              touchscreen-average-samples = /bits/ 16 <10>;
++              touchscreen-max-pressure = <255>;
++              touchscreen-average-samples = <10>;
+               ti,debounce-tol = /bits/ 16 <3>;
+               ti,debounce-rep = /bits/ 16 <1>;
+               ti,settle-delay-usec = /bits/ 16 <150>;
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm64-mm-fix-p-d_leaf.patch b/queue-5.10/arm64-mm-fix-p-d_leaf.patch
new file mode 100644 (file)
index 0000000..b791a84
--- /dev/null
@@ -0,0 +1,49 @@
+From 10472e2527c0bb2430184fdab3cb7b75cc98e185 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 Apr 2022 14:00:33 +0800
+Subject: arm64: mm: fix p?d_leaf()
+
+From: Muchun Song <songmuchun@bytedance.com>
+
+[ Upstream commit 23bc8f69f0eceecbb87c3801d2e48827d2dca92b ]
+
+The pmd_leaf() is used to test a leaf mapped PMD, however, it misses
+the PROT_NONE mapped PMD on arm64.  Fix it.  A real world issue [1]
+caused by this was reported by Qian Cai. Also fix pud_leaf().
+
+Link: https://patchwork.kernel.org/comment/24798260/ [1]
+Fixes: 8aa82df3c123 ("arm64: mm: add p?d_leaf() definitions")
+Reported-by: Qian Cai <quic_qiancai@quicinc.com>
+Signed-off-by: Muchun Song <songmuchun@bytedance.com>
+Link: https://lore.kernel.org/r/20220422060033.48711-1-songmuchun@bytedance.com
+Signed-off-by: Will Deacon <will@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/include/asm/pgtable.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
+index 9cf8e304bb56..3f74db7b0a31 100644
+--- a/arch/arm64/include/asm/pgtable.h
++++ b/arch/arm64/include/asm/pgtable.h
+@@ -516,7 +516,7 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
+                                PMD_TYPE_TABLE)
+ #define pmd_sect(pmd)         ((pmd_val(pmd) & PMD_TYPE_MASK) == \
+                                PMD_TYPE_SECT)
+-#define pmd_leaf(pmd)         pmd_sect(pmd)
++#define pmd_leaf(pmd)         (pmd_present(pmd) && !pmd_table(pmd))
+ #define pmd_bad(pmd)          (!pmd_table(pmd))
+ #if defined(CONFIG_ARM64_64K_PAGES) || CONFIG_PGTABLE_LEVELS < 3
+@@ -603,7 +603,7 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)
+ #define pud_none(pud)         (!pud_val(pud))
+ #define pud_bad(pud)          (!pud_table(pud))
+ #define pud_present(pud)      pte_present(pud_pte(pud))
+-#define pud_leaf(pud)         pud_sect(pud)
++#define pud_leaf(pud)         (pud_present(pud) && !pud_table(pud))
+ #define pud_valid(pud)                pte_valid(pud_pte(pud))
+ static inline void set_pud(pud_t *pudp, pud_t pud)
+-- 
+2.35.1
+
diff --git a/queue-5.10/arm64-mm-remove-pud-pmd-_table_bit-from-pud-pmd-_bad.patch b/queue-5.10/arm64-mm-remove-pud-pmd-_table_bit-from-pud-pmd-_bad.patch
new file mode 100644 (file)
index 0000000..3d9eb64
--- /dev/null
@@ -0,0 +1,63 @@
+From 6762d4b5e4bb5070385c47ba8c91e5e604705924 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 10 May 2021 16:37:51 +0530
+Subject: arm64/mm: Remove [PUD|PMD]_TABLE_BIT from [pud|pmd]_bad()
+
+From: Anshuman Khandual <anshuman.khandual@arm.com>
+
+[ Upstream commit e377ab82311af95c99648c6424a6b888a0ccb102 ]
+
+Semantics wise, [pud|pmd]_bad() have always implied that a given [PUD|PMD]
+entry does not have a pointer to the next level page table. This had been
+made clear in the commit a1c76574f345 ("arm64: mm: use *_sect to check for
+section maps"). Hence explicitly check for a table entry rather than just
+testing a single bit. This basically redefines [pud|pmd]_bad() in terms of
+[pud|pmd]_table() making the semantics clear.
+
+Cc: Catalin Marinas <catalin.marinas@arm.com>
+Cc: Will Deacon <will@kernel.org>
+Cc: Mark Rutland <mark.rutland@arm.com>
+Cc: linux-arm-kernel@lists.infradead.org
+Cc: linux-kernel@vger.kernel.org
+Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
+Acked-by: Mark Rutland <mark.rutland@arm.com>
+Acked-by: Catalin Marinas <catalin.marinas@arm.com>
+Acked-by: Mark Rutland <mark.rutland@arm.com>
+Link: https://lore.kernel.org/r/1620644871-26280-1-git-send-email-anshuman.khandual@arm.com
+Signed-off-by: Will Deacon <will@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/arm64/include/asm/pgtable.h | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
+index f3a70dc7c594..9cf8e304bb56 100644
+--- a/arch/arm64/include/asm/pgtable.h
++++ b/arch/arm64/include/asm/pgtable.h
+@@ -512,13 +512,12 @@ extern pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
+ #define pmd_none(pmd)         (!pmd_val(pmd))
+-#define pmd_bad(pmd)          (!(pmd_val(pmd) & PMD_TABLE_BIT))
+-
+ #define pmd_table(pmd)                ((pmd_val(pmd) & PMD_TYPE_MASK) == \
+                                PMD_TYPE_TABLE)
+ #define pmd_sect(pmd)         ((pmd_val(pmd) & PMD_TYPE_MASK) == \
+                                PMD_TYPE_SECT)
+ #define pmd_leaf(pmd)         pmd_sect(pmd)
++#define pmd_bad(pmd)          (!pmd_table(pmd))
+ #if defined(CONFIG_ARM64_64K_PAGES) || CONFIG_PGTABLE_LEVELS < 3
+ static inline bool pud_sect(pud_t pud) { return false; }
+@@ -602,7 +601,7 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)
+       pr_err("%s:%d: bad pmd %016llx.\n", __FILE__, __LINE__, pmd_val(e))
+ #define pud_none(pud)         (!pud_val(pud))
+-#define pud_bad(pud)          (!(pud_val(pud) & PUD_TABLE_BIT))
++#define pud_bad(pud)          (!pud_table(pud))
+ #define pud_present(pud)      pte_present(pud_pte(pud))
+ #define pud_leaf(pud)         pud_sect(pud)
+ #define pud_valid(pud)                pte_valid(pud_pte(pud))
+-- 
+2.35.1
+
diff --git a/queue-5.10/asoc-atmel-remove-system-clock-tree-configuration-fo.patch b/queue-5.10/asoc-atmel-remove-system-clock-tree-configuration-fo.patch
new file mode 100644 (file)
index 0000000..4a62726
--- /dev/null
@@ -0,0 +1,142 @@
+From 04cd71b2ccd2bfde3f518e8699056b4b2db203cc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 25 Mar 2022 15:42:39 +0000
+Subject: ASoC: atmel: Remove system clock tree configuration for at91sam9g20ek
+
+From: Mark Brown <broonie@kernel.org>
+
+[ Upstream commit c775cbf62ed4911e4f0f23880f01815753123690 ]
+
+The MCLK of the WM8731 on the AT91SAM9G20-EK board is connected to the
+PCK0 output of the SoC, intended in the reference software to be supplied
+using PLLB and programmed to 12MHz. As originally written for use with a
+board file the audio driver was responsible for configuring the entire tree
+but in the conversion to the common clock framework the registration of
+the named pck0 and pllb clocks was removed so the driver has failed to
+instantiate ever since.
+
+Since the WM8731 driver has had support for managing a MCLK provided via
+the common clock framework for some time we can simply drop all the clock
+management code from the machine driver other than configuration of the
+sysclk rate, the CODEC driver still respects that configuration from the
+machine driver.
+
+Fixes: ff78a189b0ae55f ("ARM: at91: remove old at91-specific clock driver")
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Reviewed-by: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
+Link: https://lore.kernel.org/r/20220325154241.1600757-2-broonie@kernel.org
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/atmel/sam9g20_wm8731.c | 61 --------------------------------
+ 1 file changed, 61 deletions(-)
+
+diff --git a/sound/soc/atmel/sam9g20_wm8731.c b/sound/soc/atmel/sam9g20_wm8731.c
+index 8a55d59a6c2a..d243de5f23dc 100644
+--- a/sound/soc/atmel/sam9g20_wm8731.c
++++ b/sound/soc/atmel/sam9g20_wm8731.c
+@@ -46,35 +46,6 @@
+  */
+ #undef ENABLE_MIC_INPUT
+-static struct clk *mclk;
+-
+-static int at91sam9g20ek_set_bias_level(struct snd_soc_card *card,
+-                                      struct snd_soc_dapm_context *dapm,
+-                                      enum snd_soc_bias_level level)
+-{
+-      static int mclk_on;
+-      int ret = 0;
+-
+-      switch (level) {
+-      case SND_SOC_BIAS_ON:
+-      case SND_SOC_BIAS_PREPARE:
+-              if (!mclk_on)
+-                      ret = clk_enable(mclk);
+-              if (ret == 0)
+-                      mclk_on = 1;
+-              break;
+-
+-      case SND_SOC_BIAS_OFF:
+-      case SND_SOC_BIAS_STANDBY:
+-              if (mclk_on)
+-                      clk_disable(mclk);
+-              mclk_on = 0;
+-              break;
+-      }
+-
+-      return ret;
+-}
+-
+ static const struct snd_soc_dapm_widget at91sam9g20ek_dapm_widgets[] = {
+       SND_SOC_DAPM_MIC("Int Mic", NULL),
+       SND_SOC_DAPM_SPK("Ext Spk", NULL),
+@@ -135,7 +106,6 @@ static struct snd_soc_card snd_soc_at91sam9g20ek = {
+       .owner = THIS_MODULE,
+       .dai_link = &at91sam9g20ek_dai,
+       .num_links = 1,
+-      .set_bias_level = at91sam9g20ek_set_bias_level,
+       .dapm_widgets = at91sam9g20ek_dapm_widgets,
+       .num_dapm_widgets = ARRAY_SIZE(at91sam9g20ek_dapm_widgets),
+@@ -148,7 +118,6 @@ static int at91sam9g20ek_audio_probe(struct platform_device *pdev)
+ {
+       struct device_node *np = pdev->dev.of_node;
+       struct device_node *codec_np, *cpu_np;
+-      struct clk *pllb;
+       struct snd_soc_card *card = &snd_soc_at91sam9g20ek;
+       int ret;
+@@ -162,31 +131,6 @@ static int at91sam9g20ek_audio_probe(struct platform_device *pdev)
+               return -EINVAL;
+       }
+-      /*
+-       * Codec MCLK is supplied by PCK0 - set it up.
+-       */
+-      mclk = clk_get(NULL, "pck0");
+-      if (IS_ERR(mclk)) {
+-              dev_err(&pdev->dev, "Failed to get MCLK\n");
+-              ret = PTR_ERR(mclk);
+-              goto err;
+-      }
+-
+-      pllb = clk_get(NULL, "pllb");
+-      if (IS_ERR(pllb)) {
+-              dev_err(&pdev->dev, "Failed to get PLLB\n");
+-              ret = PTR_ERR(pllb);
+-              goto err_mclk;
+-      }
+-      ret = clk_set_parent(mclk, pllb);
+-      clk_put(pllb);
+-      if (ret != 0) {
+-              dev_err(&pdev->dev, "Failed to set MCLK parent\n");
+-              goto err_mclk;
+-      }
+-
+-      clk_set_rate(mclk, MCLK_RATE);
+-
+       card->dev = &pdev->dev;
+       /* Parse device node info */
+@@ -230,9 +174,6 @@ static int at91sam9g20ek_audio_probe(struct platform_device *pdev)
+       return ret;
+-err_mclk:
+-      clk_put(mclk);
+-      mclk = NULL;
+ err:
+       atmel_ssc_put_audio(0);
+       return ret;
+@@ -242,8 +183,6 @@ static int at91sam9g20ek_audio_remove(struct platform_device *pdev)
+ {
+       struct snd_soc_card *card = platform_get_drvdata(pdev);
+-      clk_disable(mclk);
+-      mclk = NULL;
+       snd_soc_unregister_card(card);
+       atmel_ssc_put_audio(0);
+-- 
+2.35.1
+
diff --git a/queue-5.10/asoc-codecs-wcd934x-do-not-switch-off-sido-buck-when.patch b/queue-5.10/asoc-codecs-wcd934x-do-not-switch-off-sido-buck-when.patch
new file mode 100644 (file)
index 0000000..7166a94
--- /dev/null
@@ -0,0 +1,86 @@
+From 9ff3b222e6b52fc93f4dbcd4e96d05b219c70341 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 10:43:13 +0100
+Subject: ASoC: codecs: wcd934x: do not switch off SIDO Buck when codec is in
+ use
+
+From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
+
+[ Upstream commit db6dd1bee63d1d88fbddfe07af800af5948ac28e ]
+
+SIDO(Single-Inductor Dual-Ouput) Buck powers up both analog and digital
+circuits along with internal memory, powering off this is the last thing
+that codec should do when going to very low power.
+
+Current code was powering off this Buck if there are no users of sysclk,
+which is not correct. Powering off this buck will result in no register access.
+This code path was never tested until recently after adding pm support
+in SoundWire controller. Fix this by removing the buck poweroff when the
+codec is active and also the code that is not used.
+
+Without this patch all the read/write transactions will never complete and
+results in SLIMBus Errors like:
+
+qcom,slim-ngd qcom,slim-ngd.1: Tx:MT:0x0, MC:0x60, LA:0xcf failed:-110
+wcd934x-codec wcd934x-codec.1.auto: ASoC: error at soc_component_read_no_lock
+       on wcd934x-codec.1.auto for register: [0x00000d05] -110
+qcom,slim-ngd-ctrl 171c0000.slim: Error Interrupt received 0x82000000
+
+Reported-by: Amit Pundir <amit.pundir@linaro.org>
+Fixes: a61f3b4f476e ("ASoC: wcd934x: add support to wcd9340/wcd9341 codec")
+Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
+Tested-by: Amit Pundir <amit.pundir@linaro.org>
+Link: https://lore.kernel.org/r/20220407094313.2880-1-srinivas.kandagatla@linaro.org
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/wcd934x.c | 26 +-------------------------
+ 1 file changed, 1 insertion(+), 25 deletions(-)
+
+diff --git a/sound/soc/codecs/wcd934x.c b/sound/soc/codecs/wcd934x.c
+index 8540ac230d0e..fd704df9b175 100644
+--- a/sound/soc/codecs/wcd934x.c
++++ b/sound/soc/codecs/wcd934x.c
+@@ -1188,29 +1188,7 @@ static int wcd934x_set_sido_input_src(struct wcd934x_codec *wcd, int sido_src)
+       if (sido_src == wcd->sido_input_src)
+               return 0;
+-      if (sido_src == SIDO_SOURCE_INTERNAL) {
+-              regmap_update_bits(wcd->regmap, WCD934X_ANA_BUCK_CTL,
+-                                 WCD934X_ANA_BUCK_HI_ACCU_EN_MASK, 0);
+-              usleep_range(100, 110);
+-              regmap_update_bits(wcd->regmap, WCD934X_ANA_BUCK_CTL,
+-                                 WCD934X_ANA_BUCK_HI_ACCU_PRE_ENX_MASK, 0x0);
+-              usleep_range(100, 110);
+-              regmap_update_bits(wcd->regmap, WCD934X_ANA_RCO,
+-                                 WCD934X_ANA_RCO_BG_EN_MASK, 0);
+-              usleep_range(100, 110);
+-              regmap_update_bits(wcd->regmap, WCD934X_ANA_BUCK_CTL,
+-                                 WCD934X_ANA_BUCK_PRE_EN1_MASK,
+-                                 WCD934X_ANA_BUCK_PRE_EN1_ENABLE);
+-              usleep_range(100, 110);
+-              regmap_update_bits(wcd->regmap, WCD934X_ANA_BUCK_CTL,
+-                                 WCD934X_ANA_BUCK_PRE_EN2_MASK,
+-                                 WCD934X_ANA_BUCK_PRE_EN2_ENABLE);
+-              usleep_range(100, 110);
+-              regmap_update_bits(wcd->regmap, WCD934X_ANA_BUCK_CTL,
+-                                 WCD934X_ANA_BUCK_HI_ACCU_EN_MASK,
+-                                 WCD934X_ANA_BUCK_HI_ACCU_ENABLE);
+-              usleep_range(100, 110);
+-      } else if (sido_src == SIDO_SOURCE_RCO_BG) {
++      if (sido_src == SIDO_SOURCE_RCO_BG) {
+               regmap_update_bits(wcd->regmap, WCD934X_ANA_RCO,
+                                  WCD934X_ANA_RCO_BG_EN_MASK,
+                                  WCD934X_ANA_RCO_BG_ENABLE);
+@@ -1296,8 +1274,6 @@ static int wcd934x_disable_ana_bias_and_syclk(struct wcd934x_codec *wcd)
+       regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG,
+                          WCD934X_EXT_CLK_BUF_EN_MASK |
+                          WCD934X_MCLK_EN_MASK, 0x0);
+-      wcd934x_set_sido_input_src(wcd, SIDO_SOURCE_INTERNAL);
+-
+       regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS,
+                          WCD934X_ANA_BIAS_EN_MASK, 0);
+       regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS,
+-- 
+2.35.1
+
diff --git a/queue-5.10/asoc-msm8916-wcd-digital-check-failure-for-devm_snd_.patch b/queue-5.10/asoc-msm8916-wcd-digital-check-failure-for-devm_snd_.patch
new file mode 100644 (file)
index 0000000..cbb30c0
--- /dev/null
@@ -0,0 +1,47 @@
+From b44c17dac1e1c510d1b0d5ab38346e1a54456bb9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 3 Apr 2022 11:52:39 +0000
+Subject: ASoC: msm8916-wcd-digital: Check failure for
+ devm_snd_soc_register_component
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit e927b05f3cc20de87f6b7d912a5bbe556931caca ]
+
+devm_snd_soc_register_component() may fails, we should check the error
+and do the corresponding error handling.
+
+Fixes: 150db8c5afa1 ("ASoC: codecs: Add msm8916-wcd digital codec")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Link: https://lore.kernel.org/r/20220403115239.30140-1-linmq006@gmail.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ sound/soc/codecs/msm8916-wcd-digital.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/sound/soc/codecs/msm8916-wcd-digital.c b/sound/soc/codecs/msm8916-wcd-digital.c
+index 9ad7fc0baf07..20a07c92b2fc 100644
+--- a/sound/soc/codecs/msm8916-wcd-digital.c
++++ b/sound/soc/codecs/msm8916-wcd-digital.c
+@@ -1206,9 +1206,16 @@ static int msm8916_wcd_digital_probe(struct platform_device *pdev)
+       dev_set_drvdata(dev, priv);
+-      return devm_snd_soc_register_component(dev, &msm8916_wcd_digital,
++      ret = devm_snd_soc_register_component(dev, &msm8916_wcd_digital,
+                                     msm8916_wcd_digital_dai,
+                                     ARRAY_SIZE(msm8916_wcd_digital_dai));
++      if (ret)
++              goto err_mclk;
++
++      return 0;
++
++err_mclk:
++      clk_disable_unprepare(priv->mclk);
+ err_clk:
+       clk_disable_unprepare(priv->ahbclk);
+       return ret;
+-- 
+2.35.1
+
diff --git a/queue-5.10/brcmfmac-sdio-fix-undefined-behavior-due-to-shift-ov.patch b/queue-5.10/brcmfmac-sdio-fix-undefined-behavior-due-to-shift-ov.patch
new file mode 100644 (file)
index 0000000..beefb49
--- /dev/null
@@ -0,0 +1,59 @@
+From 04002cc64976e377c7df4c56c99c5917118c3274 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 5 Apr 2022 18:55:37 +0200
+Subject: brcmfmac: sdio: Fix undefined behavior due to shift overflowing the
+ constant
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Borislav Petkov <bp@alien8.de>
+
+[ Upstream commit 6fb3a5868b2117611f41e421e10e6a8c2a13039a ]
+
+Fix:
+
+  drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c: In function ‘brcmf_sdio_drivestrengthinit’:
+  drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c:3798:2: error: case label does not reduce to an integer constant
+    case SDIOD_DRVSTR_KEY(BRCM_CC_43143_CHIP_ID, 17):
+    ^~~~
+  drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c:3809:2: error: case label does not reduce to an integer constant
+    case SDIOD_DRVSTR_KEY(BRCM_CC_43362_CHIP_ID, 13):
+    ^~~~
+
+See https://lore.kernel.org/r/YkwQ6%2BtIH8GQpuct@zn.tnic for the gory
+details as to why it triggers with older gccs only.
+
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Cc: Arend van Spriel <aspriel@gmail.com>
+Cc: Franky Lin <franky.lin@broadcom.com>
+Cc: Hante Meuleman <hante.meuleman@broadcom.com>
+Cc: Kalle Valo <kvalo@kernel.org>
+Cc: "David S. Miller" <davem@davemloft.net>
+Cc: Jakub Kicinski <kuba@kernel.org>
+Cc: brcm80211-dev-list.pdl@broadcom.com
+Cc: netdev@vger.kernel.org
+Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://lore.kernel.org/r/Ykx0iRlvtBnKqtbG@zn.tnic
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+index 6d5d5c39c635..9929e90866f0 100644
+--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+@@ -557,7 +557,7 @@ enum brcmf_sdio_frmtype {
+       BRCMF_SDIO_FT_SUB,
+ };
+-#define SDIOD_DRVSTR_KEY(chip, pmu)     (((chip) << 16) | (pmu))
++#define SDIOD_DRVSTR_KEY(chip, pmu)     (((unsigned int)(chip) << 16) | (pmu))
+ /* SDIO Pad drive strength to select value mappings */
+ struct sdiod_drive_str {
+-- 
+2.35.1
+
diff --git a/queue-5.10/cifs-check-the-iocb_direct-flag-not-o_direct.patch b/queue-5.10/cifs-check-the-iocb_direct-flag-not-o_direct.patch
new file mode 100644 (file)
index 0000000..4ae46e9
--- /dev/null
@@ -0,0 +1,39 @@
+From f09d3c6e6c9feef313c4c2f02c452ed0328a4921 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 00:03:14 +0100
+Subject: cifs: Check the IOCB_DIRECT flag, not O_DIRECT
+
+From: David Howells <dhowells@redhat.com>
+
+[ Upstream commit 994fd530a512597ffcd713b0f6d5bc916c5698f0 ]
+
+Use the IOCB_DIRECT indicator flag on the I/O context rather than checking to
+see if the file was opened O_DIRECT.
+
+Signed-off-by: David Howells <dhowells@redhat.com>
+cc: Steve French <sfrench@samba.org>
+cc: Shyam Prasad N <nspmangalore@gmail.com>
+cc: Rohith Surabattula <rohiths.msft@gmail.com>
+cc: linux-cifs@vger.kernel.org
+Signed-off-by: Steve French <stfrench@microsoft.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/cifs/cifsfs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
+index aa5a4d759ca2..370188b2a55d 100644
+--- a/fs/cifs/cifsfs.c
++++ b/fs/cifs/cifsfs.c
+@@ -898,7 +898,7 @@ cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter)
+       ssize_t rc;
+       struct inode *inode = file_inode(iocb->ki_filp);
+-      if (iocb->ki_filp->f_flags & O_DIRECT)
++      if (iocb->ki_flags & IOCB_DIRECT)
+               return cifs_user_readv(iocb, iter);
+       rc = cifs_revalidate_mapping(inode);
+-- 
+2.35.1
+
diff --git a/queue-5.10/dmaengine-idxd-add-ro-check-for-wq-max_batch_size-wr.patch b/queue-5.10/dmaengine-idxd-add-ro-check-for-wq-max_batch_size-wr.patch
new file mode 100644 (file)
index 0000000..fcaf637
--- /dev/null
@@ -0,0 +1,40 @@
+From c5c69769a0101493765910ccd3016a0984cd2c36 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Apr 2022 15:08:55 -0700
+Subject: dmaengine: idxd: add RO check for wq max_batch_size write
+
+From: Dave Jiang <dave.jiang@intel.com>
+
+[ Upstream commit 66903461ffed0b66fc3e0200082d4e09365aacdc ]
+
+Block wq_max_batch_size_store() when the device is configured as read-only
+and not configurable.
+
+Fixes: e7184b159dd3 ("dmaengine: idxd: add support for configurable max wq batch size")
+Reported-by: Bernice Zhang <bernice.zhang@intel.com>
+Tested-by: Bernice Zhang <bernice.zhang@intel.com>
+Signed-off-by: Dave Jiang <dave.jiang@intel.com>
+Link: https://lore.kernel.org/r/164971493551.2201159.1942042593642155209.stgit@djiang5-desk3.ch.intel.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/idxd/sysfs.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/dma/idxd/sysfs.c b/drivers/dma/idxd/sysfs.c
+index 7b41cdff1a2c..5bf4b4be64e4 100644
+--- a/drivers/dma/idxd/sysfs.c
++++ b/drivers/dma/idxd/sysfs.c
+@@ -1132,6 +1132,9 @@ static ssize_t wq_max_batch_size_store(struct device *dev, struct device_attribu
+       u64 batch_size;
+       int rc;
++      if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
++              return -EPERM;
++
+       if (wq->state != IDXD_WQ_DISABLED)
+               return -EPERM;
+-- 
+2.35.1
+
diff --git a/queue-5.10/dmaengine-idxd-add-ro-check-for-wq-max_transfer_size.patch b/queue-5.10/dmaengine-idxd-add-ro-check-for-wq-max_transfer_size.patch
new file mode 100644 (file)
index 0000000..31b7566
--- /dev/null
@@ -0,0 +1,40 @@
+From bd5c8d69e9f287f83e047e32475a2ca71c993071 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Apr 2022 15:08:01 -0700
+Subject: dmaengine: idxd: add RO check for wq max_transfer_size write
+
+From: Dave Jiang <dave.jiang@intel.com>
+
+[ Upstream commit 505a2d1032ae656b0a8c736be110255503941cde ]
+
+Block wq_max_transfer_size_store() when the device is configured as
+read-only and not configurable.
+
+Fixes: d7aad5550eca ("dmaengine: idxd: add support for configurable max wq xfer size")
+Reported-by: Bernice Zhang <bernice.zhang@intel.com>
+Tested-by: Bernice Zhang <bernice.zhang@intel.com>
+Signed-off-by: Dave Jiang <dave.jiang@intel.com>
+Link: https://lore.kernel.org/r/164971488154.2200913.10706665404118545941.stgit@djiang5-desk3.ch.intel.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/idxd/sysfs.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/dma/idxd/sysfs.c b/drivers/dma/idxd/sysfs.c
+index 5bf4b4be64e4..51af0dfc3c63 100644
+--- a/drivers/dma/idxd/sysfs.c
++++ b/drivers/dma/idxd/sysfs.c
+@@ -1098,6 +1098,9 @@ static ssize_t wq_max_transfer_size_store(struct device *dev, struct device_attr
+       u64 xfer_size;
+       int rc;
++      if (!test_bit(IDXD_FLAG_CONFIGURABLE, &idxd->flags))
++              return -EPERM;
++
+       if (wq->state != IDXD_WQ_DISABLED)
+               return -EPERM;
+-- 
+2.35.1
+
diff --git a/queue-5.10/dmaengine-imx-sdma-fix-error-checking-in-sdma_event_.patch b/queue-5.10/dmaengine-imx-sdma-fix-error-checking-in-sdma_event_.patch
new file mode 100644 (file)
index 0000000..5384814
--- /dev/null
@@ -0,0 +1,46 @@
+From 093340c9be7c51f3b115ba2a82bc5321d6ac4e2a Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 8 Mar 2022 06:49:51 +0000
+Subject: dmaengine: imx-sdma: Fix error checking in sdma_event_remap
+
+From: Miaoqian Lin <linmq006@gmail.com>
+
+[ Upstream commit 7104b9cb35a33ad803a1adbbfa50569b008faf15 ]
+
+of_parse_phandle() returns NULL on errors, rather than error
+pointers. Using NULL check on grp_np to fix this.
+
+Fixes: d078cd1b4185 ("dmaengine: imx-sdma: Add imx6sx platform support")
+Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
+Link: https://lore.kernel.org/r/20220308064952.15743-1-linmq006@gmail.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/imx-sdma.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
+index 306f93e4b26a..792c91cd1608 100644
+--- a/drivers/dma/imx-sdma.c
++++ b/drivers/dma/imx-sdma.c
+@@ -1789,7 +1789,7 @@ static int sdma_event_remap(struct sdma_engine *sdma)
+       u32 reg, val, shift, num_map, i;
+       int ret = 0;
+-      if (IS_ERR(np) || IS_ERR(gpr_np))
++      if (IS_ERR(np) || !gpr_np)
+               goto out;
+       event_remap = of_find_property(np, propname, NULL);
+@@ -1837,7 +1837,7 @@ static int sdma_event_remap(struct sdma_engine *sdma)
+       }
+ out:
+-      if (!IS_ERR(gpr_np))
++      if (gpr_np)
+               of_node_put(gpr_np);
+       return ret;
+-- 
+2.35.1
+
diff --git a/queue-5.10/dmaengine-mediatek-fix-pm-usage-reference-leak-of-mt.patch b/queue-5.10/dmaengine-mediatek-fix-pm-usage-reference-leak-of-mt.patch
new file mode 100644 (file)
index 0000000..a2ac2c2
--- /dev/null
@@ -0,0 +1,66 @@
+From e2840529b1795983a2bd903ac6019a4bde87d4c5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 19 Mar 2022 10:21:42 +0800
+Subject: dmaengine: mediatek:Fix PM usage reference leak of
+ mtk_uart_apdma_alloc_chan_resources
+
+From: zhangqilong <zhangqilong3@huawei.com>
+
+[ Upstream commit 545b2baac89b859180e51215468c05d85ea8465a ]
+
+pm_runtime_get_sync will increment pm usage counter even it failed.
+Forgetting to putting operation will result in reference leak here.
+We fix it:
+1) Replacing it with pm_runtime_resume_and_get to keep usage counter
+   balanced.
+2) Add putting operation before returning error.
+
+Fixes:9135408c3ace4 ("dmaengine: mediatek: Add MediaTek UART APDMA support")
+Signed-off-by: Zhang Qilong <zhangqilong3@huawei.com>
+Link: https://lore.kernel.org/r/20220319022142.142709-1-zhangqilong3@huawei.com
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/dma/mediatek/mtk-uart-apdma.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/dma/mediatek/mtk-uart-apdma.c b/drivers/dma/mediatek/mtk-uart-apdma.c
+index 375e7e647df6..a1517ef1f4a0 100644
+--- a/drivers/dma/mediatek/mtk-uart-apdma.c
++++ b/drivers/dma/mediatek/mtk-uart-apdma.c
+@@ -274,7 +274,7 @@ static int mtk_uart_apdma_alloc_chan_resources(struct dma_chan *chan)
+       unsigned int status;
+       int ret;
+-      ret = pm_runtime_get_sync(mtkd->ddev.dev);
++      ret = pm_runtime_resume_and_get(mtkd->ddev.dev);
+       if (ret < 0) {
+               pm_runtime_put_noidle(chan->device->dev);
+               return ret;
+@@ -288,18 +288,21 @@ static int mtk_uart_apdma_alloc_chan_resources(struct dma_chan *chan)
+       ret = readx_poll_timeout(readl, c->base + VFF_EN,
+                         status, !status, 10, 100);
+       if (ret)
+-              return ret;
++              goto err_pm;
+       ret = request_irq(c->irq, mtk_uart_apdma_irq_handler,
+                         IRQF_TRIGGER_NONE, KBUILD_MODNAME, chan);
+       if (ret < 0) {
+               dev_err(chan->device->dev, "Can't request dma IRQ\n");
+-              return -EINVAL;
++              ret = -EINVAL;
++              goto err_pm;
+       }
+       if (mtkd->support_33bits)
+               mtk_uart_apdma_write(c, VFF_4G_SUPPORT, VFF_4G_SUPPORT_CLR_B);
++err_pm:
++      pm_runtime_put_noidle(mtkd->ddev.dev);
+       return ret;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.10/dpaa_eth-fix-missing-of_node_put-in-dpaa_get_ts_info.patch b/queue-5.10/dpaa_eth-fix-missing-of_node_put-in-dpaa_get_ts_info.patch
new file mode 100644 (file)
index 0000000..9a83222
--- /dev/null
@@ -0,0 +1,46 @@
+From 29edf884c73cdd84bfd21ab6f541133a7eabcdaa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 8 Apr 2022 09:49:41 +0000
+Subject: dpaa_eth: Fix missing of_node_put in dpaa_get_ts_info()
+
+From: Lv Ruyi <lv.ruyi@zte.com.cn>
+
+[ Upstream commit 1a7eb80d170c28be2928433702256fe2a0bd1e0f ]
+
+Both of of_get_parent() and of_parse_phandle() return node pointer with
+refcount incremented, use of_node_put() on it to decrease refcount
+when done.
+
+Reported-by: Zeal Robot <zealci@zte.com.cn>
+Signed-off-by: Lv Ruyi <lv.ruyi@zte.com.cn>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c b/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c
+index 1268996b7030..2f9075429c43 100644
+--- a/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c
++++ b/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c
+@@ -489,11 +489,15 @@ static int dpaa_get_ts_info(struct net_device *net_dev,
+       info->phc_index = -1;
+       fman_node = of_get_parent(mac_node);
+-      if (fman_node)
++      if (fman_node) {
+               ptp_node = of_parse_phandle(fman_node, "ptimer-handle", 0);
++              of_node_put(fman_node);
++      }
+-      if (ptp_node)
++      if (ptp_node) {
+               ptp_dev = of_find_device_by_node(ptp_node);
++              of_node_put(ptp_node);
++      }
+       if (ptp_dev)
+               ptp = platform_get_drvdata(ptp_dev);
+-- 
+2.35.1
+
diff --git a/queue-5.10/drm-msm-mdp5-check-the-return-of-kzalloc.patch b/queue-5.10/drm-msm-mdp5-check-the-return-of-kzalloc.patch
new file mode 100644 (file)
index 0000000..5853569
--- /dev/null
@@ -0,0 +1,45 @@
+From d9c9e584b1be91525dfd9840efe560b7130cf786 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 10:31:51 +0800
+Subject: drm/msm/mdp5: check the return of kzalloc()
+
+From: Xiaoke Wang <xkernel.wang@foxmail.com>
+
+[ Upstream commit 047ae665577776b7feb11bd4f81f46627cff95e7 ]
+
+kzalloc() is a memory allocation function which can return NULL when
+some internal memory errors happen. So it is better to check it to
+prevent potential wrong memory access.
+
+Besides, since mdp5_plane_reset() is void type, so we should better
+set `plane-state` to NULL after releasing it.
+
+Signed-off-by: Xiaoke Wang <xkernel.wang@foxmail.com>
+Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Patchwork: https://patchwork.freedesktop.org/patch/481055/
+Link: https://lore.kernel.org/r/tencent_8E2A1C78140EE1784AB2FF4B2088CC0AB908@qq.com
+Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
+Signed-off-by: Rob Clark <robdclark@chromium.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
+index 83423092de2f..da0799333970 100644
+--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
++++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c
+@@ -179,7 +179,10 @@ static void mdp5_plane_reset(struct drm_plane *plane)
+               drm_framebuffer_put(plane->state->fb);
+       kfree(to_mdp5_plane_state(plane->state));
++      plane->state = NULL;
+       mdp5_state = kzalloc(sizeof(*mdp5_state), GFP_KERNEL);
++      if (!mdp5_state)
++              return;
+       /* assign default blend parameters */
+       mdp5_state->alpha = 255;
+-- 
+2.35.1
+
diff --git a/queue-5.10/esp-limit-skb_page_frag_refill-use-to-a-single-page.patch b/queue-5.10/esp-limit-skb_page_frag_refill-use-to-a-single-page.patch
new file mode 100644 (file)
index 0000000..a1c207c
--- /dev/null
@@ -0,0 +1,94 @@
+From 5747a76de308172a620ced427b8b9c160e17ad15 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 Apr 2022 10:10:50 +0200
+Subject: esp: limit skb_page_frag_refill use to a single page
+
+From: Sabrina Dubroca <sd@queasysnail.net>
+
+[ Upstream commit 5bd8baab087dff657e05387aee802e70304cc813 ]
+
+Commit ebe48d368e97 ("esp: Fix possible buffer overflow in ESP
+transformation") tried to fix skb_page_frag_refill usage in ESP by
+capping allocsize to 32k, but that doesn't completely solve the issue,
+as skb_page_frag_refill may return a single page. If that happens, we
+will write out of bounds, despite the check introduced in the previous
+patch.
+
+This patch forces COW in cases where we would end up calling
+skb_page_frag_refill with a size larger than a page (first in
+esp_output_head with tailen, then in esp_output_tail with
+skb->data_len).
+
+Fixes: cac2661c53f3 ("esp4: Avoid skb_cow_data whenever possible")
+Fixes: 03e2a30f6a27 ("esp6: Avoid skb_cow_data whenever possible")
+Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
+Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/net/esp.h | 2 --
+ net/ipv4/esp4.c   | 5 ++---
+ net/ipv6/esp6.c   | 5 ++---
+ 3 files changed, 4 insertions(+), 8 deletions(-)
+
+diff --git a/include/net/esp.h b/include/net/esp.h
+index 90cd02ff77ef..9c5637d41d95 100644
+--- a/include/net/esp.h
++++ b/include/net/esp.h
+@@ -4,8 +4,6 @@
+ #include <linux/skbuff.h>
+-#define ESP_SKB_FRAG_MAXSIZE (PAGE_SIZE << SKB_FRAG_PAGE_ORDER)
+-
+ struct ip_esp_hdr;
+ static inline struct ip_esp_hdr *ip_esp_hdr(const struct sk_buff *skb)
+diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c
+index 9aae82145bc1..20d738137841 100644
+--- a/net/ipv4/esp4.c
++++ b/net/ipv4/esp4.c
+@@ -448,7 +448,6 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *
+       struct page *page;
+       struct sk_buff *trailer;
+       int tailen = esp->tailen;
+-      unsigned int allocsz;
+       /* this is non-NULL only with TCP/UDP Encapsulation */
+       if (x->encap) {
+@@ -458,8 +457,8 @@ int esp_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info *
+                       return err;
+       }
+-      allocsz = ALIGN(skb->data_len + tailen, L1_CACHE_BYTES);
+-      if (allocsz > ESP_SKB_FRAG_MAXSIZE)
++      if (ALIGN(tailen, L1_CACHE_BYTES) > PAGE_SIZE ||
++          ALIGN(skb->data_len, L1_CACHE_BYTES) > PAGE_SIZE)
+               goto cow;
+       if (!skb_cloned(skb)) {
+diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c
+index 20c7bef6829e..cb28f8928f9e 100644
+--- a/net/ipv6/esp6.c
++++ b/net/ipv6/esp6.c
+@@ -483,7 +483,6 @@ int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info
+       struct page *page;
+       struct sk_buff *trailer;
+       int tailen = esp->tailen;
+-      unsigned int allocsz;
+       if (x->encap) {
+               int err = esp6_output_encap(x, skb, esp);
+@@ -492,8 +491,8 @@ int esp6_output_head(struct xfrm_state *x, struct sk_buff *skb, struct esp_info
+                       return err;
+       }
+-      allocsz = ALIGN(skb->data_len + tailen, L1_CACHE_BYTES);
+-      if (allocsz > ESP_SKB_FRAG_MAXSIZE)
++      if (ALIGN(tailen, L1_CACHE_BYTES) > PAGE_SIZE ||
++          ALIGN(skb->data_len, L1_CACHE_BYTES) > PAGE_SIZE)
+               goto cow;
+       if (!skb_cloned(skb)) {
+-- 
+2.35.1
+
diff --git a/queue-5.10/igc-fix-bug-scheduling-while-atomic.patch b/queue-5.10/igc-fix-bug-scheduling-while-atomic.patch
new file mode 100644 (file)
index 0000000..f8a5f6e
--- /dev/null
@@ -0,0 +1,118 @@
+From 28bff4ab8e925439593b6ee45637e154256336b5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 9 Mar 2022 08:19:19 +0200
+Subject: igc: Fix BUG: scheduling while atomic
+
+From: Sasha Neftin <sasha.neftin@intel.com>
+
+[ Upstream commit c80a29f0fe9b6f5457e0788e27d1110577eba99b ]
+
+Replace usleep_range() method with udelay() method to allow atomic contexts
+in low-level MDIO access functions.
+
+The following issue can be seen by doing the following:
+$ modprobe -r bonding
+$ modprobe -v bonding max_bonds=1 mode=1 miimon=100 use_carrier=0
+$ ip link set bond0 up
+$ ifenslave bond0 eth0 eth1
+
+[  982.357308] BUG: scheduling while atomic: kworker/u64:0/9/0x00000002
+[  982.364431] INFO: lockdep is turned off.
+[  982.368824] Modules linked in: bonding sctp ip6_udp_tunnel udp_tunnel mlx4_ib ib_uverbs ib_core mlx4_en mlx4_core nfp tls sunrpc intel_rapl_msr iTCO_wdt iTCO_vendor_support mxm_wmi dcdbas intel_rapl_common sb_edac x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel kvm irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_intel rapl intel_cstate intel_uncore pcspkr lpc_ich mei_me ipmi_ssif mei ipmi_si ipmi_devintf ipmi_msghandler wmi acpi_power_meter xfs libcrc32c sr_mod cdrom sd_mod t10_pi sg mgag200 drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm ahci libahci crc32c_intel libata i2c_algo_bit tg3 megaraid_sas igc dm_mirror dm_region_hash dm_log dm_mod [last unloaded: bonding]
+[  982.437941] CPU: 25 PID: 9 Comm: kworker/u64:0 Kdump: loaded Tainted: G        W        --------- -  - 4.18.0-348.el8.x86_64+debug #1
+[  982.451333] Hardware name: Dell Inc. PowerEdge R730/0H21J3, BIOS 2.7.0 12/005/2017
+[  982.459791] Workqueue: bond0 bond_mii_monitor [bonding]
+[  982.465622] Call Trace:
+[  982.468355]  dump_stack+0x8e/0xd0
+[  982.472056]  __schedule_bug.cold.60+0x3a/0x60
+[  982.476919]  __schedule+0x147b/0x1bc0
+[  982.481007]  ? firmware_map_remove+0x16b/0x16b
+[  982.485967]  ? hrtimer_fixup_init+0x40/0x40
+[  982.490625]  schedule+0xd9/0x250
+[  982.494227]  schedule_hrtimeout_range_clock+0x10d/0x2c0
+[  982.500058]  ? hrtimer_nanosleep_restart+0x130/0x130
+[  982.505598]  ? hrtimer_init_sleeper_on_stack+0x90/0x90
+[  982.511332]  ? usleep_range+0x88/0x130
+[  982.515514]  ? recalibrate_cpu_khz+0x10/0x10
+[  982.520279]  ? ktime_get+0xab/0x1c0
+[  982.524175]  ? usleep_range+0x88/0x130
+[  982.528355]  usleep_range+0xdd/0x130
+[  982.532344]  ? console_conditional_schedule+0x30/0x30
+[  982.537987]  ? igc_put_hw_semaphore+0x17/0x60 [igc]
+[  982.543432]  igc_read_phy_reg_gpy+0x111/0x2b0 [igc]
+[  982.548887]  igc_phy_has_link+0xfa/0x260 [igc]
+[  982.553847]  ? igc_get_phy_id+0x210/0x210 [igc]
+[  982.558894]  ? lock_acquire+0x34d/0x890
+[  982.563187]  ? lock_downgrade+0x710/0x710
+[  982.567659]  ? rcu_read_unlock+0x50/0x50
+[  982.572039]  igc_check_for_copper_link+0x106/0x210 [igc]
+[  982.577970]  ? igc_config_fc_after_link_up+0x840/0x840 [igc]
+[  982.584286]  ? rcu_read_unlock+0x50/0x50
+[  982.588661]  ? lock_release+0x591/0xb80
+[  982.592939]  ? lock_release+0x591/0xb80
+[  982.597220]  igc_has_link+0x113/0x330 [igc]
+[  982.601887]  ? lock_downgrade+0x710/0x710
+[  982.606362]  igc_ethtool_get_link+0x6d/0x90 [igc]
+[  982.611614]  bond_check_dev_link+0x131/0x2c0 [bonding]
+[  982.617350]  ? bond_time_in_interval+0xd0/0xd0 [bonding]
+[  982.623277]  ? rcu_read_lock_held+0x62/0xc0
+[  982.627944]  ? rcu_read_lock_sched_held+0xe0/0xe0
+[  982.633198]  bond_mii_monitor+0x314/0x2500 [bonding]
+[  982.638738]  ? lock_contended+0x880/0x880
+[  982.643214]  ? bond_miimon_link_change+0xa0/0xa0 [bonding]
+[  982.649336]  ? lock_acquire+0x34d/0x890
+[  982.653615]  ? lock_downgrade+0x710/0x710
+[  982.658089]  ? debug_object_deactivate+0x221/0x340
+[  982.663436]  ? rcu_read_unlock+0x50/0x50
+[  982.667811]  ? debug_print_object+0x2b0/0x2b0
+[  982.672672]  ? __switch_to_asm+0x41/0x70
+[  982.677049]  ? __switch_to_asm+0x35/0x70
+[  982.681426]  ? _raw_spin_unlock_irq+0x24/0x40
+[  982.686288]  ? trace_hardirqs_on+0x20/0x195
+[  982.690956]  ? _raw_spin_unlock_irq+0x24/0x40
+[  982.695818]  process_one_work+0x8f0/0x1770
+[  982.700390]  ? pwq_dec_nr_in_flight+0x320/0x320
+[  982.705443]  ? debug_show_held_locks+0x50/0x50
+[  982.710403]  worker_thread+0x87/0xb40
+[  982.714489]  ? process_one_work+0x1770/0x1770
+[  982.719349]  kthread+0x344/0x410
+[  982.722950]  ? kthread_insert_work_sanity_check+0xd0/0xd0
+[  982.728975]  ret_from_fork+0x3a/0x50
+
+Fixes: 5586838fe9ce ("igc: Add code for PHY support")
+Reported-by: Corinna Vinschen <vinschen@redhat.com>
+Suggested-by: Dima Ruinskiy <dima.ruinskiy@intel.com>
+Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>
+Tested-by: Corinna Vinschen <vinschen@redhat.com>
+Tested-by: Naama Meir <naamax.meir@linux.intel.com>
+Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/intel/igc/igc_phy.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/intel/igc/igc_phy.c b/drivers/net/ethernet/intel/igc/igc_phy.c
+index e380b7a3ea63..8de4de2e5636 100644
+--- a/drivers/net/ethernet/intel/igc/igc_phy.c
++++ b/drivers/net/ethernet/intel/igc/igc_phy.c
+@@ -583,7 +583,7 @@ static s32 igc_read_phy_reg_mdic(struct igc_hw *hw, u32 offset, u16 *data)
+        * the lower time out
+        */
+       for (i = 0; i < IGC_GEN_POLL_TIMEOUT; i++) {
+-              usleep_range(500, 1000);
++              udelay(50);
+               mdic = rd32(IGC_MDIC);
+               if (mdic & IGC_MDIC_READY)
+                       break;
+@@ -640,7 +640,7 @@ static s32 igc_write_phy_reg_mdic(struct igc_hw *hw, u32 offset, u16 data)
+        * the lower time out
+        */
+       for (i = 0; i < IGC_GEN_POLL_TIMEOUT; i++) {
+-              usleep_range(500, 1000);
++              udelay(50);
+               mdic = rd32(IGC_MDIC);
+               if (mdic & IGC_MDIC_READY)
+                       break;
+-- 
+2.35.1
+
diff --git a/queue-5.10/igc-fix-infinite-loop-in-release_swfw_sync.patch b/queue-5.10/igc-fix-infinite-loop-in-release_swfw_sync.patch
new file mode 100644 (file)
index 0000000..33014f4
--- /dev/null
@@ -0,0 +1,49 @@
+From 6c05f08331f3f6a80ed229b4ef7bd961dcb69544 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 1 Mar 2022 15:32:10 +0200
+Subject: igc: Fix infinite loop in release_swfw_sync
+
+From: Sasha Neftin <sasha.neftin@intel.com>
+
+[ Upstream commit 907862e9aef75bf89e2b265efcc58870be06081e ]
+
+An infinite loop may occur if we fail to acquire the HW semaphore,
+which is needed for resource release.
+This will typically happen if the hardware is surprise-removed.
+At this stage there is nothing to do, except log an error and quit.
+
+Fixes: c0071c7aa5fe ("igc: Add HW initialization code")
+Suggested-by: Dima Ruinskiy <dima.ruinskiy@intel.com>
+Signed-off-by: Sasha Neftin <sasha.neftin@intel.com>
+Tested-by: Naama Meir <naamax.meir@linux.intel.com>
+Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/intel/igc/igc_i225.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/intel/igc/igc_i225.c b/drivers/net/ethernet/intel/igc/igc_i225.c
+index 553d6bc78e6b..624236a4202e 100644
+--- a/drivers/net/ethernet/intel/igc/igc_i225.c
++++ b/drivers/net/ethernet/intel/igc/igc_i225.c
+@@ -156,8 +156,15 @@ void igc_release_swfw_sync_i225(struct igc_hw *hw, u16 mask)
+ {
+       u32 swfw_sync;
+-      while (igc_get_hw_semaphore_i225(hw))
+-              ; /* Empty */
++      /* Releasing the resource requires first getting the HW semaphore.
++       * If we fail to get the semaphore, there is nothing we can do,
++       * except log an error and quit. We are not allowed to hang here
++       * indefinitely, as it may cause denial of service or system crash.
++       */
++      if (igc_get_hw_semaphore_i225(hw)) {
++              hw_dbg("Failed to release SW_FW_SYNC.\n");
++              return;
++      }
+       swfw_sync = rd32(IGC_SW_FW_SYNC);
+       swfw_sync &= ~mask;
+-- 
+2.35.1
+
diff --git a/queue-5.10/ip6_gre-avoid-updating-tunnel-tun_hlen-in-__gre6_xmi.patch b/queue-5.10/ip6_gre-avoid-updating-tunnel-tun_hlen-in-__gre6_xmi.patch
new file mode 100644 (file)
index 0000000..aaacc4b
--- /dev/null
@@ -0,0 +1,48 @@
+From 06084de42dcde1ce32c16973ca5fc100ddd9d672 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 14 Apr 2022 13:34:26 -0700
+Subject: ip6_gre: Avoid updating tunnel->tun_hlen in __gre6_xmit()
+
+From: Peilin Ye <peilin.ye@bytedance.com>
+
+[ Upstream commit f40c064e933d7787ca7411b699504d7a2664c1f5 ]
+
+Do not update tunnel->tun_hlen in data plane code.  Use a local variable
+instead, just like "tunnel_hlen" in net/ipv4/ip_gre.c:gre_fb_xmit().
+
+Co-developed-by: Cong Wang <cong.wang@bytedance.com>
+Signed-off-by: Cong Wang <cong.wang@bytedance.com>
+Signed-off-by: Peilin Ye <peilin.ye@bytedance.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv6/ip6_gre.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
+index 9a0263f25232..949d6fbc1ca0 100644
+--- a/net/ipv6/ip6_gre.c
++++ b/net/ipv6/ip6_gre.c
+@@ -743,6 +743,7 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
+               struct ip_tunnel_info *tun_info;
+               const struct ip_tunnel_key *key;
+               __be16 flags;
++              int tun_hlen;
+               tun_info = skb_tunnel_info_txcheck(skb);
+               if (IS_ERR(tun_info) ||
+@@ -760,9 +761,9 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
+               dsfield = key->tos;
+               flags = key->tun_flags &
+                       (TUNNEL_CSUM | TUNNEL_KEY | TUNNEL_SEQ);
+-              tunnel->tun_hlen = gre_calc_hlen(flags);
++              tun_hlen = gre_calc_hlen(flags);
+-              gre_build_header(skb, tunnel->tun_hlen,
++              gre_build_header(skb, tun_hlen,
+                                flags, protocol,
+                                tunnel_id_to_key32(tun_info->key.tun_id),
+                                (flags & TUNNEL_SEQ) ? htonl(tunnel->o_seqno++)
+-- 
+2.35.1
+
diff --git a/queue-5.10/ip6_gre-fix-skb_under_panic-in-__gre6_xmit.patch b/queue-5.10/ip6_gre-fix-skb_under_panic-in-__gre6_xmit.patch
new file mode 100644 (file)
index 0000000..10dd047
--- /dev/null
@@ -0,0 +1,128 @@
+From 4e5cded9d82801bac47bd52e2729474e6a56497b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 14 Apr 2022 13:35:40 -0700
+Subject: ip6_gre: Fix skb_under_panic in __gre6_xmit()
+
+From: Peilin Ye <peilin.ye@bytedance.com>
+
+[ Upstream commit ab198e1d0dd8dc4bc7575fb50758e2cbd51e14e1 ]
+
+Feng reported an skb_under_panic BUG triggered by running
+test_ip6gretap() in tools/testing/selftests/bpf/test_tunnel.sh:
+
+[   82.492551] skbuff: skb_under_panic: text:ffffffffb268bb8e len:403 put:12 head:ffff9997c5480000 data:ffff9997c547fff8 tail:0x18b end:0x2c0 dev:ip6gretap11
+<...>
+[   82.607380] Call Trace:
+[   82.609389]  <TASK>
+[   82.611136]  skb_push.cold.109+0x10/0x10
+[   82.614289]  __gre6_xmit+0x41e/0x590
+[   82.617169]  ip6gre_tunnel_xmit+0x344/0x3f0
+[   82.620526]  dev_hard_start_xmit+0xf1/0x330
+[   82.623882]  sch_direct_xmit+0xe4/0x250
+[   82.626961]  __dev_queue_xmit+0x720/0xfe0
+<...>
+[   82.633431]  packet_sendmsg+0x96a/0x1cb0
+[   82.636568]  sock_sendmsg+0x30/0x40
+<...>
+
+The following sequence of events caused the BUG:
+
+1. During ip6gretap device initialization, tunnel->tun_hlen (e.g. 4) is
+   calculated based on old flags (see ip6gre_calc_hlen());
+2. packet_snd() reserves header room for skb A, assuming
+   tunnel->tun_hlen is 4;
+3. Later (in clsact Qdisc), the eBPF program sets a new tunnel key for
+   skb A using bpf_skb_set_tunnel_key() (see _ip6gretap_set_tunnel());
+4. __gre6_xmit() detects the new tunnel key, and recalculates
+   "tun_hlen" (e.g. 12) based on new flags (e.g. TUNNEL_KEY and
+   TUNNEL_SEQ);
+5. gre_build_header() calls skb_push() with insufficient reserved header
+   room, triggering the BUG.
+
+As sugguested by Cong, fix it by moving the call to skb_cow_head() after
+the recalculation of tun_hlen.
+
+Reproducer:
+
+  OBJ=$LINUX/tools/testing/selftests/bpf/test_tunnel_kern.o
+
+  ip netns add at_ns0
+  ip link add veth0 type veth peer name veth1
+  ip link set veth0 netns at_ns0
+  ip netns exec at_ns0 ip addr add 172.16.1.100/24 dev veth0
+  ip netns exec at_ns0 ip link set dev veth0 up
+  ip link set dev veth1 up mtu 1500
+  ip addr add dev veth1 172.16.1.200/24
+
+  ip netns exec at_ns0 ip addr add ::11/96 dev veth0
+  ip netns exec at_ns0 ip link set dev veth0 up
+  ip addr add dev veth1 ::22/96
+  ip link set dev veth1 up
+
+  ip netns exec at_ns0 \
+       ip link add dev ip6gretap00 type ip6gretap seq flowlabel 0xbcdef key 2 \
+       local ::11 remote ::22
+
+  ip netns exec at_ns0 ip addr add dev ip6gretap00 10.1.1.100/24
+  ip netns exec at_ns0 ip addr add dev ip6gretap00 fc80::100/96
+  ip netns exec at_ns0 ip link set dev ip6gretap00 up
+
+  ip link add dev ip6gretap11 type ip6gretap external
+  ip addr add dev ip6gretap11 10.1.1.200/24
+  ip addr add dev ip6gretap11 fc80::200/24
+  ip link set dev ip6gretap11 up
+
+  tc qdisc add dev ip6gretap11 clsact
+  tc filter add dev ip6gretap11 egress bpf da obj $OBJ sec ip6gretap_set_tunnel
+  tc filter add dev ip6gretap11 ingress bpf da obj $OBJ sec ip6gretap_get_tunnel
+
+  ping6 -c 3 -w 10 -q ::11
+
+Fixes: 6712abc168eb ("ip6_gre: add ip6 gre and gretap collect_md mode")
+Reported-by: Feng Zhou <zhoufeng.zf@bytedance.com>
+Co-developed-by: Cong Wang <cong.wang@bytedance.com>
+Signed-off-by: Cong Wang <cong.wang@bytedance.com>
+Signed-off-by: Peilin Ye <peilin.ye@bytedance.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv6/ip6_gre.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
+index 949d6fbc1ca0..1f6c752f13b4 100644
+--- a/net/ipv6/ip6_gre.c
++++ b/net/ipv6/ip6_gre.c
+@@ -733,9 +733,6 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
+       else
+               fl6->daddr = tunnel->parms.raddr;
+-      if (skb_cow_head(skb, dev->needed_headroom ?: tunnel->hlen))
+-              return -ENOMEM;
+-
+       /* Push GRE header. */
+       protocol = (dev->type == ARPHRD_ETHER) ? htons(ETH_P_TEB) : proto;
+@@ -763,6 +760,9 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
+                       (TUNNEL_CSUM | TUNNEL_KEY | TUNNEL_SEQ);
+               tun_hlen = gre_calc_hlen(flags);
++              if (skb_cow_head(skb, dev->needed_headroom ?: tun_hlen + tunnel->encap_hlen))
++                      return -ENOMEM;
++
+               gre_build_header(skb, tun_hlen,
+                                flags, protocol,
+                                tunnel_id_to_key32(tun_info->key.tun_id),
+@@ -773,6 +773,9 @@ static netdev_tx_t __gre6_xmit(struct sk_buff *skb,
+               if (tunnel->parms.o_flags & TUNNEL_SEQ)
+                       tunnel->o_seqno++;
++              if (skb_cow_head(skb, dev->needed_headroom ?: tunnel->hlen))
++                      return -ENOMEM;
++
+               gre_build_header(skb, tunnel->tun_hlen, tunnel->parms.o_flags,
+                                protocol, tunnel->parms.o_key,
+                                htonl(tunnel->o_seqno));
+-- 
+2.35.1
+
diff --git a/queue-5.10/ipv6-make-ip6_rt_gc_expire-an-atomic_t.patch b/queue-5.10/ipv6-make-ip6_rt_gc_expire-an-atomic_t.patch
new file mode 100644 (file)
index 0000000..392e19c
--- /dev/null
@@ -0,0 +1,124 @@
+From db47173ac7f4b4c73adb630759db0f6b5d6b562f Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 Apr 2022 11:13:33 -0700
+Subject: ipv6: make ip6_rt_gc_expire an atomic_t
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit 9cb7c013420f98fa6fd12fc6a5dc055170c108db ]
+
+Reads and Writes to ip6_rt_gc_expire always have been racy,
+as syzbot reported lately [1]
+
+There is a possible risk of under-flow, leading
+to unexpected high value passed to fib6_run_gc(),
+although I have not observed this in the field.
+
+Hosts hitting ip6_dst_gc() very hard are under pretty bad
+state anyway.
+
+[1]
+BUG: KCSAN: data-race in ip6_dst_gc / ip6_dst_gc
+
+read-write to 0xffff888102110744 of 4 bytes by task 13165 on cpu 1:
+ ip6_dst_gc+0x1f3/0x220 net/ipv6/route.c:3311
+ dst_alloc+0x9b/0x160 net/core/dst.c:86
+ ip6_dst_alloc net/ipv6/route.c:344 [inline]
+ icmp6_dst_alloc+0xb2/0x360 net/ipv6/route.c:3261
+ mld_sendpack+0x2b9/0x580 net/ipv6/mcast.c:1807
+ mld_send_cr net/ipv6/mcast.c:2119 [inline]
+ mld_ifc_work+0x576/0x800 net/ipv6/mcast.c:2651
+ process_one_work+0x3d3/0x720 kernel/workqueue.c:2289
+ worker_thread+0x618/0xa70 kernel/workqueue.c:2436
+ kthread+0x1a9/0x1e0 kernel/kthread.c:376
+ ret_from_fork+0x1f/0x30
+
+read-write to 0xffff888102110744 of 4 bytes by task 11607 on cpu 0:
+ ip6_dst_gc+0x1f3/0x220 net/ipv6/route.c:3311
+ dst_alloc+0x9b/0x160 net/core/dst.c:86
+ ip6_dst_alloc net/ipv6/route.c:344 [inline]
+ icmp6_dst_alloc+0xb2/0x360 net/ipv6/route.c:3261
+ mld_sendpack+0x2b9/0x580 net/ipv6/mcast.c:1807
+ mld_send_cr net/ipv6/mcast.c:2119 [inline]
+ mld_ifc_work+0x576/0x800 net/ipv6/mcast.c:2651
+ process_one_work+0x3d3/0x720 kernel/workqueue.c:2289
+ worker_thread+0x618/0xa70 kernel/workqueue.c:2436
+ kthread+0x1a9/0x1e0 kernel/kthread.c:376
+ ret_from_fork+0x1f/0x30
+
+value changed: 0x00000bb3 -> 0x00000ba9
+
+Reported by Kernel Concurrency Sanitizer on:
+CPU: 0 PID: 11607 Comm: kworker/0:21 Not tainted 5.18.0-rc1-syzkaller-00037-g42e7a03d3bad-dirty #0
+Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+Workqueue: mld mld_ifc_work
+
+Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Reported-by: syzbot <syzkaller@googlegroups.com>
+Reviewed-by: David Ahern <dsahern@kernel.org>
+Link: https://lore.kernel.org/r/20220413181333.649424-1-eric.dumazet@gmail.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ include/net/netns/ipv6.h |  4 ++--
+ net/ipv6/route.c         | 11 ++++++-----
+ 2 files changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h
+index 1c0fbe3abf24..f179996c6184 100644
+--- a/include/net/netns/ipv6.h
++++ b/include/net/netns/ipv6.h
+@@ -78,8 +78,8 @@ struct netns_ipv6 {
+       struct dst_ops          ip6_dst_ops;
+       rwlock_t                fib6_walker_lock;
+       spinlock_t              fib6_gc_lock;
+-      unsigned int             ip6_rt_gc_expire;
+-      unsigned long            ip6_rt_last_gc;
++      atomic_t                ip6_rt_gc_expire;
++      unsigned long           ip6_rt_last_gc;
+       unsigned char           flowlabel_has_excl;
+ #ifdef CONFIG_IPV6_MULTIPLE_TABLES
+       bool                    fib6_has_custom_rules;
+diff --git a/net/ipv6/route.c b/net/ipv6/route.c
+index 776b1b58c5dc..6ace9f0ac22f 100644
+--- a/net/ipv6/route.c
++++ b/net/ipv6/route.c
+@@ -3192,6 +3192,7 @@ static int ip6_dst_gc(struct dst_ops *ops)
+       int rt_elasticity = net->ipv6.sysctl.ip6_rt_gc_elasticity;
+       int rt_gc_timeout = net->ipv6.sysctl.ip6_rt_gc_timeout;
+       unsigned long rt_last_gc = net->ipv6.ip6_rt_last_gc;
++      unsigned int val;
+       int entries;
+       entries = dst_entries_get_fast(ops);
+@@ -3202,13 +3203,13 @@ static int ip6_dst_gc(struct dst_ops *ops)
+           entries <= rt_max_size)
+               goto out;
+-      net->ipv6.ip6_rt_gc_expire++;
+-      fib6_run_gc(net->ipv6.ip6_rt_gc_expire, net, true);
++      fib6_run_gc(atomic_inc_return(&net->ipv6.ip6_rt_gc_expire), net, true);
+       entries = dst_entries_get_slow(ops);
+       if (entries < ops->gc_thresh)
+-              net->ipv6.ip6_rt_gc_expire = rt_gc_timeout>>1;
++              atomic_set(&net->ipv6.ip6_rt_gc_expire, rt_gc_timeout >> 1);
+ out:
+-      net->ipv6.ip6_rt_gc_expire -= net->ipv6.ip6_rt_gc_expire>>rt_elasticity;
++      val = atomic_read(&net->ipv6.ip6_rt_gc_expire);
++      atomic_set(&net->ipv6.ip6_rt_gc_expire, val - (val >> rt_elasticity));
+       return entries > rt_max_size;
+ }
+@@ -6363,7 +6364,7 @@ static int __net_init ip6_route_net_init(struct net *net)
+       net->ipv6.sysctl.ip6_rt_min_advmss = IPV6_MIN_MTU - 20 - 40;
+       net->ipv6.sysctl.skip_notify_on_dev_down = 0;
+-      net->ipv6.ip6_rt_gc_expire = 30*HZ;
++      atomic_set(&net->ipv6.ip6_rt_gc_expire, 30*HZ);
+       ret = 0;
+ out:
+-- 
+2.35.1
+
diff --git a/queue-5.10/l3mdev-l3mdev_master_upper_ifindex_by_index_rcu-shou.patch b/queue-5.10/l3mdev-l3mdev_master_upper_ifindex_by_index_rcu-shou.patch
new file mode 100644 (file)
index 0000000..fd47c40
--- /dev/null
@@ -0,0 +1,65 @@
+From f54b40fa254176b46fa211765a8e596fab9c83ae Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 Apr 2022 11:43:19 -0600
+Subject: l3mdev: l3mdev_master_upper_ifindex_by_index_rcu should be using
+ netdev_master_upper_dev_get_rcu
+
+From: David Ahern <dsahern@kernel.org>
+
+[ Upstream commit 83daab06252ee5d0e1f4373ff28b79304945fc19 ]
+
+Next patch uses l3mdev_master_upper_ifindex_by_index_rcu which throws
+a splat with debug kernels:
+
+[13783.087570] ------------[ cut here ]------------
+[13783.093974] RTNL: assertion failed at net/core/dev.c (6702)
+[13783.100761] WARNING: CPU: 3 PID: 51132 at net/core/dev.c:6702 netdev_master_upper_dev_get+0x16a/0x1a0
+
+[13783.184226] CPU: 3 PID: 51132 Comm: kworker/3:3 Not tainted 5.17.0-custom-100090-g6f963aafb1cc #682
+[13783.194788] Hardware name: Mellanox Technologies Ltd. MSN2010/SA002610, BIOS 5.6.5 08/24/2017
+[13783.204755] Workqueue: mld mld_ifc_work [ipv6]
+[13783.210338] RIP: 0010:netdev_master_upper_dev_get+0x16a/0x1a0
+[13783.217209] Code: 0f 85 e3 fe ff ff e8 65 ac ec fe ba 2e 1a 00 00 48 c7 c6 60 6f 38 83 48 c7 c7 c0 70 38 83 c6 05 5e b5 d7 01 01 e8 c6 29 52 00 <0f> 0b e9 b8 fe ff ff e8 5a 6c 35 ff e9 1c ff ff ff 48 89 ef e8 7d
+[13783.238659] RSP: 0018:ffffc9000b37f5a8 EFLAGS: 00010286
+[13783.244995] RAX: 0000000000000000 RBX: ffff88812ee5c000 RCX: 0000000000000000
+[13783.253379] RDX: ffff88811ce09d40 RSI: ffffffff812d0fcd RDI: fffff5200166fea7
+[13783.261769] RBP: 0000000000000000 R08: 0000000000000001 R09: ffff8882375f4287
+[13783.270138] R10: ffffed1046ebe850 R11: 0000000000000001 R12: dffffc0000000000
+[13783.278510] R13: 0000000000000275 R14: ffffc9000b37f688 R15: ffff8881273b4af8
+[13783.286870] FS:  0000000000000000(0000) GS:ffff888237400000(0000) knlGS:0000000000000000
+[13783.296352] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+[13783.303177] CR2: 00007ff25fc9b2e8 CR3: 0000000174d23000 CR4: 00000000001006e0
+[13783.311546] Call Trace:
+[13783.314660]  <TASK>
+[13783.317553]  l3mdev_master_upper_ifindex_by_index_rcu+0x43/0xe0
+...
+
+Change l3mdev_master_upper_ifindex_by_index_rcu to use
+netdev_master_upper_dev_get_rcu.
+
+Fixes: 6a6d6681ac1a ("l3mdev: add function to retreive upper master")
+Signed-off-by: Ido Schimmel <idosch@idosch.org>
+Signed-off-by: David Ahern <dsahern@kernel.org>
+Cc: Alexis Bauvin <abauvin@scaleway.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/l3mdev/l3mdev.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/l3mdev/l3mdev.c b/net/l3mdev/l3mdev.c
+index 864326f150e2..f2c3a61ad134 100644
+--- a/net/l3mdev/l3mdev.c
++++ b/net/l3mdev/l3mdev.c
+@@ -147,7 +147,7 @@ int l3mdev_master_upper_ifindex_by_index_rcu(struct net *net, int ifindex)
+       dev = dev_get_by_index_rcu(net, ifindex);
+       while (dev && !netif_is_l3_master(dev))
+-              dev = netdev_master_upper_dev_get(dev);
++              dev = netdev_master_upper_dev_get_rcu(dev);
+       return dev ? dev->ifindex : 0;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.10/mt76-fix-undefined-behavior-due-to-shift-overflowing.patch b/queue-5.10/mt76-fix-undefined-behavior-due-to-shift-overflowing.patch
new file mode 100644 (file)
index 0000000..b91a49b
--- /dev/null
@@ -0,0 +1,56 @@
+From 8e9579b29c4ce2acb2aac127fe6b402f727a803b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 5 Apr 2022 17:15:14 +0200
+Subject: mt76: Fix undefined behavior due to shift overflowing the constant
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Borislav Petkov <bp@suse.de>
+
+[ Upstream commit dbc2b1764734857d68425468ffa8486e97ab89df ]
+
+Fix:
+
+  drivers/net/wireless/mediatek/mt76/mt76x2/pci.c: In function ‘mt76x2e_probe’:
+  ././include/linux/compiler_types.h:352:38: error: call to ‘__compiletime_assert_946’ \
+       declared with attribute error: FIELD_PREP: mask is not constant
+    _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
+
+See https://lore.kernel.org/r/YkwQ6%2BtIH8GQpuct@zn.tnic for the gory
+details as to why it triggers with older gccs only.
+
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Cc: Felix Fietkau <nbd@nbd.name>
+Cc: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
+Cc: Ryder Lee <ryder.lee@mediatek.com>
+Cc: Shayne Chen <shayne.chen@mediatek.com>
+Cc: Sean Wang <sean.wang@mediatek.com>
+Cc: Kalle Valo <kvalo@kernel.org>
+Cc: "David S. Miller" <davem@davemloft.net>
+Cc: Jakub Kicinski <kuba@kernel.org>
+Cc: linux-wireless@vger.kernel.org
+Cc: netdev@vger.kernel.org
+Signed-off-by: Kalle Valo <kvalo@kernel.org>
+Link: https://lore.kernel.org/r/20220405151517.29753-9-bp@alien8.de
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/mediatek/mt76/mt76x2/pci.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/pci.c b/drivers/net/wireless/mediatek/mt76/mt76x2/pci.c
+index ecaf85b483ac..e57e49a722dc 100644
+--- a/drivers/net/wireless/mediatek/mt76/mt76x2/pci.c
++++ b/drivers/net/wireless/mediatek/mt76/mt76x2/pci.c
+@@ -80,7 +80,7 @@ mt76x2e_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+       mt76_rmw_field(dev, 0x15a10, 0x1f << 16, 0x9);
+       /* RG_SSUSB_G1_CDR_BIC_LTR = 0xf */
+-      mt76_rmw_field(dev, 0x15a0c, 0xf << 28, 0xf);
++      mt76_rmw_field(dev, 0x15a0c, 0xfU << 28, 0xf);
+       /* RG_SSUSB_CDR_BR_PE1D = 0x3 */
+       mt76_rmw_field(dev, 0x15c58, 0x3 << 6, 0x3);
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-atlantic-avoid-out-of-bounds-indexing.patch b/queue-5.10/net-atlantic-avoid-out-of-bounds-indexing.patch
new file mode 100644 (file)
index 0000000..fa91a5e
--- /dev/null
@@ -0,0 +1,127 @@
+From d39dbf95eca67782e508299f3bf05afa8adb80f6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 8 Apr 2022 10:22:04 +0800
+Subject: net: atlantic: Avoid out-of-bounds indexing
+
+From: Kai-Heng Feng <kai.heng.feng@canonical.com>
+
+[ Upstream commit 8d3a6c37d50d5a0504c126c932cc749e6dd9c78f ]
+
+UBSAN warnings are observed on atlantic driver:
+[ 294.432996] UBSAN: array-index-out-of-bounds in /build/linux-Qow4fL/linux-5.15.0/drivers/net/ethernet/aquantia/atlantic/aq_nic.c:484:48
+[ 294.433695] index 8 is out of range for type 'aq_vec_s *[8]'
+
+The ring is dereferenced right before breaking out the loop, to prevent
+that from happening, only use the index in the loop to fix the issue.
+
+BugLink: https://bugs.launchpad.net/bugs/1958770
+Tested-by: Mario Limonciello <mario.limonciello@amd.com>
+Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Reviewed-by: Igor Russkikh <irusskikh@marvell.com>
+Link: https://lore.kernel.org/r/20220408022204.16815-1-kai.heng.feng@canonical.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../net/ethernet/aquantia/atlantic/aq_nic.c   |  8 +++----
+ .../net/ethernet/aquantia/atlantic/aq_vec.c   | 24 +++++++++----------
+ 2 files changed, 16 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
+index 0cf8ae8aeac8..2fb4126ae8d8 100644
+--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
++++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
+@@ -480,8 +480,8 @@ int aq_nic_start(struct aq_nic_s *self)
+       if (err < 0)
+               goto err_exit;
+-      for (i = 0U, aq_vec = self->aq_vec[0];
+-              self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) {
++      for (i = 0U; self->aq_vecs > i; ++i) {
++              aq_vec = self->aq_vec[i];
+               err = aq_vec_start(aq_vec);
+               if (err < 0)
+                       goto err_exit;
+@@ -511,8 +511,8 @@ int aq_nic_start(struct aq_nic_s *self)
+               mod_timer(&self->polling_timer, jiffies +
+                         AQ_CFG_POLLING_TIMER_INTERVAL);
+       } else {
+-              for (i = 0U, aq_vec = self->aq_vec[0];
+-                      self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) {
++              for (i = 0U; self->aq_vecs > i; ++i) {
++                      aq_vec = self->aq_vec[i];
+                       err = aq_pci_func_alloc_irq(self, i, self->ndev->name,
+                                                   aq_vec_isr, aq_vec,
+                                                   aq_vec_get_affinity_mask(aq_vec));
+diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_vec.c b/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
+index f4774cf051c9..6ab1f3212d24 100644
+--- a/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
++++ b/drivers/net/ethernet/aquantia/atlantic/aq_vec.c
+@@ -43,8 +43,8 @@ static int aq_vec_poll(struct napi_struct *napi, int budget)
+       if (!self) {
+               err = -EINVAL;
+       } else {
+-              for (i = 0U, ring = self->ring[0];
+-                      self->tx_rings > i; ++i, ring = self->ring[i]) {
++              for (i = 0U; self->tx_rings > i; ++i) {
++                      ring = self->ring[i];
+                       u64_stats_update_begin(&ring[AQ_VEC_RX_ID].stats.rx.syncp);
+                       ring[AQ_VEC_RX_ID].stats.rx.polls++;
+                       u64_stats_update_end(&ring[AQ_VEC_RX_ID].stats.rx.syncp);
+@@ -182,8 +182,8 @@ int aq_vec_init(struct aq_vec_s *self, const struct aq_hw_ops *aq_hw_ops,
+       self->aq_hw_ops = aq_hw_ops;
+       self->aq_hw = aq_hw;
+-      for (i = 0U, ring = self->ring[0];
+-              self->tx_rings > i; ++i, ring = self->ring[i]) {
++      for (i = 0U; self->tx_rings > i; ++i) {
++              ring = self->ring[i];
+               err = aq_ring_init(&ring[AQ_VEC_TX_ID], ATL_RING_TX);
+               if (err < 0)
+                       goto err_exit;
+@@ -224,8 +224,8 @@ int aq_vec_start(struct aq_vec_s *self)
+       unsigned int i = 0U;
+       int err = 0;
+-      for (i = 0U, ring = self->ring[0];
+-              self->tx_rings > i; ++i, ring = self->ring[i]) {
++      for (i = 0U; self->tx_rings > i; ++i) {
++              ring = self->ring[i];
+               err = self->aq_hw_ops->hw_ring_tx_start(self->aq_hw,
+                                                       &ring[AQ_VEC_TX_ID]);
+               if (err < 0)
+@@ -248,8 +248,8 @@ void aq_vec_stop(struct aq_vec_s *self)
+       struct aq_ring_s *ring = NULL;
+       unsigned int i = 0U;
+-      for (i = 0U, ring = self->ring[0];
+-              self->tx_rings > i; ++i, ring = self->ring[i]) {
++      for (i = 0U; self->tx_rings > i; ++i) {
++              ring = self->ring[i];
+               self->aq_hw_ops->hw_ring_tx_stop(self->aq_hw,
+                                                &ring[AQ_VEC_TX_ID]);
+@@ -268,8 +268,8 @@ void aq_vec_deinit(struct aq_vec_s *self)
+       if (!self)
+               goto err_exit;
+-      for (i = 0U, ring = self->ring[0];
+-              self->tx_rings > i; ++i, ring = self->ring[i]) {
++      for (i = 0U; self->tx_rings > i; ++i) {
++              ring = self->ring[i];
+               aq_ring_tx_clean(&ring[AQ_VEC_TX_ID]);
+               aq_ring_rx_deinit(&ring[AQ_VEC_RX_ID]);
+       }
+@@ -297,8 +297,8 @@ void aq_vec_ring_free(struct aq_vec_s *self)
+       if (!self)
+               goto err_exit;
+-      for (i = 0U, ring = self->ring[0];
+-              self->tx_rings > i; ++i, ring = self->ring[i]) {
++      for (i = 0U; self->tx_rings > i; ++i) {
++              ring = self->ring[i];
+               aq_ring_free(&ring[AQ_VEC_TX_ID]);
+               if (i < self->rx_rings)
+                       aq_ring_free(&ring[AQ_VEC_RX_ID]);
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-macb-restart-tx-only-if-queue-pointer-is-lagging.patch b/queue-5.10/net-macb-restart-tx-only-if-queue-pointer-is-lagging.patch
new file mode 100644 (file)
index 0000000..9871993
--- /dev/null
@@ -0,0 +1,64 @@
+From 1946f97e5e0390dd4b25e71b864b2c1fa03217a5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 19:16:59 +0300
+Subject: net: macb: Restart tx only if queue pointer is lagging
+
+From: Tomas Melin <tomas.melin@vaisala.com>
+
+[ Upstream commit 5ad7f18cd82cee8e773d40cc7a1465a526f2615c ]
+
+commit 4298388574da ("net: macb: restart tx after tx used bit read")
+added support for restarting transmission. Restarting tx does not work
+in case controller asserts TXUBR interrupt and TQBP is already at the end
+of the tx queue. In that situation, restarting tx will immediately cause
+assertion of another TXUBR interrupt. The driver will end up in an infinite
+interrupt loop which it cannot break out of.
+
+For cases where TQBP is at the end of the tx queue, instead
+only clear TX_USED interrupt. As more data gets pushed to the queue,
+transmission will resume.
+
+This issue was observed on a Xilinx Zynq-7000 based board.
+During stress test of the network interface,
+driver would get stuck on interrupt loop within seconds or minutes
+causing CPU to stall.
+
+Signed-off-by: Tomas Melin <tomas.melin@vaisala.com>
+Tested-by: Claudiu Beznea <claudiu.beznea@microchip.com>
+Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
+Link: https://lore.kernel.org/r/20220407161659.14532-1-tomas.melin@vaisala.com
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/cadence/macb_main.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
+index f29ec765d684..bd13f91efe7c 100644
+--- a/drivers/net/ethernet/cadence/macb_main.c
++++ b/drivers/net/ethernet/cadence/macb_main.c
+@@ -1531,6 +1531,7 @@ static void macb_tx_restart(struct macb_queue *queue)
+       unsigned int head = queue->tx_head;
+       unsigned int tail = queue->tx_tail;
+       struct macb *bp = queue->bp;
++      unsigned int head_idx, tbqp;
+       if (bp->caps & MACB_CAPS_ISR_CLEAR_ON_WRITE)
+               queue_writel(queue, ISR, MACB_BIT(TXUBR));
+@@ -1538,6 +1539,13 @@ static void macb_tx_restart(struct macb_queue *queue)
+       if (head == tail)
+               return;
++      tbqp = queue_readl(queue, TBQP) / macb_dma_desc_get_size(bp);
++      tbqp = macb_adj_dma_desc_idx(bp, macb_tx_ring_wrap(bp, tbqp));
++      head_idx = macb_adj_dma_desc_idx(bp, macb_tx_ring_wrap(bp, head));
++
++      if (tbqp == head_idx)
++              return;
++
+       macb_writel(bp, NCR, macb_readl(bp, NCR) | MACB_BIT(TSTART));
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-packet-fix-packet_sock-xmit-return-value-checkin.patch b/queue-5.10/net-packet-fix-packet_sock-xmit-return-value-checkin.patch
new file mode 100644 (file)
index 0000000..3e666c1
--- /dev/null
@@ -0,0 +1,59 @@
+From 1e1749c2007888a06ac4082b19bf5ed0a554be14 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 14 Apr 2022 16:49:25 +0800
+Subject: net/packet: fix packet_sock xmit return value checking
+
+From: Hangbin Liu <liuhangbin@gmail.com>
+
+[ Upstream commit 29e8e659f984be00d75ec5fef4e37c88def72712 ]
+
+packet_sock xmit could be dev_queue_xmit, which also returns negative
+errors. So only checking positive errors is not enough, or userspace
+sendmsg may return success while packet is not send out.
+
+Move the net_xmit_errno() assignment in the braces as checkpatch.pl said
+do not use assignment in if condition.
+
+Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
+Reported-by: Flavio Leitner <fbl@redhat.com>
+Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/packet/af_packet.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
+index d0c95d7dd292..5ee600d108a0 100644
+--- a/net/packet/af_packet.c
++++ b/net/packet/af_packet.c
+@@ -2817,8 +2817,9 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
+               status = TP_STATUS_SEND_REQUEST;
+               err = po->xmit(skb);
+-              if (unlikely(err > 0)) {
+-                      err = net_xmit_errno(err);
++              if (unlikely(err != 0)) {
++                      if (err > 0)
++                              err = net_xmit_errno(err);
+                       if (err && __packet_get_status(po, ph) ==
+                                  TP_STATUS_AVAILABLE) {
+                               /* skb was destructed already */
+@@ -3019,8 +3020,12 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
+               skb->no_fcs = 1;
+       err = po->xmit(skb);
+-      if (err > 0 && (err = net_xmit_errno(err)) != 0)
+-              goto out_unlock;
++      if (unlikely(err != 0)) {
++              if (err > 0)
++                      err = net_xmit_errno(err);
++              if (err)
++                      goto out_unlock;
++      }
+       dev_put(dev);
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-sched-cls_u32-fix-possible-leak-in-u32_init_knod.patch b/queue-5.10/net-sched-cls_u32-fix-possible-leak-in-u32_init_knod.patch
new file mode 100644 (file)
index 0000000..2014eb7
--- /dev/null
@@ -0,0 +1,57 @@
+From 5c471b27b61b16a993baf1a3419600824167fdc2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 Apr 2022 10:35:42 -0700
+Subject: net/sched: cls_u32: fix possible leak in u32_init_knode()
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit ec5b0f605b105457f257f2870acad4a5d463984b ]
+
+While investigating a related syzbot report,
+I found that whenever call to tcf_exts_init()
+from u32_init_knode() is failing, we end up
+with an elevated refcount on ht->refcnt
+
+To avoid that, only increase the refcount after
+all possible errors have been evaluated.
+
+Fixes: b9a24bb76bf6 ("net_sched: properly handle failure case of tcf_exts_init()")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Cc: Cong Wang <xiyou.wangcong@gmail.com>
+Cc: Jiri Pirko <jiri@resnulli.us>
+Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/sched/cls_u32.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c
+index b61db335c49d..da042bc8b239 100644
+--- a/net/sched/cls_u32.c
++++ b/net/sched/cls_u32.c
+@@ -814,10 +814,6 @@ static struct tc_u_knode *u32_init_knode(struct net *net, struct tcf_proto *tp,
+       new->flags = n->flags;
+       RCU_INIT_POINTER(new->ht_down, ht);
+-      /* bump reference count as long as we hold pointer to structure */
+-      if (ht)
+-              ht->refcnt++;
+-
+ #ifdef CONFIG_CLS_U32_PERF
+       /* Statistics may be incremented by readers during update
+        * so we must keep them in tact. When the node is later destroyed
+@@ -839,6 +835,10 @@ static struct tc_u_knode *u32_init_knode(struct net *net, struct tcf_proto *tp,
+               return NULL;
+       }
++      /* bump reference count as long as we hold pointer to structure */
++      if (ht)
++              ht->refcnt++;
++
+       return new;
+ }
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-smc-fix-sock-leak-when-release-after-smc_shutdow.patch b/queue-5.10/net-smc-fix-sock-leak-when-release-after-smc_shutdow.patch
new file mode 100644 (file)
index 0000000..94a8876
--- /dev/null
@@ -0,0 +1,45 @@
+From abdb73c8756a29eb23a3e30694ea0ac42bbffe3d Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 14 Apr 2022 15:51:03 +0800
+Subject: net/smc: Fix sock leak when release after smc_shutdown()
+
+From: Tony Lu <tonylu@linux.alibaba.com>
+
+[ Upstream commit 1a74e99323746353bba11562a2f2d0aa8102f402 ]
+
+Since commit e5d5aadcf3cd ("net/smc: fix sk_refcnt underflow on linkdown
+and fallback"), for a fallback connection, __smc_release() does not call
+sock_put() if its state is already SMC_CLOSED.
+
+When calling smc_shutdown() after falling back, its state is set to
+SMC_CLOSED but does not call sock_put(), so this patch calls it.
+
+Reported-and-tested-by: syzbot+6e29a053eb165bd50de5@syzkaller.appspotmail.com
+Fixes: e5d5aadcf3cd ("net/smc: fix sk_refcnt underflow on linkdown and fallback")
+Signed-off-by: Tony Lu <tonylu@linux.alibaba.com>
+Acked-by: Karsten Graul <kgraul@linux.ibm.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/smc/af_smc.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c
+index 4f16d406ad8e..1b98f3241150 100644
+--- a/net/smc/af_smc.c
++++ b/net/smc/af_smc.c
+@@ -2144,8 +2144,10 @@ static int smc_shutdown(struct socket *sock, int how)
+       if (smc->use_fallback) {
+               rc = kernel_sock_shutdown(smc->clcsock, how);
+               sk->sk_shutdown = smc->clcsock->sk->sk_shutdown;
+-              if (sk->sk_shutdown == SHUTDOWN_MASK)
++              if (sk->sk_shutdown == SHUTDOWN_MASK) {
+                       sk->sk_state = SMC_CLOSED;
++                      sock_put(sk);
++              }
+               goto out;
+       }
+       switch (how) {
+-- 
+2.35.1
+
diff --git a/queue-5.10/net-stmmac-use-readl_poll_timeout_atomic-in-atomic-s.patch b/queue-5.10/net-stmmac-use-readl_poll_timeout_atomic-in-atomic-s.patch
new file mode 100644 (file)
index 0000000..c4e4090
--- /dev/null
@@ -0,0 +1,74 @@
+From 03db952a7804104b1741670eb62d357026b447aa Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 Apr 2022 16:42:26 +0800
+Subject: net: stmmac: Use readl_poll_timeout_atomic() in atomic state
+
+From: Kevin Hao <haokexin@gmail.com>
+
+[ Upstream commit 234901de2bc6847eaa0aeb4aba62c31ffb8d3ad6 ]
+
+The init_systime() may be invoked in atomic state. We have observed the
+following call trace when running "phc_ctl /dev/ptp0 set" on a Intel
+Agilex board.
+  BUG: sleeping function called from invalid context at drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c:74
+  in_atomic(): 1, irqs_disabled(): 128, non_block: 0, pid: 381, name: phc_ctl
+  preempt_count: 1, expected: 0
+  RCU nest depth: 0, expected: 0
+  Preemption disabled at:
+  [<ffff80000892ef78>] stmmac_set_time+0x34/0x8c
+  CPU: 2 PID: 381 Comm: phc_ctl Not tainted 5.18.0-rc2-next-20220414-yocto-standard+ #567
+  Hardware name: SoCFPGA Agilex SoCDK (DT)
+  Call trace:
+   dump_backtrace.part.0+0xc4/0xd0
+   show_stack+0x24/0x40
+   dump_stack_lvl+0x7c/0xa0
+   dump_stack+0x18/0x34
+   __might_resched+0x154/0x1c0
+   __might_sleep+0x58/0x90
+   init_systime+0x78/0x120
+   stmmac_set_time+0x64/0x8c
+   ptp_clock_settime+0x60/0x9c
+   pc_clock_settime+0x6c/0xc0
+   __arm64_sys_clock_settime+0x88/0xf0
+   invoke_syscall+0x5c/0x130
+   el0_svc_common.constprop.0+0x4c/0x100
+   do_el0_svc+0x7c/0xa0
+   el0_svc+0x58/0xcc
+   el0t_64_sync_handler+0xa4/0x130
+   el0t_64_sync+0x18c/0x190
+
+So we should use readl_poll_timeout_atomic() here instead of
+readl_poll_timeout().
+
+Also adjust the delay time to 10us to fix a "__bad_udelay" build error
+reported by "kernel test robot <lkp@intel.com>". I have tested this on
+Intel Agilex and NXP S32G boards, there is no delay needed at all.
+So the 10us delay should be long enough for most cases.
+
+Fixes: ff8ed737860e ("net: stmmac: use readl_poll_timeout() function in init_systime()")
+Signed-off-by: Kevin Hao <haokexin@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
+index 07b1b8374cd2..53efcc9c40e2 100644
+--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
++++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
+@@ -68,9 +68,9 @@ static int init_systime(void __iomem *ioaddr, u32 sec, u32 nsec)
+       writel(value, ioaddr + PTP_TCR);
+       /* wait for present system time initialize to complete */
+-      return readl_poll_timeout(ioaddr + PTP_TCR, value,
++      return readl_poll_timeout_atomic(ioaddr + PTP_TCR, value,
+                                !(value & PTP_TCR_TSINIT),
+-                               10000, 100000);
++                               10, 100000);
+ }
+ static int config_addend(void __iomem *ioaddr, u32 addend)
+-- 
+2.35.1
+
diff --git a/queue-5.10/netlink-reset-network-and-mac-headers-in-netlink_dum.patch b/queue-5.10/netlink-reset-network-and-mac-headers-in-netlink_dum.patch
new file mode 100644 (file)
index 0000000..7e2b176
--- /dev/null
@@ -0,0 +1,136 @@
+From ac28cea138245bff3751c365b2c44c723af4c2a7 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 15 Apr 2022 11:14:42 -0700
+Subject: netlink: reset network and mac headers in netlink_dump()
+
+From: Eric Dumazet <edumazet@google.com>
+
+[ Upstream commit 99c07327ae11e24886d552dddbe4537bfca2765d ]
+
+netlink_dump() is allocating an skb, reserves space in it
+but forgets to reset network header.
+
+This allows a BPF program, invoked later from sk_filter()
+to access uninitialized kernel memory from the reserved
+space.
+
+Theorically mac header reset could be omitted, because
+it is set to a special initial value.
+bpf_internal_load_pointer_neg_helper calls skb_mac_header()
+without checking skb_mac_header_was_set().
+Relying on skb->len not being too big seems fragile.
+We also could add a sanity check in bpf_internal_load_pointer_neg_helper()
+to avoid surprises in the future.
+
+syzbot report was:
+
+BUG: KMSAN: uninit-value in ___bpf_prog_run+0xa22b/0xb420 kernel/bpf/core.c:1637
+ ___bpf_prog_run+0xa22b/0xb420 kernel/bpf/core.c:1637
+ __bpf_prog_run32+0x121/0x180 kernel/bpf/core.c:1796
+ bpf_dispatcher_nop_func include/linux/bpf.h:784 [inline]
+ __bpf_prog_run include/linux/filter.h:626 [inline]
+ bpf_prog_run include/linux/filter.h:633 [inline]
+ __bpf_prog_run_save_cb+0x168/0x580 include/linux/filter.h:756
+ bpf_prog_run_save_cb include/linux/filter.h:770 [inline]
+ sk_filter_trim_cap+0x3bc/0x8c0 net/core/filter.c:150
+ sk_filter include/linux/filter.h:905 [inline]
+ netlink_dump+0xe0c/0x16c0 net/netlink/af_netlink.c:2276
+ netlink_recvmsg+0x1129/0x1c80 net/netlink/af_netlink.c:2002
+ sock_recvmsg_nosec net/socket.c:948 [inline]
+ sock_recvmsg net/socket.c:966 [inline]
+ sock_read_iter+0x5a9/0x630 net/socket.c:1039
+ do_iter_readv_writev+0xa7f/0xc70
+ do_iter_read+0x52c/0x14c0 fs/read_write.c:786
+ vfs_readv fs/read_write.c:906 [inline]
+ do_readv+0x432/0x800 fs/read_write.c:943
+ __do_sys_readv fs/read_write.c:1034 [inline]
+ __se_sys_readv fs/read_write.c:1031 [inline]
+ __x64_sys_readv+0xe5/0x120 fs/read_write.c:1031
+ do_syscall_x64 arch/x86/entry/common.c:51 [inline]
+ do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:81
+ entry_SYSCALL_64_after_hwframe+0x44/0xae
+
+Uninit was stored to memory at:
+ ___bpf_prog_run+0x96c/0xb420 kernel/bpf/core.c:1558
+ __bpf_prog_run32+0x121/0x180 kernel/bpf/core.c:1796
+ bpf_dispatcher_nop_func include/linux/bpf.h:784 [inline]
+ __bpf_prog_run include/linux/filter.h:626 [inline]
+ bpf_prog_run include/linux/filter.h:633 [inline]
+ __bpf_prog_run_save_cb+0x168/0x580 include/linux/filter.h:756
+ bpf_prog_run_save_cb include/linux/filter.h:770 [inline]
+ sk_filter_trim_cap+0x3bc/0x8c0 net/core/filter.c:150
+ sk_filter include/linux/filter.h:905 [inline]
+ netlink_dump+0xe0c/0x16c0 net/netlink/af_netlink.c:2276
+ netlink_recvmsg+0x1129/0x1c80 net/netlink/af_netlink.c:2002
+ sock_recvmsg_nosec net/socket.c:948 [inline]
+ sock_recvmsg net/socket.c:966 [inline]
+ sock_read_iter+0x5a9/0x630 net/socket.c:1039
+ do_iter_readv_writev+0xa7f/0xc70
+ do_iter_read+0x52c/0x14c0 fs/read_write.c:786
+ vfs_readv fs/read_write.c:906 [inline]
+ do_readv+0x432/0x800 fs/read_write.c:943
+ __do_sys_readv fs/read_write.c:1034 [inline]
+ __se_sys_readv fs/read_write.c:1031 [inline]
+ __x64_sys_readv+0xe5/0x120 fs/read_write.c:1031
+ do_syscall_x64 arch/x86/entry/common.c:51 [inline]
+ do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:81
+ entry_SYSCALL_64_after_hwframe+0x44/0xae
+
+Uninit was created at:
+ slab_post_alloc_hook mm/slab.h:737 [inline]
+ slab_alloc_node mm/slub.c:3244 [inline]
+ __kmalloc_node_track_caller+0xde3/0x14f0 mm/slub.c:4972
+ kmalloc_reserve net/core/skbuff.c:354 [inline]
+ __alloc_skb+0x545/0xf90 net/core/skbuff.c:426
+ alloc_skb include/linux/skbuff.h:1158 [inline]
+ netlink_dump+0x30f/0x16c0 net/netlink/af_netlink.c:2242
+ netlink_recvmsg+0x1129/0x1c80 net/netlink/af_netlink.c:2002
+ sock_recvmsg_nosec net/socket.c:948 [inline]
+ sock_recvmsg net/socket.c:966 [inline]
+ sock_read_iter+0x5a9/0x630 net/socket.c:1039
+ do_iter_readv_writev+0xa7f/0xc70
+ do_iter_read+0x52c/0x14c0 fs/read_write.c:786
+ vfs_readv fs/read_write.c:906 [inline]
+ do_readv+0x432/0x800 fs/read_write.c:943
+ __do_sys_readv fs/read_write.c:1034 [inline]
+ __se_sys_readv fs/read_write.c:1031 [inline]
+ __x64_sys_readv+0xe5/0x120 fs/read_write.c:1031
+ do_syscall_x64 arch/x86/entry/common.c:51 [inline]
+ do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:81
+ entry_SYSCALL_64_after_hwframe+0x44/0xae
+
+CPU: 0 PID: 3470 Comm: syz-executor751 Not tainted 5.17.0-syzkaller #0
+Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+
+Fixes: db65a3aaf29e ("netlink: Trim skb to alloc size to avoid MSG_TRUNC")
+Fixes: 9063e21fb026 ("netlink: autosize skb lengthes")
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Reported-by: syzbot <syzkaller@googlegroups.com>
+Link: https://lore.kernel.org/r/20220415181442.551228-1-eric.dumazet@gmail.com
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/netlink/af_netlink.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
+index f37916156ca5..cbfb601c4ee9 100644
+--- a/net/netlink/af_netlink.c
++++ b/net/netlink/af_netlink.c
+@@ -2276,6 +2276,13 @@ static int netlink_dump(struct sock *sk)
+        * single netdev. The outcome is MSG_TRUNC error.
+        */
+       skb_reserve(skb, skb_tailroom(skb) - alloc_size);
++
++      /* Make sure malicious BPF programs can not read unitialized memory
++       * from skb->head -> skb->data
++       */
++      skb_reset_network_header(skb);
++      skb_reset_mac_header(skb);
++
+       netlink_skb_set_owner_r(skb, sk);
+       if (nlk->dump_done_errno > 0) {
+-- 
+2.35.1
+
diff --git a/queue-5.10/nvme-add-a-quirk-to-disable-namespace-identifiers.patch b/queue-5.10/nvme-add-a-quirk-to-disable-namespace-identifiers.patch
new file mode 100644 (file)
index 0000000..40c1998
--- /dev/null
@@ -0,0 +1,103 @@
+From a2a16ff244e39f8dd29bc682bddc43d2368c8331 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 11 Apr 2022 08:05:27 +0200
+Subject: nvme: add a quirk to disable namespace identifiers
+
+From: Christoph Hellwig <hch@lst.de>
+
+[ Upstream commit 00ff400e6deee00f7b15e200205b2708b63b8cf6 ]
+
+Add a quirk to disable using and exporting namespace identifiers for
+controllers where they are broken beyond repair.
+
+The most directly visible problem with non-unique namespace identifiers
+is that they break the /dev/disk/by-id/ links, with the link for a
+supposedly unique identifier now pointing to one of multiple possible
+namespaces that share the same ID, and a somewhat random selection of
+which one actually shows up.
+
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Reviewed-by: Keith Busch <kbusch@kernel.org>
+Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
+Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/core.c | 24 ++++++++++++++++++------
+ drivers/nvme/host/nvme.h |  5 +++++
+ 2 files changed, 23 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
+index 853b9a24f744..ad4f1cfbad2e 100644
+--- a/drivers/nvme/host/core.c
++++ b/drivers/nvme/host/core.c
+@@ -1270,6 +1270,8 @@ static int nvme_process_ns_desc(struct nvme_ctrl *ctrl, struct nvme_ns_ids *ids,
+                                warn_str, cur->nidl);
+                       return -1;
+               }
++              if (ctrl->quirks & NVME_QUIRK_BOGUS_NID)
++                      return NVME_NIDT_EUI64_LEN;
+               memcpy(ids->eui64, data + sizeof(*cur), NVME_NIDT_EUI64_LEN);
+               return NVME_NIDT_EUI64_LEN;
+       case NVME_NIDT_NGUID:
+@@ -1278,6 +1280,8 @@ static int nvme_process_ns_desc(struct nvme_ctrl *ctrl, struct nvme_ns_ids *ids,
+                                warn_str, cur->nidl);
+                       return -1;
+               }
++              if (ctrl->quirks & NVME_QUIRK_BOGUS_NID)
++                      return NVME_NIDT_NGUID_LEN;
+               memcpy(ids->nguid, data + sizeof(*cur), NVME_NIDT_NGUID_LEN);
+               return NVME_NIDT_NGUID_LEN;
+       case NVME_NIDT_UUID:
+@@ -1286,6 +1290,8 @@ static int nvme_process_ns_desc(struct nvme_ctrl *ctrl, struct nvme_ns_ids *ids,
+                                warn_str, cur->nidl);
+                       return -1;
+               }
++              if (ctrl->quirks & NVME_QUIRK_BOGUS_NID)
++                      return NVME_NIDT_UUID_LEN;
+               uuid_copy(&ids->uuid, data + sizeof(*cur));
+               return NVME_NIDT_UUID_LEN;
+       case NVME_NIDT_CSI:
+@@ -1381,12 +1387,18 @@ static int nvme_identify_ns(struct nvme_ctrl *ctrl, unsigned nsid,
+       if ((*id)->ncap == 0) /* namespace not allocated or attached */
+               goto out_free_id;
+-      if (ctrl->vs >= NVME_VS(1, 1, 0) &&
+-          !memchr_inv(ids->eui64, 0, sizeof(ids->eui64)))
+-              memcpy(ids->eui64, (*id)->eui64, sizeof(ids->eui64));
+-      if (ctrl->vs >= NVME_VS(1, 2, 0) &&
+-          !memchr_inv(ids->nguid, 0, sizeof(ids->nguid)))
+-              memcpy(ids->nguid, (*id)->nguid, sizeof(ids->nguid));
++
++      if (ctrl->quirks & NVME_QUIRK_BOGUS_NID) {
++              dev_info(ctrl->device,
++                       "Ignoring bogus Namespace Identifiers\n");
++      } else {
++              if (ctrl->vs >= NVME_VS(1, 1, 0) &&
++                  !memchr_inv(ids->eui64, 0, sizeof(ids->eui64)))
++                      memcpy(ids->eui64, (*id)->eui64, sizeof(ids->eui64));
++              if (ctrl->vs >= NVME_VS(1, 2, 0) &&
++                  !memchr_inv(ids->nguid, 0, sizeof(ids->nguid)))
++                      memcpy(ids->nguid, (*id)->nguid, sizeof(ids->nguid));
++      }
+       return 0;
+diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
+index 5dd1dd8021ba..10e5ae3a8c0d 100644
+--- a/drivers/nvme/host/nvme.h
++++ b/drivers/nvme/host/nvme.h
+@@ -150,6 +150,11 @@ enum nvme_quirks {
+        * encoding the generation sequence number.
+        */
+       NVME_QUIRK_SKIP_CID_GEN                 = (1 << 17),
++
++      /*
++       * Reports garbage in the namespace identifiers (eui64, nguid, uuid).
++       */
++      NVME_QUIRK_BOGUS_NID                    = (1 << 18),
+ };
+ /*
+-- 
+2.35.1
+
diff --git a/queue-5.10/nvme-pci-disable-namespace-identifiers-for-qemu-cont.patch b/queue-5.10/nvme-pci-disable-namespace-identifiers-for-qemu-cont.patch
new file mode 100644 (file)
index 0000000..0004ddb
--- /dev/null
@@ -0,0 +1,44 @@
+From 7e3152a5137000f456b16420b905d1f770444383 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Apr 2022 07:07:56 +0200
+Subject: nvme-pci: disable namespace identifiers for Qemu controllers
+
+From: Christoph Hellwig <hch@lst.de>
+
+[ Upstream commit 66dd346b84d79fde20832ed691a54f4881eac20d ]
+
+Qemu unconditionally reports a UUID, which depending on the qemu version
+is either all-null (which is incorrect but harmless) or contains a single
+bit set for all controllers.  In addition it can also optionally report
+a eui64 which needs to be manually set.  Disable namespace identifiers
+for Qemu controlles entirely even if in some cases they could be set
+correctly through manual intervention.
+
+Reported-by: Luis Chamberlain <mcgrof@kernel.org>
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Reviewed-by: Keith Busch <kbusch@kernel.org>
+Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/nvme/host/pci.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
+index 97afeb898b25..6939b03a16c5 100644
+--- a/drivers/nvme/host/pci.c
++++ b/drivers/nvme/host/pci.c
+@@ -3212,7 +3212,10 @@ static const struct pci_device_id nvme_id_table[] = {
+               .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, },
+       { PCI_VDEVICE(INTEL, 0x5845),   /* Qemu emulated controller */
+               .driver_data = NVME_QUIRK_IDENTIFY_CNS |
+-                              NVME_QUIRK_DISABLE_WRITE_ZEROES, },
++                              NVME_QUIRK_DISABLE_WRITE_ZEROES |
++                              NVME_QUIRK_BOGUS_NID, },
++      { PCI_VDEVICE(REDHAT, 0x0010),  /* Qemu emulated controller */
++              .driver_data = NVME_QUIRK_BOGUS_NID, },
+       { PCI_DEVICE(0x126f, 0x2263),   /* Silicon Motion unidentified */
+               .driver_data = NVME_QUIRK_NO_NS_DESC_LIST, },
+       { PCI_DEVICE(0x1bb1, 0x0100),   /* Seagate Nytro Flash Storage */
+-- 
+2.35.1
+
diff --git a/queue-5.10/platform-x86-samsung-laptop-fix-an-unsigned-comparis.patch b/queue-5.10/platform-x86-samsung-laptop-fix-an-unsigned-comparis.patch
new file mode 100644 (file)
index 0000000..df02451
--- /dev/null
@@ -0,0 +1,41 @@
+From f610e658fd4851814469ae4a2902ca137c94a4cc Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 22 Mar 2022 14:18:30 +0800
+Subject: platform/x86: samsung-laptop: Fix an unsigned comparison which can
+ never be negative
+
+From: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
+
+[ Upstream commit 0284d4d1be753f648f28b77bdfbe6a959212af5c ]
+
+Eliminate the follow smatch warnings:
+
+drivers/platform/x86/samsung-laptop.c:1124 kbd_led_set() warn: unsigned
+'value' is never less than zero.
+
+Reported-by: Abaci Robot <abaci@linux.alibaba.com>
+Signed-off-by: Jiapeng Chong <jiapeng.chong@linux.alibaba.com>
+Link: https://lore.kernel.org/r/20220322061830.105579-1-jiapeng.chong@linux.alibaba.com
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/platform/x86/samsung-laptop.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
+index d5cec6e35bb8..0e456c39a603 100644
+--- a/drivers/platform/x86/samsung-laptop.c
++++ b/drivers/platform/x86/samsung-laptop.c
+@@ -1121,8 +1121,6 @@ static void kbd_led_set(struct led_classdev *led_cdev,
+       if (value > samsung->kbd_led.max_brightness)
+               value = samsung->kbd_led.max_brightness;
+-      else if (value < 0)
+-              value = 0;
+       samsung->kbd_led_wk = value;
+       queue_work(samsung->led_workqueue, &samsung->kbd_led_work);
+-- 
+2.35.1
+
diff --git a/queue-5.10/reset-tegra-bpmp-restore-handle-errors-in-bpmp-respo.patch b/queue-5.10/reset-tegra-bpmp-restore-handle-errors-in-bpmp-respo.patch
new file mode 100644 (file)
index 0000000..30a7769
--- /dev/null
@@ -0,0 +1,58 @@
+From 70948ca88826d23184426018a5c54209f3019fb3 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 12 Jan 2022 19:26:46 +0530
+Subject: reset: tegra-bpmp: Restore Handle errors in BPMP response
+
+From: Sameer Pujar <spujar@nvidia.com>
+
+[ Upstream commit d1da1052ffad63aa5181b69f20a6952e31f339c2 ]
+
+This reverts following commit 69125b4b9440 ("reset: tegra-bpmp: Revert
+Handle errors in BPMP response").
+
+The Tegra194 HDA reset failure is fixed by commit d278dc9151a0 ("ALSA:
+hda/tegra: Fix Tegra194 HDA reset failure"). The temporary revert of
+original commit c045ceb5a145 ("reset: tegra-bpmp: Handle errors in BPMP
+response") can be removed now.
+
+Signed-off-by: Sameer Pujar <spujar@nvidia.com>
+Tested-by: Jon Hunter <jonathanh@nvidia.com>
+Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
+Acked-by: Thierry Reding <treding@nvidia.com>
+Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
+Link: https://lore.kernel.org/r/1641995806-15245-1-git-send-email-spujar@nvidia.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/reset/tegra/reset-bpmp.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/reset/tegra/reset-bpmp.c b/drivers/reset/tegra/reset-bpmp.c
+index 24d3395964cc..4c5bba52b105 100644
+--- a/drivers/reset/tegra/reset-bpmp.c
++++ b/drivers/reset/tegra/reset-bpmp.c
+@@ -20,6 +20,7 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
+       struct tegra_bpmp *bpmp = to_tegra_bpmp(rstc);
+       struct mrq_reset_request request;
+       struct tegra_bpmp_message msg;
++      int err;
+       memset(&request, 0, sizeof(request));
+       request.cmd = command;
+@@ -30,7 +31,13 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
+       msg.tx.data = &request;
+       msg.tx.size = sizeof(request);
+-      return tegra_bpmp_transfer(bpmp, &msg);
++      err = tegra_bpmp_transfer(bpmp, &msg);
++      if (err)
++              return err;
++      if (msg.rx.ret)
++              return -EINVAL;
++
++      return 0;
+ }
+ static int tegra_bpmp_reset_module(struct reset_controller_dev *rstc,
+-- 
+2.35.1
+
diff --git a/queue-5.10/rxrpc-restore-removed-timer-deletion.patch b/queue-5.10/rxrpc-restore-removed-timer-deletion.patch
new file mode 100644 (file)
index 0000000..2369972
--- /dev/null
@@ -0,0 +1,59 @@
+From 8728df81fb6b4447232e49dad46a39f7e8ae84fb Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 13 Apr 2022 11:16:25 +0100
+Subject: rxrpc: Restore removed timer deletion
+
+From: David Howells <dhowells@redhat.com>
+
+[ Upstream commit ee3b0826b4764f6c13ad6db67495c5a1c38e9025 ]
+
+A recent patch[1] from Eric Dumazet flipped the order in which the
+keepalive timer and the keepalive worker were cancelled in order to fix a
+syzbot reported issue[2].  Unfortunately, this enables the mirror image bug
+whereby the timer races with rxrpc_exit_net(), restarting the worker after
+it has been cancelled:
+
+       CPU 1           CPU 2
+       =============== =====================
+                       if (rxnet->live)
+                       <INTERRUPT>
+       rxnet->live = false;
+       cancel_work_sync(&rxnet->peer_keepalive_work);
+                       rxrpc_queue_work(&rxnet->peer_keepalive_work);
+       del_timer_sync(&rxnet->peer_keepalive_timer);
+
+Fix this by restoring the removed del_timer_sync() so that we try to remove
+the timer twice.  If the timer runs again, it should see ->live == false
+and not restart the worker.
+
+Fixes: 1946014ca3b1 ("rxrpc: fix a race in rxrpc_exit_net()")
+Signed-off-by: David Howells <dhowells@redhat.com>
+cc: Eric Dumazet <edumazet@google.com>
+cc: Marc Dionne <marc.dionne@auristor.com>
+cc: linux-afs@lists.infradead.org
+Link: https://lore.kernel.org/r/20220404183439.3537837-1-eric.dumazet@gmail.com/ [1]
+Link: https://syzkaller.appspot.com/bug?extid=724378c4bb58f703b09a [2]
+Reviewed-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/rxrpc/net_ns.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/net/rxrpc/net_ns.c b/net/rxrpc/net_ns.c
+index f15d6942da45..cc7e30733feb 100644
+--- a/net/rxrpc/net_ns.c
++++ b/net/rxrpc/net_ns.c
+@@ -113,7 +113,9 @@ static __net_exit void rxrpc_exit_net(struct net *net)
+       struct rxrpc_net *rxnet = rxrpc_net(net);
+       rxnet->live = false;
++      del_timer_sync(&rxnet->peer_keepalive_timer);
+       cancel_work_sync(&rxnet->peer_keepalive_work);
++      /* Remove the timer again as the worker may have restarted it. */
+       del_timer_sync(&rxnet->peer_keepalive_timer);
+       rxrpc_destroy_all_calls(rxnet);
+       rxrpc_destroy_all_connections(rxnet);
+-- 
+2.35.1
+
diff --git a/queue-5.10/scsi-qedi-fix-failed-disconnect-handling.patch b/queue-5.10/scsi-qedi-fix-failed-disconnect-handling.patch
new file mode 100644 (file)
index 0000000..f27174b
--- /dev/null
@@ -0,0 +1,146 @@
+From 494495ef8ca1f051dabdc14eb0c76dc9f02c2264 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 7 Apr 2022 19:13:13 -0500
+Subject: scsi: qedi: Fix failed disconnect handling
+
+From: Mike Christie <michael.christie@oracle.com>
+
+[ Upstream commit 857b06527f707f5df634b854898a191b5c1d0272 ]
+
+We set the qedi_ep state to EP_STATE_OFLDCONN_START when the ep is
+created. Then in qedi_set_path we kick off the offload work. If userspace
+times out the connection and calls ep_disconnect, qedi will only flush the
+offload work if the qedi_ep state has transitioned away from
+EP_STATE_OFLDCONN_START. If we can't connect we will not have transitioned
+state and will leave the offload work running, and we will free the qedi_ep
+from under it.
+
+This patch just has us init the work when we create the ep, then always
+flush it.
+
+Link: https://lore.kernel.org/r/20220408001314.5014-10-michael.christie@oracle.com
+Tested-by: Manish Rangankar <mrangankar@marvell.com>
+Reviewed-by: Lee Duncan <lduncan@suse.com>
+Reviewed-by: Chris Leech <cleech@redhat.com>
+Acked-by: Manish Rangankar <mrangankar@marvell.com>
+Signed-off-by: Mike Christie <michael.christie@oracle.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/scsi/qedi/qedi_iscsi.c | 69 +++++++++++++++++-----------------
+ 1 file changed, 34 insertions(+), 35 deletions(-)
+
+diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c
+index 5f7e62f19d83..3bcadb3dd40d 100644
+--- a/drivers/scsi/qedi/qedi_iscsi.c
++++ b/drivers/scsi/qedi/qedi_iscsi.c
+@@ -828,6 +828,37 @@ static int qedi_task_xmit(struct iscsi_task *task)
+       return qedi_iscsi_send_ioreq(task);
+ }
++static void qedi_offload_work(struct work_struct *work)
++{
++      struct qedi_endpoint *qedi_ep =
++              container_of(work, struct qedi_endpoint, offload_work);
++      struct qedi_ctx *qedi;
++      int wait_delay = 5 * HZ;
++      int ret;
++
++      qedi = qedi_ep->qedi;
++
++      ret = qedi_iscsi_offload_conn(qedi_ep);
++      if (ret) {
++              QEDI_ERR(&qedi->dbg_ctx,
++                       "offload error: iscsi_cid=%u, qedi_ep=%p, ret=%d\n",
++                       qedi_ep->iscsi_cid, qedi_ep, ret);
++              qedi_ep->state = EP_STATE_OFLDCONN_FAILED;
++              return;
++      }
++
++      ret = wait_event_interruptible_timeout(qedi_ep->tcp_ofld_wait,
++                                             (qedi_ep->state ==
++                                             EP_STATE_OFLDCONN_COMPL),
++                                             wait_delay);
++      if (ret <= 0 || qedi_ep->state != EP_STATE_OFLDCONN_COMPL) {
++              qedi_ep->state = EP_STATE_OFLDCONN_FAILED;
++              QEDI_ERR(&qedi->dbg_ctx,
++                       "Offload conn TIMEOUT iscsi_cid=%u, qedi_ep=%p\n",
++                       qedi_ep->iscsi_cid, qedi_ep);
++      }
++}
++
+ static struct iscsi_endpoint *
+ qedi_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr,
+               int non_blocking)
+@@ -876,6 +907,7 @@ qedi_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr,
+       }
+       qedi_ep = ep->dd_data;
+       memset(qedi_ep, 0, sizeof(struct qedi_endpoint));
++      INIT_WORK(&qedi_ep->offload_work, qedi_offload_work);
+       qedi_ep->state = EP_STATE_IDLE;
+       qedi_ep->iscsi_cid = (u32)-1;
+       qedi_ep->qedi = qedi;
+@@ -1026,12 +1058,11 @@ static void qedi_ep_disconnect(struct iscsi_endpoint *ep)
+       qedi_ep = ep->dd_data;
+       qedi = qedi_ep->qedi;
++      flush_work(&qedi_ep->offload_work);
++
+       if (qedi_ep->state == EP_STATE_OFLDCONN_START)
+               goto ep_exit_recover;
+-      if (qedi_ep->state != EP_STATE_OFLDCONN_NONE)
+-              flush_work(&qedi_ep->offload_work);
+-
+       if (qedi_ep->conn) {
+               qedi_conn = qedi_ep->conn;
+               conn = qedi_conn->cls_conn->dd_data;
+@@ -1196,37 +1227,6 @@ static int qedi_data_avail(struct qedi_ctx *qedi, u16 vlanid)
+       return rc;
+ }
+-static void qedi_offload_work(struct work_struct *work)
+-{
+-      struct qedi_endpoint *qedi_ep =
+-              container_of(work, struct qedi_endpoint, offload_work);
+-      struct qedi_ctx *qedi;
+-      int wait_delay = 5 * HZ;
+-      int ret;
+-
+-      qedi = qedi_ep->qedi;
+-
+-      ret = qedi_iscsi_offload_conn(qedi_ep);
+-      if (ret) {
+-              QEDI_ERR(&qedi->dbg_ctx,
+-                       "offload error: iscsi_cid=%u, qedi_ep=%p, ret=%d\n",
+-                       qedi_ep->iscsi_cid, qedi_ep, ret);
+-              qedi_ep->state = EP_STATE_OFLDCONN_FAILED;
+-              return;
+-      }
+-
+-      ret = wait_event_interruptible_timeout(qedi_ep->tcp_ofld_wait,
+-                                             (qedi_ep->state ==
+-                                             EP_STATE_OFLDCONN_COMPL),
+-                                             wait_delay);
+-      if ((ret <= 0) || (qedi_ep->state != EP_STATE_OFLDCONN_COMPL)) {
+-              qedi_ep->state = EP_STATE_OFLDCONN_FAILED;
+-              QEDI_ERR(&qedi->dbg_ctx,
+-                       "Offload conn TIMEOUT iscsi_cid=%u, qedi_ep=%p\n",
+-                       qedi_ep->iscsi_cid, qedi_ep);
+-      }
+-}
+-
+ static int qedi_set_path(struct Scsi_Host *shost, struct iscsi_path *path_data)
+ {
+       struct qedi_ctx *qedi;
+@@ -1342,7 +1342,6 @@ static int qedi_set_path(struct Scsi_Host *shost, struct iscsi_path *path_data)
+                         qedi_ep->dst_addr, qedi_ep->dst_port);
+       }
+-      INIT_WORK(&qedi_ep->offload_work, qedi_offload_work);
+       queue_work(qedi->offload_thread, &qedi_ep->offload_work);
+       ret = 0;
+-- 
+2.35.1
+
diff --git a/queue-5.10/selftests-mlxsw-vxlan_flooding-prevent-flooding-of-u.patch b/queue-5.10/selftests-mlxsw-vxlan_flooding-prevent-flooding-of-u.patch
new file mode 100644 (file)
index 0000000..8573d16
--- /dev/null
@@ -0,0 +1,71 @@
+From a3555c59b400d14a8eb923c7799b71ea3f3ea031 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 19 Apr 2022 16:51:54 +0300
+Subject: selftests: mlxsw: vxlan_flooding: Prevent flooding of unwanted
+ packets
+
+From: Ido Schimmel <idosch@nvidia.com>
+
+[ Upstream commit 044011fdf162c5dd61c02841930c8f438a9adadb ]
+
+The test verifies that packets are correctly flooded by the bridge and
+the VXLAN device by matching on the encapsulated packets at the other
+end. However, if packets other than those generated by the test also
+ingress the bridge (e.g., MLD packets), they will be flooded as well and
+interfere with the expected count.
+
+Make the test more robust by making sure that only the packets generated
+by the test can ingress the bridge. Drop all the rest using tc filters
+on the egress of 'br0' and 'h1'.
+
+In the software data path, the problem can be solved by matching on the
+inner destination MAC or dropping unwanted packets at the egress of the
+VXLAN device, but this is not currently supported by mlxsw.
+
+Fixes: 94d302deae25 ("selftests: mlxsw: Add a test for VxLAN flooding")
+Signed-off-by: Ido Schimmel <idosch@nvidia.com>
+Reviewed-by: Amit Cohen <amcohen@nvidia.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ .../drivers/net/mlxsw/vxlan_flooding.sh         | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/tools/testing/selftests/drivers/net/mlxsw/vxlan_flooding.sh b/tools/testing/selftests/drivers/net/mlxsw/vxlan_flooding.sh
+index fedcb7b35af9..af5ea50ed5c0 100755
+--- a/tools/testing/selftests/drivers/net/mlxsw/vxlan_flooding.sh
++++ b/tools/testing/selftests/drivers/net/mlxsw/vxlan_flooding.sh
+@@ -172,6 +172,17 @@ flooding_filters_add()
+       local lsb
+       local i
++      # Prevent unwanted packets from entering the bridge and interfering
++      # with the test.
++      tc qdisc add dev br0 clsact
++      tc filter add dev br0 egress protocol all pref 1 handle 1 \
++              matchall skip_hw action drop
++      tc qdisc add dev $h1 clsact
++      tc filter add dev $h1 egress protocol all pref 1 handle 1 \
++              flower skip_hw dst_mac de:ad:be:ef:13:37 action pass
++      tc filter add dev $h1 egress protocol all pref 2 handle 2 \
++              matchall skip_hw action drop
++
+       tc qdisc add dev $rp2 clsact
+       for i in $(eval echo {1..$num_remotes}); do
+@@ -194,6 +205,12 @@ flooding_filters_del()
+       done
+       tc qdisc del dev $rp2 clsact
++
++      tc filter del dev $h1 egress protocol all pref 2 handle 2 matchall
++      tc filter del dev $h1 egress protocol all pref 1 handle 1 flower
++      tc qdisc del dev $h1 clsact
++      tc filter del dev br0 egress protocol all pref 1 handle 1 matchall
++      tc qdisc del dev br0 clsact
+ }
+ flooding_check_packets()
+-- 
+2.35.1
+
index 359fa6c8f9c8d2f267144064aea846048a3105d1..8caa145f621c705da1d1b74d865cdfb1f0c914a0 100644 (file)
@@ -6,3 +6,44 @@ gfs2-assign-rgrp-glock-before-compute_bitstructs.patch
 net-sched-cls_u32-fix-netns-refcount-changes-in-u32_change.patch
 alsa-usb-audio-clear-midi-port-active-flag-after-draining.patch
 alsa-hda-realtek-add-quirk-for-clevo-np70pnp.patch
+asoc-atmel-remove-system-clock-tree-configuration-fo.patch
+asoc-msm8916-wcd-digital-check-failure-for-devm_snd_.patch
+asoc-codecs-wcd934x-do-not-switch-off-sido-buck-when.patch
+dmaengine-imx-sdma-fix-error-checking-in-sdma_event_.patch
+dmaengine-mediatek-fix-pm-usage-reference-leak-of-mt.patch
+spi-spi-mtk-nor-initialize-spi-controller-after-resu.patch
+esp-limit-skb_page_frag_refill-use-to-a-single-page.patch
+igc-fix-infinite-loop-in-release_swfw_sync.patch
+igc-fix-bug-scheduling-while-atomic.patch
+rxrpc-restore-removed-timer-deletion.patch
+net-smc-fix-sock-leak-when-release-after-smc_shutdow.patch
+net-packet-fix-packet_sock-xmit-return-value-checkin.patch
+ip6_gre-avoid-updating-tunnel-tun_hlen-in-__gre6_xmi.patch
+ip6_gre-fix-skb_under_panic-in-__gre6_xmit.patch
+net-sched-cls_u32-fix-possible-leak-in-u32_init_knod.patch
+l3mdev-l3mdev_master_upper_ifindex_by_index_rcu-shou.patch
+ipv6-make-ip6_rt_gc_expire-an-atomic_t.patch
+netlink-reset-network-and-mac-headers-in-netlink_dum.patch
+net-stmmac-use-readl_poll_timeout_atomic-in-atomic-s.patch
+dmaengine-idxd-add-ro-check-for-wq-max_batch_size-wr.patch
+dmaengine-idxd-add-ro-check-for-wq-max_transfer_size.patch
+selftests-mlxsw-vxlan_flooding-prevent-flooding-of-u.patch
+arm64-mm-remove-pud-pmd-_table_bit-from-pud-pmd-_bad.patch
+arm64-mm-fix-p-d_leaf.patch
+arm-vexpress-spc-avoid-negative-array-index-when-smp.patch
+reset-tegra-bpmp-restore-handle-errors-in-bpmp-respo.patch
+platform-x86-samsung-laptop-fix-an-unsigned-comparis.patch
+alsa-usb-audio-fix-undefined-behavior-due-to-shift-o.patch
+arm64-dts-imx-fix-imx8-var-som-touchscreen-property-.patch
+vxlan-fix-error-return-code-in-vxlan_fdb_append.patch
+cifs-check-the-iocb_direct-flag-not-o_direct.patch
+net-atlantic-avoid-out-of-bounds-indexing.patch
+mt76-fix-undefined-behavior-due-to-shift-overflowing.patch
+brcmfmac-sdio-fix-undefined-behavior-due-to-shift-ov.patch
+dpaa_eth-fix-missing-of_node_put-in-dpaa_get_ts_info.patch
+drm-msm-mdp5-check-the-return-of-kzalloc.patch
+net-macb-restart-tx-only-if-queue-pointer-is-lagging.patch
+scsi-qedi-fix-failed-disconnect-handling.patch
+stat-fix-inconsistency-between-struct-stat-and-struc.patch
+nvme-add-a-quirk-to-disable-namespace-identifiers.patch
+nvme-pci-disable-namespace-identifiers-for-qemu-cont.patch
diff --git a/queue-5.10/spi-spi-mtk-nor-initialize-spi-controller-after-resu.patch b/queue-5.10/spi-spi-mtk-nor-initialize-spi-controller-after-resu.patch
new file mode 100644 (file)
index 0000000..f801987
--- /dev/null
@@ -0,0 +1,53 @@
+From f25a5d84c0794be3d1c1b0fa43d7df1c68a98745 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Apr 2022 19:57:43 +0800
+Subject: spi: spi-mtk-nor: initialize spi controller after resume
+
+From: Allen-KH Cheng <allen-kh.cheng@mediatek.com>
+
+[ Upstream commit 317c2045618cc1f8d38beb8c93a7bdb6ad8638c6 ]
+
+After system resumes, the registers of nor controller are
+initialized with default values. The nor controller will
+not function properly.
+
+To handle both issues above, we add mtk_nor_init() in
+mtk_nor_resume after pm_runtime_force_resume().
+
+Fixes: 3bfd9103c7af ("spi: spi-mtk-nor: Add power management support")
+
+Signed-off-by: Allen-KH Cheng <allen-kh.cheng@mediatek.com>
+Reviewed-by: Rex-BC Chen <rex-bc.chen@mediatek.com>
+Link: https://lore.kernel.org/r/20220412115743.22641-1-allen-kh.cheng@mediatek.com
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/spi/spi-mtk-nor.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/spi/spi-mtk-nor.c b/drivers/spi/spi-mtk-nor.c
+index 288f6c2bbd57..106e3cacba4c 100644
+--- a/drivers/spi/spi-mtk-nor.c
++++ b/drivers/spi/spi-mtk-nor.c
+@@ -895,7 +895,17 @@ static int __maybe_unused mtk_nor_suspend(struct device *dev)
+ static int __maybe_unused mtk_nor_resume(struct device *dev)
+ {
+-      return pm_runtime_force_resume(dev);
++      struct spi_controller *ctlr = dev_get_drvdata(dev);
++      struct mtk_nor *sp = spi_controller_get_devdata(ctlr);
++      int ret;
++
++      ret = pm_runtime_force_resume(dev);
++      if (ret)
++              return ret;
++
++      mtk_nor_init(sp);
++
++      return 0;
+ }
+ static const struct dev_pm_ops mtk_nor_pm_ops = {
+-- 
+2.35.1
+
diff --git a/queue-5.10/stat-fix-inconsistency-between-struct-stat-and-struc.patch b/queue-5.10/stat-fix-inconsistency-between-struct-stat-and-struc.patch
new file mode 100644 (file)
index 0000000..4568a49
--- /dev/null
@@ -0,0 +1,138 @@
+From 138adc2cee725d83baa3b493f0423f8a8827bae9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 12 Apr 2022 05:41:00 -0400
+Subject: stat: fix inconsistency between struct stat and struct compat_stat
+
+From: Mikulas Patocka <mpatocka@redhat.com>
+
+[ Upstream commit 932aba1e169090357a77af18850a10c256b50819 ]
+
+struct stat (defined in arch/x86/include/uapi/asm/stat.h) has 32-bit
+st_dev and st_rdev; struct compat_stat (defined in
+arch/x86/include/asm/compat.h) has 16-bit st_dev and st_rdev followed by
+a 16-bit padding.
+
+This patch fixes struct compat_stat to match struct stat.
+
+[ Historical note: the old x86 'struct stat' did have that 16-bit field
+  that the compat layer had kept around, but it was changes back in 2003
+  by "struct stat - support larger dev_t":
+
+    https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/?id=e95b2065677fe32512a597a79db94b77b90c968d
+
+  and back in those days, the x86_64 port was still new, and separate
+  from the i386 code, and had already picked up the old version with a
+  16-bit st_dev field ]
+
+Note that we can't change compat_dev_t because it is used by
+compat_loop_info.
+
+Also, if the st_dev and st_rdev values are 32-bit, we don't have to use
+old_valid_dev to test if the value fits into them.  This fixes
+-EOVERFLOW on filesystems that are on NVMe because NVMe uses the major
+number 259.
+
+Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
+Cc: Andreas Schwab <schwab@linux-m68k.org>
+Cc: Matthew Wilcox <willy@infradead.org>
+Cc: Christoph Hellwig <hch@infradead.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ arch/x86/include/asm/compat.h |  6 ++----
+ fs/stat.c                     | 19 ++++++++++---------
+ 2 files changed, 12 insertions(+), 13 deletions(-)
+
+diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h
+index 0e327a01f50f..46a067bd7e0b 100644
+--- a/arch/x86/include/asm/compat.h
++++ b/arch/x86/include/asm/compat.h
+@@ -29,15 +29,13 @@ typedef u32                compat_caddr_t;
+ typedef __kernel_fsid_t       compat_fsid_t;
+ struct compat_stat {
+-      compat_dev_t    st_dev;
+-      u16             __pad1;
++      u32             st_dev;
+       compat_ino_t    st_ino;
+       compat_mode_t   st_mode;
+       compat_nlink_t  st_nlink;
+       __compat_uid_t  st_uid;
+       __compat_gid_t  st_gid;
+-      compat_dev_t    st_rdev;
+-      u16             __pad2;
++      u32             st_rdev;
+       u32             st_size;
+       u32             st_blksize;
+       u32             st_blocks;
+diff --git a/fs/stat.c b/fs/stat.c
+index 1196af4d1ea0..04550c0ba540 100644
+--- a/fs/stat.c
++++ b/fs/stat.c
+@@ -306,9 +306,6 @@ SYSCALL_DEFINE2(fstat, unsigned int, fd, struct __old_kernel_stat __user *, stat
+ #  define choose_32_64(a,b) b
+ #endif
+-#define valid_dev(x)  choose_32_64(old_valid_dev(x),true)
+-#define encode_dev(x) choose_32_64(old_encode_dev,new_encode_dev)(x)
+-
+ #ifndef INIT_STRUCT_STAT_PADDING
+ #  define INIT_STRUCT_STAT_PADDING(st) memset(&st, 0, sizeof(st))
+ #endif
+@@ -317,7 +314,9 @@ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
+ {
+       struct stat tmp;
+-      if (!valid_dev(stat->dev) || !valid_dev(stat->rdev))
++      if (sizeof(tmp.st_dev) < 4 && !old_valid_dev(stat->dev))
++              return -EOVERFLOW;
++      if (sizeof(tmp.st_rdev) < 4 && !old_valid_dev(stat->rdev))
+               return -EOVERFLOW;
+ #if BITS_PER_LONG == 32
+       if (stat->size > MAX_NON_LFS)
+@@ -325,7 +324,7 @@ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
+ #endif
+       INIT_STRUCT_STAT_PADDING(tmp);
+-      tmp.st_dev = encode_dev(stat->dev);
++      tmp.st_dev = new_encode_dev(stat->dev);
+       tmp.st_ino = stat->ino;
+       if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
+               return -EOVERFLOW;
+@@ -335,7 +334,7 @@ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
+               return -EOVERFLOW;
+       SET_UID(tmp.st_uid, from_kuid_munged(current_user_ns(), stat->uid));
+       SET_GID(tmp.st_gid, from_kgid_munged(current_user_ns(), stat->gid));
+-      tmp.st_rdev = encode_dev(stat->rdev);
++      tmp.st_rdev = new_encode_dev(stat->rdev);
+       tmp.st_size = stat->size;
+       tmp.st_atime = stat->atime.tv_sec;
+       tmp.st_mtime = stat->mtime.tv_sec;
+@@ -616,11 +615,13 @@ static int cp_compat_stat(struct kstat *stat, struct compat_stat __user *ubuf)
+ {
+       struct compat_stat tmp;
+-      if (!old_valid_dev(stat->dev) || !old_valid_dev(stat->rdev))
++      if (sizeof(tmp.st_dev) < 4 && !old_valid_dev(stat->dev))
++              return -EOVERFLOW;
++      if (sizeof(tmp.st_rdev) < 4 && !old_valid_dev(stat->rdev))
+               return -EOVERFLOW;
+       memset(&tmp, 0, sizeof(tmp));
+-      tmp.st_dev = old_encode_dev(stat->dev);
++      tmp.st_dev = new_encode_dev(stat->dev);
+       tmp.st_ino = stat->ino;
+       if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
+               return -EOVERFLOW;
+@@ -630,7 +631,7 @@ static int cp_compat_stat(struct kstat *stat, struct compat_stat __user *ubuf)
+               return -EOVERFLOW;
+       SET_UID(tmp.st_uid, from_kuid_munged(current_user_ns(), stat->uid));
+       SET_GID(tmp.st_gid, from_kgid_munged(current_user_ns(), stat->gid));
+-      tmp.st_rdev = old_encode_dev(stat->rdev);
++      tmp.st_rdev = new_encode_dev(stat->rdev);
+       if ((u64) stat->size > MAX_NON_LFS)
+               return -EOVERFLOW;
+       tmp.st_size = stat->size;
+-- 
+2.35.1
+
diff --git a/queue-5.10/vxlan-fix-error-return-code-in-vxlan_fdb_append.patch b/queue-5.10/vxlan-fix-error-return-code-in-vxlan_fdb_append.patch
new file mode 100644 (file)
index 0000000..5303165
--- /dev/null
@@ -0,0 +1,40 @@
+From 83274afb853d57991afeb043d4cc102f457ec7b0 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 6 Apr 2022 22:46:22 -0400
+Subject: vxlan: fix error return code in vxlan_fdb_append
+
+From: Hongbin Wang <wh_bin@126.com>
+
+[ Upstream commit 7cea5560bf656b84f9ed01c0cc829d4eecd0640b ]
+
+When kmalloc and dst_cache_init failed,
+should return ENOMEM rather than ENOBUFS.
+
+Signed-off-by: Hongbin Wang <wh_bin@126.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/vxlan.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
+index 48fbdce6a70e..72d670667f64 100644
+--- a/drivers/net/vxlan.c
++++ b/drivers/net/vxlan.c
+@@ -710,11 +710,11 @@ static int vxlan_fdb_append(struct vxlan_fdb *f,
+       rd = kmalloc(sizeof(*rd), GFP_ATOMIC);
+       if (rd == NULL)
+-              return -ENOBUFS;
++              return -ENOMEM;
+       if (dst_cache_init(&rd->dst_cache, GFP_ATOMIC)) {
+               kfree(rd);
+-              return -ENOBUFS;
++              return -ENOMEM;
+       }
+       rd->remote_ip = *ip;
+-- 
+2.35.1
+