From 6007d4e3b11f308fa0a0c1accece52c8c6bb8ba3 Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Wed, 25 Oct 2023 07:48:03 -0400 Subject: [PATCH] Fixes for 5.4 Signed-off-by: Sasha Levin --- ...te-memory-region-to-avoid-memory-ove.patch | 93 ++++++++++++++++++ ...l-parsed-size-when-reading-chameleon.patch | 81 +++++++++++++++ ...ell-ensure-program-page-operations-a.patch | 98 +++++++++++++++++++ ...-add-new-test-case-which-checks-non-.patch | 47 +++++++++ queue-5.4/series | 4 + 5 files changed, 323 insertions(+) create mode 100644 queue-5.4/mcb-lpc-reallocate-memory-region-to-avoid-memory-ove.patch create mode 100644 queue-5.4/mcb-return-actual-parsed-size-when-reading-chameleon.patch create mode 100644 queue-5.4/mtd-rawnand-marvell-ensure-program-page-operations-a.patch create mode 100644 queue-5.4/selftests-ftrace-add-new-test-case-which-checks-non-.patch create mode 100644 queue-5.4/series diff --git a/queue-5.4/mcb-lpc-reallocate-memory-region-to-avoid-memory-ove.patch b/queue-5.4/mcb-lpc-reallocate-memory-region-to-avoid-memory-ove.patch new file mode 100644 index 00000000000..11acf849d12 --- /dev/null +++ b/queue-5.4/mcb-lpc-reallocate-memory-region-to-avoid-memory-ove.patch @@ -0,0 +1,93 @@ +From 7ccdac7722b5a71585d8780905ae5860772bf0ac Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 11 Apr 2023 10:33:29 +0200 +Subject: mcb-lpc: Reallocate memory region to avoid memory overlapping +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Rodríguez Barbarin, José Javier + +[ Upstream commit 2025b2ca8004c04861903d076c67a73a0ec6dfca ] + +mcb-lpc requests a fixed-size memory region to parse the chameleon +table, however, if the chameleon table is smaller that the allocated +region, it could overlap with the IP Cores' memory regions. + +After parsing the chameleon table, drop/reallocate the memory region +with the actual chameleon table size. + +Co-developed-by: Jorge Sanjuan Garcia +Signed-off-by: Jorge Sanjuan Garcia +Signed-off-by: Javier Rodriguez +Signed-off-by: Johannes Thumshirn +Link: https://lore.kernel.org/r/20230411083329.4506-4-jth@kernel.org +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/mcb/mcb-lpc.c | 35 +++++++++++++++++++++++++++++++---- + 1 file changed, 31 insertions(+), 4 deletions(-) + +diff --git a/drivers/mcb/mcb-lpc.c b/drivers/mcb/mcb-lpc.c +index 8f1bde437a7e1..92915d2c2d464 100644 +--- a/drivers/mcb/mcb-lpc.c ++++ b/drivers/mcb/mcb-lpc.c +@@ -23,7 +23,7 @@ static int mcb_lpc_probe(struct platform_device *pdev) + { + struct resource *res; + struct priv *priv; +- int ret = 0; ++ int ret = 0, table_size; + + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) +@@ -58,16 +58,43 @@ static int mcb_lpc_probe(struct platform_device *pdev) + + ret = chameleon_parse_cells(priv->bus, priv->mem->start, priv->base); + if (ret < 0) { +- mcb_release_bus(priv->bus); +- return ret; ++ goto out_mcb_bus; + } + +- dev_dbg(&pdev->dev, "Found %d cells\n", ret); ++ table_size = ret; ++ ++ if (table_size < CHAM_HEADER_SIZE) { ++ /* Release the previous resources */ ++ devm_iounmap(&pdev->dev, priv->base); ++ devm_release_mem_region(&pdev->dev, priv->mem->start, resource_size(priv->mem)); ++ ++ /* Then, allocate it again with the actual chameleon table size */ ++ res = devm_request_mem_region(&pdev->dev, priv->mem->start, ++ table_size, ++ KBUILD_MODNAME); ++ if (!res) { ++ dev_err(&pdev->dev, "Failed to request PCI memory\n"); ++ ret = -EBUSY; ++ goto out_mcb_bus; ++ } ++ ++ priv->base = devm_ioremap(&pdev->dev, priv->mem->start, table_size); ++ if (!priv->base) { ++ dev_err(&pdev->dev, "Cannot ioremap\n"); ++ ret = -ENOMEM; ++ goto out_mcb_bus; ++ } ++ ++ platform_set_drvdata(pdev, priv); ++ } + + mcb_bus_add_devices(priv->bus); + + return 0; + ++out_mcb_bus: ++ mcb_release_bus(priv->bus); ++ return ret; + } + + static int mcb_lpc_remove(struct platform_device *pdev) +-- +2.42.0 + diff --git a/queue-5.4/mcb-return-actual-parsed-size-when-reading-chameleon.patch b/queue-5.4/mcb-return-actual-parsed-size-when-reading-chameleon.patch new file mode 100644 index 00000000000..c28e3a7ae79 --- /dev/null +++ b/queue-5.4/mcb-return-actual-parsed-size-when-reading-chameleon.patch @@ -0,0 +1,81 @@ +From 9931ed667b70cbfca3213e2a58c1b0d6fe956613 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 11 Apr 2023 10:33:27 +0200 +Subject: mcb: Return actual parsed size when reading chameleon table +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Rodríguez Barbarin, José Javier + +[ Upstream commit a889c276d33d333ae96697510f33533f6e9d9591 ] + +The function chameleon_parse_cells() returns the number of cells +parsed which has an undetermined size. This return value is only +used for error checking but the number of cells is never used. + +Change return value to be number of bytes parsed to allow for +memory management improvements. + +Co-developed-by: Jorge Sanjuan Garcia +Signed-off-by: Jorge Sanjuan Garcia +Signed-off-by: Javier Rodriguez +Signed-off-by: Johannes Thumshirn +Link: https://lore.kernel.org/r/20230411083329.4506-2-jth@kernel.org +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/mcb/mcb-parse.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/drivers/mcb/mcb-parse.c b/drivers/mcb/mcb-parse.c +index c111025f23c5d..a88862ff8507f 100644 +--- a/drivers/mcb/mcb-parse.c ++++ b/drivers/mcb/mcb-parse.c +@@ -128,7 +128,7 @@ static void chameleon_parse_bar(void __iomem *base, + } + } + +-static int chameleon_get_bar(char __iomem **base, phys_addr_t mapbase, ++static int chameleon_get_bar(void __iomem **base, phys_addr_t mapbase, + struct chameleon_bar **cb) + { + struct chameleon_bar *c; +@@ -177,12 +177,13 @@ int chameleon_parse_cells(struct mcb_bus *bus, phys_addr_t mapbase, + { + struct chameleon_fpga_header *header; + struct chameleon_bar *cb; +- char __iomem *p = base; ++ void __iomem *p = base; + int num_cells = 0; + uint32_t dtype; + int bar_count; + int ret; + u32 hsize; ++ u32 table_size; + + hsize = sizeof(struct chameleon_fpga_header); + +@@ -237,12 +238,16 @@ int chameleon_parse_cells(struct mcb_bus *bus, phys_addr_t mapbase, + num_cells++; + } + +- if (num_cells == 0) +- num_cells = -EINVAL; ++ if (num_cells == 0) { ++ ret = -EINVAL; ++ goto free_bar; ++ } + ++ table_size = p - base; ++ pr_debug("%d cell(s) found. Chameleon table size: 0x%04x bytes\n", num_cells, table_size); + kfree(cb); + kfree(header); +- return num_cells; ++ return table_size; + + free_bar: + kfree(cb); +-- +2.42.0 + diff --git a/queue-5.4/mtd-rawnand-marvell-ensure-program-page-operations-a.patch b/queue-5.4/mtd-rawnand-marvell-ensure-program-page-operations-a.patch new file mode 100644 index 00000000000..14eb360853c --- /dev/null +++ b/queue-5.4/mtd-rawnand-marvell-ensure-program-page-operations-a.patch @@ -0,0 +1,98 @@ +From d25d6ad748812d887cca84b0287086510812ef13 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 17 Jul 2023 21:42:19 +0200 +Subject: mtd: rawnand: marvell: Ensure program page operations are successful + +From: Miquel Raynal + +[ Upstream commit 3e01d5254698ea3d18e09d96b974c762328352cd ] + +The NAND core complies with the ONFI specification, which itself +mentions that after any program or erase operation, a status check +should be performed to see whether the operation was finished *and* +successful. + +The NAND core offers helpers to finish a page write (sending the +"PAGE PROG" command, waiting for the NAND chip to be ready again, and +checking the operation status). But in some cases, advanced controller +drivers might want to optimize this and craft their own page write +helper to leverage additional hardware capabilities, thus not always +using the core facilities. + +Some drivers, like this one, do not use the core helper to finish a page +write because the final cycles are automatically managed by the +hardware. In this case, the additional care must be taken to manually +perform the final status check. + +Let's read the NAND chip status at the end of the page write helper and +return -EIO upon error. + +Cc: stable@vger.kernel.org +Fixes: 02f26ecf8c77 ("mtd: nand: add reworked Marvell NAND controller driver") +Reported-by: Aviram Dali +Signed-off-by: Miquel Raynal +Tested-by: Ravi Chandra Minnikanti +Link: https://lore.kernel.org/linux-mtd/20230717194221.229778-1-miquel.raynal@bootlin.com +Signed-off-by: Sasha Levin +--- + drivers/mtd/nand/raw/marvell_nand.c | 23 ++++++++++++++++++++++- + 1 file changed, 22 insertions(+), 1 deletion(-) + +diff --git a/drivers/mtd/nand/raw/marvell_nand.c b/drivers/mtd/nand/raw/marvell_nand.c +index c49a3e105b427..9a119688c0a63 100644 +--- a/drivers/mtd/nand/raw/marvell_nand.c ++++ b/drivers/mtd/nand/raw/marvell_nand.c +@@ -1109,6 +1109,7 @@ static int marvell_nfc_hw_ecc_hmg_do_write_page(struct nand_chip *chip, + .ndcb[2] = NDCB2_ADDR5_PAGE(page), + }; + unsigned int oob_bytes = lt->spare_bytes + (raw ? lt->ecc_bytes : 0); ++ u8 status; + int ret; + + /* NFCv2 needs more information about the operation being executed */ +@@ -1142,7 +1143,18 @@ static int marvell_nfc_hw_ecc_hmg_do_write_page(struct nand_chip *chip, + + ret = marvell_nfc_wait_op(chip, + PSEC_TO_MSEC(chip->data_interface.timings.sdr.tPROG_max)); +- return ret; ++ if (ret) ++ return ret; ++ ++ /* Check write status on the chip side */ ++ ret = nand_status_op(chip, &status); ++ if (ret) ++ return ret; ++ ++ if (status & NAND_STATUS_FAIL) ++ return -EIO; ++ ++ return 0; + } + + static int marvell_nfc_hw_ecc_hmg_write_page_raw(struct nand_chip *chip, +@@ -1570,6 +1582,7 @@ static int marvell_nfc_hw_ecc_bch_write_page(struct nand_chip *chip, + int data_len = lt->data_bytes; + int spare_len = lt->spare_bytes; + int chunk, ret; ++ u8 status; + + marvell_nfc_select_target(chip, chip->cur_cs); + +@@ -1607,6 +1620,14 @@ static int marvell_nfc_hw_ecc_bch_write_page(struct nand_chip *chip, + if (ret) + return ret; + ++ /* Check write status on the chip side */ ++ ret = nand_status_op(chip, &status); ++ if (ret) ++ return ret; ++ ++ if (status & NAND_STATUS_FAIL) ++ return -EIO; ++ + return 0; + } + +-- +2.42.0 + diff --git a/queue-5.4/selftests-ftrace-add-new-test-case-which-checks-non-.patch b/queue-5.4/selftests-ftrace-add-new-test-case-which-checks-non-.patch new file mode 100644 index 00000000000..cae48eb2cef --- /dev/null +++ b/queue-5.4/selftests-ftrace-add-new-test-case-which-checks-non-.patch @@ -0,0 +1,47 @@ +From eb173aec551f2d4b733bd2da4841b8d68ddee516 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 20 Oct 2023 13:42:50 +0300 +Subject: selftests/ftrace: Add new test case which checks non unique symbol + +From: Francis Laniel + +[ Upstream commit 03b80ff8023adae6780e491f66e932df8165e3a0 ] + +If name_show() is non unique, this test will try to install a kprobe on this +function which should fail returning EADDRNOTAVAIL. +On kernel where name_show() is not unique, this test is skipped. + +Link: https://lore.kernel.org/all/20231020104250.9537-3-flaniel@linux.microsoft.com/ + +Cc: stable@vger.kernel.org +Signed-off-by: Francis Laniel +Acked-by: Masami Hiramatsu (Google) +Signed-off-by: Masami Hiramatsu (Google) +Signed-off-by: Sasha Levin +--- + .../ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + create mode 100644 tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc + +diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc +new file mode 100644 +index 0000000000000..bc9514428dbaf +--- /dev/null ++++ b/tools/testing/selftests/ftrace/test.d/kprobe/kprobe_non_uniq_symbol.tc +@@ -0,0 +1,13 @@ ++#!/bin/sh ++# SPDX-License-Identifier: GPL-2.0 ++# description: Test failure of registering kprobe on non unique symbol ++# requires: kprobe_events ++ ++SYMBOL='name_show' ++ ++# We skip this test on kernel where SYMBOL is unique or does not exist. ++if [ "$(grep -c -E "[[:alnum:]]+ t ${SYMBOL}" /proc/kallsyms)" -le '1' ]; then ++ exit_unsupported ++fi ++ ++! echo "p:test_non_unique ${SYMBOL}" > kprobe_events +-- +2.42.0 + diff --git a/queue-5.4/series b/queue-5.4/series new file mode 100644 index 00000000000..2e6875ca8fc --- /dev/null +++ b/queue-5.4/series @@ -0,0 +1,4 @@ +mtd-rawnand-marvell-ensure-program-page-operations-a.patch +selftests-ftrace-add-new-test-case-which-checks-non-.patch +mcb-return-actual-parsed-size-when-reading-chameleon.patch +mcb-lpc-reallocate-memory-region-to-avoid-memory-ove.patch -- 2.47.3