Initial commit
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Build Kernel / Build all affected Kernels (push) Has been cancelled
				
			
		
			
				
	
				Build all core packages / Build all core packages for selected target (push) Has been cancelled
				
			
		
			
				
	
				Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
				
			
		
			
				
	
				Build Toolchains / Build Toolchains for each target (push) Has been cancelled
				
			
		
			
				
	
				Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
				
			
		
			
				
	
				Coverity scan build / Coverity x86/64 build (push) Has been cancelled
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Build Kernel / Build all affected Kernels (push) Has been cancelled
				
			Build all core packages / Build all core packages for selected target (push) Has been cancelled
				
			Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
				
			Build Toolchains / Build Toolchains for each target (push) Has been cancelled
				
			Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
				
			Coverity scan build / Coverity x86/64 build (push) Has been cancelled
				
			This commit is contained in:
		| @@ -0,0 +1,49 @@ | ||||
| From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com> | ||||
| Date: Thu, 9 Jul 2015 00:07:59 +0200 | ||||
| Subject: [PATCH] brcmfmac: workaround bug with some inconsistent BSSes state | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
|  | ||||
| Signed-off-by: Rafał Miłecki <zajec5@gmail.com> | ||||
| --- | ||||
|  | ||||
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | ||||
| @@ -980,8 +980,36 @@ static struct wireless_dev *brcmf_cfg802 | ||||
|  	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy); | ||||
|  	struct brcmf_pub *drvr = cfg->pub; | ||||
|  	struct wireless_dev *wdev; | ||||
| +	struct net_device *dev; | ||||
|  	int err; | ||||
|   | ||||
| +	/* | ||||
| +	 * There is a bug with in-firmware BSS management. When adding virtual | ||||
| +	 * interface brcmfmac first tells firmware to create new BSS and then | ||||
| +	 * it creates new struct net_device. | ||||
| +	 * | ||||
| +	 * If creating/registering netdev(ice) fails, BSS remains in some bugged | ||||
| +	 * state. It conflicts with existing BSSes by overtaking their auth | ||||
| +	 * requests. | ||||
| +	 * | ||||
| +	 * It results in one BSS (addresss X) sending beacons and another BSS | ||||
| +	 * (address Y) replying to authentication requests. This makes interface | ||||
| +	 * unusable as AP. | ||||
| +	 * | ||||
| +	 * To workaround this bug we may try to guess if register_netdev(ice) | ||||
| +	 * will fail. The most obvious case is using interface name that already | ||||
| +	 * exists. This is actually quite likely with brcmfmac & some user space | ||||
| +	 * scripts as brcmfmac doesn't allow deleting virtual interfaces. | ||||
| +	 * So this bug can be triggered even by something trivial like: | ||||
| +	 * iw dev wlan0 delete | ||||
| +	 * iw phy phy0 interface add wlan0 type __ap | ||||
| +	 */ | ||||
| +	dev = dev_get_by_name(&init_net, name); | ||||
| +	if (dev) { | ||||
| +		dev_put(dev); | ||||
| +		return ERR_PTR(-ENFILE); | ||||
| +	} | ||||
| + | ||||
|  	brcmf_dbg(TRACE, "enter: %s type %d\n", name, type); | ||||
|  	err = brcmf_vif_add_validate(wiphy_to_cfg(wiphy), type); | ||||
|  	if (err) { | ||||
		Reference in New Issue
	
	Block a user
	 domenico
					domenico