diff options
author | Martin Pieuchot <mpi@cvs.openbsd.org> | 2017-12-21 12:09:39 +0000 |
---|---|---|
committer | Martin Pieuchot <mpi@cvs.openbsd.org> | 2017-12-21 12:09:39 +0000 |
commit | 2efb48a59c0bcfa586fa364550f1e7f515dd40f0 (patch) | |
tree | db89b0020c332e54e905705cb92e5393e43f3bac /distrib/miniroot | |
parent | 3686b75faa3c8c1f957816b2c18863bea4ccad88 (diff) |
Call if_start() directly to send the EAPOL key.
Using if_enqueue() here, from interrupt context, might result in
the packet beeing enqueued, incorrectly encrypted, on the TX ring.
This race has been recently exposed by the re-introduction of the
TX mitigation. It exists because the net80211 stack sets
IEEE80211_NODE_TXPROT on the node while processing the 3rd message,
assuming the answer has already been transmitted. However a CPU
returns from if_enqueue() it cannot assume that the send queue is
empty. So call if_start() to flush this queue.
Encrypting the 4th message of the 4way handshake with the new key
breaks WPA handshake as found the hardway by anton@.
Race analysed by dlg@, a lot of net80211 inputs and suggetions from
stsp@.
ok stsp@, dlg@
Diffstat (limited to 'distrib/miniroot')
0 files changed, 0 insertions, 0 deletions