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)
