05 Aug, 2020

1 commit

  • commit cc78dc3b790619aa05f22a86a9152986bd73698c upstream.

    For all data packets transmitted, host gets htt tx completion event. Some QCA9984
    firmware releases support WMI_SERVICE_TX_DATA_ACK_RSSI, which gives data
    ack rssi values to host through htt event of data tx completion. Data ack rssi
    values are valid if A0 bit is set in HTT rx message. So enable the feature also
    for QCA9884.

    Tested HW: QCA9984
    Tested FW: 10.4-3.9.0.2-00044

    Signed-off-by: Abhishek Ambure
    Signed-off-by: Balaji Pothunoori
    [kvalo@codeaurora.org: improve commit log]
    Signed-off-by: Kalle Valo
    Signed-off-by: Sathishkumar Muruganandam
    Signed-off-by: Greg Kroah-Hartman

    Abhishek Ambure
     

29 Jul, 2020

3 commits

  • commit 92f53e2fda8bb9a559ad61d57bfb397ce67ed0ab upstream.

    This fix allows ath9k_htc modules to connect to WLAN once again.

    Fixes: 2bbcaaee1fcb ("ath9k: Fix general protection fault in ath9k_hif_usb_rx_cb")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=208251
    Signed-off-by: Mark O'Donovan
    Reported-by: Roman Mamedov
    Tested-by: Viktor Jägersküpper
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200711043324.8079-1-shiftee@posteo.net
    Signed-off-by: Greg Kroah-Hartman

    Mark O'Donovan
     
  • commit 2bbcaaee1fcbd83272e29f31e2bb7e70d8c49e05 upstream.

    In ath9k_hif_usb_rx_cb interface number is assumed to be 0.
    usb_ifnum_to_if(urb->dev, 0)
    But it isn't always true.

    The case reported by syzbot:
    https://lore.kernel.org/linux-usb/000000000000666c9c05a1c05d12@google.com
    usb 2-1: new high-speed USB device number 2 using dummy_hcd
    usb 2-1: config 1 has an invalid interface number: 2 but max is 0
    usb 2-1: config 1 has no interface number 0
    usb 2-1: New USB device found, idVendor=0cf3, idProduct=9271, bcdDevice=
    1.08
    usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    general protection fault, probably for non-canonical address
    0xdffffc0000000015: 0000 [#1] SMP KASAN
    KASAN: null-ptr-deref in range [0x00000000000000a8-0x00000000000000af]
    CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.6.0-rc5-syzkaller #0

    Call Trace
    __usb_hcd_giveback_urb+0x29a/0x550 drivers/usb/core/hcd.c:1650
    usb_hcd_giveback_urb+0x368/0x420 drivers/usb/core/hcd.c:1716
    dummy_timer+0x1258/0x32ae drivers/usb/gadget/udc/dummy_hcd.c:1966
    call_timer_fn+0x195/0x6f0 kernel/time/timer.c:1404
    expire_timers kernel/time/timer.c:1449 [inline]
    __run_timers kernel/time/timer.c:1773 [inline]
    __run_timers kernel/time/timer.c:1740 [inline]
    run_timer_softirq+0x5f9/0x1500 kernel/time/timer.c:1786
    __do_softirq+0x21e/0x950 kernel/softirq.c:292
    invoke_softirq kernel/softirq.c:373 [inline]
    irq_exit+0x178/0x1a0 kernel/softirq.c:413
    exiting_irq arch/x86/include/asm/apic.h:546 [inline]
    smp_apic_timer_interrupt+0x141/0x540 arch/x86/kernel/apic/apic.c:1146
    apic_timer_interrupt+0xf/0x20 arch/x86/entry/entry_64.S:829

    Reported-and-tested-by: syzbot+40d5d2e8a4680952f042@syzkaller.appspotmail.com
    Signed-off-by: Qiujun Huang
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200404041838.10426-6-hqjagain@gmail.com
    Cc: Viktor Jägersküpper
    Signed-off-by: Greg Kroah-Hartman

    Qiujun Huang
     
  • commit fbb1461ad1d6eacca9beb69a2f3ce1b5398d399b upstream.

    iwl_mvm_free_inactive_queue() will sleep in synchronize_net() under
    some circumstances, so don't call it under RCU. There doesn't appear
    to be a need for RCU protection around this particular call.

    Cc: stable@vger.kernel.org # v5.4+
    Signed-off-by: Johannes Berg
    Signed-off-by: Luca Coelho
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/iwlwifi.20200403112332.0f49448c133d.I17fd308bc4a9491859c9b112f4eb5d2c3fc18d7d@changeid
    Signed-off-by: Greg Kroah-Hartman

    Johannes Berg
     

16 Jul, 2020

1 commit


22 Jun, 2020

18 commits

  • commit 6a29d134c04a8acebb7a95251acea7ad7abba106 upstream.

    Since the driver was first introduced into the kernel, it has only
    handled the ciphers associated with WEP, WPA, and WPA2. It fails with
    WPA3 even though mac80211 can handle those additional ciphers in software,
    b43legacy did not report that it could handle them. By setting MFP_CAPABLE using
    ieee80211_set_hw(), the problem is fixed.

    With this change, b43legacy will handle the ciphers it knows in hardware,
    and let mac80211 handle the others in software. It is not necessary to
    use the module parameter NOHWCRYPT to turn hardware encryption off.
    Although this change essentially eliminates that module parameter,
    I am choosing to keep it for cases where the hardware is broken,
    and software encryption is required for all ciphers.

    Signed-off-by: Larry Finger
    Cc: Stable
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200526155909.5807-3-Larry.Finger@lwfinger.net
    Signed-off-by: Greg Kroah-Hartman

    Larry Finger
     
  • commit 75d057bda1fbca6ade21378aa45db712e5f7d962 upstream.

    Since the driver was first introduced into the kernel, it has only
    handled the ciphers associated with WEP, WPA, and WPA2. It fails with
    WPA3 even though mac80211 can handle those additional ciphers in software,
    b43 did not report that it could handle them. By setting MFP_CAPABLE using
    ieee80211_set_hw(), the problem is fixed.

    With this change, b43 will handle the ciphers it knows in hardware,
    and let mac80211 handle the others in software. It is not necessary to
    use the module parameter NOHWCRYPT to turn hardware encryption off.
    Although this change essentially eliminates that module parameter,
    I am choosing to keep it for cases where the hardware is broken,
    and software encryption is required for all ciphers.

    Reported-and-tested-by: Rui Salvaterra
    Signed-off-by: Larry Finger
    Cc: Stable
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200526155909.5807-2-Larry.Finger@lwfinger.net
    Signed-off-by: Greg Kroah-Hartman

    Larry Finger
     
  • commit ec4d3e3a054578de34cd0b587ab8a1ac36f629d9 upstream.

    This patch fixes commit 75388acd0cd8 ("add mac80211-based driver for
    legacy BCM43xx devices")

    In https://bugzilla.kernel.org/show_bug.cgi?id=207093, a defect in
    b43legacy is reported. Upon testing, thus problem exists on PPC and
    X86 platforms, is present in the oldest kernel tested (3.2), and
    has been present in the driver since it was first added to the kernel.

    The problem is a corrupted channel status received from the device.
    Both the internal card in a PowerBook G4 and the PCMCIA version
    (Broadcom BCM4306 with PCI ID 14e4:4320) have the problem. Only Rev, 2
    (revision 4 of the 802.11 core) of the chip has been tested. No other
    devices using b43legacy are available for testing.

    Various sources of the problem were considered. Buffer overrun and
    other sources of corruption within the driver were rejected because
    the faulty channel status is always the same, not a random value.
    It was concluded that the faulty data is coming from the device, probably
    due to a firmware bug. As that source is not available, the driver
    must take appropriate action to recover.

    At present, the driver reports the error, and them continues to process
    the bad packet. This is believed that to be a mistake, and the correct
    action is to drop the correpted packet.

    Fixes: 75388acd0cd8 ("add mac80211-based driver for legacy BCM43xx devices")
    Cc: Stable
    Signed-off-by: Larry Finger
    Reported-and-tested by: F. Erhard
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200407190043.1686-1-Larry.Finger@lwfinger.net
    Signed-off-by: Greg Kroah-Hartman

    Larry Finger
     
  • commit b14fba7ebd04082f7767a11daea7f12f3593de22 upstream.

    This patch follows up on a bug-report by Frank Schäfer that
    discovered P2P GO wasn't working with wpa_supplicant.
    This patch removes part of the broken P2P GO support but
    keeps the vif switchover code in place.

    Cc:
    Link:
    Reported-by: Frank Schäfer
    Signed-off-by: Christian Lamparter
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200425092811.9494-1-chunkeey@gmail.com
    Signed-off-by: Greg Kroah-Hartman

    Christian Lamparter
     
  • [ Upstream commit f327236df2afc8c3c711e7e070f122c26974f4da ]

    When mvm is initialized we alloc aux station with aux queue.
    We later free the station memory when driver is stopped, but we
    never free the queue's memory, which casues a leak.

    Add a proper de-initialization of the station.

    Signed-off-by: Sharon
    Signed-off-by: Luca Coelho
    Link: https://lore.kernel.org/r/iwlwifi.20200529092401.0121c5be55e9.Id7516fbb3482131d0c9dfb51ff20b226617ddb49@changeid
    Signed-off-by: Sasha Levin

    Sharon
     
  • [ Upstream commit 3aa42bae9c4d1641aeb36f1a8585cd1d506cf471 ]

    The mwifiex_cfg80211_dump_station() uses static variable for iterating
    over a linked list of all associated stations (when the driver is in UAP
    role). This has a race condition if .dump_station is called in parallel
    for multiple interfaces. This corruption can be triggered by registering
    multiple SSIDs and calling, in parallel for multiple interfaces
    iw dev station dump

    [16750.719775] Unable to handle kernel paging request at virtual address dead000000000110
    ...
    [16750.899173] Call trace:
    [16750.901696] mwifiex_cfg80211_dump_station+0x94/0x100 [mwifiex]
    [16750.907824] nl80211_dump_station+0xbc/0x278 [cfg80211]
    [16750.913160] netlink_dump+0xe8/0x320
    [16750.916827] netlink_recvmsg+0x1b4/0x338
    [16750.920861] ____sys_recvmsg+0x7c/0x2b0
    [16750.924801] ___sys_recvmsg+0x70/0x98
    [16750.928564] __sys_recvmsg+0x58/0xa0
    [16750.932238] __arm64_sys_recvmsg+0x28/0x30
    [16750.936453] el0_svc_common.constprop.3+0x90/0x158
    [16750.941378] do_el0_svc+0x74/0x90
    [16750.944784] el0_sync_handler+0x12c/0x1a8
    [16750.948903] el0_sync+0x114/0x140
    [16750.952312] Code: f9400003 f907f423 eb02007f 54fffd60 (b9401060)
    [16750.958583] ---[ end trace c8ad181c2f4b8576 ]---

    This patch drops the use of the static iterator, and instead every time
    the function is called iterates to the idx-th position of the
    linked-list.

    It would be better to convert the code not to use linked list for
    associated stations storage (since the chip has a limited number of
    associated stations anyway - it could just be an array). Such a change
    may be proposed in the future. In the meantime this patch can backported
    into stable kernels in this simple form.

    Fixes: 8baca1a34d4c ("mwifiex: dump station support in uap mode")
    Signed-off-by: Pali Rohár
    Acked-by: Ganapathi Bhat
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200515075924.13841-1-pali@kernel.org
    Signed-off-by: Sasha Levin

    Pali Rohár
     
  • [ Upstream commit beb12813bc75d4a23de43b85ad1c7cb28d27631e ]

    Seven years ago we tried to fix a leak but actually introduced a double
    free instead. It was an understandable mistake because the code was a
    bit confusing and the free was done in the wrong place. The "skb"
    pointer is freed in both _rtl_usb_tx_urb_setup() and _rtl_usb_transmit().
    The free belongs _rtl_usb_transmit() instead of _rtl_usb_tx_urb_setup()
    and I've cleaned the code up a bit to hopefully make it more clear.

    Fixes: 36ef0b473fbf ("rtlwifi: usb: add missing freeing of skbuff")
    Signed-off-by: Dan Carpenter
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200513093951.GD347693@mwanda
    Signed-off-by: Sasha Levin

    Dan Carpenter
     
  • [ Upstream commit 7c4f744d6703757be959f521a7a441bf34745d99 ]

    Enlarge slot to support 11ax 256 BA (256 MPDUs in an AMPDU)

    Signed-off-by: Chih-Min Chen
    Signed-off-by: Ryder Lee
    Signed-off-by: Felix Fietkau
    Signed-off-by: Sasha Levin

    Ryder Lee
     
  • [ Upstream commit a86308fc534edeceaf64670c691e17485436a4f4 ]

    In case of error, 'qcom_wcnss_open_channel()' must be undone by a call to
    'rpmsg_destroy_ept()', as already done in the remove function.

    Fixes: 5052de8deff5 ("soc: qcom: smd: Transition client drivers from smd to rpmsg")
    Signed-off-by: Christophe JAILLET
    Reviewed-by: Bjorn Andersson
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200507043619.200051-1-christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin

    Christophe JAILLET
     
  • [ Upstream commit c730c477176ad4af86d9aae4d360a7ad840b073a ]

    Currently when the sending of any management pkt
    via wmi command fails, the packet is being unmapped
    freed in the error handling. But the idr entry added,
    which is used to track these packet is not getting removed.

    Hence, during unload, in wmi cleanup, all the entries
    in IDR are removed and the corresponding buffer is
    attempted to be freed. This can cause a situation where
    one packet is attempted to be freed twice.

    Fix this error by rmeoving the msdu from the idr
    list when the sending of a management packet over
    wmi fails.

    Tested HW: WCN3990
    Tested FW: WLAN.HL.3.1-01040-QCAHLSWMTPLZ-1

    Fixes: 1807da49733e ("ath10k: wmi: add management tx by reference support over wmi")
    Signed-off-by: Rakesh Pillai
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/1588667015-25490-1-git-send-email-pillair@codeaurora.org
    Signed-off-by: Sasha Levin

    Rakesh Pillai
     
  • [ Upstream commit a65a5824298b06049dbaceb8a9bd19709dc9507c ]

    If we set amsdu_len one after another the second one overwrites
    the orig_amsdu_len so allow only moving from debug to non debug state.

    Also the TLC update check was wrong: it was checking that also the orig
    is smaller then the new updated size, which is not the case in debug
    amsdu mode.

    Signed-off-by: Mordechay Goodstein
    Fixes: af2984e9e625 ("iwlwifi: mvm: add a debugfs entry to set a fixed size AMSDU for all TX packets")
    Signed-off-by: Luca Coelho
    Link: https://lore.kernel.org/r/iwlwifi.20200424182644.e565446a4fce.I9729d8c520d8b8bb4de9a5cdc62e01eb85168aac@changeid
    Signed-off-by: Sasha Levin

    Mordechay Goodstein
     
  • [ Upstream commit 049ceac308b0d57c4f06b9fb957cdf95d315cf0b ]

    Currently there is a check if priv is null when calling lbtf_remove_card
    but not in a previous call to if_usb_reset_dev that can also dereference
    priv. Fix this by also only calling lbtf_remove_card if priv is null.

    It is noteable that there don't seem to be any bugs reported that the
    null pointer dereference has ever occurred, so I'm not sure if the null
    check is required, but since we're doing a null check anyway it should
    be done for both function calls.

    Addresses-Coverity: ("Dereference before null check")
    Fixes: baa0280f08c7 ("libertas_tf: don't defer firmware loading until start()")
    Signed-off-by: Colin Ian King
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200501173900.296658-1-colin.king@canonical.com
    Signed-off-by: Sasha Levin

    Colin Ian King
     
  • [ Upstream commit dd7fc5545bbafdbd6c1efdc996b61883b285bdc5 ]

    When station connected to AP, and run TX traffic such as TCP/UDP, and
    system enter suspend state, then mac80211 call ath10k_flush with set
    drop flag, recently it only send wmi peer flush to firmware and
    firmware will flush all pending TX packets, for PCIe, firmware will
    indicate the TX packets status to ath10k, and then ath10k indicate to
    mac80211 TX complete with the status, then all the packets has been
    flushed at this moment. For SDIO chip, it is different, its TX
    complete indication is disabled by default, and it has a tx queue in
    ath10k, and its tx credit control is enabled, total tx credit is 96,
    when its credit is not sufficient, then the packets will buffered in
    the tx queue of ath10k, max packets is TARGET_TLV_NUM_MSDU_DESC_HL
    which is 1024, for SDIO, when mac80211 call ath10k_flush with set drop
    flag, maybe it have pending packets in tx queue of ath10k, and if it
    does not have sufficient tx credit, the packets will stay in queue
    untill tx credit report from firmware, if it is a noisy environment,
    tx speed is low and the tx credit report from firmware will delay more
    time, then the num_pending_tx will remain > 0 untill all packets send
    to firmware. After the 1st ath10k_flush, mac80211 will call the 2nd
    ath10k_flush without set drop flag immediately, then it will call to
    ath10k_mac_wait_tx_complete, and it wait untill num_pending_tx become
    to 0, in noisy environment, it is esay to wait about near 5 seconds,
    then it cause the suspend take long time.

    1st and 2nd callstack of ath10k_flush
    [ 303.740427] ath10k_sdio mmc1:0001:1: ath10k_flush drop:1, pending:0-0
    [ 303.740495] ------------[ cut here ]------------
    [ 303.740739] WARNING: CPU: 1 PID: 3921 at /mnt/host/source/src/third_party/kernel/v4.19/drivers/net/wireless/ath/ath10k/mac.c:7025 ath10k_flush+0x54/0x104 [ath10k_core]
    [ 303.740757] Modules linked in: bridge stp llc ath10k_sdio ath10k_core rfcomm uinput cros_ec_rpmsg mtk_seninf mtk_cam_isp mtk_vcodec_enc mtk_fd mtk_vcodec_dec mtk_vcodec_common mtk_dip mtk_mdp3 videobuf2_dma_contig videobuf2_memops v4l2_mem2mem videobuf2_v4l2 videobuf2_common hid_google_hammer hci_uart btqca bluetooth dw9768 ov8856 ecdh_generic ov02a10 v4l2_fwnode mtk_scp mtk_rpmsg rpmsg_core mtk_scp_ipi ipt_MASQUERADE fuse iio_trig_sysfs cros_ec_sensors_ring cros_ec_sensors_sync cros_ec_light_prox cros_ec_sensors industrialio_triggered_buffer
    [ 303.740914] kfifo_buf cros_ec_activity cros_ec_sensors_core lzo_rle lzo_compress ath mac80211 zram cfg80211 joydev [last unloaded: ath10k_core]
    [ 303.741009] CPU: 1 PID: 3921 Comm: kworker/u16:10 Tainted: G W 4.19.95 #2
    [ 303.741027] Hardware name: MediaTek krane sku176 board (DT)
    [ 303.741061] Workqueue: events_unbound async_run_entry_fn
    [ 303.741086] pstate: 60000005 (nZCv daif -PAN -UAO)
    [ 303.741166] pc : ath10k_flush+0x54/0x104 [ath10k_core]
    [ 303.741244] lr : ath10k_flush+0x54/0x104 [ath10k_core]
    [ 303.741260] sp : ffffffdf080e77a0
    [ 303.741276] x29: ffffffdf080e77a0 x28: ffffffdef3730040
    [ 303.741300] x27: ffffff907c2240a0 x26: ffffffde6ff39afc
    [ 303.741321] x25: ffffffdef3730040 x24: ffffff907bf61018
    [ 303.741343] x23: ffffff907c2240a0 x22: ffffffde6ff39a50
    [ 303.741364] x21: 0000000000000001 x20: ffffffde6ff39a50
    [ 303.741385] x19: ffffffde6bac2420 x18: 0000000000017200
    [ 303.741407] x17: ffffff907c24a000 x16: 0000000000000037
    [ 303.741428] x15: ffffff907b49a568 x14: ffffff907cf332c1
    [ 303.741476] x13: 00000000000922e4 x12: 0000000000000000
    [ 303.741497] x11: 0000000000000001 x10: 0000000000000007
    [ 303.741518] x9 : f2256b8c1de4bc00 x8 : f2256b8c1de4bc00
    [ 303.741539] x7 : ffffff907ab5e764 x6 : 0000000000000000
    [ 303.741560] x5 : 0000000000000080 x4 : 0000000000000001
    [ 303.741582] x3 : ffffffdf080e74a8 x2 : ffffff907aa91244
    [ 303.741603] x1 : ffffffdf080e74a8 x0 : 0000000000000024
    [ 303.741624] Call trace:
    [ 303.741701] ath10k_flush+0x54/0x104 [ath10k_core]
    [ 303.741941] __ieee80211_flush_queues+0x1dc/0x358 [mac80211]
    [ 303.742098] ieee80211_flush_queues+0x34/0x44 [mac80211]
    [ 303.742253] ieee80211_set_disassoc+0xc0/0x5ec [mac80211]
    [ 303.742399] ieee80211_mgd_deauth+0x720/0x7d4 [mac80211]
    [ 303.742535] ieee80211_deauth+0x24/0x30 [mac80211]
    [ 303.742720] cfg80211_mlme_deauth+0x250/0x3bc [cfg80211]
    [ 303.742849] cfg80211_mlme_down+0x90/0xd0 [cfg80211]
    [ 303.742971] cfg80211_disconnect+0x340/0x3a0 [cfg80211]
    [ 303.743087] __cfg80211_leave+0xe4/0x17c [cfg80211]
    [ 303.743203] cfg80211_leave+0x38/0x50 [cfg80211]
    [ 303.743319] wiphy_suspend+0x84/0x5bc [cfg80211]
    [ 303.743335] dpm_run_callback+0x170/0x304
    [ 303.743346] __device_suspend+0x2dc/0x3e8
    [ 303.743356] async_suspend+0x2c/0xb0
    [ 303.743370] async_run_entry_fn+0x48/0xf8
    [ 303.743383] process_one_work+0x304/0x604
    [ 303.743394] worker_thread+0x248/0x3f4
    [ 303.743403] kthread+0x120/0x130
    [ 303.743416] ret_from_fork+0x10/0x18

    [ 303.743812] ath10k_sdio mmc1:0001:1: ath10k_flush drop:0, pending:0-0
    [ 303.743858] ------------[ cut here ]------------
    [ 303.744057] WARNING: CPU: 1 PID: 3921 at /mnt/host/source/src/third_party/kernel/v4.19/drivers/net/wireless/ath/ath10k/mac.c:7025 ath10k_flush+0x54/0x104 [ath10k_core]
    [ 303.744075] Modules linked in: bridge stp llc ath10k_sdio ath10k_core rfcomm uinput cros_ec_rpmsg mtk_seninf mtk_cam_isp mtk_vcodec_enc mtk_fd mtk_vcodec_dec mtk_vcodec_common mtk_dip mtk_mdp3 videobuf2_dma_contig videobuf2_memops v4l2_mem2mem videobuf2_v4l2 videobuf2_common hid_google_hammer hci_uart btqca bluetooth dw9768 ov8856 ecdh_generic ov02a10 v4l2_fwnode mtk_scp mtk_rpmsg rpmsg_core mtk_scp_ipi ipt_MASQUERADE fuse iio_trig_sysfs cros_ec_sensors_ring cros_ec_sensors_sync cros_ec_light_prox cros_ec_sensors industrialio_triggered_buffer kfifo_buf cros_ec_activity cros_ec_sensors_core lzo_rle lzo_compress ath mac80211 zram cfg80211 joydev [last unloaded: ath10k_core]
    [ 303.744256] CPU: 1 PID: 3921 Comm: kworker/u16:10 Tainted: G W 4.19.95 #2
    [ 303.744273] Hardware name: MediaTek krane sku176 board (DT)
    [ 303.744301] Workqueue: events_unbound async_run_entry_fn
    [ 303.744325] pstate: 60000005 (nZCv daif -PAN -UAO)
    [ 303.744403] pc : ath10k_flush+0x54/0x104 [ath10k_core]
    [ 303.744480] lr : ath10k_flush+0x54/0x104 [ath10k_core]
    [ 303.744496] sp : ffffffdf080e77a0
    [ 303.744512] x29: ffffffdf080e77a0 x28: ffffffdef3730040
    [ 303.744534] x27: ffffff907c2240a0 x26: ffffffde6ff39afc
    [ 303.744556] x25: ffffffdef3730040 x24: ffffff907bf61018
    [ 303.744577] x23: ffffff907c2240a0 x22: ffffffde6ff39a50
    [ 303.744598] x21: 0000000000000000 x20: ffffffde6ff39a50
    [ 303.744620] x19: ffffffde6bac2420 x18: 000000000001831c
    [ 303.744641] x17: ffffff907c24a000 x16: 0000000000000037
    [ 303.744662] x15: ffffff907b49a568 x14: ffffff907cf332c1
    [ 303.744683] x13: 00000000000922ea x12: 0000000000000000
    [ 303.744704] x11: 0000000000000001 x10: 0000000000000007
    [ 303.744747] x9 : f2256b8c1de4bc00 x8 : f2256b8c1de4bc00
    [ 303.744768] x7 : ffffff907ab5e764 x6 : 0000000000000000
    [ 303.744789] x5 : 0000000000000080 x4 : 0000000000000001
    [ 303.744810] x3 : ffffffdf080e74a8 x2 : ffffff907aa91244
    [ 303.744831] x1 : ffffffdf080e74a8 x0 : 0000000000000024
    [ 303.744853] Call trace:
    [ 303.744929] ath10k_flush+0x54/0x104 [ath10k_core]
    [ 303.745098] __ieee80211_flush_queues+0x1dc/0x358 [mac80211]
    [ 303.745277] ieee80211_flush_queues+0x34/0x44 [mac80211]
    [ 303.745424] ieee80211_set_disassoc+0x108/0x5ec [mac80211]
    [ 303.745569] ieee80211_mgd_deauth+0x720/0x7d4 [mac80211]
    [ 303.745706] ieee80211_deauth+0x24/0x30 [mac80211]
    [ 303.745853] cfg80211_mlme_deauth+0x250/0x3bc [cfg80211]
    [ 303.745979] cfg80211_mlme_down+0x90/0xd0 [cfg80211]
    [ 303.746103] cfg80211_disconnect+0x340/0x3a0 [cfg80211]
    [ 303.746219] __cfg80211_leave+0xe4/0x17c [cfg80211]
    [ 303.746335] cfg80211_leave+0x38/0x50 [cfg80211]
    [ 303.746452] wiphy_suspend+0x84/0x5bc [cfg80211]
    [ 303.746467] dpm_run_callback+0x170/0x304
    [ 303.746477] __device_suspend+0x2dc/0x3e8
    [ 303.746487] async_suspend+0x2c/0xb0
    [ 303.746498] async_run_entry_fn+0x48/0xf8
    [ 303.746510] process_one_work+0x304/0x604
    [ 303.746521] worker_thread+0x248/0x3f4
    [ 303.746530] kthread+0x120/0x130
    [ 303.746542] ret_from_fork+0x10/0x18

    one sample's debugging log: it wait 3190 ms(5000 - 1810).

    1st ath10k_flush, it has 120 packets in tx queue of ath10k:
    -1513 [000] .... 25374.786005: ath10k_log_err: ath10k_sdio mmc1:0001:1 ath10k_flush drop:1, pending:120-0
    -1513 [000] ...1 25374.788375: ath10k_log_warn: ath10k_sdio mmc1:0001:1 ath10k_htt_tx_mgmt_inc_pending htt->num_pending_mgmt_tx:0
    -1500 [001] .... 25374.790143: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx work, eid:1, count:121

    2st ath10k_flush, it has 121 packets in tx queue of ath10k:
    -1513 [000] .... 25374.790571: ath10k_log_err: ath10k_sdio mmc1:0001:1 ath10k_flush drop:0, pending:121-0
    -1513 [000] .... 25374.791990: ath10k_log_err: ath10k_sdio mmc1:0001:1 ath10k_mac_wait_tx_complete state:1 pending:121-0
    -1508 [001] .... 25374.792696: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit update: delta:46
    -1508 [001] .... 25374.792700: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit total:46
    -1508 [001] .... 25374.792729: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx work, eid:1, count:121
    -1508 [001] .... 25374.792937: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx status:0, eid:1, req count:88, count:32, len:49792
    -1508 [001] .... 25374.793031: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx status:0, eid:1, req count:75, count:14, len:21784
    kworker/u16:0-25773 [003] .... 25374.793701: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx complete, eid:1, pending complete count:46
    -1881 [000] .... 25375.073178: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit update: delta:24
    -1881 [000] .... 25375.073182: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit total:24
    -1881 [000] .... 25375.073429: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx work, eid:1, count:75
    -1879 [001] .... 25375.074090: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx complete, eid:1, pending complete count:24
    -1881 [000] .... 25375.074123: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx status:0, eid:1, req count:51, count:24, len:37344
    -1879 [001] .... 25375.270126: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit update: delta:26
    -1879 [001] .... 25375.270130: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit total:26
    -1488 [000] .... 25375.270174: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx work, eid:1, count:51
    -1488 [000] .... 25375.270529: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx status:0, eid:1, req count:25, count:26, len:40456
    -1879 [001] .... 25375.270693: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx complete, eid:1, pending complete count:26
    -1488 [001] .... 25377.775885: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit update: delta:12
    -1488 [001] .... 25377.775890: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit total:12
    -1488 [001] .... 25377.775933: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx work, eid:1, count:25
    -1488 [001] .... 25377.776059: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx status:0, eid:1, req count:13, count:12, len:18672
    -1879 [001] .... 25377.776100: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx complete, eid:1, pending complete count:12
    -1488 [001] .... 25377.878079: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit update: delta:15
    -1488 [001] .... 25377.878087: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit total:15
    -1879 [000] .... 25377.878323: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx work, eid:1, count:13
    -1879 [000] .... 25377.878487: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx status:0, eid:1, req count:0, count:13, len:20228
    -1879 [000] .... 25377.878497: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx complete, eid:1, pending complete count:13
    -1488 [001] .... 25377.919927: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit update: delta:11
    -1488 [001] .... 25377.919932: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 credit total:13
    -1488 [001] .... 25377.919976: ath10k_log_dbg: ath10k_sdio mmc1:0001:1 bundle tx work, eid:1, count:0
    -1881 [000] .... 25377.982645: ath10k_log_warn: ath10k_sdio mmc1:0001:1 HTT_T2H_MSG_TYPE_MGMT_TX_COMPLETION status:0
    -1513 [001] .... 25377.982973: ath10k_log_err: ath10k_sdio mmc1:0001:1 ath10k_mac_wait_tx_complete time_left:1810, pending:0-0

    Flush all pending TX packets for the 1st ath10k_flush reduced the wait
    time of the 2nd ath10k_flush and then suspend take short time.

    This Patch only effect SDIO chips.

    Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00042.

    Signed-off-by: Wen Gong
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200415233730.10581-1-wgong@codeaurora.org
    Signed-off-by: Sasha Levin

    Wen Gong
     
  • [ Upstream commit c57673852062428cdeabdd6501ac8b8e4c302067 ]

    sup_wpa feature is getting after setting feature_disable flag.
    If firmware is supported sup_wpa feature, it's always enabled
    regardless of feature_disable flag.

    Fixes: b8a64f0e96c2 ("brcmfmac: support 4-way handshake offloading for WPA/WPA2-PSK")
    Signed-off-by: Jaehoon Chung
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200330052528.10503-1-jh80.chung@samsung.com
    Signed-off-by: Sasha Levin

    Jaehoon Chung
     
  • [ Upstream commit acb31476adc9ff271140cdd4d3c707ff0c97f5a4 ]

    Currently sta airtime is updated without any lock in case of
    host based airtime calculation. Which may result in accessing the
    invalid sta pointer in case of continuous station connect/disconnect.

    This patch fix the kernel null pointer dereference by updating the
    station airtime with proper RCU lock in case of host based airtime
    calculation.

    Proceeding with the analysis of "ARM Kernel Panic".
    The APSS crash happened due to OOPS on CPU 0.
    Crash Signature : Unable to handle kernel NULL pointer dereference
    at virtual address 00000300
    During the crash,
    PC points to "ieee80211_sta_register_airtime+0x1c/0x448 [mac80211]"
    LR points to "ath10k_txrx_tx_unref+0x17c/0x364 [ath10k_core]".
    The Backtrace obtained is as follows:
    [] (ieee80211_sta_register_airtime [mac80211]) from
    [] (ath10k_txrx_tx_unref+0x17c/0x364 [ath10k_core])
    [] (ath10k_txrx_tx_unref [ath10k_core]) from
    [] (ath10k_htt_txrx_compl_task+0xa50/0xfc0 [ath10k_core])
    [] (ath10k_htt_txrx_compl_task [ath10k_core]) from
    [] (ath10k_pci_napi_poll+0x50/0xf8 [ath10k_pci])
    [] (ath10k_pci_napi_poll [ath10k_pci]) from
    [] (net_rx_action+0xac/0x160)
    [] (net_rx_action) from [] (__do_softirq+0x104/0x294)
    [] (__do_softirq) from [] (run_ksoftirqd+0x30/0x90)
    [] (run_ksoftirqd) from [] (smpboot_thread_fn+0x25c/0x274)
    [] (smpboot_thread_fn) from [] (kthread+0xd8/0xec)

    Tested HW: QCA9888
    Tested FW: 10.4-3.10-00047

    Signed-off-by: Venkateswara Naralasetty
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/1585736290-17661-1-git-send-email-vnaralas@codeaurora.org
    Signed-off-by: Sasha Levin

    Venkateswara Naralasetty
     
  • [ Upstream commit 191f6b08bfef24e1a9641eaac96ed030a7be4599 ]

    the related system resources were not released when pci_iomap() return
    error in the rtw_pci_io_mapping() function. add pci_release_regions() to
    fix it.

    Fixes: e3037485c68ec1a ("rtw88: new Realtek 802.11ac driver")
    Cc: Andy Shevchenko
    Signed-off-by: Dejin Zheng
    Acked-by: Yan-Hsuan Chuang
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200504083442.3033-1-zhengdejin5@gmail.com
    Signed-off-by: Sasha Levin

    Dejin Zheng
     
  • [ Upstream commit d431f8939c1419854dfe89dd345387f5397c6edd ]

    The struct cfg80211_wowlan of NET_DETECT WoWLAN feature share the same
    struct cfg80211_sched_scan_request together with scheduled scan request
    feature, and max_sched_scan_reqs of wiphy is only used for sched scan,
    and ath10k does not support scheduled scan request feature, so ath10k
    does not set flag NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR, but ath10k
    set max_sched_scan_reqs of wiphy to a non zero value 1, then function
    nl80211_add_commands_unsplit of cfg80211 will set it support command
    NL80211_CMD_START_SCHED_SCAN because max_sched_scan_reqs is a non zero
    value, but actually ath10k not support it, then it leads a mismatch result
    for sched scan of cfg80211, then application shill found the mismatch and
    stop running case of MAC random address scan and then the case fail.

    After remove max_sched_scan_reqs value, it keeps match for sched scan and
    case of MAC random address scan pass.

    Tested with QCA6174 SDIO with firmware WLAN.RMH.4.4.1-00029.
    Tested with QCA6174 PCIe with firmware WLAN.RM.4.4.1-00110-QCARMSWP-1.

    Fixes: ce834e280f2f875 ("ath10k: support NET_DETECT WoWLAN feature")
    Signed-off-by: Wen Gong
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20191114050001.4658-1-wgong@codeaurora.org
    Signed-off-by: Sasha Levin

    Wen Gong
     
  • [ Upstream commit 3d1c60460fb2823a19ead9e6ec8f184dd7271aa7 ]

    There is a race condition, when the user writes 'hw-restart' and
    'hard' in the simulate_fw_crash debugfs file without any delay.
    In the above scenario, the firmware dump work queue(scheduled by
    'hard') should be handled gracefully, while the target is in the
    'hw-restart'.

    Tested HW: QCA9984
    Tested FW: 10.4-3.9.0.2-00044

    Co-developed-by: Govindaraj Saminathan
    Signed-off-by: Govindaraj Saminathan
    Signed-off-by: Maharaja Kennadyrajan
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/1585213077-28439-1-git-send-email-mkenna@codeaurora.org
    Signed-off-by: Sasha Levin

    Maharaja Kennadyrajan
     

17 Jun, 2020

7 commits

  • commit 2bbcaaee1fcbd83272e29f31e2bb7e70d8c49e05 upstream.

    In ath9k_hif_usb_rx_cb interface number is assumed to be 0.
    usb_ifnum_to_if(urb->dev, 0)
    But it isn't always true.

    The case reported by syzbot:
    https://lore.kernel.org/linux-usb/000000000000666c9c05a1c05d12@google.com
    usb 2-1: new high-speed USB device number 2 using dummy_hcd
    usb 2-1: config 1 has an invalid interface number: 2 but max is 0
    usb 2-1: config 1 has no interface number 0
    usb 2-1: New USB device found, idVendor=0cf3, idProduct=9271, bcdDevice=
    1.08
    usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    general protection fault, probably for non-canonical address
    0xdffffc0000000015: 0000 [#1] SMP KASAN
    KASAN: null-ptr-deref in range [0x00000000000000a8-0x00000000000000af]
    CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.6.0-rc5-syzkaller #0

    Call Trace
    __usb_hcd_giveback_urb+0x29a/0x550 drivers/usb/core/hcd.c:1650
    usb_hcd_giveback_urb+0x368/0x420 drivers/usb/core/hcd.c:1716
    dummy_timer+0x1258/0x32ae drivers/usb/gadget/udc/dummy_hcd.c:1966
    call_timer_fn+0x195/0x6f0 kernel/time/timer.c:1404
    expire_timers kernel/time/timer.c:1449 [inline]
    __run_timers kernel/time/timer.c:1773 [inline]
    __run_timers kernel/time/timer.c:1740 [inline]
    run_timer_softirq+0x5f9/0x1500 kernel/time/timer.c:1786
    __do_softirq+0x21e/0x950 kernel/softirq.c:292
    invoke_softirq kernel/softirq.c:373 [inline]
    irq_exit+0x178/0x1a0 kernel/softirq.c:413
    exiting_irq arch/x86/include/asm/apic.h:546 [inline]
    smp_apic_timer_interrupt+0x141/0x540 arch/x86/kernel/apic/apic.c:1146
    apic_timer_interrupt+0xf/0x20 arch/x86/entry/entry_64.S:829

    Reported-and-tested-by: syzbot+40d5d2e8a4680952f042@syzkaller.appspotmail.com
    Signed-off-by: Qiujun Huang
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200404041838.10426-6-hqjagain@gmail.com
    Signed-off-by: Greg Kroah-Hartman

    Qiujun Huang
     
  • commit 19d6c375d671ce9949a864fb9a03e19f5487b4d3 upstream.

    Add barrier to accessing the stack array skb_pool.

    The case reported by syzbot:
    https://lore.kernel.org/linux-usb/0000000000003d7c1505a2168418@google.com
    BUG: KASAN: stack-out-of-bounds in ath9k_hif_usb_rx_stream
    drivers/net/wireless/ath/ath9k/hif_usb.c:626 [inline]
    BUG: KASAN: stack-out-of-bounds in ath9k_hif_usb_rx_cb+0xdf6/0xf70
    drivers/net/wireless/ath/ath9k/hif_usb.c:666
    Write of size 8 at addr ffff8881db309a28 by task swapper/1/0

    Call Trace:
    ath9k_hif_usb_rx_stream drivers/net/wireless/ath/ath9k/hif_usb.c:626
    [inline]
    ath9k_hif_usb_rx_cb+0xdf6/0xf70
    drivers/net/wireless/ath/ath9k/hif_usb.c:666
    __usb_hcd_giveback_urb+0x1f2/0x470 drivers/usb/core/hcd.c:1648
    usb_hcd_giveback_urb+0x368/0x420 drivers/usb/core/hcd.c:1713
    dummy_timer+0x1258/0x32ae drivers/usb/gadget/udc/dummy_hcd.c:1966
    call_timer_fn+0x195/0x6f0 kernel/time/timer.c:1404
    expire_timers kernel/time/timer.c:1449 [inline]
    __run_timers kernel/time/timer.c:1773 [inline]
    __run_timers kernel/time/timer.c:1740 [inline]
    run_timer_softirq+0x5f9/0x1500 kernel/time/timer.c:1786

    Reported-and-tested-by: syzbot+d403396d4df67ad0bd5f@syzkaller.appspotmail.com
    Signed-off-by: Qiujun Huang
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200404041838.10426-5-hqjagain@gmail.com
    Signed-off-by: Greg Kroah-Hartman

    Qiujun Huang
     
  • commit e4ff08a4d727146bb6717a39a8d399d834654345 upstream.

    Write out of slab bounds. We should check epid.

    The case reported by syzbot:
    https://lore.kernel.org/linux-usb/0000000000006ac55b05a1c05d72@google.com
    BUG: KASAN: use-after-free in htc_process_conn_rsp
    drivers/net/wireless/ath/ath9k/htc_hst.c:131 [inline]
    BUG: KASAN: use-after-free in ath9k_htc_rx_msg+0xa25/0xaf0
    drivers/net/wireless/ath/ath9k/htc_hst.c:443
    Write of size 2 at addr ffff8881cea291f0 by task swapper/1/0

    Call Trace:
    htc_process_conn_rsp drivers/net/wireless/ath/ath9k/htc_hst.c:131
    [inline]
    ath9k_htc_rx_msg+0xa25/0xaf0
    drivers/net/wireless/ath/ath9k/htc_hst.c:443
    ath9k_hif_usb_reg_in_cb+0x1ba/0x630
    drivers/net/wireless/ath/ath9k/hif_usb.c:718
    __usb_hcd_giveback_urb+0x29a/0x550 drivers/usb/core/hcd.c:1650
    usb_hcd_giveback_urb+0x368/0x420 drivers/usb/core/hcd.c:1716
    dummy_timer+0x1258/0x32ae drivers/usb/gadget/udc/dummy_hcd.c:1966
    call_timer_fn+0x195/0x6f0 kernel/time/timer.c:1404
    expire_timers kernel/time/timer.c:1449 [inline]
    __run_timers kernel/time/timer.c:1773 [inline]
    __run_timers kernel/time/timer.c:1740 [inline]
    run_timer_softirq+0x5f9/0x1500 kernel/time/timer.c:1786

    Reported-and-tested-by: syzbot+b1c61e5f11be5782f192@syzkaller.appspotmail.com
    Signed-off-by: Qiujun Huang
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200404041838.10426-4-hqjagain@gmail.com
    Signed-off-by: Greg Kroah-Hartman

    Qiujun Huang
     
  • commit abeaa85054ff8cfe8b99aafc5c70ea067e5d0908 upstream.

    Free wmi later after cmd urb has been killed, as urb cb will access wmi.

    the case reported by syzbot:
    https://lore.kernel.org/linux-usb/0000000000000002fc05a1d61a68@google.com
    BUG: KASAN: use-after-free in ath9k_wmi_ctrl_rx+0x416/0x500
    drivers/net/wireless/ath/ath9k/wmi.c:215
    Read of size 1 at addr ffff8881cef1417c by task swapper/1/0

    Call Trace:

    ath9k_wmi_ctrl_rx+0x416/0x500 drivers/net/wireless/ath/ath9k/wmi.c:215
    ath9k_htc_rx_msg+0x2da/0xaf0
    drivers/net/wireless/ath/ath9k/htc_hst.c:459
    ath9k_hif_usb_reg_in_cb+0x1ba/0x630
    drivers/net/wireless/ath/ath9k/hif_usb.c:718
    __usb_hcd_giveback_urb+0x29a/0x550 drivers/usb/core/hcd.c:1650
    usb_hcd_giveback_urb+0x368/0x420 drivers/usb/core/hcd.c:1716
    dummy_timer+0x1258/0x32ae drivers/usb/gadget/udc/dummy_hcd.c:1966
    call_timer_fn+0x195/0x6f0 kernel/time/timer.c:1404
    expire_timers kernel/time/timer.c:1449 [inline]
    __run_timers kernel/time/timer.c:1773 [inline]
    __run_timers kernel/time/timer.c:1740 [inline]
    run_timer_softirq+0x5f9/0x1500 kernel/time/timer.c:1786

    Reported-and-tested-by: syzbot+5d338854440137ea0fef@syzkaller.appspotmail.com
    Signed-off-by: Qiujun Huang
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200404041838.10426-3-hqjagain@gmail.com
    Signed-off-by: Greg Kroah-Hartman

    Qiujun Huang
     
  • commit ced21a4c726bdc60b1680c050a284b08803bc64c upstream.

    The skb is consumed by htc_send_epid, so it needn't release again.

    The case reported by syzbot:

    https://lore.kernel.org/linux-usb/000000000000590f6b05a1c05d15@google.com
    usb 1-1: ath9k_htc: Firmware ath9k_htc/htc_9271-1.4.0.fw requested
    usb 1-1: ath9k_htc: Transferred FW: ath9k_htc/htc_9271-1.4.0.fw, size:
    51008
    usb 1-1: Service connection timeout for: 256
    ==================================================================
    BUG: KASAN: use-after-free in atomic_read
    include/asm-generic/atomic-instrumented.h:26 [inline]
    BUG: KASAN: use-after-free in refcount_read include/linux/refcount.h:134
    [inline]
    BUG: KASAN: use-after-free in skb_unref include/linux/skbuff.h:1042
    [inline]
    BUG: KASAN: use-after-free in kfree_skb+0x32/0x3d0 net/core/skbuff.c:692
    Read of size 4 at addr ffff8881d0957994 by task kworker/1:2/83

    Call Trace:
    kfree_skb+0x32/0x3d0 net/core/skbuff.c:692
    htc_connect_service.cold+0xa9/0x109
    drivers/net/wireless/ath/ath9k/htc_hst.c:282
    ath9k_wmi_connect+0xd2/0x1a0 drivers/net/wireless/ath/ath9k/wmi.c:265
    ath9k_init_htc_services.constprop.0+0xb4/0x650
    drivers/net/wireless/ath/ath9k/htc_drv_init.c:146
    ath9k_htc_probe_device+0x25a/0x1d80
    drivers/net/wireless/ath/ath9k/htc_drv_init.c:959
    ath9k_htc_hw_init+0x31/0x60
    drivers/net/wireless/ath/ath9k/htc_hst.c:501
    ath9k_hif_usb_firmware_cb+0x26b/0x500
    drivers/net/wireless/ath/ath9k/hif_usb.c:1187
    request_firmware_work_func+0x126/0x242
    drivers/base/firmware_loader/main.c:976
    process_one_work+0x94b/0x1620 kernel/workqueue.c:2264
    worker_thread+0x96/0xe20 kernel/workqueue.c:2410
    kthread+0x318/0x420 kernel/kthread.c:255
    ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352

    Allocated by task 83:
    kmem_cache_alloc_node+0xdc/0x330 mm/slub.c:2814
    __alloc_skb+0xba/0x5a0 net/core/skbuff.c:198
    alloc_skb include/linux/skbuff.h:1081 [inline]
    htc_connect_service+0x2cc/0x840
    drivers/net/wireless/ath/ath9k/htc_hst.c:257
    ath9k_wmi_connect+0xd2/0x1a0 drivers/net/wireless/ath/ath9k/wmi.c:265
    ath9k_init_htc_services.constprop.0+0xb4/0x650
    drivers/net/wireless/ath/ath9k/htc_drv_init.c:146
    ath9k_htc_probe_device+0x25a/0x1d80
    drivers/net/wireless/ath/ath9k/htc_drv_init.c:959
    ath9k_htc_hw_init+0x31/0x60
    drivers/net/wireless/ath/ath9k/htc_hst.c:501
    ath9k_hif_usb_firmware_cb+0x26b/0x500
    drivers/net/wireless/ath/ath9k/hif_usb.c:1187
    request_firmware_work_func+0x126/0x242
    drivers/base/firmware_loader/main.c:976
    process_one_work+0x94b/0x1620 kernel/workqueue.c:2264
    worker_thread+0x96/0xe20 kernel/workqueue.c:2410
    kthread+0x318/0x420 kernel/kthread.c:255
    ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352

    Freed by task 0:
    kfree_skb+0x102/0x3d0 net/core/skbuff.c:690
    ath9k_htc_txcompletion_cb+0x1f8/0x2b0
    drivers/net/wireless/ath/ath9k/htc_hst.c:356
    hif_usb_regout_cb+0x10b/0x1b0
    drivers/net/wireless/ath/ath9k/hif_usb.c:90
    __usb_hcd_giveback_urb+0x29a/0x550 drivers/usb/core/hcd.c:1650
    usb_hcd_giveback_urb+0x368/0x420 drivers/usb/core/hcd.c:1716
    dummy_timer+0x1258/0x32ae drivers/usb/gadget/udc/dummy_hcd.c:1966
    call_timer_fn+0x195/0x6f0 kernel/time/timer.c:1404
    expire_timers kernel/time/timer.c:1449 [inline]
    __run_timers kernel/time/timer.c:1773 [inline]
    __run_timers kernel/time/timer.c:1740 [inline]
    run_timer_softirq+0x5f9/0x1500 kernel/time/timer.c:1786
    __do_softirq+0x21e/0x950 kernel/softirq.c:292

    Reported-and-tested-by: syzbot+9505af1ae303dabdc646@syzkaller.appspotmail.com
    Signed-off-by: Qiujun Huang
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200404041838.10426-2-hqjagain@gmail.com
    Signed-off-by: Greg Kroah-Hartman

    Qiujun Huang
     
  • [ Upstream commit b3f20e098293892388d6a0491d6bbb2efb46fbff ]

    We had a check on !NVM_EXT and then a check for NVM_SDP in the else
    block of this if. The else block, obviously, could only be reached if
    using NVM_EXT, so it would never be NVM_SDP.

    Fix that by checking whether the nvm_type is IWL_NVM instead of
    checking for !IWL_NVM_EXT to solve this issue.

    Reported-by: Stefan Sperling
    Signed-off-by: Luca Coelho
    Signed-off-by: Sasha Levin

    Luca Coelho
     
  • [ Upstream commit 450edd2805982d14ed79733a82927d2857b27cac ]

    Some devices like TP-Link TL-WN722N produces this kind of messages
    frequently.

    kernel: ath: phy0: Short RX data len, dropping (dlen: 4)

    This warning is useful for developers to recognize that the device
    (Wi-Fi dongle or USB hub etc) is noisy but not for general users. So
    this patch make this warning to debug message.

    Reported-By: Denis
    Ref: https://bugzilla.kernel.org/show_bug.cgi?id=207539
    Fixes: cd486e627e67 ("ath9k_htc: Discard undersized packets")
    Signed-off-by: Masashi Honma
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200504214443.4485-1-masashi.honma@gmail.com
    Signed-off-by: Sasha Levin

    Masashi Honma
     

07 Jun, 2020

3 commits

  • commit 11e7a91994c29da96d847f676be023da6a2c1359 upstream.

    The problem is that we always copy a minimum of ETH_ZLEN (60) bytes from
    skb->data even when skb->len is less than ETH_ZLEN so it leads to a read
    overflow.

    The fix is to pad skb->data to at least ETH_ZLEN bytes.

    Cc:
    Reported-by: Hu Jiahui
    Signed-off-by: Dan Carpenter
    Reviewed-by: Eric Dumazet
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200527184830.GA1164846@mwanda
    Signed-off-by: Greg Kroah-Hartman

    Dan Carpenter
     
  • commit b2934279c3e9719145ff4090d4ab951e340df17e upstream.

    The current version has a new USB ID and reports as an 0x7632 device.
    Adding the IDs results in it working out of the box.

    Signed-off-by: Matthew Garrett
    Signed-off-by: Felix Fietkau
    Signed-off-by: Greg Kroah-Hartman

    Matthew Garrett
     
  • commit 63e49a9fdac1b4e97ac26cb3fe953f210d83bc53 upstream.

    This patch adds the AirVasT USB wireless devices 124a:4026
    to the list of supported devices. It's using the ISL3886
    usb firmware. Without this modification, the wiki adapter
    is not recognized.

    Cc:
    Signed-off-by: Giuseppe Marco Randazzo
    Signed-off-by: Christian Lamparter [formatted, reworded]
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/20200405220659.45621-1-chunkeey@gmail.com
    Signed-off-by: Greg Kroah-Hartman

    Giuseppe Marco Randazzo
     

29 Apr, 2020

6 commits

  • commit e6d419f943318e2b903e380dfd52a8dda6db3021 upstream.

    The function iwl_mvm_remove_inactive_tids() returns bool, so we
    should just check "if (ret)", not "if (ret >= 0)" (which would
    do nothing useful here). We obviously therefore cannot use the
    return value of the function for the free_queue, we need to use
    the queue (i) we're currently dealing with instead.

    Cc: stable@vger.kernel.org # v5.4+
    Signed-off-by: Johannes Berg
    Signed-off-by: Luca Coelho
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/iwlwifi.20200417100405.9d862ed72535.I9e27ccc3ee3c8855fc13682592b571581925dfbd@changeid
    Signed-off-by: Greg Kroah-Hartman

    Johannes Berg
     
  • commit 38af8d5a90a8c3b41ff0484855e24bd55b43ce9d upstream.

    As this was not supposed to be enabled to begin with.

    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Ilan Peer
    Signed-off-by: Luca Coelho
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/iwlwifi.20200417100405.53dbc3c6c36b.Idfe118546b92cc31548b2211472a5303c7de5909@changeid
    Signed-off-by: Greg Kroah-Hartman

    Ilan Peer
     
  • commit e5b72e3bc4763152e24bf4b8333bae21cc526c56 upstream.

    Due to some hardware issues, queue 31 isn't usable on devices that have
    32 queues (7000, 8000, 9000 families), which is correctly reflected in
    the configuration and TX queue initialization.

    However, the firmware API and queue allocation code assumes that there
    are 32 queues, and if something actually attempts to use #31 this leads
    to a NULL-pointer dereference since it's not allocated.

    Fix this by limiting to 31 in the IWL_MVM_DQA_MAX_DATA_QUEUE, and also
    add some code to catch this earlier in the future, if the configuration
    changes perhaps.

    Cc: stable@vger.kernel.org # v4.9+
    Signed-off-by: Johannes Berg
    Signed-off-by: Luca Coelho
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/iwlwifi.20200417100405.98a79be2db6a.I3a4af6b03b87a6bc18db9b1ff9a812f397bee1fc@changeid
    Signed-off-by: Greg Kroah-Hartman

    Johannes Berg
     
  • commit 290d5e4951832e39d10f4184610dbf09038f8483 upstream.

    We reset statistics also in case that we didn't reassoc so in
    this cases keep last beacon counter.

    Cc: stable@vger.kernel.org # v4.19+
    Signed-off-by: Mordechay Goodstein
    Signed-off-by: Luca Coelho
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/iwlwifi.20200417100405.1f9142751fbc.Ifbfd0f928a0a761110b8f4f2ca5483a61fb21131@changeid
    Signed-off-by: Greg Kroah-Hartman

    Mordechay Goodstein
     
  • commit b98b33d5560a2d940f3b80f6768a6177bf3dfbc0 upstream.

    The iwl_trans_pcie_dyn_txq_free() function only releases the frames
    that may be left on the queue by calling iwl_pcie_gen2_txq_unmap(),
    but doesn't actually free the DMA ring or byte-count tables for the
    queue. This leads to pretty large memory leaks (at least before my
    queue size improvements), in particular in monitor/sniffer mode on
    channel hopping since this happens on every channel change.

    This was also now more evident after the move to a DMA pool for the
    byte count tables, showing messages such as

    BUG iwlwifi:bc (...): Objects remaining in iwlwifi:bc on __kmem_cache_shutdown()

    This fixes https://bugzilla.kernel.org/show_bug.cgi?id=206811.

    Signed-off-by: Johannes Berg
    Fixes: 6b35ff91572f ("iwlwifi: pcie: introduce a000 TX queues management")
    Cc: stable@vger.kernel.org # v4.14+
    Signed-off-by: Luca Coelho
    Signed-off-by: Kalle Valo
    Link: https://lore.kernel.org/r/iwlwifi.20200417100405.f5f4c4193ec1.Id5feebc9b4318041913a9c89fc1378bb5454292c@changeid
    Signed-off-by: Greg Kroah-Hartman

    Johannes Berg
     
  • commit 6cb5f3ea4654faf8c28b901266e960b1a4787b26 upstream.

    When fixing the initialization race, we neglected to account for
    the fact that debugfs is initialized in wiphy_register(), and
    some debugfs things went missing (or rather were rerooted to the
    global debugfs root).

    Fix this by adding debugfs entries only after wiphy_register().
    This requires some changes in the rate control code since it
    currently adds debugfs at alloc time, which can no longer be
    done after the reordering.

    Reported-by: Jouni Malinen
    Reported-by: kernel test robot
    Reported-by: Hauke Mehrtens
    Reported-by: Felix Fietkau
    Cc: stable@vger.kernel.org
    Fixes: 52e04b4ce5d0 ("mac80211: fix race in ieee80211_register_hw()")
    Signed-off-by: Johannes Berg
    Acked-by: Sumit Garg
    Link: https://lore.kernel.org/r/20200423111344.0e00d3346f12.Iadc76a03a55093d94391fc672e996a458702875d@changeid
    Signed-off-by: Johannes Berg
    Signed-off-by: Greg Kroah-Hartman

    Johannes Berg
     

21 Apr, 2020

1 commit

  • commit 7ea862048317aa76d0f22334202779a25530980c upstream.

    syzbot reports a warning:

    precision 33020 too large
    WARNING: CPU: 0 PID: 9618 at lib/vsprintf.c:2471 set_precision+0x150/0x180 lib/vsprintf.c:2471
    vsnprintf+0xa7b/0x19a0 lib/vsprintf.c:2547
    kvasprintf+0xb2/0x170 lib/kasprintf.c:22
    kasprintf+0xbb/0xf0 lib/kasprintf.c:59
    hwsim_del_radio_nl+0x63a/0x7e0 drivers/net/wireless/mac80211_hwsim.c:3625
    genl_family_rcv_msg_doit net/netlink/genetlink.c:672 [inline]
    ...
    entry_SYSCALL_64_after_hwframe+0x49/0xbe

    Thus it seems that kasprintf() with "%.*s" format can not be used for
    duplicating a string with arbitrary length. Replace it with kstrndup().

    Note that later this string is limited to NL80211_WIPHY_NAME_MAXLEN == 64,
    but the code is simpler this way.

    Reported-by: syzbot+6693adf1698864d21734@syzkaller.appspotmail.com
    Reported-by: syzbot+a4aee3f42d7584d76761@syzkaller.appspotmail.com
    Cc: stable@kernel.org
    Signed-off-by: Tuomas Tynkkynen
    Link: https://lore.kernel.org/r/20200410123257.14559-1-tuomas.tynkkynen@iki.fi
    [johannes: add note about length limit]
    Signed-off-by: Johannes Berg
    Signed-off-by: Greg Kroah-Hartman

    Tuomas Tynkkynen