On Mon, Aug 20, 2018 at 09:37:05AM +0200, Johannes Berg wrote: > From: Johannes Berg <johannes.berg@xxxxxxxxx> > > Pointer arithmetic already adjusts by the size of the struct, > so the sizeof() calculation is wrong. This is basically the > same as Colin King's patch for similar code in the iwlwifi > driver. > > Fixes: 230ebaa189af ("cfg80211: read wmm rules from regulatory database") > Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx> > --- > net/wireless/reg.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/net/wireless/reg.c b/net/wireless/reg.c > index 4fc66a117b7d..283902974fbf 100644 > --- a/net/wireless/reg.c > +++ b/net/wireless/reg.c > @@ -452,8 +452,7 @@ reg_copy_regd(const struct ieee80211_regdomain *src_regd) > continue; > > regd->reg_rules[i].wmm_rule = d_wmm + > - (src_regd->reg_rules[i].wmm_rule - s_wmm) / > - sizeof(struct ieee80211_wmm_rule); > + (src_regd->reg_rules[i].wmm_rule - s_wmm); > } > return regd; > } As side note those pointer aritmetics related with rule->wmm_rule is really involuted in various places in reg.c . Seems would be better to just make wmm_rule part of iee80211_reg_rule structure like this: struct ieee80211_reg_rule { struct ieee80211_freq_range freq_range; struct ieee80211_power_rule power_rule; struct ieee80211_wmm_rule wmm_rule; u32 flags; u32 dfs_cac_ms; }; and use a flag to intdicate wmm_rule is valid. There should be no big memory overhead sice there are only few reg_rules for the regdomain. Or I'm wrong? Regards Stanislaw