brcmutil: assure unused bits are cleared in 11n chanspec
authorArend van Spriel <arend@broadcom.com>
Tue, 27 May 2014 10:56:25 +0000 (12:56 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 29 May 2014 17:10:25 +0000 (13:10 -0400)
The firmware channel specification is a bitfield using a
16-bit integer, but only 14 lsb are used. Upon encoding
this value assure all 16 bits are cleared.

Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
Reviewed-by: Daniel (Deognyoun) Kim <dekim@broadcom.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/brcm80211/brcmutil/d11.c

index 6cbc33d0fc19b4257ee66a4725f480feda51d78e..2b2522bdd8eb516b422a779b4057b89bd959400e 100644 (file)
@@ -54,6 +54,7 @@ static void brcmu_d11n_encchspec(struct brcmu_chan *ch)
        if (ch->bw == BRCMU_CHAN_BW_20)
                ch->sb = BRCMU_CHAN_SB_NONE;
 
+       ch->chspec = 0;
        brcmu_maskset16(&ch->chspec, BRCMU_CHSPEC_CH_MASK,
                        BRCMU_CHSPEC_CH_SHIFT, ch->chnum);
        brcmu_maskset16(&ch->chspec, BRCMU_CHSPEC_D11N_SB_MASK,
@@ -61,7 +62,6 @@ static void brcmu_d11n_encchspec(struct brcmu_chan *ch)
        brcmu_maskset16(&ch->chspec, BRCMU_CHSPEC_D11N_BW_MASK,
                        0, d11n_bw(ch->bw));
 
-       ch->chspec &= ~BRCMU_CHSPEC_D11N_BND_MASK;
        if (ch->chnum <= CH_MAX_2G_CHANNEL)
                ch->chspec |= BRCMU_CHSPEC_D11N_BND_2G;
        else