All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] dfu: mmc: call fs functions instead of run_command
@ 2019-01-25 18:58 Simon Goldschmidt
  2019-01-30 18:44 ` Stephen Warren
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Simon Goldschmidt @ 2019-01-25 18:58 UTC (permalink / raw)
  To: u-boot

This unbreaks dfu mmc_file_op which is currently broken since using the
load cmd on a buffer from heap is not allowed - added with
commit aa3c609e2be5 ("fs: prevent overwriting reserved memory")

Fixes: commit aa3c609e2be5 ("fs: prevent overwriting reserved memory")
Reported-by: Stephen Warren <swarren@wwwdotorg.org>
Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Tested-by: Stephen Warren <swarren@nvidia.com>
---

Changes since RFC:
- decreased size of 'dev_part_str' to hold 'xxx:yyy' string
- removed now unused define 'DFU_CMD_BUF_SIZE'

---
 drivers/dfu/dfu_mmc.c | 67 ++++++++++++++++++++-----------------------
 include/dfu.h         |  1 -
 2 files changed, 31 insertions(+), 37 deletions(-)

diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c
index b45e6dc54c..403fd5351d 100644
--- a/drivers/dfu/dfu_mmc.c
+++ b/drivers/dfu/dfu_mmc.c
@@ -108,17 +108,17 @@ static int mmc_file_buffer(struct dfu_entity *dfu, void *buf, long *len)
 static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu,
 			void *buf, u64 *len)
 {
-	const char *fsname, *opname;
-	char cmd_buf[DFU_CMD_BUF_SIZE];
-	char *str_env;
+	char dev_part_str[8];
 	int ret;
+	int fstype;
+	loff_t size = 0;
 
 	switch (dfu->layout) {
 	case DFU_FS_FAT:
-		fsname = "fat";
+		fstype = FS_TYPE_FAT;
 		break;
 	case DFU_FS_EXT4:
-		fsname = "ext4";
+		fstype = FS_TYPE_EXT;
 		break;
 	default:
 		printf("%s: Layout (%s) not (yet) supported!\n", __func__,
@@ -126,48 +126,43 @@ static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu,
 		return -1;
 	}
 
+	snprintf(dev_part_str, sizeof(dev_part_str), "%d:%d",
+		 dfu->data.mmc.dev, dfu->data.mmc.part);
+
+	ret = fs_set_blk_dev("mmc", dev_part_str, fstype);
+	if (ret) {
+		puts("dfu: fs_set_blk_dev error!\n");
+		return ret;
+	}
+
 	switch (op) {
 	case DFU_OP_READ:
-		opname = "load";
+		ret = fs_read(dfu->name, (size_t)buf, 0, 0, &size);
+		if (ret) {
+			puts("dfu: fs_read error!\n");
+			return ret;
+		}
+		*len = size;
 		break;
 	case DFU_OP_WRITE:
-		opname = "write";
+		ret = fs_write(dfu->name, (size_t)buf, 0, *len, &size);
+		if (ret) {
+			puts("dfu: fs_write error!\n");
+			return ret;
+		}
 		break;
 	case DFU_OP_SIZE:
-		opname = "size";
+		ret = fs_size(dfu->name, &size);
+		if (ret) {
+			puts("dfu: fs_size error!\n");
+			return ret;
+		}
+		*len = size;
 		break;
 	default:
 		return -1;
 	}
 
-	sprintf(cmd_buf, "%s%s mmc %d:%d", fsname, opname,
-		dfu->data.mmc.dev, dfu->data.mmc.part);
-
-	if (op != DFU_OP_SIZE)
-		sprintf(cmd_buf + strlen(cmd_buf), " %p", buf);
-
-	sprintf(cmd_buf + strlen(cmd_buf), " %s", dfu->name);
-
-	if (op == DFU_OP_WRITE)
-		sprintf(cmd_buf + strlen(cmd_buf), " %llx", *len);
-
-	debug("%s: %s 0x%p\n", __func__, cmd_buf, cmd_buf);
-
-	ret = run_command(cmd_buf, 0);
-	if (ret) {
-		puts("dfu: Read error!\n");
-		return ret;
-	}
-
-	if (op != DFU_OP_WRITE) {
-		str_env = env_get("filesize");
-		if (str_env == NULL) {
-			puts("dfu: Wrong file size!\n");
-			return -1;
-		}
-		*len = simple_strtoul(str_env, NULL, 16);
-	}
-
 	return ret;
 }
 
diff --git a/include/dfu.h b/include/dfu.h
index fbe978abdc..c671d8b04d 100644
--- a/include/dfu.h
+++ b/include/dfu.h
@@ -80,7 +80,6 @@ struct sf_internal_data {
 };
 
 #define DFU_NAME_SIZE			32
-#define DFU_CMD_BUF_SIZE		128
 #ifndef CONFIG_SYS_DFU_DATA_BUF_SIZE
 #define CONFIG_SYS_DFU_DATA_BUF_SIZE		(1024*1024*8)	/* 8 MiB */
 #endif
-- 
2.17.1

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

* [U-Boot] [PATCH] dfu: mmc: call fs functions instead of run_command
  2019-01-25 18:58 [U-Boot] [PATCH] dfu: mmc: call fs functions instead of run_command Simon Goldschmidt
@ 2019-01-30 18:44 ` Stephen Warren
  2019-01-30 21:38   ` Lukasz Majewski
  2019-01-30 21:35 ` Lukasz Majewski
  2019-01-31  2:42 ` [U-Boot] " Tom Rini
  2 siblings, 1 reply; 6+ messages in thread
From: Stephen Warren @ 2019-01-30 18:44 UTC (permalink / raw)
  To: u-boot

On 1/25/19 11:58 AM, Simon Goldschmidt wrote:
> This unbreaks dfu mmc_file_op which is currently broken since using the
> load cmd on a buffer from heap is not allowed - added with
> commit aa3c609e2be5 ("fs: prevent overwriting reserved memory")
> 
> Fixes: commit aa3c609e2be5 ("fs: prevent overwriting reserved memory")
> Reported-by: Stephen Warren <swarren@wwwdotorg.org>
> Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
> Tested-by: Stephen Warren <swarren@nvidia.com>

Any chance we could get this applied (directly to u-boot/master) to fix 
the rampant test failures? Thanks.

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

* [U-Boot] [PATCH] dfu: mmc: call fs functions instead of run_command
  2019-01-25 18:58 [U-Boot] [PATCH] dfu: mmc: call fs functions instead of run_command Simon Goldschmidt
  2019-01-30 18:44 ` Stephen Warren
@ 2019-01-30 21:35 ` Lukasz Majewski
  2019-01-31  2:42 ` [U-Boot] " Tom Rini
  2 siblings, 0 replies; 6+ messages in thread
From: Lukasz Majewski @ 2019-01-30 21:35 UTC (permalink / raw)
  To: u-boot

Hi,

> This unbreaks dfu mmc_file_op which is currently broken since using
> the load cmd on a buffer from heap is not allowed - added with
> commit aa3c609e2be5 ("fs: prevent overwriting reserved memory")
> 
> Fixes: commit aa3c609e2be5 ("fs: prevent overwriting reserved memory")
> Reported-by: Stephen Warren <swarren@wwwdotorg.org>
> Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
> Tested-by: Stephen Warren <swarren@nvidia.com>
> ---

Acked-by: Lukasz Majewski <lukma@denx.de>

> 
> Changes since RFC:
> - decreased size of 'dev_part_str' to hold 'xxx:yyy' string
> - removed now unused define 'DFU_CMD_BUF_SIZE'
> 
> ---
>  drivers/dfu/dfu_mmc.c | 67
> ++++++++++++++++++++----------------------- include/dfu.h         |
> 1 - 2 files changed, 31 insertions(+), 37 deletions(-)
> 
> diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c
> index b45e6dc54c..403fd5351d 100644
> --- a/drivers/dfu/dfu_mmc.c
> +++ b/drivers/dfu/dfu_mmc.c
> @@ -108,17 +108,17 @@ static int mmc_file_buffer(struct dfu_entity
> *dfu, void *buf, long *len) static int mmc_file_op(enum dfu_op op,
> struct dfu_entity *dfu, void *buf, u64 *len)
>  {
> -	const char *fsname, *opname;
> -	char cmd_buf[DFU_CMD_BUF_SIZE];
> -	char *str_env;
> +	char dev_part_str[8];
>  	int ret;
> +	int fstype;
> +	loff_t size = 0;
>  
>  	switch (dfu->layout) {
>  	case DFU_FS_FAT:
> -		fsname = "fat";
> +		fstype = FS_TYPE_FAT;
>  		break;
>  	case DFU_FS_EXT4:
> -		fsname = "ext4";
> +		fstype = FS_TYPE_EXT;
>  		break;
>  	default:
>  		printf("%s: Layout (%s) not (yet) supported!\n",
> __func__, @@ -126,48 +126,43 @@ static int mmc_file_op(enum dfu_op
> op, struct dfu_entity *dfu, return -1;
>  	}
>  
> +	snprintf(dev_part_str, sizeof(dev_part_str), "%d:%d",
> +		 dfu->data.mmc.dev, dfu->data.mmc.part);
> +
> +	ret = fs_set_blk_dev("mmc", dev_part_str, fstype);
> +	if (ret) {
> +		puts("dfu: fs_set_blk_dev error!\n");
> +		return ret;
> +	}
> +
>  	switch (op) {
>  	case DFU_OP_READ:
> -		opname = "load";
> +		ret = fs_read(dfu->name, (size_t)buf, 0, 0, &size);
> +		if (ret) {
> +			puts("dfu: fs_read error!\n");
> +			return ret;
> +		}
> +		*len = size;
>  		break;
>  	case DFU_OP_WRITE:
> -		opname = "write";
> +		ret = fs_write(dfu->name, (size_t)buf, 0, *len,
> &size);
> +		if (ret) {
> +			puts("dfu: fs_write error!\n");
> +			return ret;
> +		}
>  		break;
>  	case DFU_OP_SIZE:
> -		opname = "size";
> +		ret = fs_size(dfu->name, &size);
> +		if (ret) {
> +			puts("dfu: fs_size error!\n");
> +			return ret;
> +		}
> +		*len = size;
>  		break;
>  	default:
>  		return -1;
>  	}
>  
> -	sprintf(cmd_buf, "%s%s mmc %d:%d", fsname, opname,
> -		dfu->data.mmc.dev, dfu->data.mmc.part);
> -
> -	if (op != DFU_OP_SIZE)
> -		sprintf(cmd_buf + strlen(cmd_buf), " %p", buf);
> -
> -	sprintf(cmd_buf + strlen(cmd_buf), " %s", dfu->name);
> -
> -	if (op == DFU_OP_WRITE)
> -		sprintf(cmd_buf + strlen(cmd_buf), " %llx", *len);
> -
> -	debug("%s: %s 0x%p\n", __func__, cmd_buf, cmd_buf);
> -
> -	ret = run_command(cmd_buf, 0);
> -	if (ret) {
> -		puts("dfu: Read error!\n");
> -		return ret;
> -	}
> -
> -	if (op != DFU_OP_WRITE) {
> -		str_env = env_get("filesize");
> -		if (str_env == NULL) {
> -			puts("dfu: Wrong file size!\n");
> -			return -1;
> -		}
> -		*len = simple_strtoul(str_env, NULL, 16);
> -	}
> -
>  	return ret;
>  }
>  
> diff --git a/include/dfu.h b/include/dfu.h
> index fbe978abdc..c671d8b04d 100644
> --- a/include/dfu.h
> +++ b/include/dfu.h
> @@ -80,7 +80,6 @@ struct sf_internal_data {
>  };
>  
>  #define DFU_NAME_SIZE			32
> -#define DFU_CMD_BUF_SIZE		128
>  #ifndef CONFIG_SYS_DFU_DATA_BUF_SIZE
>  #define CONFIG_SYS_DFU_DATA_BUF_SIZE
> (1024*1024*8)	/* 8 MiB */ #endif




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190130/650b69c1/attachment.sig>

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

* [U-Boot] [PATCH] dfu: mmc: call fs functions instead of run_command
  2019-01-30 18:44 ` Stephen Warren
@ 2019-01-30 21:38   ` Lukasz Majewski
  0 siblings, 0 replies; 6+ messages in thread
From: Lukasz Majewski @ 2019-01-30 21:38 UTC (permalink / raw)
  To: u-boot

Hi Stephen, Tom,

> On 1/25/19 11:58 AM, Simon Goldschmidt wrote:
> > This unbreaks dfu mmc_file_op which is currently broken since using
> > the load cmd on a buffer from heap is not allowed - added with
> > commit aa3c609e2be5 ("fs: prevent overwriting reserved memory")
> > 
> > Fixes: commit aa3c609e2be5 ("fs: prevent overwriting reserved
> > memory") Reported-by: Stephen Warren <swarren@wwwdotorg.org>
> > Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
> > Tested-by: Stephen Warren <swarren@nvidia.com>  
> 
> Any chance we could get this applied (directly to u-boot/master) to
> fix the rampant test failures? Thanks.

Tom, I've acked this patch (in other mail). Please feel free to apply
it to -master branch.

Thanks for fixing it :-) (the code was really old and I'm glad that it
was updated to fs_* functions).

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190130/aaaa9d2b/attachment.sig>

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

* [U-Boot] dfu: mmc: call fs functions instead of run_command
  2019-01-25 18:58 [U-Boot] [PATCH] dfu: mmc: call fs functions instead of run_command Simon Goldschmidt
  2019-01-30 18:44 ` Stephen Warren
  2019-01-30 21:35 ` Lukasz Majewski
@ 2019-01-31  2:42 ` Tom Rini
  2019-01-31 16:35   ` Stephen Warren
  2 siblings, 1 reply; 6+ messages in thread
From: Tom Rini @ 2019-01-31  2:42 UTC (permalink / raw)
  To: u-boot

On Fri, Jan 25, 2019 at 07:58:01PM +0100, Simon Goldschmidt wrote:

> This unbreaks dfu mmc_file_op which is currently broken since using the
> load cmd on a buffer from heap is not allowed - added with
> commit aa3c609e2be5 ("fs: prevent overwriting reserved memory")
> 
> Fixes: commit aa3c609e2be5 ("fs: prevent overwriting reserved memory")
> Reported-by: Stephen Warren <swarren@wwwdotorg.org>
> Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
> Tested-by: Stephen Warren <swarren@nvidia.com>
> Acked-by: Lukasz Majewski <lukma@denx.de>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190130/ae7cfb6b/attachment.sig>

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

* [U-Boot] dfu: mmc: call fs functions instead of run_command
  2019-01-31  2:42 ` [U-Boot] " Tom Rini
@ 2019-01-31 16:35   ` Stephen Warren
  0 siblings, 0 replies; 6+ messages in thread
From: Stephen Warren @ 2019-01-31 16:35 UTC (permalink / raw)
  To: u-boot

On 1/30/19 7:42 PM, Tom Rini wrote:
> On Fri, Jan 25, 2019 at 07:58:01PM +0100, Simon Goldschmidt wrote:
> 
>> This unbreaks dfu mmc_file_op which is currently broken since using the
>> load cmd on a buffer from heap is not allowed - added with
>> commit aa3c609e2be5 ("fs: prevent overwriting reserved memory")
>>
>> Fixes: commit aa3c609e2be5 ("fs: prevent overwriting reserved memory")
>> Reported-by: Stephen Warren <swarren@wwwdotorg.org>
>> Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
>> Tested-by: Stephen Warren <swarren@nvidia.com>
>> Acked-by: Lukasz Majewski <lukma@denx.de>
> 
> Applied to u-boot/master, thanks!

Great, the testing is green again:-) Thanks. (Now we just need -video, 
-dm, and -net to rebase on u-boot/master so they go green again too).

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

end of thread, other threads:[~2019-01-31 16:35 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-25 18:58 [U-Boot] [PATCH] dfu: mmc: call fs functions instead of run_command Simon Goldschmidt
2019-01-30 18:44 ` Stephen Warren
2019-01-30 21:38   ` Lukasz Majewski
2019-01-30 21:35 ` Lukasz Majewski
2019-01-31  2:42 ` [U-Boot] " Tom Rini
2019-01-31 16:35   ` Stephen Warren

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.