diff mbox series

[v1] iwlwifi: fix warnings produced by kernel debug options

Message ID 20211110215744.5487-1-lukasz.bartosik@semihalf.com (mailing list archive)
State Accepted
Commit f5cecf1d4c5ff76172928bc32e99ca56a5ca2f56
Delegated to: Kalle Valo
Headers show
Series [v1] iwlwifi: fix warnings produced by kernel debug options | expand

Commit Message

Łukasz Bartosik Nov. 10, 2021, 9:57 p.m. UTC
From: Łukasz Bartosik <lb@semihalf.com>

Fix warnings produced by:
- lockdep_assert_wiphy() in function reg_process_self_managed_hint(),
- wiphy_dereference() in function iwl_mvm_init_fw_regd().
Both function are expected to be called in critical section.

The warnings were discovered when running v5.15 kernel
with debug options enabled:

1)
Hardware name: Google Delbin/Delbin
RIP: 0010:reg_process_self_managed_hint+0x254/0x347 [cfg80211]
...
Call Trace:
regulatory_set_wiphy_regd_sync+0x3d/0xb0
iwl_mvm_init_mcc+0x49d/0x5a2
iwl_op_mode_mvm_start+0x1b58/0x2507
? iwl_mvm_reprobe_wk+0x94/0x94
_iwl_op_mode_start+0x146/0x1a3
iwl_opmode_register+0xda/0x13d
init_module+0x28/0x1000

2)
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c:263 suspicious rcu_dereference_protected() usage!
...
Hardware name: Google Delbin/Delbin, BIOS Google_Delbin
Call Trace:
dump_stack_lvl+0xb1/0xe6
iwl_mvm_init_fw_regd+0x2e7/0x379
iwl_mvm_init_mcc+0x2c6/0x5a2
iwl_op_mode_mvm_start+0x1b58/0x2507
? iwl_mvm_reprobe_wk+0x94/0x94
_iwl_op_mode_start+0x146/0x1a3
iwl_opmode_register+0xda/0x13d
init_module+0x28/0x100

Fixes: a05829a7222e ("cfg80211: avoid holding the RTNL when calling the driver")
Signed-off-by: Łukasz Bartosik <lb@semihalf.com>
---
 drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Luca Coelho Nov. 12, 2021, 9:29 a.m. UTC | #1
On Wed, 2021-11-10 at 22:57 +0100, Lukasz Bartosik wrote:
> From: Łukasz Bartosik <lb@semihalf.com>
> 
> Fix warnings produced by:
> - lockdep_assert_wiphy() in function reg_process_self_managed_hint(),
> - wiphy_dereference() in function iwl_mvm_init_fw_regd().
> Both function are expected to be called in critical section.
> 
> The warnings were discovered when running v5.15 kernel
> with debug options enabled:
> 
> 1)
> Hardware name: Google Delbin/Delbin
> RIP: 0010:reg_process_self_managed_hint+0x254/0x347 [cfg80211]
> ...
> Call Trace:
> regulatory_set_wiphy_regd_sync+0x3d/0xb0
> iwl_mvm_init_mcc+0x49d/0x5a2
> iwl_op_mode_mvm_start+0x1b58/0x2507
> ? iwl_mvm_reprobe_wk+0x94/0x94
> _iwl_op_mode_start+0x146/0x1a3
> iwl_opmode_register+0xda/0x13d
> init_module+0x28/0x1000
> 
> 2)
> drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c:263 suspicious rcu_dereference_protected() usage!
> ...
> Hardware name: Google Delbin/Delbin, BIOS Google_Delbin
> Call Trace:
> dump_stack_lvl+0xb1/0xe6
> iwl_mvm_init_fw_regd+0x2e7/0x379
> iwl_mvm_init_mcc+0x2c6/0x5a2
> iwl_op_mode_mvm_start+0x1b58/0x2507
> ? iwl_mvm_reprobe_wk+0x94/0x94
> _iwl_op_mode_start+0x146/0x1a3
> iwl_opmode_register+0xda/0x13d
> init_module+0x28/0x100
> 
> Fixes: a05829a7222e ("cfg80211: avoid holding the RTNL when calling the driver")
> Signed-off-by: Łukasz Bartosik <lb@semihalf.com>
> ---
>  drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
> index 77ea2d0a3091..61dd75f9304d 100644
> --- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
> +++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
> @@ -687,6 +687,7 @@ static int iwl_mvm_start_get_nvm(struct iwl_mvm *mvm)
>  	int ret;
>  
>  	rtnl_lock();
> +	wiphy_lock(mvm->hw->wiphy);
>  	mutex_lock(&mvm->mutex);
>  
>  	ret = iwl_run_init_mvm_ucode(mvm);
> @@ -702,6 +703,7 @@ static int iwl_mvm_start_get_nvm(struct iwl_mvm *mvm)
>  		iwl_mvm_stop_device(mvm);
>  
>  	mutex_unlock(&mvm->mutex);
> +	wiphy_unlock(mvm->hw->wiphy);
>  	rtnl_unlock();
>  
>  	if (ret < 0)

