Setting single rate in ath10k broken by "reject/clear user rate mask if not usable"

Oleksij Rempel linux at rempel-privat.de
Wed Oct 18 10:56:16 PDT 2017


Am 18.10.2017 um 16:50 schrieb Ben Greear:
> 
> 
> On 10/18/2017 12:33 AM, Johannes Berg wrote:
>> Hi,
>>
>>> The call to set the rate in the driver comes before the error
>>> check.
>>>
>>>     if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL)) {
>>>         ret = drv_set_bitrate_mask(local, sdata, mask);
>>>         if (ret) {
>>>             pr_err("%s: drv-set-bitrate-mask had error
>>> return: %d\n",
>>>                    sdata->dev->name, ret);
>>>             return ret;
>>>         }
>>>     }
>>>
>>>     /*
>>>      * If active validate the setting and reject it if it doesn't
>>> leave
>>>      * at least one basic rate usable, since we really have to be
>>> able
>>>      * to send something, and if we're an AP we have to be able to
>>> do
>>>      * so at a basic rate so that all clients can receive it.
>>>      */
>>>     if (rcu_access_pointer(sdata->vif.chanctx_conf) &&
>>>         sdata->vif.bss_conf.chandef.chan) {
>>>         u32 basic_rates = sdata->vif.bss_conf.basic_rates;
>>>         enum nl80211_band band = sdata-
>>>> vif.bss_conf.chandef.chan->band;
>>>
>>>         if (!(mask->control[band].legacy & basic_rates)) {
>>>             #### I changed this code so I could set a
>>> single rate... --Ben
>>>             pr_err("%s:  WARNING: no legacy rates for
>>> band[%d] in set-bitrate-mask.\n",
>>>                    sdata->dev->name, band);
>>>         }
>>>     }
>>
>> Heh, that's just dumb. I guess I'll fix that by putting the test first,
>> no idea how that happened.
>>
>>>>
>>>>> So, I think we should relax this check, at least for ath10k.
>>>>
>>>> Well, yes and no. I don't think we should make ath10k special here,
>>>> and
>>>> this fixes a real problem - namely that you can set up the system
>>>> so
>>>> that you have no usable rates at all, and then you just get a
>>>> WARN_ON
>>>> and start using the lowest possible rate...
>>>
>>> Well, there are a million ways to set up a broken system,
>>
>> True, but this one actually happened in practice, for some reason, and
>> stopping the user from constantly shooting themselves in the foot seems
>> like a good idea to me. Especially if the user (or application) can't
>> really even know what they're getting into.
>>
>> Now, the case in question was _client_ mode, but still.
>>
>>> and setting a single rate has a useful purpose, especially with
>>> ath10k since it has such limited rate-setting capabilities.
>>
>> You're stretching the definition of "useful purpose" a bit here though,
>> you're about the only one who's ever going to need to set a single
>> rate.
> 
> People trying to do regulatory testing want this feature, and other people
> that are not me also like to test with specific rates.  Still a 
> small-ish set
> of people, but bigger than just me at least.

Till now i was interviewing different people who was asking for this for 
ath9k-htc. So I would say we have:
- academical researchers
- testers
- R&D
- exploit and penetration testers
- HAM
- just hackers

As for me, it sounds a s lot.


-- 
Regards,
Oleksij



More information about the ath10k mailing list