> -----Original Message----- > From: Marek Vasut [mailto:ma...@denx.de] > Sent: Wednesday, June 01, 2016 6:51 PM > To: Rajesh Bhagat <rajesh.bha...@nxp.com>; u-boot@lists.denx.de > Cc: york sun <york....@nxp.com>; Sriram Dash <sriram.d...@nxp.com> > Subject: Re: [PATCH] drivers: usb: fsl: Fix NULL terminating issue for usb > controller > name string > > On 06/01/2016 01:17 PM, Rajesh Bhagat wrote: > > Fixes NULL terminating issue for usb controller name string and > > performs code cleanup for intializing variables current_usb_controller > > and usb_phy. > > > > Signed-off-by: Rajesh Bhagat <rajesh.bha...@nxp.com> > > --- > > drivers/usb/host/ehci-fsl.c | 10 ++++------ > > 1 files changed, 4 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c > > index a43d37d..a806993 100644 > > --- a/drivers/usb/host/ehci-fsl.c > > +++ b/drivers/usb/host/ehci-fsl.c > > @@ -49,11 +49,9 @@ int ehci_hcd_init(int index, enum usb_init_type init, > > struct usb_ehci *ehci = NULL; > > const char *phy_type = NULL; > > size_t len; > > - char current_usb_controller[5]; > > + char current_usb_controller[5] = {0}; > > #ifdef CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY > > - char usb_phy[5]; > > - > > - usb_phy[0] = '\0'; > > + char usb_phy[5] = {0}; > > #endif > > if (has_erratum_a007075()) { > > /* > > @@ -64,8 +62,8 @@ int ehci_hcd_init(int index, enum usb_init_type init, > > */ > > mdelay(5); > > } > > - memset(current_usb_controller, '\0', 5); > > - snprintf(current_usb_controller, 4, "usb%d", index+1); > > + snprintf(current_usb_controller, sizeof(current_usb_controller), > > + "usb%d", index+1); > > What is the actual problem here ? snprintf() will add the \0 at the end of > the string, so > I don't see any "null terminating issue" in the code. > I can understand using the sizeof() in the snprintf(), which is valid, but > that's all. >
Hello Marek, It is surprising for me too, but same can be verified even on x86 machine using below test program, Can it be compiler optimization of memset? Output #1 : current_usb_controller usb Output #2 : current_usb_controller usb1 (Expected Output) int main() { int index = 0; #if 1 char current_usb_controller[5]; memset(current_usb_controller, '\0', 5); snprintf(current_usb_controller, 4, "usb%d", index+1); #else char current_usb_controller[5] = {0}; snprintf(current_usb_controller, sizeof(current_usb_controller), "usb%d", index+1); #endif printf("current_usb_controller %s\n", current_usb_controller); return 0; } Best Regards, Rajesh Bhagat > > switch (index) { > > case 0: > > > > > -- > Best regards, > Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot