30 Oct, 2020

2 commits

  • When ieee80211_skb_resize() is called from ieee80211_build_hdr()
    the skb has no 802.11 header yet, in fact it consist only of the
    payload as the ethernet frame is removed. As such, we're using
    the payload data for ieee80211_is_mgmt(), which is of course
    completely wrong. This didn't really hurt us because these are
    always data frames, so we could only have added more tailroom
    than we needed if we determined it was a management frame and
    sdata->crypto_tx_tailroom_needed_cnt was false.

    However, syzbot found that of course there need not be any payload,
    so we're using at best uninitialized memory for the check.

    Fix this to pass explicitly the kind of frame that we have instead
    of checking there, by replacing the "bool may_encrypt" argument
    with an argument that can carry the three possible states - it's
    not going to be encrypted, it's a management frame, or it's a data
    frame (and then we check sdata->crypto_tx_tailroom_needed_cnt).

    Reported-by: syzbot+32fd1a1bfe355e93f1e2@syzkaller.appspotmail.com
    Signed-off-by: Johannes Berg
    Link: https://lore.kernel.org/r/20201009132538.e1fd7f802947.I799b288466ea2815f9d4c84349fae697dca2f189@changeid
    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • When sending EAPOL frames via NL80211 they are treated as injected
    frames in mac80211. Due to commit 1df2bdba528b ("mac80211: never drop
    injected frames even if normally not allowed") these injected frames
    were not assigned a sta context in the function ieee80211_tx_dequeue,
    causing certain wireless network cards to always send EAPOL frames in
    plaintext. This may cause compatibility issues with some clients or
    APs, which for instance can cause the group key handshake to fail and
    in turn would cause the station to get disconnected.

    This commit fixes this regression by assigning a sta context in
    ieee80211_tx_dequeue to injected frames as well.

    Note that sending EAPOL frames in plaintext is not a security issue
    since they contain their own encryption and authentication protection.

    Cc: stable@vger.kernel.org
    Fixes: 1df2bdba528b ("mac80211: never drop injected frames even if normally not allowed")
    Reported-by: Thomas Deutschmann
    Tested-by: Christian Hesse
    Tested-by: Thomas Deutschmann
    Signed-off-by: Mathy Vanhoef
    Link: https://lore.kernel.org/r/20201019160113.350912-1-Mathy.Vanhoef@kuleuven.be
    Signed-off-by: Johannes Berg

    Mathy Vanhoef
     

28 Sep, 2020

2 commits


18 Sep, 2020

8 commits

  • This patch adds mac80211 support to configure unsolicited
    broadcast probe response transmission for in-band discovery in 6GHz.

    Changes include functions to store and retrieve probe response template,
    and packet interval (0 - 20 TUs).
    Setting interval to 0 disables the unsolicited broadcast probe response
    transmission.

    Signed-off-by: Aloka Dixit
    Link: https://lore.kernel.org/r/010101747a946b35-ad25858a-1f1f-48df-909e-dc7bf26d9169-000000@us-west-2.amazonses.com
    Signed-off-by: Johannes Berg

    Aloka Dixit
     
  • This patch adds mac80211 support to configure FILS discovery
    transmission.
    Changes include functions to store and retrieve FILS discovery
    template, minimum and maximum packet intervals.

    Signed-off-by: Aloka Dixit
    Link: https://lore.kernel.org/r/20200805011838.28166-3-alokad@codeaurora.org
    [remove SUPPORTS_FILS_DISCOVERY, driver can just set wiphy info]
    Link: https://lore.kernel.org/r/010101747a7b3cbb-6edaa89c-436d-4391-8765-61456d7f5f4e-000000@us-west-2.amazonses.com
    Signed-off-by: Johannes Berg

    Aloka Dixit
     
  • In order to unify the tx status path, the hw 802.11 encapsulation flag
    needs to survive the trip to the tx status call.
    Since we don't have any free bits in info->flags, we need to move one.
    IEEE80211_TX_INTFL_NEED_TXPROCESSING is only used internally in mac80211,
    and only before the call into the driver.

    Signed-off-by: Felix Fietkau
    Link: https://lore.kernel.org/r/20200908123702.88454-10-nbd@nbd.name
    Signed-off-by: Johannes Berg

    Felix Fietkau
     
  • The current API (which lets the driver turn on/off per vif directly) has a
    number of limitations:
    - it does not deal with AP_VLAN
    - conditions for enabling (no tkip, no monitor) are only checked at
    add_interface time
    - no way to indicate 4-addr support

    In order to address this, store offload flags in struct ieee80211_vif
    (easy to extend for decap offload later). mac80211 initially sets the enable
    flag, but gives the driver a chance to modify it before its settings are
    applied. In addition to the .add_interface op, a .update_vif_offload op is
    introduced, which can be used for runtime changes.

    If a driver can't disable encap offload at runtime, or if it has some extra
    limitations, it can simply override the flags within those ops.

    Support for encap offload with 4-address mode interfaces can be enabled
    by setting a flag from .add_interface or .update_vif_offload.

    Signed-off-by: Felix Fietkau
    Link: https://lore.kernel.org/r/20200908123702.88454-6-nbd@nbd.name
    [resolved conflict with commit aa2092a9bab3 ("ath11k: add raw mode and
    software crypto support")]
    Signed-off-by: Johannes Berg

    Felix Fietkau
     
  • This is needed for drivers that don't do the key lookup themselves

    Signed-off-by: Felix Fietkau
    Link: https://lore.kernel.org/r/20200908123702.88454-5-nbd@nbd.name
    Signed-off-by: Johannes Berg

    Felix Fietkau
     
  • This simplifies the checks in the encap offload tx handler and allows using
    it in cases where software crypto is used for multicast packets, e.g. when
    using an AP_VLAN.

    Signed-off-by: Felix Fietkau
    Link: https://lore.kernel.org/r/20200908123702.88454-4-nbd@nbd.name
    Signed-off-by: Johannes Berg

    Felix Fietkau
     
  • Update the last_tx timestamp to avoid tearing down the aggregation session
    early. Fall back to the slow path if the session setup is still running

    Signed-off-by: Felix Fietkau
    Link: https://lore.kernel.org/r/20200908123702.88454-3-nbd@nbd.name
    Signed-off-by: Johannes Berg

    Felix Fietkau
     
  • Fixes AQL for encap-offloaded tx

    Signed-off-by: Felix Fietkau
    Link: https://lore.kernel.org/r/20200908123702.88454-2-nbd@nbd.name
    Signed-off-by: Johannes Berg

    Felix Fietkau
     

27 Aug, 2020

1 commit


02 Aug, 2020

1 commit


31 Jul, 2020

10 commits

  • Already parse the radiotap header in ieee80211_monitor_select_queue.
    In a subsequent commit this will allow us to add a radiotap flag that
    influences the queue on which injected packets will be sent.

    This also fixes the incomplete validation of the injected frame in
    ieee80211_monitor_select_queue: currently an out of bounds memory
    access may occur in in the called function ieee80211_select_queue_80211
    if the 802.11 header is too small.

    Note that in ieee80211_monitor_start_xmit the radiotap header is parsed
    again, which is necessairy because ieee80211_monitor_select_queue is not
    always called beforehand.

    Signed-off-by: Mathy Vanhoef
    Link: https://lore.kernel.org/r/20200723100153.31631-6-Mathy.Vanhoef@kuleuven.be
    Signed-off-by: Johannes Berg

    Mathy Vanhoef
     
  • The flags argument in transmit functions is no longer being used
    and can be removed.

    Signed-off-by: Mathy Vanhoef
    Link: https://lore.kernel.org/r/20200723100153.31631-5-Mathy.Vanhoef@kuleuven.be
    Signed-off-by: Johannes Berg

    Mathy Vanhoef
     
  • Use the IEEE80211_TX_CTRL_NO_SEQNO flag in ieee80211_tx_info to mark
    probe requests whose sequence number must not be overwritten. This
    provides consistency with the radiotap flag that can be set to indicate
    that the sequence number of an injected frame should not be overwritten.

    Signed-off-by: Mathy Vanhoef
    Link: https://lore.kernel.org/r/20200723100153.31631-4-Mathy.Vanhoef@kuleuven.be
    Signed-off-by: Johannes Berg

    Mathy Vanhoef
     
  • Check if the Tx control flag is set to prevent sequence number overwrites,
    and if so, do not assign a new sequence number to the transmitted frame.

    Signed-off-by: Mathy Vanhoef
    Link: https://lore.kernel.org/r/20200723100153.31631-3-Mathy.Vanhoef@kuleuven.be
    Signed-off-by: Johannes Berg

    Mathy Vanhoef
     
  • The radiotap specification contains a flag to indicate that the sequence
    number of an injected frame should not be overwritten. Parse this flag
    and define and set a corresponding Tx control flag.

    Signed-off-by: Mathy Vanhoef
    Link: https://lore.kernel.org/r/20200723100153.31631-2-Mathy.Vanhoef@kuleuven.be
    Signed-off-by: Johannes Berg

    Mathy Vanhoef
     
  • In ieee80211_tx_dequeue there is a check to see if the dequeued frame
    is allowed in the current state. Injected frames that are normally
    not allowed are being be dropped here. Fix this by checking if a
    frame was injected and if so always allowing it.

    Signed-off-by: Mathy Vanhoef
    Link: https://lore.kernel.org/r/20200723100153.31631-1-Mathy.Vanhoef@kuleuven.be
    Signed-off-by: Johannes Berg

    Mathy Vanhoef
     
  • This avoids flow separation issues when using software encryption.

    Signed-off-by: Felix Fietkau
    Link: https://lore.kernel.org/r/20200726130947.88145-2-nbd@nbd.name
    Signed-off-by: Johannes Berg

    Felix Fietkau
     
  • AQL does not take into account that most HT/VHT/HE traffic is A-MPDU aggregated.
    Because of that, the per-packet airtime overhead is vastly overestimated.
    Improve it by assuming an average aggregation length of 16 for non-legacy
    traffic if not using the VO AC queue.
    This should improve performance with high data rates, especially with multiple
    stations

    Signed-off-by: Felix Fietkau
    Link: https://lore.kernel.org/r/20200724182816.18678-1-nbd@nbd.name
    Signed-off-by: Johannes Berg

    Felix Fietkau
     
  • Replace the existing /* fall through */ comments and its variants with
    the new pseudo-keyword macro fallthrough[1]. Also, remove unnecessary
    fall-through markings when it is the case.

    [1] https://www.kernel.org/doc/html/latest/process/deprecated.html?highlight=fallthrough#implicit-switch-case-fall-through

    Signed-off-by: Gustavo A. R. Silva
    Link: https://lore.kernel.org/r/20200707204548.GA9320@embeddedor
    Signed-off-by: Johannes Berg

    Gustavo A. R. Silva
     
  • Gives drivers the definitions needed to advertise support
    for S1G bands.

    Signed-off-by: Thomas Pedersen
    Link: https://lore.kernel.org/r/20200602062247.23212-1-thomas@adapt-ip.com
    Link: https://lore.kernel.org/r/20200731055636.795173-1-thomas@adapt-ip.com
    Signed-off-by: Johannes Berg

    Thomas Pedersen
     

30 Jul, 2020

1 commit

  • Allocated ack_frame id from local->ack_status_frames is not really
    stored in the tx_info for 802.3 Tx path. Due to this, tx ack status
    is not reported and ack_frame id is not freed for the buffers requiring
    tx ack status. Also move the memset to 0 of tx_info before
    IEEE80211_TX_CTL_REQ_TX_STATUS flag assignment.

    Fixes: 50ff477a8639 ("mac80211: add 802.11 encapsulation offloading support")
    Signed-off-by: Vasanthakumar Thiagarajan
    Link: https://lore.kernel.org/r/1595427617-1713-1-git-send-email-vthiagar@codeaurora.org
    Signed-off-by: Johannes Berg

    Vasanthakumar Thiagarajan
     

25 Jun, 2020

2 commits

  • When using 802.1X over mesh networks, at first an ordinary
    mesh peering is established, then the 802.1X EAPOL dialog
    happens, afterwards an authenticated mesh peering exchange
    (AMPE) happens, finally the peering is complete and we can
    set the STA authorized flag.

    As 802.1X is an intermediate step here and key material is
    not yet exchanged for stations we have to skip mesh path lookup
    for these EAPOL frames. Otherwise the already configure mesh
    group encryption key would be used to send a mesh path request
    which no one can decipher, because we didn't already establish
    key material on both peers, like with SAE and directly using AMPE.

    Signed-off-by: Markus Theil
    Link: https://lore.kernel.org/r/20200617082637.22670-2-markus.theil@tu-ilmenau.de
    [remove pointless braces, remove unnecessary local variable,
    the list can only process one such frame (or its fragments)]
    Signed-off-by: Johannes Berg

    Markus Theil
     
  • Broadcast pkts like arp are getting dropped in 'ieee80211_8023_xmit'.
    Fix this by replacing is_valid_ether_addr api with is_zero_ether_addr.

    Fixes: 50ff477a8639 ("mac80211: add 802.11 encapsulation offloading support")
    Signed-off-by: Seevalamuthu Mariappan
    Link: https://lore.kernel.org/r/1591697754-4975-1-git-send-email-seevalam@codeaurora.org
    Signed-off-by: Johannes Berg

    Seevalamuthu Mariappan
     

28 May, 2020

1 commit

  • Add support for TX status reporting for the control port
    TX API; this will be used by hostapd when it moves to the
    control port TX API.

    Signed-off-by: Markus Theil
    Link: https://lore.kernel.org/r/20200527160334.19224-1-markus.theil@tu-ilmenau.de
    [fix commit message, it was referring to nl80211]
    Signed-off-by: Johannes Berg

    Markus Theil
     

27 May, 2020

2 commits

  • This adds the necessary capabilities in nl80211 to allow drivers to
    assign a cookie to control port TX frames (returned via extack in
    the netlink ACK message of the command) and then later report the
    frame's status.

    Signed-off-by: Markus Theil
    Link: https://lore.kernel.org/r/20200508144202.7678-2-markus.theil@tu-ilmenau.de
    [use extack cookie instead of explicit message, recombine patches]
    Signed-off-by: Johannes Berg

    Markus Theil
     
  • …m/linux/kernel/git/jberg/mac80211-next

    Johannes Berg says:

    ====================
    One batch of changes, containing:
    * hwsim improvements from Jouni and myself, to be able to
    test more scenarios easily
    * some more HE (802.11ax) support
    * some initial S1G (sub 1 GHz) work for fractional MHz channels
    * some (action) frame registration updates to help DPP support
    * along with other various improvements/fixes
    ====================

    Signed-off-by: David S. Miller <davem@davemloft.net>

    David S. Miller
     

01 May, 2020

1 commit


29 Apr, 2020

1 commit

  • Use the Beacon frame specific legacy rate configuration, if specified
    for AP or mesh, instead of the generic rate mask when selecting the TX
    rate for Beacon frames.

    Signed-off-by: Jouni Malinen
    Link: https://lore.kernel.org/r/20200425155713.25687-4-jouni@codeaurora.org
    Signed-off-by: Johannes Berg

    Jouni Malinen
     

24 Apr, 2020

1 commit

  • Maintain the connection AID only in sdata->vif.bss_conf.aid, not
    also in sdata->u.mgd.aid.

    Keep setting that where we set ifmgd->aid before, which has the
    side effect of exposing the AID to the driver before the station
    entry (AP) is marked associated, in case it needs it then.

    Requested-by: Felix Fietkau
    Signed-off-by: Johannes Berg
    Tested-by: Lorenzo Bianconi
    Link: https://lore.kernel.org/r/20200417123802.085d4a322b0c.I2e7a2ceceea8c6880219f9e9ee4d4ac985fd295a@changeid
    Signed-off-by: Johannes Berg

    Johannes Berg
     

31 Mar, 2020

1 commit


30 Mar, 2020

2 commits


26 Mar, 2020

3 commits

  • When a frame is transmitted via the nl80211 TX rather than as a
    normal frame, IEEE80211_TX_CTRL_PORT_CTRL_PROTO wasn't set and
    this will lead to wrong decisions (rate control etc.) being made
    about the frame; fix this.

    Fixes: 911806491425 ("mac80211: Add support for tx_control_port")
    Signed-off-by: Johannes Berg
    Link: https://lore.kernel.org/r/20200326155333.f183f52b02f0.I4054e2a8c11c2ddcb795a0103c87be3538690243@changeid
    Signed-off-by: Johannes Berg

    Johannes Berg
     
  • mac80211 used to check port authorization in the Data frame enqueue case
    when going through start_xmit(). However, that authorization status may
    change while the frame is waiting in a queue. Add a similar check in the
    dequeue case to avoid sending previously accepted frames after
    authorization change. This provides additional protection against
    potential leaking of frames after a station has been disconnected and
    the keys for it are being removed.

    Cc: stable@vger.kernel.org
    Signed-off-by: Jouni Malinen
    Link: https://lore.kernel.org/r/20200326155133.ced84317ea29.I34d4c47cd8cc8a4042b38a76f16a601fbcbfd9b3@changeid
    Signed-off-by: Johannes Berg

    Jouni Malinen
     
  • If we know that we have an encrypted link (based on having had
    a key configured for TX in the past) then drop all data frames
    in the key selection handler if there's no key anymore.

    This fixes an issue with mac80211 internal TXQs - there we can
    buffer frames for an encrypted link, but then if the key is no
    longer there when they're dequeued, the frames are sent without
    encryption. This happens if a station is disconnected while the
    frames are still on the TXQ.

    Detecting that a link should be encrypted based on a first key
    having been configured for TX is fine as there are no use cases
    for a connection going from with encryption to no encryption.
    With extended key IDs, however, there is a case of having a key
    configured for only decryption, so we can't just trigger this
    behaviour on a key being configured.

    Cc: stable@vger.kernel.org
    Reported-by: Jouni Malinen
    Signed-off-by: Johannes Berg
    Signed-off-by: Luca Coelho
    Link: https://lore.kernel.org/r/iwlwifi.20200326150855.6865c7f28a14.I9fb1d911b064262d33e33dfba730cdeef83926ca@changeid
    Signed-off-by: Johannes Berg

    Johannes Berg
     

20 Mar, 2020

1 commit

  • In beacon protection, don't leave skb->next/prev pointing to the
    on-stack list, even if that's actually harmless since we don't use
    them again afterwards.

    While at it, check that the SKB on the list is still the same, as
    that's required here. If not, the encryption (protection) code is
    buggy.

    Fixes: 0a3a84360b37 ("mac80211: Beacon protection using the new BIGTK (AP)")
    Signed-off-by: Johannes Berg
    Link: https://lore.kernel.org/r/20200320102021.1be7823fc05e.Ia89fb79a0469d32137c9a04315a1d2dfc7b7d6f5@changeid
    Signed-off-by: Johannes Berg

    Johannes Berg