[PATCH v5] staging: rtl8192u: add error handling for usb_alloc_urb

2018-06-16 Thread Zhouyang Jia
When usb_alloc_urb fails, the lack of error-handling code may
cause unexpected results.

This patch adds error-handling code after calling usb_alloc_urb,
and fixes memory leaks in error paths.

Signed-off-by: Zhouyang Jia 
---
v1->v2:
- Fix memory leak.
v2->v3:
- Release memory in error path.
v3->v4:
- Use kcalloc instead of kmalloc_array.
v4->v5:
- Free priv->rx_urb[i]->transfer_buffer and priv->oldaddr.
---
 drivers/staging/rtl8192u/r8192U_core.c | 34 --
 1 file changed, 24 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/rtl8192u/r8192U_core.c 
b/drivers/staging/rtl8192u/r8192U_core.c
index 7a0dbc0..9413f29 100644
--- a/drivers/staging/rtl8192u/r8192U_core.c
+++ b/drivers/staging/rtl8192u/r8192U_core.c
@@ -1639,8 +1639,9 @@ short rtl8192_tx(struct net_device *dev, struct sk_buff 
*skb)
 static short rtl8192_usb_initendpoints(struct net_device *dev)
 {
struct r8192_priv *priv = ieee80211_priv(dev);
+   int i;
 
-   priv->rx_urb = kmalloc(sizeof(struct urb *) * (MAX_RX_URB + 1),
+   priv->rx_urb = kcalloc(MAX_RX_URB + 1, sizeof(struct urb *),
   GFP_KERNEL);
if (!priv->rx_urb)
return -ENOMEM;
@@ -1649,12 +1650,12 @@ static short rtl8192_usb_initendpoints(struct 
net_device *dev)
for (i = 0; i < (MAX_RX_URB + 1); i++) {
priv->rx_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
if (!priv->rx_urb[i])
-   return -ENOMEM;
+   goto out_release_urb;
 
priv->rx_urb[i]->transfer_buffer =
kmalloc(RX_URB_SIZE, GFP_KERNEL);
if (!priv->rx_urb[i]->transfer_buffer)
-   return -ENOMEM;
+   goto out_release_urb;
 
priv->rx_urb[i]->transfer_buffer_length = RX_URB_SIZE;
}
@@ -1666,9 +1667,13 @@ static short rtl8192_usb_initendpoints(struct net_device 
*dev)
void *oldaddr, *newaddr;
 
priv->rx_urb[16] = usb_alloc_urb(0, GFP_KERNEL);
+   if (!priv->rx_urb[16])
+   goto out_release_urb;
+
priv->oldaddr = kmalloc(16, GFP_KERNEL);
if (!priv->oldaddr)
-   return -ENOMEM;
+   goto out_release_urb;
+
oldaddr = priv->oldaddr;
align = ((long)oldaddr) & 3;
if (align) {
@@ -1686,17 +1691,26 @@ static short rtl8192_usb_initendpoints(struct 
net_device *dev)
priv->pp_rxskb = kcalloc(MAX_RX_URB, sizeof(struct sk_buff *),
 GFP_KERNEL);
if (!priv->pp_rxskb) {
-   kfree(priv->rx_urb);
-
-   priv->pp_rxskb = NULL;
-   priv->rx_urb = NULL;
-
DMESGE("Endpoint Alloc Failure");
-   return -ENOMEM;
+   goto out_release_oldaddr;
}
 
netdev_dbg(dev, "End of initendpoints\n");
return 0;
+
+out_release_oldaddr:
+   kfree(priv->oldaddr);
+
+out_release_urb:
+   for (i = 0; i < (MAX_RX_URB + 1); i++) {
+   if (priv->rx_urb[i]) {
+   kfree(priv->rx_urb[i]->transfer_buffer);
+   kfree(priv->rx_urb[i]);
+   }
+   }
+   kfree(priv->rx_urb);
+   priv->rx_urb = NULL;
+   return -ENOMEM;
 }
 
 #ifdef THOMAS_BEACON
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v4] staging: rtl8192u: add error handling for usb_alloc_urb

2018-06-15 Thread Zhouyang Jia
When usb_alloc_urb fails, the lack of error-handling code may
cause unexpected results.

This patch adds error-handling code after calling usb_alloc_urb.

Signed-off-by: Zhouyang Jia 
---
v1->v2:
- Fix memory leak.
v2->v3:
- Release memory in error path.
v3->v4:
- Use kcalloc instead of kmalloc_array.
---
 drivers/staging/rtl8192u/r8192U_core.c | 27 +--
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/rtl8192u/r8192U_core.c 
b/drivers/staging/rtl8192u/r8192U_core.c
index 7a0dbc0..d15ee4f 100644
--- a/drivers/staging/rtl8192u/r8192U_core.c
+++ b/drivers/staging/rtl8192u/r8192U_core.c
@@ -1639,8 +1639,9 @@ short rtl8192_tx(struct net_device *dev, struct sk_buff 
*skb)
 static short rtl8192_usb_initendpoints(struct net_device *dev)
 {
struct r8192_priv *priv = ieee80211_priv(dev);
+   int i;
 
-   priv->rx_urb = kmalloc(sizeof(struct urb *) * (MAX_RX_URB + 1),
+   priv->rx_urb = kcalloc(MAX_RX_URB + 1, sizeof(struct urb *),
   GFP_KERNEL);
if (!priv->rx_urb)
return -ENOMEM;
@@ -1649,12 +1650,12 @@ static short rtl8192_usb_initendpoints(struct 
net_device *dev)
for (i = 0; i < (MAX_RX_URB + 1); i++) {
priv->rx_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
if (!priv->rx_urb[i])
-   return -ENOMEM;
+   goto out_release_mem;
 
priv->rx_urb[i]->transfer_buffer =
kmalloc(RX_URB_SIZE, GFP_KERNEL);
if (!priv->rx_urb[i]->transfer_buffer)
-   return -ENOMEM;
+   goto out_release_mem;
 
priv->rx_urb[i]->transfer_buffer_length = RX_URB_SIZE;
}
@@ -1666,9 +1667,13 @@ static short rtl8192_usb_initendpoints(struct net_device 
*dev)
void *oldaddr, *newaddr;
 
priv->rx_urb[16] = usb_alloc_urb(0, GFP_KERNEL);
+   if (!priv->rx_urb[16])
+   goto out_release_mem;
+
priv->oldaddr = kmalloc(16, GFP_KERNEL);
if (!priv->oldaddr)
-   return -ENOMEM;
+   goto out_release_mem;
+
oldaddr = priv->oldaddr;
align = ((long)oldaddr) & 3;
if (align) {
@@ -1686,17 +1691,19 @@ static short rtl8192_usb_initendpoints(struct 
net_device *dev)
priv->pp_rxskb = kcalloc(MAX_RX_URB, sizeof(struct sk_buff *),
 GFP_KERNEL);
if (!priv->pp_rxskb) {
-   kfree(priv->rx_urb);
-
-   priv->pp_rxskb = NULL;
-   priv->rx_urb = NULL;
-
DMESGE("Endpoint Alloc Failure");
-   return -ENOMEM;
+   goto out_release_mem;
}
 
netdev_dbg(dev, "End of initendpoints\n");
return 0;
+
+out_release_mem:
+   for (i = 0; i < (MAX_RX_URB + 1); i++)
+   kfree(priv->rx_urb[i]);
+   kfree(priv->rx_urb);
+   priv->rx_urb = NULL;
+   return -ENOMEM;
 }
 
 #ifdef THOMAS_BEACON
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v3] staging: rtl8192u: add error handling for usb_alloc_urb

2018-06-15 Thread Zhouyang Jia
When usb_alloc_urb fails, the lack of error-handling code may
cause unexpected results.

This patch adds error-handling code after calling usb_alloc_urb.

Signed-off-by: Zhouyang Jia 
---
v1->v2:
- Fix memory leak.
v2->v3:
- Release memory in error path.
---
 drivers/staging/rtl8192u/r8192U_core.c | 24 +++-
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/rtl8192u/r8192U_core.c 
b/drivers/staging/rtl8192u/r8192U_core.c
index 7a0dbc0..1c980e9 100644
--- a/drivers/staging/rtl8192u/r8192U_core.c
+++ b/drivers/staging/rtl8192u/r8192U_core.c
@@ -1649,12 +1649,12 @@ static short rtl8192_usb_initendpoints(struct 
net_device *dev)
for (i = 0; i < (MAX_RX_URB + 1); i++) {
priv->rx_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
if (!priv->rx_urb[i])
-   return -ENOMEM;
+   goto out_release_mem;
 
priv->rx_urb[i]->transfer_buffer =
kmalloc(RX_URB_SIZE, GFP_KERNEL);
if (!priv->rx_urb[i]->transfer_buffer)
-   return -ENOMEM;
+   goto out_release_mem;
 
priv->rx_urb[i]->transfer_buffer_length = RX_URB_SIZE;
}
@@ -1666,9 +1666,13 @@ static short rtl8192_usb_initendpoints(struct net_device 
*dev)
void *oldaddr, *newaddr;
 
priv->rx_urb[16] = usb_alloc_urb(0, GFP_KERNEL);
+   if (!priv->rx_urb[16])
+   goto out_release_mem;
+
priv->oldaddr = kmalloc(16, GFP_KERNEL);
if (!priv->oldaddr)
-   return -ENOMEM;
+   goto out_release_mem;
+
oldaddr = priv->oldaddr;
align = ((long)oldaddr) & 3;
if (align) {
@@ -1686,17 +1690,19 @@ static short rtl8192_usb_initendpoints(struct 
net_device *dev)
priv->pp_rxskb = kcalloc(MAX_RX_URB, sizeof(struct sk_buff *),
 GFP_KERNEL);
if (!priv->pp_rxskb) {
-   kfree(priv->rx_urb);
-
-   priv->pp_rxskb = NULL;
-   priv->rx_urb = NULL;
-
DMESGE("Endpoint Alloc Failure");
-   return -ENOMEM;
+   goto out_release_mem;
}
 
netdev_dbg(dev, "End of initendpoints\n");
return 0;
+
+out_release_mem:
+   for (i = 0; i < (MAX_RX_URB + 1); i++)
+   kfree(priv->rx_urb[i]);
+   kfree(priv->rx_urb);
+   priv->rx_urb = NULL;
+   return -ENOMEM;
 }
 
 #ifdef THOMAS_BEACON
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2] staging: rtl8192u: add error handling for usb_alloc_urb

2018-06-15 Thread Zhouyang Jia
When usb_alloc_urb fails, the lack of error-handling code may
cause unexpected results.

This patch adds error-handling code after calling usb_alloc_urb.

Signed-off-by: Zhouyang Jia 
---
v1->v2:
- Fix memory leak.
---
 drivers/staging/rtl8192u/r8192U_core.c | 18 +++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/rtl8192u/r8192U_core.c 
b/drivers/staging/rtl8192u/r8192U_core.c
index 7a0dbc0..6afab4e 100644
--- a/drivers/staging/rtl8192u/r8192U_core.c
+++ b/drivers/staging/rtl8192u/r8192U_core.c
@@ -1648,13 +1648,17 @@ static short rtl8192_usb_initendpoints(struct 
net_device *dev)
 #ifndef JACKSON_NEW_RX
for (i = 0; i < (MAX_RX_URB + 1); i++) {
priv->rx_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
-   if (!priv->rx_urb[i])
+   if (!priv->rx_urb[i]) {
+   kfree(priv->rx_urb);
return -ENOMEM;
+   }
 
priv->rx_urb[i]->transfer_buffer =
kmalloc(RX_URB_SIZE, GFP_KERNEL);
-   if (!priv->rx_urb[i]->transfer_buffer)
+   if (!priv->rx_urb[i]->transfer_buffer) {
+   kfree(priv->rx_urb);
return -ENOMEM;
+   }
 
priv->rx_urb[i]->transfer_buffer_length = RX_URB_SIZE;
}
@@ -1666,9 +1670,17 @@ static short rtl8192_usb_initendpoints(struct net_device 
*dev)
void *oldaddr, *newaddr;
 
priv->rx_urb[16] = usb_alloc_urb(0, GFP_KERNEL);
+   if (!priv->rx_urb[16]) {
+   kfree(priv->rx_urb);
+   return -ENOMEM;
+   }
+
priv->oldaddr = kmalloc(16, GFP_KERNEL);
-   if (!priv->oldaddr)
+   if (!priv->oldaddr) {
+   kfree(priv->rx_urb);
return -ENOMEM;
+   }
+
oldaddr = priv->oldaddr;
align = ((long)oldaddr) & 3;
if (align) {
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2] staging: gdm724x: add error handling for nlmsg_put

2018-06-14 Thread Zhouyang Jia
When nlmsg_put fails, the lack of error-handling code may
cause unexpected results.

This patch adds error-handling code after calling nlmsg_put.

Signed-off-by: Zhouyang Jia 
---
v1->v2:
- Add some cleanup
---
 drivers/staging/gdm724x/netlink_k.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/drivers/staging/gdm724x/netlink_k.c 
b/drivers/staging/gdm724x/netlink_k.c
index abe2425..16da03b 100644
--- a/drivers/staging/gdm724x/netlink_k.c
+++ b/drivers/staging/gdm724x/netlink_k.c
@@ -119,6 +119,11 @@ int netlink_send(struct sock *sock, int group, u16 type, 
void *msg, int len)
seq++;
 
nlh = nlmsg_put(skb, 0, seq, type, len, 0);
+   if (!nlh) {
+   kfree_skb(skb);
+   return -EMSGSIZE;
+   }
+
memcpy(NLMSG_DATA(nlh), msg, len);
NETLINK_CB(skb).portid = 0;
NETLINK_CB(skb).dst_group = 0;
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: lustre: add error handling for try_module_get

2018-06-11 Thread Zhouyang Jia
When try_module_get fails, the lack of error-handling code may
cause unexpected results.

This patch adds error-handling code after calling try_module_get.

Signed-off-by: Zhouyang Jia 
---
 drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c 
b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
index 7086678..72a42bd 100644
--- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
+++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
@@ -2422,7 +2422,10 @@ ksocknal_base_startup(void)
 
/* flag lists/ptrs/locks initialised */
ksocknal_data.ksnd_init = SOCKNAL_INIT_DATA;
-   try_module_get(THIS_MODULE);
+   if (!try_module_get(THIS_MODULE)) {
+   CERROR("%s: cannot get module\n", __func__);
+   goto failed;
+   }
 
ksocknal_data.ksnd_sched_info = cfs_percpt_alloc(lnet_cpt_table(),
 sizeof(*info));
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: comedi: add error handling for vmap

2018-06-11 Thread Zhouyang Jia
When vmap fails, the lack of error-handling code may
cause unexpected results.

This patch adds error-handling code after calling vmap.

Signed-off-by: Zhouyang Jia 
---
 drivers/staging/comedi/comedi_buf.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/comedi/comedi_buf.c 
b/drivers/staging/comedi/comedi_buf.c
index f693c2c..5e48693 100644
--- a/drivers/staging/comedi/comedi_buf.c
+++ b/drivers/staging/comedi/comedi_buf.c
@@ -132,9 +132,12 @@ static void __comedi_buf_alloc(struct comedi_device *dev,
spin_unlock_irqrestore(>spin_lock, flags);
 
/* vmap the prealloc_buf if all the pages were allocated */
-   if (i == n_pages)
+   if (i == n_pages) {
async->prealloc_buf = vmap(pages, n_pages, VM_MAP,
   COMEDI_PAGE_PROTECTION);
+   if (!async->prealloc_buf)
+   dev_err(dev->class_dev, "failed to vmap pages\n");
+   }
 
vfree(pages);
 }
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: rtl8712: add error handling for register_netdev

2018-06-11 Thread Zhouyang Jia
When register_netdev fails, the lack of error-handling code may
cause unexpected results.

This patch adds error-handling code after calling register_netdev.

Signed-off-by: Zhouyang Jia 
---
 drivers/staging/rtl8712/hal_init.c | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/rtl8712/hal_init.c 
b/drivers/staging/rtl8712/hal_init.c
index 2a3f074..2b47e75 100644
--- a/drivers/staging/rtl8712/hal_init.c
+++ b/drivers/staging/rtl8712/hal_init.c
@@ -40,6 +40,7 @@
 static void rtl871x_load_fw_cb(const struct firmware *firmware, void *context)
 {
struct _adapter *padapter = context;
+   int rc;
 
complete(>rtl8712_fw_ready);
if (!firmware) {
@@ -53,7 +54,12 @@ static void rtl871x_load_fw_cb(const struct firmware 
*firmware, void *context)
}
padapter->fw = firmware;
/* firmware available - start netdev */
-   register_netdev(padapter->pnetdev);
+   rc = register_netdev(padapter->pnetdev);
+   if (rc) {
+   struct usb_device *udev = padapter->dvobjpriv.pusbdev;
+
+   dev_err(>dev, "r8712u: Unable to register netdev\n");
+   }
 }
 
 static const char firmware_file[] = "rtlwifi/rtl8712u.bin";
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: rtl8192u: add error handling for usb_alloc_urb

2018-06-11 Thread Zhouyang Jia
When usb_alloc_urb fails, the lack of error-handling code may
cause unexpected results.

This patch adds error-handling code after calling usb_alloc_urb.

Signed-off-by: Zhouyang Jia 
---
 drivers/staging/rtl8192u/r8192U_core.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/staging/rtl8192u/r8192U_core.c 
b/drivers/staging/rtl8192u/r8192U_core.c
index 7a0dbc0..3f09615 100644
--- a/drivers/staging/rtl8192u/r8192U_core.c
+++ b/drivers/staging/rtl8192u/r8192U_core.c
@@ -1666,6 +1666,9 @@ static short rtl8192_usb_initendpoints(struct net_device 
*dev)
void *oldaddr, *newaddr;
 
priv->rx_urb[16] = usb_alloc_urb(0, GFP_KERNEL);
+   if (!priv->rx_urb[16])
+   return -ENOMEM;
+
priv->oldaddr = kmalloc(16, GFP_KERNEL);
if (!priv->oldaddr)
return -ENOMEM;
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: gdm724x: add error handling for nlmsg_put

2018-06-10 Thread Zhouyang Jia
When nlmsg_put fails, the lack of error-handling code may
cause unexpected results.

This patch adds error-handling code after calling nlmsg_put.

Signed-off-by: Zhouyang Jia 
---
 drivers/staging/gdm724x/netlink_k.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/staging/gdm724x/netlink_k.c 
b/drivers/staging/gdm724x/netlink_k.c
index abe2425..4623140 100644
--- a/drivers/staging/gdm724x/netlink_k.c
+++ b/drivers/staging/gdm724x/netlink_k.c
@@ -119,6 +119,9 @@ int netlink_send(struct sock *sock, int group, u16 type, 
void *msg, int len)
seq++;
 
nlh = nlmsg_put(skb, 0, seq, type, len, 0);
+   if (!nlh)
+   return -EMSGSIZE;
+
memcpy(NLMSG_DATA(nlh), msg, len);
NETLINK_CB(skb).portid = 0;
NETLINK_CB(skb).dst_group = 0;
-- 
2.7.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel