diff mbox series

mtd: rawnand: Fix probe failure due to of_get_nand_secure_regions()

Message ID 20210727062813.32619-1-manivannan.sadhasivam@linaro.org
State New
Headers show
Series mtd: rawnand: Fix probe failure due to of_get_nand_secure_regions() | expand

Commit Message

Manivannan Sadhasivam July 27, 2021, 6:28 a.m. UTC
Due to 14f97f0b8e2b, the rawnand platforms without "secure-regions"
property defined in DT fails to probe. The issue is,
of_get_nand_secure_regions() errors out if
of_property_count_elems_of_size() returns a negative error code.

If the "secure-regions" property is not present in DT, then also we'll
get -EINVAL from of_property_count_elems_of_size() but it should not
be treated as an error for platforms not declaring "secure-regions"
in DT.

So fix this behaviour by checking for the existence of that property in
DT and return 0 if it is not present.

Fixes: 14f97f0b8e2b ("mtd: rawnand: Add a check in of_get_nand_secure_regions()")
Reported-by: Martin Kaiser <martin@kaiser.cx>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

---
 drivers/mtd/nand/raw/nand_base.c | 6 ++++++
 1 file changed, 6 insertions(+)

-- 
2.25.1


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

Comments

Martin Kaiser July 27, 2021, 4:13 p.m. UTC | #1
Hi Mani and all,

Thus wrote Manivannan Sadhasivam (manivannan.sadhasivam@linaro.org):

> Due to 14f97f0b8e2b, the rawnand platforms without "secure-regions"

> property defined in DT fails to probe. The issue is,

> of_get_nand_secure_regions() errors out if

> of_property_count_elems_of_size() returns a negative error code.


> If the "secure-regions" property is not present in DT, then also we'll

> get -EINVAL from of_property_count_elems_of_size() but it should not

> be treated as an error for platforms not declaring "secure-regions"

> in DT.


> So fix this behaviour by checking for the existence of that property in

> DT and return 0 if it is not present.


> Fixes: 14f97f0b8e2b ("mtd: rawnand: Add a check in of_get_nand_secure_regions()")

> Reported-by: Martin Kaiser <martin@kaiser.cx>

> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

> ---

>  drivers/mtd/nand/raw/nand_base.c | 6 ++++++

>  1 file changed, 6 insertions(+)


> diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c

> index cbba46432e39..3d6c6e880520 100644

> --- a/drivers/mtd/nand/raw/nand_base.c

> +++ b/drivers/mtd/nand/raw/nand_base.c

> @@ -5228,8 +5228,14 @@ static bool of_get_nand_on_flash_bbt(struct device_node *np)

>  static int of_get_nand_secure_regions(struct nand_chip *chip)

>  {

>  	struct device_node *dn = nand_get_flash_node(chip);

> +	struct property *prop;

>  	int nr_elem, i, j;


> +	/* Only proceed if the "secure-regions" property is present in DT */

> +	prop = of_find_property(dn, "secure-regions", NULL);

> +	if (!prop)

> +		return 0;

> +

>  	nr_elem = of_property_count_elems_of_size(dn, "secure-regions", sizeof(u64));

>  	if (nr_elem <= 0)

>  		return nr_elem;

> -- 

> 2.25.1


not surprisingly, this fixes the issue for me.

Reviewed-by: Martin Kaiser <martin@kaiser.cx>

Tested-by: Martin Kaiser <martin@kaiser.cx>


Still, I was wondering if the behaviour of of_property_count_elems_of_size
makes sense. Without a prior check, there's no chance for the caller to
distinguish between "property is absent" and "property is malformed". 

Thanks,
Martin

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
Miquel Raynal Aug. 6, 2021, 7:45 p.m. UTC | #2
On Tue, 2021-07-27 at 06:28:13 UTC, Manivannan Sadhasivam wrote:
> Due to 14f97f0b8e2b, the rawnand platforms without "secure-regions"

> property defined in DT fails to probe. The issue is,

> of_get_nand_secure_regions() errors out if

> of_property_count_elems_of_size() returns a negative error code.

> 

> If the "secure-regions" property is not present in DT, then also we'll

> get -EINVAL from of_property_count_elems_of_size() but it should not

> be treated as an error for platforms not declaring "secure-regions"

> in DT.

> 

> So fix this behaviour by checking for the existence of that property in

> DT and return 0 if it is not present.

> 

> Fixes: 14f97f0b8e2b ("mtd: rawnand: Add a check in of_get_nand_secure_regions()")

> Reported-by: Martin Kaiser <martin@kaiser.cx>

> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

> Reviewed-by: Martin Kaiser <martin@kaiser.cx>

> Tested-by: Martin Kaiser <martin@kaiser.cx>


Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/fixes, thanks.

Miquel

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
diff mbox series

Patch

diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
index cbba46432e39..3d6c6e880520 100644
--- a/drivers/mtd/nand/raw/nand_base.c
+++ b/drivers/mtd/nand/raw/nand_base.c
@@ -5228,8 +5228,14 @@  static bool of_get_nand_on_flash_bbt(struct device_node *np)
 static int of_get_nand_secure_regions(struct nand_chip *chip)
 {
 	struct device_node *dn = nand_get_flash_node(chip);
+	struct property *prop;
 	int nr_elem, i, j;
 
+	/* Only proceed if the "secure-regions" property is present in DT */
+	prop = of_find_property(dn, "secure-regions", NULL);
+	if (!prop)
+		return 0;
+
 	nr_elem = of_property_count_elems_of_size(dn, "secure-regions", sizeof(u64));
 	if (nr_elem <= 0)
 		return nr_elem;