From: Sasha Levin Date: Sat, 29 Jun 2024 11:50:02 +0000 (-0400) Subject: Fixes for 5.4 X-Git-Tag: v4.19.317~127 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=113ece66852f4de146660b46b45a0fe727091baf;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 5.4 Signed-off-by: Sasha Levin --- diff --git a/queue-5.4/asoc-fsl-asoc-card-set-priv-pdev-before-using-it.patch b/queue-5.4/asoc-fsl-asoc-card-set-priv-pdev-before-using-it.patch new file mode 100644 index 00000000000..12610b97832 --- /dev/null +++ b/queue-5.4/asoc-fsl-asoc-card-set-priv-pdev-before-using-it.patch @@ -0,0 +1,54 @@ +From 2375ff0cee52adb950b99e2eaf11893a08fc6976 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 20 Jun 2024 15:25:03 +0200 +Subject: ASoC: fsl-asoc-card: set priv->pdev before using it + +From: Elinor Montmasson + +[ Upstream commit 90f3feb24172185f1832636264943e8b5e289245 ] + +priv->pdev pointer was set after being used in +fsl_asoc_card_audmux_init(). +Move this assignment at the start of the probe function, so +sub-functions can correctly use pdev through priv. + +fsl_asoc_card_audmux_init() dereferences priv->pdev to get access to the +dev struct, used with dev_err macros. +As priv is zero-initialised, there would be a NULL pointer dereference. +Note that if priv->dev is dereferenced before assignment but never used, +for example if there is no error to be printed, the driver won't crash +probably due to compiler optimisations. + +Fixes: 708b4351f08c ("ASoC: fsl: Add Freescale Generic ASoC Sound Card with ASRC support") +Signed-off-by: Elinor Montmasson +Link: https://patch.msgid.link/20240620132511.4291-2-elinor.montmasson@savoirfairelinux.com +Signed-off-by: Mark Brown +Signed-off-by: Sasha Levin +--- + sound/soc/fsl/fsl-asoc-card.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/sound/soc/fsl/fsl-asoc-card.c b/sound/soc/fsl/fsl-asoc-card.c +index db663e7d17a42..c7f7335bbf863 100644 +--- a/sound/soc/fsl/fsl-asoc-card.c ++++ b/sound/soc/fsl/fsl-asoc-card.c +@@ -494,6 +494,8 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) + if (!priv) + return -ENOMEM; + ++ priv->pdev = pdev; ++ + cpu_np = of_parse_phandle(np, "audio-cpu", 0); + /* Give a chance to old DT binding */ + if (!cpu_np) +@@ -606,7 +608,6 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) + codec_dev->name); + + /* Initialize sound card */ +- priv->pdev = pdev; + priv->card.dev = &pdev->dev; + priv->card.name = priv->name; + priv->card.dai_link = priv->dai_link; +-- +2.43.0 + diff --git a/queue-5.4/net-dsa-microchip-fix-initial-port-flush-problem.patch b/queue-5.4/net-dsa-microchip-fix-initial-port-flush-problem.patch new file mode 100644 index 00000000000..e79493544ee --- /dev/null +++ b/queue-5.4/net-dsa-microchip-fix-initial-port-flush-problem.patch @@ -0,0 +1,49 @@ +From 89af5b76e55d2ea52b3b505b3d4680d415a51943 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 18 Jun 2024 17:16:42 -0700 +Subject: net: dsa: microchip: fix initial port flush problem + +From: Tristram Ha + +[ Upstream commit ad53f5f54f351e967128edbc431f0f26427172cf ] + +The very first flush in any port will flush all learned addresses in all +ports. This can be observed by unplugging the cable from one port while +additional ports are connected and dumping the fdb entries. + +This problem is caused by the initially wrong value programmed to the +REG_SW_LUE_CTRL_1 register. Setting SW_FLUSH_STP_TABLE and +SW_FLUSH_MSTP_TABLE bits does not have an immediate effect. It is when +ksz9477_flush_dyn_mac_table() is called then the SW_FLUSH_STP_TABLE bit +takes effect and flushes all learned entries. After that call both bits +are reset and so the next port flush will not cause such problem again. + +Fixes: b987e98e50ab ("dsa: add DSA switch driver for Microchip KSZ9477") +Signed-off-by: Tristram Ha +Link: https://patch.msgid.link/1718756202-2731-1-git-send-email-Tristram.Ha@microchip.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Sasha Levin +--- + drivers/net/dsa/microchip/ksz9477.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c +index ba2dc01e0f6bf..5b398608f2975 100644 +--- a/drivers/net/dsa/microchip/ksz9477.c ++++ b/drivers/net/dsa/microchip/ksz9477.c +@@ -206,10 +206,8 @@ static int ksz9477_reset_switch(struct ksz_device *dev) + SPI_AUTO_EDGE_DETECTION, 0); + + /* default configuration */ +- ksz_read8(dev, REG_SW_LUE_CTRL_1, &data8); +- data8 = SW_AGING_ENABLE | SW_LINK_AUTO_AGING | +- SW_SRC_ADDR_FILTER | SW_FLUSH_STP_TABLE | SW_FLUSH_MSTP_TABLE; +- ksz_write8(dev, REG_SW_LUE_CTRL_1, data8); ++ ksz_write8(dev, REG_SW_LUE_CTRL_1, ++ SW_AGING_ENABLE | SW_LINK_AUTO_AGING | SW_SRC_ADDR_FILTER); + + /* disable interrupts */ + ksz_write32(dev, REG_SW_INT_MASK__4, SWITCH_INT_MASK); +-- +2.43.0 + diff --git a/queue-5.4/net-phy-mchp-add-support-for-lan8814-quad-phy.patch b/queue-5.4/net-phy-mchp-add-support-for-lan8814-quad-phy.patch new file mode 100644 index 00000000000..18583faed4c --- /dev/null +++ b/queue-5.4/net-phy-mchp-add-support-for-lan8814-quad-phy.patch @@ -0,0 +1,86 @@ +From 35a725f8dc119f6933b1f1935233a6d28d178174 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 11 Sep 2020 18:48:44 +0530 +Subject: net: phy: mchp: Add support for LAN8814 QUAD PHY + +From: Divya Koppera + +[ Upstream commit 1623ad8ec04c771a54975fb84b22bc21c2dbcac1 ] + +LAN8814 is a low-power, quad-port triple-speed (10BASE-T/100BASETX/1000BASE-T) +Ethernet physical layer transceiver (PHY). It supports transmission and +reception of data on standard CAT-5, as well as CAT-5e and CAT-6, unshielded +twisted pair (UTP) cables. + +LAN8814 supports industry-standard QSGMII (Quad Serial Gigabit Media +Independent Interface) and Q-USGMII (Quad Universal Serial Gigabit Media +Independent Interface) providing chip-to-chip connection to four Gigabit +Ethernet MACs using a single serialized link (differential pair) in each +direction. + +The LAN8814 SKU supports high-accuracy timestamping functions to +support IEEE-1588 solutions using Microchip Ethernet switches, as well as +customer solutions based on SoCs and FPGAs. + +The LAN8804 SKU has same features as that of LAN8814 SKU except that it does +not support 1588, SyncE, or Q-USGMII with PCH/MCH. + +This adds support for 10BASE-T, 100BASE-TX, and 1000BASE-T, +QSGMII link with the MAC. + +Signed-off-by: Divya Koppera +Signed-off-by: David S. Miller +Stable-dep-of: 54a4e5c16382 ("net: phy: micrel: add Microchip KSZ 9477 to the device table") +Signed-off-by: Sasha Levin +--- + drivers/net/phy/micrel.c | 14 ++++++++++++++ + include/linux/micrel_phy.h | 1 + + 2 files changed, 15 insertions(+) + +diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c +index caaa51a70cbdc..2cd812c097baf 100644 +--- a/drivers/net/phy/micrel.c ++++ b/drivers/net/phy/micrel.c +@@ -1149,6 +1149,19 @@ static struct phy_driver ksphy_driver[] = { + .get_stats = kszphy_get_stats, + .suspend = genphy_suspend, + .resume = kszphy_resume, ++}, { ++ .phy_id = PHY_ID_LAN8814, ++ .phy_id_mask = MICREL_PHY_ID_MASK, ++ .name = "Microchip INDY Gigabit Quad PHY", ++ .driver_data = &ksz9021_type, ++ .probe = kszphy_probe, ++ .soft_reset = genphy_soft_reset, ++ .read_status = ksz9031_read_status, ++ .get_sset_count = kszphy_get_sset_count, ++ .get_strings = kszphy_get_strings, ++ .get_stats = kszphy_get_stats, ++ .suspend = genphy_suspend, ++ .resume = kszphy_resume, + }, { + .phy_id = PHY_ID_KSZ9131, + .phy_id_mask = MICREL_PHY_ID_MASK, +@@ -1221,6 +1234,7 @@ static struct mdio_device_id __maybe_unused micrel_tbl[] = { + { PHY_ID_KSZ8081, MICREL_PHY_ID_MASK }, + { PHY_ID_KSZ8873MLL, MICREL_PHY_ID_MASK }, + { PHY_ID_KSZ886X, MICREL_PHY_ID_MASK }, ++ { PHY_ID_LAN8814, MICREL_PHY_ID_MASK }, + { } + }; + +diff --git a/include/linux/micrel_phy.h b/include/linux/micrel_phy.h +index 75f880c25bb86..416ee6dd25743 100644 +--- a/include/linux/micrel_phy.h ++++ b/include/linux/micrel_phy.h +@@ -27,6 +27,7 @@ + #define PHY_ID_KSZ8061 0x00221570 + #define PHY_ID_KSZ9031 0x00221620 + #define PHY_ID_KSZ9131 0x00221640 ++#define PHY_ID_LAN8814 0x00221660 + + #define PHY_ID_KSZ886X 0x00221430 + #define PHY_ID_KSZ8863 0x00221435 +-- +2.43.0 + diff --git a/queue-5.4/net-phy-micrel-add-microchip-ksz-9477-to-the-device-.patch b/queue-5.4/net-phy-micrel-add-microchip-ksz-9477-to-the-device-.patch new file mode 100644 index 00000000000..37de743fd0c --- /dev/null +++ b/queue-5.4/net-phy-micrel-add-microchip-ksz-9477-to-the-device-.patch @@ -0,0 +1,36 @@ +From b1849c05a7b9df5f8b9632d933b7c46f04b92a8f Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 21 Jun 2024 16:43:20 +0200 +Subject: net: phy: micrel: add Microchip KSZ 9477 to the device table + +From: Enguerrand de Ribaucourt + +[ Upstream commit 54a4e5c16382e871c01dd82b47e930fdce30406b ] + +PHY_ID_KSZ9477 was supported but not added to the device table passed to +MODULE_DEVICE_TABLE. + +Fixes: fc3973a1fa09 ("phy: micrel: add Microchip KSZ 9477 Switch PHY support") +Signed-off-by: Enguerrand de Ribaucourt +Reviewed-by: Andrew Lunn +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +--- + drivers/net/phy/micrel.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c +index 2cd812c097baf..d46c2ae817be9 100644 +--- a/drivers/net/phy/micrel.c ++++ b/drivers/net/phy/micrel.c +@@ -1234,6 +1234,7 @@ static struct mdio_device_id __maybe_unused micrel_tbl[] = { + { PHY_ID_KSZ8081, MICREL_PHY_ID_MASK }, + { PHY_ID_KSZ8873MLL, MICREL_PHY_ID_MASK }, + { PHY_ID_KSZ886X, MICREL_PHY_ID_MASK }, ++ { PHY_ID_KSZ9477, MICREL_PHY_ID_MASK }, + { PHY_ID_LAN8814, MICREL_PHY_ID_MASK }, + { } + }; +-- +2.43.0 + diff --git a/queue-5.4/netfilter-nf_tables-fully-validate-nft_data_value-on.patch b/queue-5.4/netfilter-nf_tables-fully-validate-nft_data_value-on.patch new file mode 100644 index 00000000000..ef857813be2 --- /dev/null +++ b/queue-5.4/netfilter-nf_tables-fully-validate-nft_data_value-on.patch @@ -0,0 +1,92 @@ +From d1bbb2c6d766332914f313e9b2b90c1e88600f84 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 26 Jun 2024 23:15:38 +0200 +Subject: netfilter: nf_tables: fully validate NFT_DATA_VALUE on store to data + registers + +From: Pablo Neira Ayuso + +[ Upstream commit 7931d32955e09d0a11b1fe0b6aac1bfa061c005c ] + +register store validation for NFT_DATA_VALUE is conditional, however, +the datatype is always either NFT_DATA_VALUE or NFT_DATA_VERDICT. This +only requires a new helper function to infer the register type from the +set datatype so this conditional check can be removed. Otherwise, +pointer to chain object can be leaked through the registers. + +Fixes: 96518518cc41 ("netfilter: add nftables") +Reported-by: Linus Torvalds +Signed-off-by: Pablo Neira Ayuso +Signed-off-by: Sasha Levin +--- + include/net/netfilter/nf_tables.h | 5 +++++ + net/netfilter/nf_tables_api.c | 8 ++++---- + net/netfilter/nft_lookup.c | 3 ++- + 3 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h +index cf314ce2fd178..4f77e2f8e1ca8 100644 +--- a/include/net/netfilter/nf_tables.h ++++ b/include/net/netfilter/nf_tables.h +@@ -467,6 +467,11 @@ static inline void *nft_set_priv(const struct nft_set *set) + return (void *)set->data; + } + ++static inline enum nft_data_types nft_set_datatype(const struct nft_set *set) ++{ ++ return set->dtype == NFT_DATA_VERDICT ? NFT_DATA_VERDICT : NFT_DATA_VALUE; ++} ++ + static inline bool nft_set_gc_is_pending(const struct nft_set *s) + { + return refcount_read(&s->refs) != 1; +diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c +index 44d4d97b45d13..ddbb0f4bff427 100644 +--- a/net/netfilter/nf_tables_api.c ++++ b/net/netfilter/nf_tables_api.c +@@ -4301,8 +4301,7 @@ static int nf_tables_fill_setelem(struct sk_buff *skb, + + if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA) && + nft_data_dump(skb, NFTA_SET_ELEM_DATA, nft_set_ext_data(ext), +- set->dtype == NFT_DATA_VERDICT ? NFT_DATA_VERDICT : NFT_DATA_VALUE, +- set->dlen) < 0) ++ nft_set_datatype(set), set->dlen) < 0) + goto nla_put_failure; + + if (nft_set_ext_exists(ext, NFT_SET_EXT_EXPR) && +@@ -8048,6 +8047,9 @@ static int nft_validate_register_store(const struct nft_ctx *ctx, + + return 0; + default: ++ if (type != NFT_DATA_VALUE) ++ return -EINVAL; ++ + if (reg < NFT_REG_1 * NFT_REG_SIZE / NFT_REG32_SIZE) + return -EINVAL; + if (len == 0) +@@ -8056,8 +8058,6 @@ static int nft_validate_register_store(const struct nft_ctx *ctx, + FIELD_SIZEOF(struct nft_regs, data)) + return -ERANGE; + +- if (data != NULL && type != NFT_DATA_VALUE) +- return -EINVAL; + return 0; + } + } +diff --git a/net/netfilter/nft_lookup.c b/net/netfilter/nft_lookup.c +index e0ffd463a1320..6d49b82d598ae 100644 +--- a/net/netfilter/nft_lookup.c ++++ b/net/netfilter/nft_lookup.c +@@ -98,7 +98,8 @@ static int nft_lookup_init(const struct nft_ctx *ctx, + return -EINVAL; + + err = nft_parse_register_store(ctx, tb[NFTA_LOOKUP_DREG], +- &priv->dreg, NULL, set->dtype, ++ &priv->dreg, NULL, ++ nft_set_datatype(set), + set->dlen); + if (err < 0) + return err; +-- +2.43.0 + diff --git a/queue-5.4/parisc-use-correct-compat-recv-recvfrom-syscalls.patch b/queue-5.4/parisc-use-correct-compat-recv-recvfrom-syscalls.patch new file mode 100644 index 00000000000..dd5754624f0 --- /dev/null +++ b/queue-5.4/parisc-use-correct-compat-recv-recvfrom-syscalls.patch @@ -0,0 +1,48 @@ +From 8a8d8b39ff924979077a04a9e96f8434d683763b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 19 Jun 2024 14:27:55 +0200 +Subject: parisc: use correct compat recv/recvfrom syscalls + +From: Arnd Bergmann + +[ Upstream commit 20a50787349fadf66ac5c48f62e58d753878d2bb ] + +Johannes missed parisc back when he introduced the compat version +of these syscalls, so receiving cmsg messages that require a compat +conversion is still broken. + +Use the correct calls like the other architectures do. + +Fixes: 1dacc76d0014 ("net/compat/wext: send different messages to compat tasks") +Acked-by: Helge Deller +Signed-off-by: Arnd Bergmann +Signed-off-by: Sasha Levin +--- + arch/parisc/kernel/syscalls/syscall.tbl | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/arch/parisc/kernel/syscalls/syscall.tbl b/arch/parisc/kernel/syscalls/syscall.tbl +index e016bf6fae1e6..eb84763062ee1 100644 +--- a/arch/parisc/kernel/syscalls/syscall.tbl ++++ b/arch/parisc/kernel/syscalls/syscall.tbl +@@ -108,7 +108,7 @@ + 95 common fchown sys_fchown + 96 common getpriority sys_getpriority + 97 common setpriority sys_setpriority +-98 common recv sys_recv ++98 common recv sys_recv compat_sys_recv + 99 common statfs sys_statfs compat_sys_statfs + 100 common fstatfs sys_fstatfs compat_sys_fstatfs + 101 common stat64 sys_stat64 +@@ -135,7 +135,7 @@ + 120 common clone sys_clone_wrapper + 121 common setdomainname sys_setdomainname + 122 common sendfile sys_sendfile compat_sys_sendfile +-123 common recvfrom sys_recvfrom ++123 common recvfrom sys_recvfrom compat_sys_recvfrom + 124 32 adjtimex sys_adjtimex_time32 + 124 64 adjtimex sys_adjtimex + 125 common mprotect sys_mprotect +-- +2.43.0 + diff --git a/queue-5.4/series b/queue-5.4/series index 42a94b98d71..acd60c5a940 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -186,3 +186,10 @@ drm-amdgpu-fix-ubsan-warning-in-kv_dpm.c.patch revert-x86-mm-numa-use-numa_no_node-when-calling-mem.patch revert-mm-memblock-replace-dereferences-of-memblock_.patch netfilter-nf_tables-validate-family-when-identifying.patch +asoc-fsl-asoc-card-set-priv-pdev-before-using-it.patch +net-dsa-microchip-fix-initial-port-flush-problem.patch +net-phy-mchp-add-support-for-lan8814-quad-phy.patch +net-phy-micrel-add-microchip-ksz-9477-to-the-device-.patch +sparc-fix-old-compat_sys_select.patch +parisc-use-correct-compat-recv-recvfrom-syscalls.patch +netfilter-nf_tables-fully-validate-nft_data_value-on.patch diff --git a/queue-5.4/sparc-fix-old-compat_sys_select.patch b/queue-5.4/sparc-fix-old-compat_sys_select.patch new file mode 100644 index 00000000000..af8d2404f3f --- /dev/null +++ b/queue-5.4/sparc-fix-old-compat_sys_select.patch @@ -0,0 +1,39 @@ +From 3ed1dcc3ac2e31cf8d378a0f4d2c3c1e5df2af45 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 19 Jun 2024 14:07:30 +0200 +Subject: sparc: fix old compat_sys_select() + +From: Arnd Bergmann + +[ Upstream commit bae6428a9fffb2023191b0723e276cf1377a7c9f ] + +sparc has two identical select syscalls at numbers 93 and 230, respectively. +During the conversion to the modern syscall.tbl format, the older one of the +two broke in compat mode, and now refers to the native 64-bit syscall. + +Restore the correct behavior. This has very little effect, as glibc has +been using the newer number anyway. + +Fixes: 6ff645dd683a ("sparc: add system call table generation support") +Signed-off-by: Arnd Bergmann +Signed-off-by: Sasha Levin +--- + arch/sparc/kernel/syscalls/syscall.tbl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/sparc/kernel/syscalls/syscall.tbl b/arch/sparc/kernel/syscalls/syscall.tbl +index 8c8cc7537fb27..8235655e03221 100644 +--- a/arch/sparc/kernel/syscalls/syscall.tbl ++++ b/arch/sparc/kernel/syscalls/syscall.tbl +@@ -117,7 +117,7 @@ + 90 common dup2 sys_dup2 + 91 32 setfsuid32 sys_setfsuid + 92 common fcntl sys_fcntl compat_sys_fcntl +-93 common select sys_select ++93 common select sys_select compat_sys_select + 94 32 setfsgid32 sys_setfsgid + 95 common fsync sys_fsync + 96 common setpriority sys_setpriority +-- +2.43.0 +