From: gregor kowski <gregor.kowski@gmail.com>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: linux-wireless@vger.kernel.org
Subject: Re: [PATCH] mac80211 : fix a race with update_tkip_key
Date: Fri, 19 Jun 2009 21:33:03 +0200 [thread overview]
Message-ID: <83a869cd0906191233g507fea1cg238d14b57ace0466@mail.gmail.com> (raw)
In-Reply-To: <1244839645.11782.5.camel@johannes.local>
Update : I changed the logic. There is a single flag per key, tracking
if we send the key instead of a flag per rx queue.
The mac80211 tkip code won't call update_tkip_key, if some rx packets
get received without KEY_FLAG_UPLOADED_TO_HARDWARE. This can happen on
first packet because the hardware key stuff is called asynchronously with
todo workqueue.
This patch workaround that by tracking if we send the key to hardware.
Signed-off-by: Gregor Kowski <gregor.kowski@gmail.com>
Index: linux-2.6/net/mac80211/tkip.c
===================================================================
--- linux-2.6.orig/net/mac80211/tkip.c 2009-06-19 19:13:47.000000000 +0000
+++ linux-2.6/net/mac80211/tkip.c 2009-06-19 19:21:50.000000000 +0000
@@ -282,6 +282,7 @@
key->u.tkip.rx[queue].iv32 != iv32) {
/* IV16 wrapped around - perform TKIP phase 1 */
tkip_mixing_phase1(tk, &key->u.tkip.rx[queue], ta, iv32);
+ key->u.tkip.rx_tkip_key_sent = 0;
#ifdef CONFIG_MAC80211_TKIP_DEBUG
{
int i;
@@ -298,19 +299,21 @@
printk("\n");
}
#endif
- if (key->local->ops->update_tkip_key &&
- key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) {
- u8 bcast[ETH_ALEN] =
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
- u8 *sta_addr = key->sta->sta.addr;
+ }
+ if (key->local->ops->update_tkip_key &&
+ key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE &&
+ !key->u.tkip.rx_tkip_key_sent) {
+ u8 bcast[ETH_ALEN] =
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+ u8 *sta_addr = key->sta->sta.addr;
- if (is_multicast_ether_addr(ra))
- sta_addr = bcast;
+ if (is_multicast_ether_addr(ra))
+ sta_addr = bcast;
- key->local->ops->update_tkip_key(
- local_to_hw(key->local), &key->conf,
- sta_addr, iv32, key->u.tkip.rx[queue].p1k);
- }
+ key->local->ops->update_tkip_key(
+ local_to_hw(key->local), &key->conf,
+ sta_addr, iv32, key->u.tkip.rx[queue].p1k);
+ key->u.tkip.rx_tkip_key_sent = 1;
}
tkip_mixing_phase2(tk, &key->u.tkip.rx[queue], iv16, rc4key);
Index: linux-2.6/net/mac80211/key.h
===================================================================
--- linux-2.6.orig/net/mac80211/key.h 2009-06-19 19:22:20.000000000 +0000
+++ linux-2.6/net/mac80211/key.h 2009-06-19 19:22:31.000000000 +0000
@@ -86,6 +86,7 @@
/* last received RSC */
struct tkip_ctx rx[NUM_RX_DATA_QUEUES];
+ int rx_tkip_key_sent;
} tkip;
struct {
u8 tx_pn[6];
On 6/12/09, Johannes Berg <johannes@sipsolutions.net> wrote:
> On Fri, 2009-06-12 at 22:41 +0200, gregor kowski wrote:
>
>
> Please try using a proper email client that can inline patches, as
> outlined in
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/email-clients.txt;hb=HEAD
>
> Due to you not doing that, I now have to copy/paste from your attachment
> rather than being able to simply reply.
>
>> Here is a patch that should fix all issue :
>
> Remove that sentence?
>
>> The mac80211 tkip code won't call update_tkip_key, if some rx packets
>> get received without KEY_FLAG_UPLOADED_TO_HARDWARE. This can happen on
>> first packet because the hardware key stuff is called asynchronously with
>> todo workqueue.
>
> That seems fine.
>
>> This patch workaround that by always calling once update_tkip_key if
>> the packet wasn't decrypted by the hardware.
>
> But I don't think this is actually true?
>
>> +enum {
>> + INITIALIZED_NONE,
>> + INITIALIZED_PHASE1,
>> + INITIALIZED_UPDATE_KEY,
>> +};
>
> Please declare this in a header file and use the proper enum type for
> the variable as well so the compiler knows what you're doing. You should
> also prefix it then.
>
> johannes
>
next prev parent reply other threads:[~2009-06-19 19:33 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <83a869cd0906071445i13a5398y5e94ea3d91123c3b@mail.gmail.com>
2009-06-07 21:49 ` [PATCH] mac80211 : fix a race with update_tkip_key gregor kowski
2009-06-08 6:29 ` Johannes Berg
2009-06-08 17:51 ` gregor kowski
2009-06-09 14:02 ` Johannes Berg
2009-06-09 17:48 ` gregor kowski
2009-06-09 17:52 ` Johannes Berg
2009-06-10 19:42 ` gregor kowski
2009-06-10 22:17 ` gregor kowski
2009-06-11 20:11 ` Johannes Berg
2009-06-11 20:07 ` Johannes Berg
2009-06-12 20:41 ` gregor kowski
2009-06-12 20:47 ` Johannes Berg
2009-06-19 19:33 ` gregor kowski [this message]
2009-06-19 19:37 ` gregor kowski
2009-06-21 9:21 ` Johannes Berg
2009-06-22 20:48 ` gregor kowski
2009-08-21 22:13 gregor kowski
2009-08-22 7:45 ` Johannes Berg
2009-11-07 18:10 ` gregor kowski
2009-11-07 19:22 ` Johannes Berg
2009-11-16 21:53 ` gregor kowski
2009-11-16 21:56 ` Johannes Berg
2009-12-07 21:05 ` gregor kowski
2009-12-07 21:06 ` gregor kowski
2009-12-09 22:21 ` gregor kowski
2009-12-09 22:25 ` gregor kowski
2009-12-28 16:46 ` gregor kowski
2009-12-28 17:23 ` John W. Linville
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=83a869cd0906191233g507fea1cg238d14b57ace0466@mail.gmail.com \
--to=gregor.kowski@gmail.com \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox