l2_packet: Extend bridge workaround RX processing to cover two frames
authorJouni Malinen <jouni@qca.qualcomm.com>
Thu, 7 Jan 2016 11:30:59 +0000 (13:30 +0200)
committerJouni Malinen <j@w1.fi>
Thu, 7 Jan 2016 11:30:59 +0000 (13:30 +0200)
commit64845c1f1ac75106723b1ab2f00b4e2d0fec2415
tree30c4bd6aca3ffba17189e599b9a37255baefdfd6
parent447fb0b0da659b99ba713cdb53df9344a102cf32
l2_packet: Extend bridge workaround RX processing to cover two frames

There was a race condition in how the l2_packet sockets got read that
could result in the same socket (e.g., non-bridge) to process both the
EAP-Success and the immediately following EAPOL-Key msg 1/4 instead of
each frame going in alternative order between the bridge and non-bridge
sockets. This could be hit, e.g., if the wpa_supplicant process did not
have enough CPU to process all the incoming frames without them getting
buffered and both sockets reporting frames simultaneously.

This resulted in the duplicated EAP-Success frame getting delivered
twice for processing and likely also the EAPOL-Key msg 1/4 getting
processed twice. While the latter does not do much harm, the former did
clear the EAP authentication state and could result in issues.

Fix this by extended the l2_packet Linux packet socket workaround for
bridge to check for duplicates against the last two received frames
instead of just the last one.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
src/l2_packet/l2_packet_linux.c