2019-08-04 03:57:37

by Hariprasad Kelam

[permalink] [raw]
Subject: [PATCH] staging: rtl8192e: Make use kmemdup

As kmemdup API does kmalloc + memcpy . We can make use of it instead of
calling kmalloc and memcpy independetly.

Signed-off-by: Hariprasad Kelam <[email protected]>
---
drivers/staging/rtl8192e/rtllib_softmac.c | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/rtl8192e/rtllib_softmac.c b/drivers/staging/rtl8192e/rtllib_softmac.c
index e29e8d6..9b8b301 100644
--- a/drivers/staging/rtl8192e/rtllib_softmac.c
+++ b/drivers/staging/rtl8192e/rtllib_softmac.c
@@ -1382,10 +1382,8 @@ rtllib_association_req(struct rtllib_network *beacon,
ieee->assocreq_ies = NULL;
ies = &(hdr->info_element[0].id);
ieee->assocreq_ies_len = (skb->data + skb->len) - ies;
- ieee->assocreq_ies = kmalloc(ieee->assocreq_ies_len, GFP_ATOMIC);
- if (ieee->assocreq_ies)
- memcpy(ieee->assocreq_ies, ies, ieee->assocreq_ies_len);
- else {
+ ieee->assocreq_ies = kmemdup(ies, ieee->assocreq_ies_len, GFP_ATOMIC);
+ if (!ieee->assocreq_ies) {
netdev_info(ieee->dev,
"%s()Warning: can't alloc memory for assocreq_ies\n",
__func__);
@@ -2259,12 +2257,10 @@ rtllib_rx_assoc_resp(struct rtllib_device *ieee, struct sk_buff *skb,
ieee->assocresp_ies = NULL;
ies = &(assoc_resp->info_element[0].id);
ieee->assocresp_ies_len = (skb->data + skb->len) - ies;
- ieee->assocresp_ies = kmalloc(ieee->assocresp_ies_len,
+ ieee->assocresp_ies = kmemdup(ies,
+ ieee->assocresp_ies_len,
GFP_ATOMIC);
- if (ieee->assocresp_ies)
- memcpy(ieee->assocresp_ies, ies,
- ieee->assocresp_ies_len);
- else {
+ if (!ieee->assocresp_ies) {
netdev_info(ieee->dev,
"%s()Warning: can't alloc memory for assocresp_ies\n",
__func__);
--
2.7.4


2019-08-04 03:58:36

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] staging: rtl8192e: Make use kmemdup

On Sat, 2019-08-03 at 23:10 +0530, Hariprasad Kelam wrote:
> As kmemdup API does kmalloc + memcpy . We can make use of it instead of
> calling kmalloc and memcpy independetly.
[]
> diff --git a/drivers/staging/rtl8192e/rtllib_softmac.c b/drivers/staging/rtl8192e/rtllib_softmac.c
[]
> @@ -1382,10 +1382,8 @@ rtllib_association_req(struct rtllib_network *beacon,
> ieee->assocreq_ies = NULL;
> ies = &(hdr->info_element[0].id);
> ieee->assocreq_ies_len = (skb->data + skb->len) - ies;
> - ieee->assocreq_ies = kmalloc(ieee->assocreq_ies_len, GFP_ATOMIC);
> - if (ieee->assocreq_ies)
> - memcpy(ieee->assocreq_ies, ies, ieee->assocreq_ies_len);
> - else {
> + ieee->assocreq_ies = kmemdup(ies, ieee->assocreq_ies_len, GFP_ATOMIC);
> + if (!ieee->assocreq_ies) {
> netdev_info(ieee->dev,
> "%s()Warning: can't alloc memory for assocreq_ies\n",
> __func__);
> @@ -2259,12 +2257,10 @@ rtllib_rx_assoc_resp(struct rtllib_device *ieee, struct sk_buff *skb,
> ieee->assocresp_ies = NULL;
> ies = &(assoc_resp->info_element[0].id);
> ieee->assocresp_ies_len = (skb->data + skb->len) - ies;
> - ieee->assocresp_ies = kmalloc(ieee->assocresp_ies_len,
> + ieee->assocresp_ies = kmemdup(ies,
> + ieee->assocresp_ies_len,
> GFP_ATOMIC);
> - if (ieee->assocresp_ies)
> - memcpy(ieee->assocresp_ies, ies,
> - ieee->assocresp_ies_len);
> - else {
> + if (!ieee->assocresp_ies) {
> netdev_info(ieee->dev,
> "%s()Warning: can't alloc memory for assocresp_ies\n",
> __func__);

Could also remove the netdev_info() uses for allocation failures.
These are redundant as a dump_stack() is already done when OOM.


2019-08-04 04:07:09

by Hariprasad Kelam

[permalink] [raw]
Subject: Re: [PATCH] staging: rtl8192e: Make use kmemdup

On Sat, Aug 03, 2019 at 10:52:04AM -0700, Joe Perches wrote:
> On Sat, 2019-08-03 at 23:10 +0530, Hariprasad Kelam wrote:
> > As kmemdup API does kmalloc + memcpy . We can make use of it instead of
> > calling kmalloc and memcpy independetly.
> []
> > diff --git a/drivers/staging/rtl8192e/rtllib_softmac.c b/drivers/staging/rtl8192e/rtllib_softmac.c
> []
> > @@ -1382,10 +1382,8 @@ rtllib_association_req(struct rtllib_network *beacon,
> > ieee->assocreq_ies = NULL;
> > ies = &(hdr->info_element[0].id);
> > ieee->assocreq_ies_len = (skb->data + skb->len) - ies;
> > - ieee->assocreq_ies = kmalloc(ieee->assocreq_ies_len, GFP_ATOMIC);
> > - if (ieee->assocreq_ies)
> > - memcpy(ieee->assocreq_ies, ies, ieee->assocreq_ies_len);
> > - else {
> > + ieee->assocreq_ies = kmemdup(ies, ieee->assocreq_ies_len, GFP_ATOMIC);
> > + if (!ieee->assocreq_ies) {
> > netdev_info(ieee->dev,
> > "%s()Warning: can't alloc memory for assocreq_ies\n",
> > __func__);
> > @@ -2259,12 +2257,10 @@ rtllib_rx_assoc_resp(struct rtllib_device *ieee, struct sk_buff *skb,
> > ieee->assocresp_ies = NULL;
> > ies = &(assoc_resp->info_element[0].id);
> > ieee->assocresp_ies_len = (skb->data + skb->len) - ies;
> > - ieee->assocresp_ies = kmalloc(ieee->assocresp_ies_len,
> > + ieee->assocresp_ies = kmemdup(ies,
> > + ieee->assocresp_ies_len,
> > GFP_ATOMIC);
> > - if (ieee->assocresp_ies)
> > - memcpy(ieee->assocresp_ies, ies,
> > - ieee->assocresp_ies_len);
> > - else {
> > + if (!ieee->assocresp_ies) {
> > netdev_info(ieee->dev,
> > "%s()Warning: can't alloc memory for assocresp_ies\n",
> > __func__);
>
> Could also remove the netdev_info() uses for allocation failures.
> These are redundant as a dump_stack() is already done when OOM.
>
Sure will do.

Thanks,
Hariprasad k