diff mbox series

wifi: mt76: mt7921: avoid undesired changes of the preset regulatory domain

Message ID 20240412085357.13756-1-mingyen.hsieh@mediatek.com (mailing list archive)
State New
Headers show
Series wifi: mt76: mt7921: avoid undesired changes of the preset regulatory domain | expand

Commit Message

Mingyen Hsieh April 12, 2024, 8:53 a.m. UTC
From: Leon Yen <leon.yen@mediatek.com>

Some countries have strict RF restrictions where changing the regulatory
domain dynamically based on the connected AP is not acceptable.
This patch disables Beacon country IE hinting when a valid country code
is set from usersland (e.g., by system using iw or CRDA).

Signed-off-by: Leon Yen <leon.yen@mediatek.com>
Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
---
 drivers/net/wireless/mediatek/mt76/mt7921/init.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Nicolas Escande April 12, 2024, 9:27 a.m. UTC | #1
On Fri Apr 12, 2024 at 10:53 AM CEST, Mingyen Hsieh wrote:
> From: Leon Yen <leon.yen@mediatek.com>
>
> Some countries have strict RF restrictions where changing the regulatory
> domain dynamically based on the connected AP is not acceptable.
> This patch disables Beacon country IE hinting when a valid country code
> is set from usersland (e.g., by system using iw or CRDA).

I always had trouble fully understanding the regulation but isn't the country
code IE sole purpose to adapt the regulatory of the client ? 

