• Denis Kenzior's avatar
    nl80211/mac80211: allow non-linear skb in rx_control_port · a948f713
    Denis Kenzior authored
    The current implementation of cfg80211_rx_control_port assumed that the
    caller could provide a contiguous region of memory for the control port
    frame to be sent up to userspace.  Unfortunately, many drivers produce
    non-linear skbs, especially for data frames.  This resulted in userspace
    getting notified of control port frames with correct metadata (from
    address, port, etc) yet garbage / nonsense contents, resulting in bad
    handshakes, disconnections, etc.
    
    mac80211 linearizes skbs containing management frames.  But it didn't
    seem worthwhile to do this for control port frames.  Thus the signature
    of cfg80211_rx_control_port was changed to take the skb directly.
    nl80211 then takes care of obtaining control port frame data directly
    from the (linear | non-linear) skb.
    
    The caller is still responsible for freeing the skb,
    cfg80211_rx_control_port does not take ownership of it.
    
    Fixes: 6a671a50 ("nl80211: Add CMD_CONTROL_PORT_FRAME API")
    Signed-off-by: default avatarDenis Kenzior <denkenz@gmail.com>
    [fix some kernel-doc formatting, add fixes tag]
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    a948f713
rx.c 123 KB