[rt2x00-users] [PATCH] rt2x00: Don't overwrite beacon buffers in pairwise key setup
Helmut Schaa
helmut.schaa at googlemail.com
Sun Sep 12 17:54:00 UTC 2010
Am Sonntag 12 September 2010 schrieb Ivo Van Doorn:
> Hi,
>
> On Fri, Sep 10, 2010 at 4:34 PM, Helmut Schaa
> <helmut.schaa at googlemail.com> wrote:
> > rt2800 devices use parts of the pariwise key table to store the beacon
> > frames for beacon 6 and 7. To not overwrite the beacon frame buffers
> > limit the number of entries we store in the pairwise key table to 222.
> >
> > Also add some descriptive comments about this shared memory usage.
> >
> > Signed-off-by: Helmut Schaa <helmut.schaa at googlemail.com>
> > ---
> >
> > The legacy driver uses only 221 entries of the pairwise key table but I
> > calculated 222 entries. Ivo, Gertjan, could you please check if I missed
> > something?
>
> I seem to come to the 222 entries conclusion as well,
Good ;)
> but what is more important
> more BSSID entries or more crypto key entries? I mean, do we want to have the
> 8 beacon entries, or should we reduce them to 6, and go for 255 key entries?
Hmm, good question. The best way would be to use all key entries as long as only
6 beacons are used and reduce the key table to 222 once the 7th beacon is used.
However, this would need quite some management code, for example we need to
clean the key table for the according entries once the 7th beacon gets used and
fall back to sw crypto for them.
That's why I took the easy way of allowing 8 beacons and reducing the key table
accordingly. And I guess in most cases 222 - 32 = 190 pairwise key entires
should still be sufficient ...
Helmut
> Ivo
>
> > drivers/net/wireless/rt2x00/rt2800.h | 21 ++++++++++++++++++++-
> > drivers/net/wireless/rt2x00/rt2800lib.c | 6 +++++-
> > 2 files changed, 25 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> > index 2edc774..e1583cf 100644
> > --- a/drivers/net/wireless/rt2x00/rt2800.h
> > +++ b/drivers/net/wireless/rt2x00/rt2800.h
> > @@ -1435,6 +1435,24 @@
> >
> > /*
> > * Security key table memory.
> > + *
> > + * The pairwise key table shares some memory with the beacon frame
> > + * buffers 6 and 7. That basically means that when beacon 6 & 7
> > + * are used we should only use the reduced pairwise key table which
> > + * has a maximum of 222 entries.
> > + *
> > + * ---------------------------------------------
> > + * |0x4000 | Pairwise Key | Reduced Pairwise |
> > + * | | Table | Key Table |
> > + * | | Size: 256 * 32 | Size: 222 * 32 |
> > + * |0x5BC0 | |-------------------
> > + * | | | Beacon 6 |
> > + * |0x5DC0 | |-------------------
> > + * | | | Beacon 7 |
> > + * |0x5FC0 | |-------------------
> > + * |0x5FFF | |
> > + * --------------------------
> > + *
> > * MAC_WCID_BASE: 8-bytes (use only 6 bytes) * 256 entry
> > * PAIRWISE_KEY_TABLE_BASE: 32-byte * 256 entry
> > * MAC_IVEIV_TABLE_BASE: 8-byte * 256-entry
> > @@ -1584,7 +1602,8 @@ struct mac_iveiv_entry {
> > * 2. Extract memory from FCE table for BCN 4~5
> > * 3. Extract memory from Pair-wise key table for BCN 6~7
> > * It occupied those memory of wcid 238~253 for BCN 6
> > - * and wcid 222~237 for BCN 7
> > + * and wcid 222~237 for BCN 7 (see Security key table memory
> > + * for more info).
> > *
> > * IMPORTANT NOTE: Not sure why legacy driver does this,
> > * but HW_BEACON_BASE7 is 0x0200 bytes below HW_BEACON_BASE6.
> > diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> > index c7076de..daa32ae 100644
> > --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> > +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> > @@ -1031,8 +1031,12 @@ int rt2800_config_pairwise_key(struct rt2x00_dev *rt2x00dev,
> > * 1 pairwise key is possible per AID, this means that the AID
> > * equals our hw_key_idx. Make sure the WCID starts _after_ the
> > * last possible shared key entry.
> > + *
> > + * Since parts of the pairwise key table might be shared with
> > + * the beacon frame buffers 6 & 7 we should only write into the
> > + * first 222 entries.
> > */
> > - if (crypto->aid > (256 - 32))
> > + if (crypto->aid > (222 - 32))
> > return -ENOSPC;
> >
> > key->hw_key_idx = 32 + crypto->aid;
> > --
> > 1.7.1
> >
> >
> > _______________________________________________
> > users mailing list
> > users at rt2x00.serialmonkey.com
> > http://rt2x00.serialmonkey.com/mailman/listinfo/users_rt2x00.serialmonkey.com
> >
>
More information about the users
mailing list