staging: r8188eu: handle rtw_init_netdev_name() failure appropriately
PATCH v2 1/1 staging: r8188eu: handle rtw_init_netdev_name() failure appropriately
rtw_init_netdev_name() calls dev_alloc_name() which allocates the name for the device as per the given name format.
The name format is specified by the module parameter "ifname". It returns a negative err code if the format is invalid. Handle this error appropriately.
Cancel the timers ininitliazed by rtw_init_drv_sw() before calling rtw_free_drv_sw() and then proceed to free the adapter.
Also, if register_netdev() fails then goto free_drv_sw instead of goto handle_dualmac.
---v1->v2:
free the adapter and netdev instead of warning the user about allocation failure.
drivers/staging/r8188eu/os_dep/usb_intf.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
drivers/staging/r8188eu/os_dep/usb_intf.c +11 -2
@@ -399,7 +399,11 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,DBG_88E ("can't get autopm:\n" );/* alloc dev name after read efuse. */ -rtw_init_netdev_name (pnetdev, padapter->registrypriv.ifname); +if (rtw_init_netdev_name (pnetdev, padapter->registrypriv.ifname) <0 ) { +DBG_88E ("rtw_init_netdev_name failed, ifname:%s\n" , + padapter->registrypriv.ifname); + goto free_drv_sw; + }rtw_macaddr_cfg (padapter->eeprompriv.mac_addr);rtw_init_wifidirect_addrs (padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
@@ -409,7 +413,7 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,/* step 6. Tell the network stack we exist */ if (register_netdev (pnetdev) !=0 ) - goto handle_dualmac; + goto free_drv_sw;DBG_88E ("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n" , padapter->bDriverStopped
@@ -420,6 +424,11 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj, status = _SUCCESS; +free_drv_sw: +if (status != _SUCCESS) { +rtw_cancel_all_timer (padapter); +rtw_free_drv_sw (padapter); + } handle_dualmac:if (status != _SUCCESS)rtw_handle_dualmac (padapter,0 );
Signature · 1 line
2.30.2
Quoted 8 lines · Vihas Mak
rtw_init_netdev_name()callsdev_alloc_name()which allocates the name for the device as per the given name format.
The name format is specified by the module parameter "ifname". It returns a negative err code if the format is invalid. Handle this error appropriately.
Cancel the timers ininitliazed byrtw_init_drv_sw()before callingrtw_free_drv_sw()and then proceed to free the adapter.
Quoted 8 lines
Also, if
register_netdev()fails then gotofree_drv_swinstead of gotohandle_dualmac.Signed-off-by Vihas Mak <[email protected]>---
v1->v2:
free the adapter and netdev instead of warning the user about allocation failure.
Thanks!
Of course, all this code is staging code and terrible. This function is needlessly difficult to read/review.
TODO: re-write probe error handling
Step 1: Keep the success path and error path separate.
- status = _SUCCESS;
+ return padapter;
Step 2: Eliminate do-nothing-gotos. s/goto exit/return NULL/
Step 3: Delete the vfree(pnpi->priv); from rtw_free_netdev() and call
vfree(pnpi->priv); from probe and rtw_usb_if1_deinit() instead. Avoid a layering violation.
Step 4: Every allocation function needs a matching free function. Move
the rtw_cancel_all_timer() into the rtw_free_drv_sw() function. Open coding it is a layering violation.
Step 5: Get rid of the rtw_handle_dualmac() function. It has a bad
name and a global variable. What is the point of this function?
But that stuff is for later patches.
regards,
dan carpenter
Thanks for reviewing the patch Dan.
Quoted 1 line
Quoted 1 line
TODO: re-write probe error handling
Will submit a series of patches in upcoming days, based on the steps you provided.
Quoted 51 lines · Dan Carpenter
Quoted 8 lines · Vihas Mak
rtw_init_netdev_name()callsdev_alloc_name()which allocates the name for the device as per the given name format.
The name format is specified by the module parameter "ifname". It returns a negative err code if the format is invalid. Handle this error appropriately.
Cancel the timers ininitliazed byrtw_init_drv_sw()before callingrtw_free_drv_sw()and then proceed to free the adapter.Quoted 8 lines
Also, if
register_netdev()fails then gotofree_drv_swinstead of gotohandle_dualmac.Signed-off-by Vihas Mak <[email protected]>---
v1->v2:
free the adapter and netdev instead of warning the user about allocation failure.Thanks!
Reviewed-by Dan Carpenter <[email protected]>Of course, all this code is staging code and terrible. This function is needlessly difficult to read/review.
TODO: re-write probe error handling
Step 1: Keep the success path and error path separate.
(quoted diff) +1
-1- status = _SUCCESS; + return padapter;Step 2: Eliminate do-nothing-gotos. s/goto exit/return NULL/
Step 3: Delete the
vfree(pnpi->priv); fromrtw_free_netdev()and call
vfree(pnpi->priv); from probe andrtw_usb_if1_deinit()instead. Avoid a layering violation.Step 4: Every allocation function needs a matching free function. Move
thertw_cancel_all_timer()into thertw_free_drv_sw()function. Open coding it is a layering violation.Step 5: Get rid of the
rtw_handle_dualmac()function. It has a bad
name and a global variable. What is the point of this function?But that stuff is for later patches.
regards,
dan carpenter
Signature · 2 lines
Thanks, Vihas