mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 0/2] mtd: core: fix use of uninitialized struct member
@ 2021-06-11  6:39 Antony Pavlov
  2021-06-11  6:39 ` [PATCH 1/2] " Antony Pavlov
  2021-06-11  6:39 ` [PATCH 2/2] mtd: core: fix whitespaces Antony Pavlov
  0 siblings, 2 replies; 5+ messages in thread
From: Antony Pavlov @ 2021-06-11  6:39 UTC (permalink / raw)
  To: barebox

Antony Pavlov (2):
  mtd: core: fix use of uninitialized struct member
  mtd: core: fix whitespaces

 drivers/mtd/core.c | 32 +++++++++++++++++---------------
 1 file changed, 17 insertions(+), 15 deletions(-)

-- 
2.32.0.rc0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] mtd: core: fix use of uninitialized struct member
  2021-06-11  6:39 [PATCH 0/2] mtd: core: fix use of uninitialized struct member Antony Pavlov
@ 2021-06-11  6:39 ` Antony Pavlov
  2021-06-11 10:23   ` Sascha Hauer
  2021-06-11  6:39 ` [PATCH 2/2] mtd: core: fix whitespaces Antony Pavlov
  1 sibling, 1 reply; 5+ messages in thread
From: Antony Pavlov @ 2021-06-11  6:39 UTC (permalink / raw)
  To: barebox

E.g. mtd_read() calls mtd_read_oob(), mtd_read_oob()
can check uninitialized ops->oobbuf. As a result
mtd_read_oob() can return -EOPNOTSUPP.

Found on a MIPS board during /dev/m25p0 read, e.g.

  barebox:/ md -s /dev/m25p0
  read: error 95

Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
---
 drivers/mtd/core.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c
index 37fccda6be..98820dfb4f 100644
--- a/drivers/mtd/core.c
+++ b/drivers/mtd/core.c
@@ -379,12 +379,13 @@ int mtd_block_markgood(struct mtd_info *mtd, loff_t ofs)
 int mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen,
              u_char *buf)
 {
-	struct mtd_oob_ops ops = {
-		.len = len,
-		.datbuf = buf,
-	};
+	struct mtd_oob_ops ops;
 	int ret;
 
+	memset(&ops, 0, sizeof(ops));
+	ops.len = len;
+	ops.datbuf = buf;
+
 	if (from < 0 || from >= mtd->size || len > mtd->size - from)
 		return -EINVAL;
 	if (!len)
@@ -422,12 +423,13 @@ int mtd_write_oob(struct mtd_info *mtd, loff_t to,
 int mtd_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen,
               const u_char *buf)
 {
-        struct mtd_oob_ops ops = {
-                .len = len,
-                .datbuf = (u8 *)buf,
-        };
+	struct mtd_oob_ops ops;
         int ret;
 
+	memset(&ops, 0, sizeof(ops));
+	ops.len = len;
+	ops.datbuf = buf;
+
 	if (to < 0 || to >= mtd->size || len > mtd->size - to)
 		return -EINVAL;
 	if (!len)
-- 
2.32.0.rc0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 2/2] mtd: core: fix whitespaces
  2021-06-11  6:39 [PATCH 0/2] mtd: core: fix use of uninitialized struct member Antony Pavlov
  2021-06-11  6:39 ` [PATCH 1/2] " Antony Pavlov
@ 2021-06-11  6:39 ` Antony Pavlov
  1 sibling, 0 replies; 5+ messages in thread
From: Antony Pavlov @ 2021-06-11  6:39 UTC (permalink / raw)
  To: barebox

Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
---
 drivers/mtd/core.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c
index 98820dfb4f..2029e06d9e 100644
--- a/drivers/mtd/core.c
+++ b/drivers/mtd/core.c
@@ -377,7 +377,7 @@ int mtd_block_markgood(struct mtd_info *mtd, loff_t ofs)
 }
 
 int mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen,
-             u_char *buf)
+	     u_char *buf)
 {
 	struct mtd_oob_ops ops;
 	int ret;
@@ -421,10 +421,10 @@ int mtd_write_oob(struct mtd_info *mtd, loff_t to,
 }
 
 int mtd_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen,
-              const u_char *buf)
+	      const u_char *buf)
 {
 	struct mtd_oob_ops ops;
-        int ret;
+	int ret;
 
 	memset(&ops, 0, sizeof(ops));
 	ops.len = len;
@@ -435,10 +435,10 @@ int mtd_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen,
 	if (!len)
 		return 0;
 
-        ret = mtd_write_oob(mtd, to, &ops);
-        *retlen = ops.retlen;
+	ret = mtd_write_oob(mtd, to, &ops);
+	*retlen = ops.retlen;
 
-        return ret;
+	return ret;
 }
 
 int mtd_erase(struct mtd_info *mtd, struct erase_info *instr)
@@ -759,7 +759,7 @@ err:
 	return ret;
 }
 
-int del_mtd_device (struct mtd_info *mtd)
+int del_mtd_device(struct mtd_info *mtd)
 {
 	struct mtddev_hook *hook;
 
-- 
2.32.0.rc0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] mtd: core: fix use of uninitialized struct member
  2021-06-11  6:39 ` [PATCH 1/2] " Antony Pavlov
@ 2021-06-11 10:23   ` Sascha Hauer
  2021-06-11 10:42     ` Ahmad Fatoum
  0 siblings, 1 reply; 5+ messages in thread
From: Sascha Hauer @ 2021-06-11 10:23 UTC (permalink / raw)
  To: Antony Pavlov; +Cc: barebox

Hi Antony,

On Fri, Jun 11, 2021 at 09:39:13AM +0300, Antony Pavlov wrote:
> E.g. mtd_read() calls mtd_read_oob(), mtd_read_oob()
> can check uninitialized ops->oobbuf. As a result
> mtd_read_oob() can return -EOPNOTSUPP.
> 
> Found on a MIPS board during /dev/m25p0 read, e.g.
> 
>   barebox:/ md -s /dev/m25p0
>   read: error 95
> 
> Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
> ---
>  drivers/mtd/core.c | 18 ++++++++++--------
>  1 file changed, 10 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c
> index 37fccda6be..98820dfb4f 100644
> --- a/drivers/mtd/core.c
> +++ b/drivers/mtd/core.c
> @@ -379,12 +379,13 @@ int mtd_block_markgood(struct mtd_info *mtd, loff_t ofs)
>  int mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen,
>               u_char *buf)
>  {
> -	struct mtd_oob_ops ops = {
> -		.len = len,
> -		.datbuf = buf,
> -	};
> +	struct mtd_oob_ops ops;
>  	int ret;
>  
> +	memset(&ops, 0, sizeof(ops));
> +	ops.len = len;
> +	ops.datbuf = buf;

If this fixes something for you then you have severe problems with your
compiler. Omitted fields are implicitly initialized to zero, often you
can even find the corresponding call to memset in the objdump.

Sascha

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] mtd: core: fix use of uninitialized struct member
  2021-06-11 10:23   ` Sascha Hauer
@ 2021-06-11 10:42     ` Ahmad Fatoum
  0 siblings, 0 replies; 5+ messages in thread
From: Ahmad Fatoum @ 2021-06-11 10:42 UTC (permalink / raw)
  To: Sascha Hauer, Antony Pavlov; +Cc: barebox

On 11.06.21 12:23, Sascha Hauer wrote:
> Hi Antony,
> 
> On Fri, Jun 11, 2021 at 09:39:13AM +0300, Antony Pavlov wrote:
>> E.g. mtd_read() calls mtd_read_oob(), mtd_read_oob()
>> can check uninitialized ops->oobbuf. As a result
>> mtd_read_oob() can return -EOPNOTSUPP.
>>
>> Found on a MIPS board during /dev/m25p0 read, e.g.
>>
>>   barebox:/ md -s /dev/m25p0
>>   read: error 95
>>
>> Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
>> ---
>>  drivers/mtd/core.c | 18 ++++++++++--------
>>  1 file changed, 10 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c
>> index 37fccda6be..98820dfb4f 100644
>> --- a/drivers/mtd/core.c
>> +++ b/drivers/mtd/core.c
>> @@ -379,12 +379,13 @@ int mtd_block_markgood(struct mtd_info *mtd, loff_t ofs)
>>  int mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen,
>>               u_char *buf)
>>  {
>> -	struct mtd_oob_ops ops = {
>> -		.len = len,
>> -		.datbuf = buf,
>> -	};
>> +	struct mtd_oob_ops ops;
>>  	int ret;
>>  
>> +	memset(&ops, 0, sizeof(ops));
>> +	ops.len = len;
>> +	ops.datbuf = buf;
> 
> If this fixes something for you then you have severe problems with your
> compiler. Omitted fields are implicitly initialized to zero, often you
> can even find the corresponding call to memset in the objdump.

Perhaps elsewhere something is interpreting the padding, which may
not be zeroed when using an initializer list. This warrants further investigation
for sure.

Cheers,
Ahmad


-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-06-11 10:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-11  6:39 [PATCH 0/2] mtd: core: fix use of uninitialized struct member Antony Pavlov
2021-06-11  6:39 ` [PATCH 1/2] " Antony Pavlov
2021-06-11 10:23   ` Sascha Hauer
2021-06-11 10:42     ` Ahmad Fatoum
2021-06-11  6:39 ` [PATCH 2/2] mtd: core: fix whitespaces Antony Pavlov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox