[rt2x00-users] rt2800usb: Michael MIC failure?
helmut.schaa at googlemail.com
Sat Jan 22 02:53:28 EST 2011
Am Freitag, 21. Januar 2011 schrieb Johannes Stezenbach:
> On Fri, Jan 21, 2011 at 12:24:37PM +0100, Johannes Stezenbach wrote:
> > On Thu, Jan 20, 2011 at 09:52:38PM +0100, Gertjan van Wingerde wrote:
> > > On 20 jan. 2011, at 19:35, Johannes Stezenbach <js at sig21.net> wrote:
> > >
> > > > On Thu, Jan 20, 2011 at 06:20:11PM +0100, Helmut Schaa wrote:
> > > >> Try disabling hw_crypto?
> > > >
> > > > I should've thought about this my self... will try tomorrow.
> > > >
> > >
> > > This is indeed a "known" problem with the hwcrypt implementation of rt2800
> > > (both usb and pci).
> > >
> > > I have checked for the obvious issues in programming the hw registers with
> > > the key information, but haven't found anything yet.
> > OK. FWIW, I just tested with nohwcrypt=1 and it works.
> After some debugging, it seems the hardware reports
> RX_CRYPTO_SUCCESS status but mac80211 generates the error.
> The following change fixes it, but since I've no idea
> about the crypto stuff I thought I'd ask before spending time
> to create a proper patch. If this change is correct, rt2800pci
> likely has the same issue.
> @@ -552,7 +554,7 @@ static void rt2800usb_fill_rxdone(struct queue_entry *entry,
> * any fields with the EIV/IV data either, so they can't
> * be restored by rt2x00lib.
> - rxdesc->flags |= RX_FLAG_IV_STRIPPED;
> + rxdesc->flags |= RX_FLAG_IV_STRIPPED | RX_FLAG_MMIC_STRIPPED;
> if (rxdesc->cipher_status == RX_CRYPTO_SUCCESS)
> rxdesc->flags |= RX_FLAG_DECRYPTED;
> The legacy driver has a function STACheckTkipMICValue() which checks the
> MIC on Rx frames, but it seems it is only called for fragmented frames
> which have RXD_W0_DECRYPTED unset. So I guess when RXD_W0_DECRYPTED
> is set, the MMIC is stripped.
Good catch. I haven't reviewed this but your description sounds feasible.
More information about the users