drv_usbacm_init() fills a local struct stdio_dev and registers it
without clearing the fields it does not set. With
CONFIG_CONSOLE_FLUSH_SUPPORT=y, console_flush() checks sdev->flush for
non-NULL and then calls it; on Xiaomi crux the uninitialized field held
a leftover pointer, so the first 'go <addr>' command jumped into the
splash image and crashed in console_flush().

Zero-initialize the structure so unused callbacks stay NULL.

Signed-off-by: Qing Li <[email protected]>
---
 drivers/usb/gadget/f_acm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c
index cf16ca83c12..f756aa087ae 100644
--- a/drivers/usb/gadget/f_acm.c
+++ b/drivers/usb/gadget/f_acm.c
@@ -675,7 +675,7 @@ static int acm_stdio_stop(struct stdio_dev *dev)
 
 int drv_usbacm_init(void)
 {
-       struct stdio_dev stdio;
+       struct stdio_dev stdio = {0};
 
        strcpy(stdio.name, "usbacm");
        stdio.flags = DEV_FLAGS_INPUT | DEV_FLAGS_OUTPUT;
-- 
2.50.1 (Apple Git-155)

Reply via email to