Thanks! This somehow got lost when rebasing stuff from our internal
tree.

Kalle, assigning to you.  Can you please add a Cc: stable tag?

--
Cheers,
Luca.
Kalle Valo Nov. 22, 2021, 6:38 p.m. UTC | #2
Lukasz Bartosik <lb@semihalf.com> wrote:

> From: Łukasz Bartosik <lb@semihalf.com>
> 
> Fix warnings produced by:
> - lockdep_assert_wiphy() in function reg_process_self_managed_hint(),
> - wiphy_dereference() in function iwl_mvm_init_fw_regd().
> Both function are expected to be called in critical section.
> 
> The warnings were discovered when running v5.15 kernel
> with debug options enabled:
> 
> 1)
> Hardware name: Google Delbin/Delbin
> RIP: 0010:reg_process_self_managed_hint+0x254/0x347 [cfg80211]
> ...
> Call Trace:
> regulatory_set_wiphy_regd_sync+0x3d/0xb0
> iwl_mvm_init_mcc+0x49d/0x5a2
> iwl_op_mode_mvm_start+0x1b58/0x2507
> ? iwl_mvm_reprobe_wk+0x94/0x94
> _iwl_op_mode_start+0x146/0x1a3
> iwl_opmode_register+0xda/0x13d
> init_module+0x28/0x1000
> 
> 2)
> drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c:263 suspicious rcu_dereference_protected() usage!
> ...
> Hardware name: Google Delbin/Delbin, BIOS Google_Delbin
> Call Trace:
> dump_stack_lvl+0xb1/0xe6
> iwl_mvm_init_fw_regd+0x2e7/0x379
> iwl_mvm_init_mcc+0x2c6/0x5a2
> iwl_op_mode_mvm_start+0x1b58/0x2507
> ? iwl_mvm_reprobe_wk+0x94/0x94
> _iwl_op_mode_start+0x146/0x1a3
> iwl_opmode_register+0xda/0x13d
> init_module+0x28/0x100
> 
> Fixes: a05829a7222e ("cfg80211: avoid holding the RTNL when calling the driver")
> Signed-off-by: Łukasz Bartosik <lb@semihalf.com>

Patch applied to wireless-drivers.git, thanks.

f5cecf1d4c5f iwlwifi: fix warnings produced by kernel debug options
diff mbox series

Patch

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
index 77ea2d0a3091..61dd75f9304d 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/ops.c
@@ -687,6 +687,7 @@  static int iwl_mvm_start_get_nvm(struct iwl_mvm *mvm)
 	int ret;
 
 	rtnl_lock();
+	wiphy_lock(mvm->hw->wiphy);
 	mutex_lock(&mvm->mutex);
 
 	ret = iwl_run_init_mvm_ucode(mvm);
@@ -702,6 +703,7 @@  static int iwl_mvm_start_get_nvm(struct iwl_mvm *mvm)
 		iwl_mvm_stop_device(mvm);
 
 	mutex_unlock(&mvm->mutex);
+	wiphy_unlock(mvm->hw->wiphy);
 	rtnl_unlock();
 
 	if (ret < 0)