>
> Signed-off-by: Leon Yen <leon.yen@mediatek.com>
> Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
> ---
>  drivers/net/wireless/mediatek/mt76/mt7921/init.c | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> index ef0c721d26e3..3c9a5fcd6924 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> @@ -135,6 +135,13 @@ mt7921_regd_notifier(struct wiphy *wiphy,
>  	dev->mt76.region = request->dfs_region;
>  	dev->country_ie_env = request->country_ie_env;
>  
> +	if (request->initiator == NL80211_REGDOM_SET_BY_USER) {
> +		if (dev->mt76.alpha2[0] == '0' && dev->mt76.alpha2[1] == '0')
> +			wiphy->regulatory_flags &= ~REGULATORY_COUNTRY_IE_IGNORE;
> +		else
> +			wiphy->regulatory_flags |= REGULATORY_COUNTRY_IE_IGNORE;
> +	}
> +
>  	if (pm->suspended)
>  		return;
>
Mingyen Hsieh April 15, 2024, 5:53 a.m. UTC | #2
On Fri, 2024-04-12 at 11:27 +0200, Nicolas Escande wrote:
>  	 
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
>  On Fri Apr 12, 2024 at 10:53 AM CEST, Mingyen Hsieh wrote:
> > From: Leon Yen <leon.yen@mediatek.com>
> >
> > Some countries have strict RF restrictions where changing the
> regulatory
> > domain dynamically based on the connected AP is not acceptable.
> > This patch disables Beacon country IE hinting when a valid country
> code
> > is set from usersland (e.g., by system using iw or CRDA).
> 
> I always had trouble fully understanding the regulation but isn't the
> country
> code IE sole purpose to adapt the regulatory of the client ? 
> 
Hi Nicolas,

Yes, it is. However, if the users have set the specific country code
based on their region to the driver, they do not expect the country
setting to be changed by the country code IE as the AP cannot be
entirely trusted.

Best Regards,
Yen.

> >
> > Signed-off-by: Leon Yen <leon.yen@mediatek.com>
> > Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
> > ---
> >  drivers/net/wireless/mediatek/mt76/mt7921/init.c | 7 +++++++
> >  1 file changed, 7 insertions(+)
> >
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > index ef0c721d26e3..3c9a5fcd6924 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > @@ -135,6 +135,13 @@ mt7921_regd_notifier(struct wiphy *wiphy,
> >  dev->mt76.region = request->dfs_region;
> >  dev->country_ie_env = request->country_ie_env;
> >  
> > +if (request->initiator == NL80211_REGDOM_SET_BY_USER) {
> > +if (dev->mt76.alpha2[0] == '0' && dev->mt76.alpha2[1] == '0')
> > +wiphy->regulatory_flags &= ~REGULATORY_COUNTRY_IE_IGNORE;
> > +else
> > +wiphy->regulatory_flags |= REGULATORY_COUNTRY_IE_IGNORE;
> > +}
> > +
> >  if (pm->suspended)
> >  return;
> >  
>
Nicolas Escande April 15, 2024, 10:26 a.m. UTC | #3
On Mon Apr 15, 2024 at 7:53 AM CEST, Mingyen Hsieh (謝明諺) wrote:
> On Fri, 2024-04-12 at 11:27 +0200, Nicolas Escande wrote:
> >  	 
> > External email : Please do not click links or open attachments until
> > you have verified the sender or the content.
> >  On Fri Apr 12, 2024 at 10:53 AM CEST, Mingyen Hsieh wrote:
> > > From: Leon Yen <leon.yen@mediatek.com>
> > >
> > > Some countries have strict RF restrictions where changing the
> > regulatory
> > > domain dynamically based on the connected AP is not acceptable.
> > > This patch disables Beacon country IE hinting when a valid country
> > code
> > > is set from usersland (e.g., by system using iw or CRDA).
> > 
> > I always had trouble fully understanding the regulation but isn't the
> > country
> > code IE sole purpose to adapt the regulatory of the client ? 
> > 
> Hi Nicolas,
>
> Yes, it is. However, if the users have set the specific country code
> based on their region to the driver, they do not expect the country
> setting to be changed by the country code IE as the AP cannot be
> entirely trusted.

Hi,

In AP mode, I understand that the hardware/firmware (and so user mode to some
extend) is the source of truth about which country/market the product has passed
certification and what not. Thus the country code of an AP should be trusted.
If you put an AP from another market at some place, you are responsible for that

But in STA mode the end user should not need to know which regulation follow,
right ? The AP's Country code IE is where the sta gets the final info. So no,
the AP should be trusted, and the user should not (and not the other way around)

Of course, I am no an expert on this. I just want to check if there was some
though behind this change. You guys make Wifi chips, you know what you are doing

Thanks
>
> Best Regards,
> Yen.
>
> > >
> > > Signed-off-by: Leon Yen <leon.yen@mediatek.com>
> > > Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
> > > ---
> > >  drivers/net/wireless/mediatek/mt76/mt7921/init.c | 7 +++++++
> > >  1 file changed, 7 insertions(+)
> > >
> > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > > index ef0c721d26e3..3c9a5fcd6924 100644
> > > --- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > > @@ -135,6 +135,13 @@ mt7921_regd_notifier(struct wiphy *wiphy,
> > >  dev->mt76.region = request->dfs_region;
> > >  dev->country_ie_env = request->country_ie_env;
> > >  
> > > +if (request->initiator == NL80211_REGDOM_SET_BY_USER) {
> > > +if (dev->mt76.alpha2[0] == '0' && dev->mt76.alpha2[1] == '0')
> > > +wiphy->regulatory_flags &= ~REGULATORY_COUNTRY_IE_IGNORE;
> > > +else
> > > +wiphy->regulatory_flags |= REGULATORY_COUNTRY_IE_IGNORE;
> > > +}
> > > +
> > >  if (pm->suspended)
> > >  return;
> > >  
> >
Mingyen Hsieh April 22, 2024, 6:32 a.m. UTC | #4
On Mon, 2024-04-15 at 12:26 +0200, Nicolas Escande wrote:
>  	 
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
>  On Mon Apr 15, 2024 at 7:53 AM CEST, Mingyen Hsieh (謝明諺) wrote:
> > On Fri, 2024-04-12 at 11:27 +0200, Nicolas Escande wrote:
> > >   
> > > External email : Please do not click links or open attachments
> until
> > > you have verified the sender or the content.
> > >  On Fri Apr 12, 2024 at 10:53 AM CEST, Mingyen Hsieh wrote:
> > > > From: Leon Yen <leon.yen@mediatek.com>
> > > >
> > > > Some countries have strict RF restrictions where changing the
> > > regulatory
> > > > domain dynamically based on the connected AP is not acceptable.
> > > > This patch disables Beacon country IE hinting when a valid
> country
> > > code
> > > > is set from usersland (e.g., by system using iw or CRDA).
> > > 
> > > I always had trouble fully understanding the regulation but isn't
> the
> > > country
> > > code IE sole purpose to adapt the regulatory of the client ? 
> > > 
> > Hi Nicolas,
> >
> > Yes, it is. However, if the users have set the specific country
> code
> > based on their region to the driver, they do not expect the country
> > setting to be changed by the country code IE as the AP cannot be
> > entirely trusted.
> 
> Hi,
> 
> In AP mode, I understand that the hardware/firmware (and so user mode
> to some
> extend) is the source of truth about which country/market the product
> has passed
> certification and what not. Thus the country code of an AP should be
> trusted.
> If you put an AP from another market at some place, you are
> responsible for that
> 
> But in STA mode the end user should not need to know which regulation
> follow,
> right ? The AP's Country code IE is where the sta gets the final
> info. So no,
> the AP should be trusted, and the user should not (and not the other
> way around)
> 
> Of course, I am no an expert on this. I just want to check if there
> was some
> though behind this change. You guys make Wifi chips, you know what
> you are doing
> 
> Thanks

Hi,

Sorry for late response. Firstly, the "users" for driver doesn't mean
end users here; instead, it means the freamework of a Linux based
operation system that set the country code via nl80211. Some devices
shipped with a preset country code setting and set it to the driver
during boot by using iw or CRDA, as mentioned in the commit message.
These devices may get local RF certificated only with their preset
country setting, so manufacturers do not anticipate any changes to the
country setting.

Secondly, some APs with incorrect country settings may be placed in a
public area either accidentally or intentionally. The devices connected
to those APs could potentially violate the local RF rules if beacon
country IE hinting is not disabled in this situation.

This patch tries to solve the issue described above by disabling beacon
country IE hinting on devices coming with preset country settings. Of
course, the country IE hinting remains enabled on devices lacking
preset country code settings to adapt the regulatory domain information
based on the connected AP.

Thanks

> >
> > Best Regards,
> > Yen.
> >
> > > >
> > > > Signed-off-by: Leon Yen <leon.yen@mediatek.com>
> > > > Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
> > > > ---
> > > >  drivers/net/wireless/mediatek/mt76/mt7921/init.c | 7 +++++++
> > > >  1 file changed, 7 insertions(+)
> > > >
> > > > diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > > b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > > > index ef0c721d26e3..3c9a5fcd6924 100644
> > > > --- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > > > +++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
> > > > @@ -135,6 +135,13 @@ mt7921_regd_notifier(struct wiphy *wiphy,
> > > >  dev->mt76.region = request->dfs_region;
> > > >  dev->country_ie_env = request->country_ie_env;
> > > >  
> > > > +if (request->initiator == NL80211_REGDOM_SET_BY_USER) {
> > > > +if (dev->mt76.alpha2[0] == '0' && dev->mt76.alpha2[1] == '0')
> > > > +wiphy->regulatory_flags &= ~REGULATORY_COUNTRY_IE_IGNORE;
> > > > +else
> > > > +wiphy->regulatory_flags |= REGULATORY_COUNTRY_IE_IGNORE;
> > > > +}
> > > > +
> > > >  if (pm->suspended)
> > > >  return;
> > > >  
> > > 
>
diff mbox series

Patch

diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
index ef0c721d26e3..3c9a5fcd6924 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
@@ -135,6 +135,13 @@  mt7921_regd_notifier(struct wiphy *wiphy,
 	dev->mt76.region = request->dfs_region;
 	dev->country_ie_env = request->country_ie_env;
 
+	if (request->initiator == NL80211_REGDOM_SET_BY_USER) {
+		if (dev->mt76.alpha2[0] == '0' && dev->mt76.alpha2[1] == '0')
+			wiphy->regulatory_flags &= ~REGULATORY_COUNTRY_IE_IGNORE;
+		else
+			wiphy->regulatory_flags |= REGULATORY_COUNTRY_IE_IGNORE;
+	}
+
 	if (pm->suspended)
 		return;