kernel encryption error forwarding packets through hostapd

Brandon Craig Rhodes brandon at rhodesmill.org
Wed Jan 10 00:56:08 EST 2007


I wrote:

> Jan  9 12:54:25 asaph kernel: Invalid packet for Michael MIC add (tailroom=6 hdr_len=24 skb->len=92)
> Jan  9 12:54:25 asaph kernel: wifi0_rename: TX - encryption failed
> ...
> The test that these packets seem to fail (and they do it reliably; the
> problem is not intermittent) in the "ieee80211_michael_mic_add()"
> function is:
>
>     if (skb_tailroom(skb) < 8 || skb->len < hdr_len)

Having followed up on my own problem by reading some kernel source
code, it is clear that the test quoted above is failing because the
"tailroom" of these packets is too small - six bytes, according to the
log message I quote, rather than a full eight bytes as required by the
test.  The encryption algorithm must be planning to use the space for
storing the result or as scratch space or somesuch.

According to the comment above NET_SKB_PAD in include/linux/skbuff.h,
things are arranged so that Linux packets start with sixteen bytes of
tailroom.  The long travels of each packet through my own system must
be whittling this down somehow; is the space is used for obscure
bridging flags or somesuch?

Anyway, my Big Question is currently:

Why does the code above simply give up when the tailroom test fails?
Why not simply make a call to skb_pad() to make extra room appear?

Thanks for any pointers; I'll really love getting my wireless running
again!

-- 
Brandon Craig Rhodes   brandon at rhodesmill.org   http://rhodesmill.org/brandon



More information about the HostAP mailing list