Re: [PATCH] mtd: rawnand: Add a check in of_get_nand_secure_regions()
From: Miquel Raynal <miquel.raynal@bootlin.com>
Date: 2021-07-26 07:58:34
Hi Mani, Manivannan Sadhasivam [off-list ref] wrote on Sat, 24 Jul 2021 21:33:08 +0530:
On Sat, Jul 24, 2021 at 04:27:30PM +0200, Martin Kaiser wrote:quoted
Hi all, Thus wrote Miquel Raynal (miquel.raynal@bootlin.com):quoted
On Thu, 2021-06-17 at 13:37:25 UTC, Dan Carpenter wrote:quoted
Check for whether of_property_count_elems_of_size() returns a negative error code.quoted
quoted
Fixes: 13b89768275d ("mtd: rawnand: Add support for secure regions in NAND memory") Signed-off-by: Dan Carpenter <redacted> Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>quoted
Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/fixes, thanks.I'm running linux-next on an imx25 system with the following flash chip [ 1.997539] nand: device found, Manufacturer ID: 0x98, Chip ID: 0xaa [ 2.004134] nand: Toshiba NAND 256MiB 1,8V 8-bit [ 2.008917] nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 128 The system is using the drivers/mtd/nand/raw/mxc_nand.c driver. Since this commit appeared in linux-next, mxc_nand's probe function fails with -EINVAL, taking this path mxcnd_probe nand_scan nand_scan_with_ids nand_scan_tail of_get_nand_secure_regions nr_elem = of_property_count_elems_of_size(dn, "secure-regions", sizeof(u64)); returns -EINVAL as there's no secure-regions property in my device tree.Doh! Sorry for missing this.quoted
We should certainly handle negative error codes before we calculate chip->nr_secure_regions = nr_elem / 2 but a missing secure-regions property is a valid case and should not make the probe fail.Absolutely!quoted
If the property exists, but the device-tree entry is incorrect and of_property_count_elems_of_size returns -ENODATA, we might print a warning and ignore the entry.Hmm, I think it is best to error out in this case as the user has got DT wrong.quoted
What do you think?Since of_property_count_elems_of_size() returns -EINVAL if the length is not a multiple of sizeof(u64), we can't just ignore -EINVAL. So I think we can just check for the existence of the property before invoking of_get_nand_secure_regions(). Miquel, what do you think?
Yes please add this check and we should be good. Thanks, Miquèl