USB: Trivial cleanup in MSM drivers
This patch does the following cleanup:
1. Use strncpy() instead of strcpy()
2. Add NULL reference checks
3. Remove unnecessary NULL checks
3. Fix accessing dangling pointers
4. Pass target's string length as length argument to memcmp().
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
Conflicts:
drivers/usb/gadget/android.c
diff --git a/drivers/usb/gadget/f_serial.c b/drivers/usb/gadget/f_serial.c
index 7d80403..6cf148a 100644
--- a/drivers/usb/gadget/f_serial.c
+++ b/drivers/usb/gadget/f_serial.c
@@ -722,6 +722,9 @@
/* copy descriptors, and track endpoint copies */
f->descriptors = usb_copy_descriptors(gser_fs_function);
+ if (!f->descriptors)
+ goto fail;
+
gser->fs.in = usb_find_endpoint(gser_fs_function,
f->descriptors, &gser_fs_in_desc);
gser->fs.out = usb_find_endpoint(gser_fs_function,
@@ -749,6 +752,9 @@
/* copy descriptors, and track endpoint copies */
f->hs_descriptors = usb_copy_descriptors(gser_hs_function);
+ if (!f->hs_descriptors)
+ goto fail;
+
gser->hs.in = usb_find_endpoint(gser_hs_function,
f->hs_descriptors, &gser_hs_in_desc);
gser->hs.out = usb_find_endpoint(gser_hs_function,
@@ -766,6 +772,8 @@
return 0;
fail:
+ if (f->descriptors)
+ usb_free_descriptors(f->descriptors);
#ifdef CONFIG_MODEM_SUPPORT
if (gser->notify_req)
gs_free_req(gser->notify, gser->notify_req);
diff --git a/drivers/usb/gadget/msm72k_udc.c b/drivers/usb/gadget/msm72k_udc.c
index 7cafc28..771ebfc 100644
--- a/drivers/usb/gadget/msm72k_udc.c
+++ b/drivers/usb/gadget/msm72k_udc.c
@@ -275,12 +275,13 @@
static ssize_t print_switch_name(struct switch_dev *sdev, char *buf)
{
- return sprintf(buf, "%s\n", DRIVER_NAME);
+ return snprintf(buf, PAGE_SIZE, "%s\n", DRIVER_NAME);
}
static ssize_t print_switch_state(struct switch_dev *sdev, char *buf)
{
- return sprintf(buf, "%s\n", sdev->state ? "online" : "offline");
+ return snprintf(buf, PAGE_SIZE, "%s\n",
+ sdev->state ? "online" : "offline");
}
static inline enum chg_type usb_get_chg_type(struct usb_info *ui)
@@ -1299,11 +1300,9 @@
/* XXX: we can't seem to detect going offline,
* XXX: so deconfigure on reset for the time being
*/
- if (ui->driver) {
- dev_dbg(&ui->pdev->dev,
+ dev_dbg(&ui->pdev->dev,
"usb: notify offline\n");
- ui->driver->disconnect(&ui->gadget);
- }
+ ui->driver->disconnect(&ui->gadget);
/* cancel pending ep0 transactions */
flush_endpoint(&ui->ep0out);
flush_endpoint(&ui->ep0in);
@@ -2374,7 +2373,7 @@
struct usb_info *ui = the_usb_info;
size_t count;
- count = sprintf(buf, "%d", ui->chg_current);
+ count = snprintf(buf, PAGE_SIZE, "%d", ui->chg_current);
return count;
}
@@ -2390,7 +2389,7 @@
"DEDICATED CHARGER",
"INVALID"};
- count = sprintf(buf, "%s",
+ count = snprintf(buf, PAGE_SIZE, "%s",
chg_type[atomic_read(&otg->chg_type)]);
return count;
@@ -2438,7 +2437,7 @@
unsigned long flags;
spin_lock_irqsave(&ui->lock, flags);
- count = sprintf(buf, "%d\n", ui->hnp_avail);
+ count = snprintf(buf, PAGE_SIZE, "%d\n", ui->hnp_avail);
spin_unlock_irqrestore(&ui->lock, flags);
return count;
diff --git a/drivers/usb/gadget/u_serial.c b/drivers/usb/gadget/u_serial.c
index 7bd9f33..ca5f11b 100644
--- a/drivers/usb/gadget/u_serial.c
+++ b/drivers/usb/gadget/u_serial.c
@@ -1423,7 +1423,8 @@
fail:
while (count--)
kfree(ports[count].port);
- destroy_workqueue(gserial_wq);
+ if (gserial_wq)
+ destroy_workqueue(gserial_wq);
put_tty_driver(gs_tty_driver);
gs_tty_driver = NULL;
return status;
diff --git a/drivers/usb/otg/msm72k_otg.c b/drivers/usb/otg/msm72k_otg.c
index 2eb456a..43df173 100644
--- a/drivers/usb/otg/msm72k_otg.c
+++ b/drivers/usb/otg/msm72k_otg.c
@@ -2367,15 +2367,15 @@
spin_lock_irqsave(&dev->lock, flags);
dev->pdata->otg_mode = OTG_USER_CONTROL;
- if (!memcmp(buf, "none", count - 1)) {
+ if (!memcmp(buf, "none", 4)) {
clear_bit(B_SESS_VLD, &dev->inputs);
set_bit(ID, &dev->inputs);
work = 1;
- } else if (!memcmp(buf, "peripheral", count - 1)) {
+ } else if (!memcmp(buf, "peripheral", 10)) {
set_bit(B_SESS_VLD, &dev->inputs);
set_bit(ID, &dev->inputs);
work = 1;
- } else if (!memcmp(buf, "host", count - 1)) {
+ } else if (!memcmp(buf, "host", 4)) {
clear_bit(B_SESS_VLD, &dev->inputs);
clear_bit(ID, &dev->inputs);
set_bit(A_BUS_REQ, &dev->inputs);
@@ -2896,13 +2896,16 @@
clk_put(dev->phy_reset_clk);
if (dev->pdata->rpc_connect)
dev->pdata->rpc_connect(0);
+ if (dev->pclk_src) {
+ msm_otg_vote_for_pclk_source(dev, 0);
+ clk_put(dev->pclk_src);
+ }
msm_xo_put(dev->xo_handle);
+ pm_qos_remove_request(&dev->pdata->pm_qos_req_dma);
pm_runtime_put(&pdev->dev);
pm_runtime_disable(&pdev->dev);
kfree(dev);
- pm_qos_remove_request(&dev->pdata->pm_qos_req_dma);
- clk_put(dev->pclk_src);
return 0;
}