From: Sasha Levin Date: Sun, 7 Apr 2024 20:11:08 +0000 (-0400) Subject: Fixes for 4.19 X-Git-Tag: v5.15.154~65 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a206b1ae9882f8db3109d4694e54723e034699d9;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 4.19 Signed-off-by: Sasha Levin --- diff --git a/queue-4.19/asoc-ops-fix-wraparound-for-mask-in-snd_soc_get_vols.patch b/queue-4.19/asoc-ops-fix-wraparound-for-mask-in-snd_soc_get_vols.patch new file mode 100644 index 00000000000..f8139a6762d --- /dev/null +++ b/queue-4.19/asoc-ops-fix-wraparound-for-mask-in-snd_soc_get_vols.patch @@ -0,0 +1,42 @@ +From 13faedfe1a47f9e3d01be08cece25ef76dbe39ee Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 25 Mar 2024 18:01:31 -0700 +Subject: ASoC: ops: Fix wraparound for mask in snd_soc_get_volsw + +From: Stephen Lee + +[ Upstream commit fc563aa900659a850e2ada4af26b9d7a3de6c591 ] + +In snd_soc_info_volsw(), mask is generated by figuring out the index of +the most significant bit set in max and converting the index to a +bitmask through bit shift 1. Unintended wraparound occurs when max is an +integer value with msb bit set. Since the bit shift value 1 is treated +as an integer type, the left shift operation will wraparound and set +mask to 0 instead of all 1's. In order to fix this, we type cast 1 as +`1ULL` to prevent the wraparound. + +Fixes: 7077148fb50a ("ASoC: core: Split ops out of soc-core.c") +Signed-off-by: Stephen Lee +Link: https://msgid.link/r/20240326010131.6211-1-slee08177@gmail.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/soc-ops.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c +index e01f3bf3ef171..08ed973b2d975 100644 +--- a/sound/soc/soc-ops.c ++++ b/sound/soc/soc-ops.c +@@ -252,7 +252,7 @@ int snd_soc_get_volsw(struct snd_kcontrol *kcontrol, + int max = mc->max; + int min = mc->min; + int sign_bit = mc->sign_bit; +- unsigned int mask = (1 << fls(max)) - 1; ++ unsigned int mask = (1ULL << fls(max)) - 1; + unsigned int invert = mc->invert; + int val; + int ret; +-- +2.43.0 + diff --git a/queue-4.19/ata-sata_mv-fix-pci-device-id-table-declaration-comp.patch b/queue-4.19/ata-sata_mv-fix-pci-device-id-table-declaration-comp.patch new file mode 100644 index 00000000000..7c29b18f5ad --- /dev/null +++ b/queue-4.19/ata-sata_mv-fix-pci-device-id-table-declaration-comp.patch @@ -0,0 +1,124 @@ +From 264fa749b0ea10bb10e7260752a5be47581c2c66 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 3 Apr 2024 10:06:48 +0200 +Subject: ata: sata_mv: Fix PCI device ID table declaration compilation warning + +From: Arnd Bergmann + +[ Upstream commit 3137b83a90646917c90951d66489db466b4ae106 ] + +Building with W=1 shows a warning for an unused variable when CONFIG_PCI +is diabled: + +drivers/ata/sata_mv.c:790:35: error: unused variable 'mv_pci_tbl' [-Werror,-Wunused-const-variable] +static const struct pci_device_id mv_pci_tbl[] = { + +Move the table into the same block that containsn the pci_driver +definition. + +Fixes: 7bb3c5290ca0 ("sata_mv: Remove PCI dependency") +Signed-off-by: Arnd Bergmann +Signed-off-by: Damien Le Moal +Signed-off-by: Sasha Levin +--- + drivers/ata/sata_mv.c | 63 +++++++++++++++++++++---------------------- + 1 file changed, 31 insertions(+), 32 deletions(-) + +diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c +index 84ea284502d53..001656642fffa 100644 +--- a/drivers/ata/sata_mv.c ++++ b/drivers/ata/sata_mv.c +@@ -796,37 +796,6 @@ static const struct ata_port_info mv_port_info[] = { + }, + }; + +-static const struct pci_device_id mv_pci_tbl[] = { +- { PCI_VDEVICE(MARVELL, 0x5040), chip_504x }, +- { PCI_VDEVICE(MARVELL, 0x5041), chip_504x }, +- { PCI_VDEVICE(MARVELL, 0x5080), chip_5080 }, +- { PCI_VDEVICE(MARVELL, 0x5081), chip_508x }, +- /* RocketRAID 1720/174x have different identifiers */ +- { PCI_VDEVICE(TTI, 0x1720), chip_6042 }, +- { PCI_VDEVICE(TTI, 0x1740), chip_6042 }, +- { PCI_VDEVICE(TTI, 0x1742), chip_6042 }, +- +- { PCI_VDEVICE(MARVELL, 0x6040), chip_604x }, +- { PCI_VDEVICE(MARVELL, 0x6041), chip_604x }, +- { PCI_VDEVICE(MARVELL, 0x6042), chip_6042 }, +- { PCI_VDEVICE(MARVELL, 0x6080), chip_608x }, +- { PCI_VDEVICE(MARVELL, 0x6081), chip_608x }, +- +- { PCI_VDEVICE(ADAPTEC2, 0x0241), chip_604x }, +- +- /* Adaptec 1430SA */ +- { PCI_VDEVICE(ADAPTEC2, 0x0243), chip_7042 }, +- +- /* Marvell 7042 support */ +- { PCI_VDEVICE(MARVELL, 0x7042), chip_7042 }, +- +- /* Highpoint RocketRAID PCIe series */ +- { PCI_VDEVICE(TTI, 0x2300), chip_7042 }, +- { PCI_VDEVICE(TTI, 0x2310), chip_7042 }, +- +- { } /* terminate list */ +-}; +- + static const struct mv_hw_ops mv5xxx_ops = { + .phy_errata = mv5_phy_errata, + .enable_leds = mv5_enable_leds, +@@ -4320,6 +4289,36 @@ static int mv_pci_init_one(struct pci_dev *pdev, + static int mv_pci_device_resume(struct pci_dev *pdev); + #endif + ++static const struct pci_device_id mv_pci_tbl[] = { ++ { PCI_VDEVICE(MARVELL, 0x5040), chip_504x }, ++ { PCI_VDEVICE(MARVELL, 0x5041), chip_504x }, ++ { PCI_VDEVICE(MARVELL, 0x5080), chip_5080 }, ++ { PCI_VDEVICE(MARVELL, 0x5081), chip_508x }, ++ /* RocketRAID 1720/174x have different identifiers */ ++ { PCI_VDEVICE(TTI, 0x1720), chip_6042 }, ++ { PCI_VDEVICE(TTI, 0x1740), chip_6042 }, ++ { PCI_VDEVICE(TTI, 0x1742), chip_6042 }, ++ ++ { PCI_VDEVICE(MARVELL, 0x6040), chip_604x }, ++ { PCI_VDEVICE(MARVELL, 0x6041), chip_604x }, ++ { PCI_VDEVICE(MARVELL, 0x6042), chip_6042 }, ++ { PCI_VDEVICE(MARVELL, 0x6080), chip_608x }, ++ { PCI_VDEVICE(MARVELL, 0x6081), chip_608x }, ++ ++ { PCI_VDEVICE(ADAPTEC2, 0x0241), chip_604x }, ++ ++ /* Adaptec 1430SA */ ++ { PCI_VDEVICE(ADAPTEC2, 0x0243), chip_7042 }, ++ ++ /* Marvell 7042 support */ ++ { PCI_VDEVICE(MARVELL, 0x7042), chip_7042 }, ++ ++ /* Highpoint RocketRAID PCIe series */ ++ { PCI_VDEVICE(TTI, 0x2300), chip_7042 }, ++ { PCI_VDEVICE(TTI, 0x2310), chip_7042 }, ++ ++ { } /* terminate list */ ++}; + + static struct pci_driver mv_pci_driver = { + .name = DRV_NAME, +@@ -4332,6 +4331,7 @@ static struct pci_driver mv_pci_driver = { + #endif + + }; ++MODULE_DEVICE_TABLE(pci, mv_pci_tbl); + + /* move to PCI layer or libata core? */ + static int pci_go_64(struct pci_dev *pdev) +@@ -4534,7 +4534,6 @@ static void __exit mv_exit(void) + MODULE_AUTHOR("Brett Russ"); + MODULE_DESCRIPTION("SCSI low-level driver for Marvell SATA controllers"); + MODULE_LICENSE("GPL v2"); +-MODULE_DEVICE_TABLE(pci, mv_pci_tbl); + MODULE_VERSION(DRV_VERSION); + MODULE_ALIAS("platform:" DRV_NAME); + +-- +2.43.0 + diff --git a/queue-4.19/ata-sata_sx4-fix-pdc20621_get_from_dimm-on-64-bit.patch b/queue-4.19/ata-sata_sx4-fix-pdc20621_get_from_dimm-on-64-bit.patch new file mode 100644 index 00000000000..f7a52010dad --- /dev/null +++ b/queue-4.19/ata-sata_sx4-fix-pdc20621_get_from_dimm-on-64-bit.patch @@ -0,0 +1,71 @@ +From a99f195650f22e2db2def6e2e69fa1a2c7fa77af Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 26 Mar 2024 15:53:37 +0100 +Subject: ata: sata_sx4: fix pdc20621_get_from_dimm() on 64-bit + +From: Arnd Bergmann + +[ Upstream commit 52f80bb181a9a1530ade30bc18991900bbb9697f ] + +gcc warns about a memcpy() with overlapping pointers because of an +incorrect size calculation: + +In file included from include/linux/string.h:369, + from drivers/ata/sata_sx4.c:66: +In function 'memcpy_fromio', + inlined from 'pdc20621_get_from_dimm.constprop' at drivers/ata/sata_sx4.c:962:2: +include/linux/fortify-string.h:97:33: error: '__builtin_memcpy' accessing 4294934464 bytes at offsets 0 and [16, 16400] overlaps 6442385281 bytes at offset -2147450817 [-Werror=restrict] + 97 | #define __underlying_memcpy __builtin_memcpy + | ^ +include/linux/fortify-string.h:620:9: note: in expansion of macro '__underlying_memcpy' + 620 | __underlying_##op(p, q, __fortify_size); \ + | ^~~~~~~~~~~~~ +include/linux/fortify-string.h:665:26: note: in expansion of macro '__fortify_memcpy_chk' + 665 | #define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \ + | ^~~~~~~~~~~~~~~~~~~~ +include/asm-generic/io.h:1184:9: note: in expansion of macro 'memcpy' + 1184 | memcpy(buffer, __io_virt(addr), size); + | ^~~~~~ + +The problem here is the overflow of an unsigned 32-bit number to a +negative that gets converted into a signed 'long', keeping a large +positive number. + +Replace the complex calculation with a more readable min() variant +that avoids the warning. + +Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") +Signed-off-by: Arnd Bergmann +Signed-off-by: Damien Le Moal +Signed-off-by: Sasha Levin +--- + drivers/ata/sata_sx4.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/drivers/ata/sata_sx4.c b/drivers/ata/sata_sx4.c +index 0d742457925ec..f217ac8e17b15 100644 +--- a/drivers/ata/sata_sx4.c ++++ b/drivers/ata/sata_sx4.c +@@ -1020,8 +1020,7 @@ static void pdc20621_get_from_dimm(struct ata_host *host, void *psource, + + offset -= (idx * window_size); + idx++; +- dist = ((long) (window_size - (offset + size))) >= 0 ? size : +- (long) (window_size - offset); ++ dist = min(size, window_size - offset); + memcpy_fromio(psource, dimm_mmio + offset / 4, dist); + + psource += dist; +@@ -1069,8 +1068,7 @@ static void pdc20621_put_to_dimm(struct ata_host *host, void *psource, + readl(mmio + PDC_DIMM_WINDOW_CTLR); + offset -= (idx * window_size); + idx++; +- dist = ((long)(s32)(window_size - (offset + size))) >= 0 ? size : +- (long) (window_size - offset); ++ dist = min(size, window_size - offset); + memcpy_toio(dimm_mmio + offset / 4, psource, dist); + writel(0x01, mmio + PDC_GENERAL_CTLR); + readl(mmio + PDC_GENERAL_CTLR); +-- +2.43.0 + diff --git a/queue-4.19/series b/queue-4.19/series index cd5ab87529a..96412a095f7 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -142,3 +142,6 @@ initramfs-switch-initramfs-unpacking-to-struct-file-.patch init-open-initrd.image-with-o_largefile.patch erspan-add-type-i-version-0-support.patch erspan-make-sure-erspan_base_hdr-is-present-in-skb-h.patch +asoc-ops-fix-wraparound-for-mask-in-snd_soc_get_vols.patch +ata-sata_sx4-fix-pdc20621_get_from_dimm-on-64-bit.patch +ata-sata_mv-fix-pci-device-id-table-declaration-comp.patch