Commit 5a84e6f6 authored by Andrzej Pietrasiewicz's avatar Andrzej Pietrasiewicz Committed by Felipe Balbi

usb: gadget: printer: don't access file global pnp_string in function's code

In order to factor out a reusable f_printer, the function's code should
not use file global variables related to legacy printer gadget's
implementation.
Signed-off-by: default avatarAndrzej Pietrasiewicz <andrzej.p@samsung.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 085617a1
...@@ -86,6 +86,7 @@ struct printer_dev { ...@@ -86,6 +86,7 @@ struct printer_dev {
u8 printer_cdev_open; u8 printer_cdev_open;
wait_queue_head_t wait; wait_queue_head_t wait;
unsigned q_len; unsigned q_len;
char *pnp_string; /* We don't own memory! */
struct usb_function function; struct usb_function function;
}; };
...@@ -994,10 +995,10 @@ static int printer_func_setup(struct usb_function *f, ...@@ -994,10 +995,10 @@ static int printer_func_setup(struct usb_function *f,
if ((wIndex>>8) != dev->interface) if ((wIndex>>8) != dev->interface)
break; break;
value = (pnp_string[0]<<8)|pnp_string[1]; value = (dev->pnp_string[0] << 8) | dev->pnp_string[1];
memcpy(req->buf, pnp_string, value); memcpy(req->buf, dev->pnp_string, value);
DBG(dev, "1284 PNP String: %x %s\n", value, DBG(dev, "1284 PNP String: %x %s\n", value,
&pnp_string[2]); &dev->pnp_string[2]);
break; break;
case 1: /* Get Port Status */ case 1: /* Get Port Status */
...@@ -1230,13 +1231,14 @@ static struct usb_configuration printer_cfg_driver = { ...@@ -1230,13 +1231,14 @@ static struct usb_configuration printer_cfg_driver = {
}; };
static int f_printer_bind_config(struct usb_configuration *c, char *pnp_str, static int f_printer_bind_config(struct usb_configuration *c, char *pnp_str,
unsigned q_len) char *pnp_string, unsigned q_len)
{ {
struct printer_dev *dev; struct printer_dev *dev;
int status = -ENOMEM; int status = -ENOMEM;
size_t len; size_t len;
dev = &usb_printer_gadget; dev = &usb_printer_gadget;
dev->pnp_string = pnp_string;
dev->function.name = shortname; dev->function.name = shortname;
dev->function.bind = printer_func_bind; dev->function.bind = printer_func_bind;
...@@ -1249,7 +1251,7 @@ static int f_printer_bind_config(struct usb_configuration *c, char *pnp_str, ...@@ -1249,7 +1251,7 @@ static int f_printer_bind_config(struct usb_configuration *c, char *pnp_str,
INIT_LIST_HEAD(&dev->rx_buffers); INIT_LIST_HEAD(&dev->rx_buffers);
if (pnp_str) if (pnp_str)
strlcpy(&pnp_string[2], pnp_str, PNP_STRING_LEN - 2); strlcpy(&dev->pnp_string[2], pnp_str, PNP_STRING_LEN - 2);
len = strlen(pnp_string); len = strlen(pnp_string);
pnp_string[0] = (len >> 8) & 0xFF; pnp_string[0] = (len >> 8) & 0xFF;
...@@ -1292,7 +1294,7 @@ static int __init printer_do_config(struct usb_configuration *c) ...@@ -1292,7 +1294,7 @@ static int __init printer_do_config(struct usb_configuration *c)
printer_cfg_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP; printer_cfg_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP;
} }
return f_printer_bind_config(c, iPNPstring, QLEN); return f_printer_bind_config(c, iPNPstring, pnp_string, QLEN);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment