Prevent athn(4) from calling ieee80211_find_rxnode() on bad frames.
authorstsp <stsp@openbsd.org>
Thu, 1 Jul 2021 11:51:55 +0000 (11:51 +0000)
committerstsp <stsp@openbsd.org>
Thu, 1 Jul 2021 11:51:55 +0000 (11:51 +0000)
commitc253dea3fdf4e83d401d331a07b85fb6732d45a9
treec121e66f8c3ebf06fac1f639d21d2cd66639dc6e
parent6908c6b3bd0936b2b8ddb051b8a04a9ca2a6f33c
Prevent athn(4) from calling ieee80211_find_rxnode() on bad frames.

This fixes an issue introduced with our workaround for bogus michael
mic failures seen when hardware receives control frames. We do need
to ignore the michael mic failure in this case but we should not call
ieee80211_find_rxnode() on such frames unconditionally. Do this only
if the transmitter's address has already been cached.

When ieee80211_find_rxnode() is called with an unknown source MAC address
it will create a new entry in the node cache. Frames flagged as incorrectly
received by hardware should not be passed to ieee80211_find_rxnode() without
further verification to avoid creating bogus cache entries based on corrupt
frame headers.

Prompted by an issue seen by kettenis@ on arm64 where the node cache
contains bogus entries. This change doesn't fix the issue but it is
a step in the right direction regardless since it fixes one possible
cause for the issue.

ok kettenis@
tested by myself and Mikolaj Kucharski
sys/dev/ic/ar5008.c