Patch "staging: wilc1000: simplify vif[i]->ndev accesses" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
staging: wilc1000: simplify vif[i]->ndev accesses
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
staging-wilc1000-simplify-vif-ndev-accesses.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
735bb39ca3bed8469b3b3a42d8cc57bdb9fc4dd7Mon Sep 17 00:00:00 2001
From: Arnd Bergmann <[email protected]>
Date: Wed, 16 Nov 2016 16:07:10 +0100
Subject: staging: wilc1000: simplify vif[i]->ndev accesses
From: Arnd Bergmann <[email protected]>
commit 735bb39ca3bed8469b3b3a42d8cc57bdb9fc4dd7 upstream.
With gcc-7, I got a new warning for this driver:
wilc1000/linux_wlan.c: In function 'wilc_netdev_cleanup':wilc1000/linux_wlan.c:1224:15: error: 'vif[1]' may be used uninitialized in this function [-Werror=maybe-uninitialized] wilc1000/linux_wlan.c:1224:15: error: 'vif[0]' may be used uninitialized in this function [-Werror=maybe-uninitialized]
A closer look at the function reveals that it's more complex than it needs to be, given that based on how the device is created we always get
netdev_priv(vif->ndev) == vif
Based on this assumption, I found a few other places in the same file that can be simplified. That code appears to be a relic from times when the assumption above was not valid.
--- drivers/staging/wilc1000/linux_wlan.c | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-)
drivers/staging/wilc1000/linux_wlan.c +9 -25
@@ -269,23 +269,12 @@ static struct net_device *get_if_handlerint wilc_wlan_set_bssid (struct net_device *wilc_netdev,u8 *bssid,u8 mode) { -int i =0 ; -int ret =-1 ; -struct wilc_vif *vif; -struct wilc *wilc; - - vif =netdev_priv (wilc_netdev); - wilc = vif->wilc; +struct wilc_vif *vif =netdev_priv (wilc_netdev); -for (i =0 ; i < wilc->vif_num; i++) -if (wilc->vif[i]->ndev == wilc_netdev) { -memcpy (wilc->vif[i]->bssid, bssid,6 ); - wilc->vif[i]->mode = mode; - ret =0 ; -break ; - } +memcpy (vif->bssid, bssid,6 ); + vif->mode = mode; -return ret; +return 0 ; }int wilc_wlan_get_num_conn_ifcs (struct wilc *wilc)
@@ -1212,16 +1201,11 @@ void WILC_WFI_mgmt_rx(struct wilc *wilc,void wilc_netdev_cleanup (struct wilc *wilc) { -int i =0 ; -struct wilc_vif *vif[NUM_CONCURRENT_IFC ]; +int i; -if (wilc && (wilc->vif[0 ]->ndev || wilc->vif[1 ]->ndev)) { +if (wilc && (wilc->vif[0 ]->ndev || wilc->vif[1 ]->ndev))unregister_inetaddr_notifier (&g_dev_notifier); -for (i =0 ; i <NUM_CONCURRENT_IFC ; i++) - vif[i] =netdev_priv (wilc->vif[i]->ndev); - } -if (wilc && wilc->firmware) {release_firmware (wilc->firmware); wilc->firmware =NULL ;
@@ -1230,7 +1214,7 @@ void wilc_netdev_cleanup(struct wilc *wiif (wilc && (wilc->vif[0 ]->ndev || wilc->vif[1 ]->ndev)) {for (i =0 ; i <NUM_CONCURRENT_IFC ; i++)if (wilc->vif[i]->ndev) -if (vif[i]->mac_opened) +if (wilc->vif[i]->mac_opened)wilc_mac_close (wilc->vif[i]->ndev);for (i =0 ; i <NUM_CONCURRENT_IFC ; i++) {
@@ -1278,9 +1262,9 @@ int wilc_netdev_init(struct wilc **wilc, vif->idx = wl->vif_num; vif->wilc = *wilc; + vif->ndev = ndev; wl->vif[i] = vif; - wl->vif[wl->vif_num]->ndev = ndev; - wl->vif_num++; + wl->vif_num = i; ndev->netdev_ops = &wilc_netdev_ops; {
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/staging-wilc1000-simplify-vif-ndev-accesses.patch queue-4.9/scsi-isci-avoid-array-subscript-warning.patch