The current behaviour of this function will dereference a null pointer
if the serial# environment variable is unset. This was discovered on a
board where U-Boot did not have access to the first 256MB of ram,
resulting in a board crash.
In the event that U-Boot has full access to memory, it will still read
from address 0, which is probably not optimal.
This simple check is enough to fix it.

Signed-off-by: Michael Ferolito <michaelsunn...@gmail.com>
Cc: Marek Vasut <ma...@denx.de>
Cc: Heiko Schocher <h...@denx.de>
Cc: Lukasz Majewski <l.majew...@samsung.com>
Cc: Kyungmin Park <kyungmin.p...@samsung.com>
---
 drivers/usb/gadget/g_dnl.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/gadget/g_dnl.c b/drivers/usb/gadget/g_dnl.c
index 631969b340..d56f9c485e 100644
--- a/drivers/usb/gadget/g_dnl.c
+++ b/drivers/usb/gadget/g_dnl.c
@@ -50,7 +50,8 @@ static const char manufacturer[] = 
CONFIG_USB_GADGET_MANUFACTURER;
 void g_dnl_set_serialnumber(char *s)
 {
        memset(g_dnl_serial, 0, MAX_STRING_SERIAL);
-       strncpy(g_dnl_serial, s, MAX_STRING_SERIAL - 1);
+       if (s)
+               strncpy(g_dnl_serial, s, MAX_STRING_SERIAL - 1);
 }
 
 static struct usb_device_descriptor device_desc = {
-- 
2.48.1

Reply via email to