]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
usb: gadget: u_serial: make OBEX port not a console
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>
Sat, 10 Aug 2019 08:42:50 +0000 (10:42 +0200)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Tue, 22 Oct 2019 07:27:09 +0000 (10:27 +0300)
Prevent OBEX serial port from ever becoming a console. Console messages
will definitely break the protocol, and since you have to instantiate
the port making it explicitly for OBEX, there is no point in allowing
console to break it by mistake.

Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/gadget/function/f_obex.c
drivers/usb/gadget/function/u_serial.c
drivers/usb/gadget/function/u_serial.h

index 55b7f57d2dc76fc05a7ee6ae8b62e1c6e52b5416..ab26d84ed95e6c5ec4317def3f6fbe2788324f0a 100644 (file)
@@ -432,7 +432,7 @@ static struct usb_function_instance *obex_alloc_inst(void)
                return ERR_PTR(-ENOMEM);
 
        opts->func_inst.free_func_inst = obex_free_inst;
-       ret = gserial_alloc_line(&opts->port_num);
+       ret = gserial_alloc_line_no_console(&opts->port_num);
        if (ret) {
                kfree(opts);
                return ERR_PTR(ret);
index 94f6999e82623ce8dc3b640af14a30185299c65d..62280c23cde249e3546f48f594f85aef61f2aef6 100644 (file)
@@ -1180,7 +1180,7 @@ void gserial_free_line(unsigned char port_num)
 }
 EXPORT_SYMBOL_GPL(gserial_free_line);
 
-int gserial_alloc_line(unsigned char *line_num)
+int gserial_alloc_line_no_console(unsigned char *line_num)
 {
        struct usb_cdc_line_coding      coding;
        struct gs_port                  *port;
@@ -1221,12 +1221,20 @@ int gserial_alloc_line(unsigned char *line_num)
                goto err;
        }
        *line_num = port_num;
-
-       if (!port_num)
-               gs_console_init(port);
 err:
        return ret;
 }
+EXPORT_SYMBOL_GPL(gserial_alloc_line_no_console);
+
+int gserial_alloc_line(unsigned char *line_num)
+{
+       int ret = gserial_alloc_line_no_console(line_num);
+
+       if (!ret && !*line_num)
+               gs_console_init(ports[*line_num].port);
+
+       return ret;
+}
 EXPORT_SYMBOL_GPL(gserial_alloc_line);
 
 /**
index 9acaac1cbb75a5a7136905cd6c98e4ff70404061..8b472b0c8cb4a97ef2a07fbcf5f860fbb03a3282 100644 (file)
@@ -54,6 +54,7 @@ struct usb_request *gs_alloc_req(struct usb_ep *ep, unsigned len, gfp_t flags);
 void gs_free_req(struct usb_ep *, struct usb_request *req);
 
 /* management of individual TTY ports */
+int gserial_alloc_line_no_console(unsigned char *port_line);
 int gserial_alloc_line(unsigned char *port_line);
 void gserial_free_line(unsigned char port_line);