mtd: rawnand: Fix the nand_read_data_op() early check

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>

commit 5da39530d19946f6241de84d1db69da2f5c61da7 upstream.

The nand_read_data_op() operation, which only consists in DATA_IN
cycles, is sadly not supported by all controllers despite being very
basic. The core, for some time, supposed all drivers would support
it. An improvement to this situation for supporting more constrained
controller added a check to verify if the operation was supported before
attempting it by running the function with the check_only boolean set
first, and then possibly falling back to another (possibly slightly less
optimized) alternative.

An even newer addition moved that check very early and probe time, in
order to perform the check only once. The content of the operation was
not so important, as long as the controller driver would tell whether
such operation on the NAND bus would be possible or not. In practice, no
buffer was provided (no fake buffer or whatever) as it is anyway not
relevant for the "check_only" condition. Unfortunately, early in the
function, there is an if statement verifying that the input parameters
are right for normal use, making the early check always unsuccessful.

Fixes: 9f820fc0651c ("mtd: rawnand: Check the data only read pattern only once")
Cc: stable@xxxxxxxxxxxxxxx
Reported-by: Alexander Dahl <ada@xxxxxxxxxxx>
Closes: https://lore.kernel.org/linux-mtd/20240306-shaky-bunion-d28b65ea97d7@xxxxxxxxxxx/
Reported-by: Steven Seeger <steven.seeger@xxxxxxxxxxxxxxxxx>
Closes: https://lore.kernel.org/linux-mtd/DM6PR05MB4506554457CF95191A670BDEF7062@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/
Signed-off-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx>
Reviewed-by: Alexander Dahl <ada@xxxxxxxxxxx>
Link: https://lore.kernel.org/linux-mtd/20240516131320.579822-2-miquel.raynal@xxxxxxxxxxx
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
---
 drivers/mtd/nand/raw/nand_base.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/mtd/nand/raw/nand_base.c
+++ b/drivers/mtd/nand/raw/nand_base.c
@@ -2173,7 +2173,7 @@ EXPORT_SYMBOL_GPL(nand_reset_op);
 int nand_read_data_op(struct nand_chip *chip, void *buf, unsigned int len,
 		      bool force_8bit, bool check_only)
 {
-	if (!len || !buf)
+	if (!len || (!check_only && !buf))
 		return -EINVAL;
 
 	if (nand_has_exec_op(chip)) {


Patches currently in stable-queue which might be from miquel.raynal@xxxxxxxxxxx are

queue-6.9/mtd-rawnand-fix-the-nand_read_data_op-early-check.patch
queue-6.9/mac802154-fix-time-calculation-in-ieee802154_configu.patch
queue-6.9/mtd-rawnand-bypass-a-couple-of-sanity-checks-during-nand-identification.patch
queue-6.9/mtd-rawnand-ensure-ecc-configuration-is-propagated-to-upper-layers.patch
queue-6.9/mtd-rawnand-rockchip-ensure-nvddr-timings-are-rejected.patch




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux