2017-03-10 17:52 GMT+01:00 Marek Vasut <[email protected]>: > On 03/10/2017 05:31 PM, Nicolas le bayon wrote: > > From: Nicolas Le Bayon <[email protected]> > > > > use dynamic allocation to consider all variable lengths > > Of what ? Where ? Why ? >
Here is a proposal of updated label: usb: gadget: dynamic alloc for variable name in cb_getvar And a better description proposal: Allocate dynamically the buffer of the variable name in cb_getvar function This allows to treat correctly all variable name lengths, growing through releases, and also avoids cutting their names, leading to undefined variable for the function. > > Signed-off-by: Nicolas Le Bayon <[email protected]> > > --- > > drivers/usb/gadget/f_fastboot.c | 16 ++++++++++++++-- > > 1 file changed, 14 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/usb/gadget/f_fastboot.c > > b/drivers/usb/gadget/f_fastboot.c > > index 2160b1c..9bb3a95 100644 > > --- a/drivers/usb/gadget/f_fastboot.c > > +++ b/drivers/usb/gadget/f_fastboot.c > > @@ -432,9 +432,19 @@ static void cb_getvar(struct usb_ep *ep, struct > > usb_request *req) > > else > > strcpy(response, "FAILValue not set"); > > } else { > > - char envstr[32]; > > + char *envstr = NULL; > > This var is inited by malloc() below, drop the = NULL . > OK > > + unsigned int len; > > > > - snprintf(envstr, sizeof(envstr) - 1, "fastboot.%s", cmd); > > + len = strlen("fastboot.") + strlen(cmd) + 1; > > + > > + envstr = malloc(len); > > The len is only used here, just do malloc(strlen ..... )); OK I merge all this in a single line > > + if (!envstr) { > > + error("variable malloc error"); > > This error message makes no sense ... > Is error("malloc error"); enough from your point of view? > > + fastboot_tx_write_str("FAILvar malloc error"); > > The indent of this whole block is wrong ... > Regarding previous remark on error message, I also modified it to fastboot_tx_write_str("FAILmalloc error"); Regarding indent, it seems to me that it fits with the rest of the function, but I'm surely wrong, could you precise me the problem please? > > + return; > > + } > > + > > + sprintf(envstr, "fastboot.%s", cmd); > > s = getenv(envstr); > > if (s) { > > strncat(response, s, chars_left); > > @@ -442,6 +452,8 @@ static void cb_getvar(struct usb_ep *ep, struct > > usb_request *req) > > printf("WARNING: unknown variable: %s\n", cmd); > > strcpy(response, "FAILVariable not implemented"); > > } > > + > > + free(envstr); > > } > > fastboot_tx_write_str(response); > > } > > > > > -- > Best regards, > Marek Vasut > Regars Nicolas Le Bayon _______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

