• Alexander Wetzel's avatar
    rtl818x: Prevent using not initialized queues · 746285cf
    Alexander Wetzel authored
    Using not existing queues can panic the kernel with rtl8180/rtl8185 cards.
    Ignore the skb priority for those cards, they only have one tx queue. Pierre
    Asselin (pa@panix.com) reported the kernel crash in the Gentoo forum:
    
    https://forums.gentoo.org/viewtopic-t-1147832-postdays-0-postorder-asc-start-25.html
    
    He also confirmed that this patch fixes the issue. In summary this happened:
    
    After updating wpa_supplicant from 2.9 to 2.10 the kernel crashed with a
    "divide error: 0000" when connecting to an AP. Control port tx now tries to
    use IEEE80211_AC_VO for the priority, which wpa_supplicants starts to use in
    2.10.
    
    Since only the rtl8187se part of the driver supports QoS, the priority
    of the skb is set to IEEE80211_AC_BE (2) by mac80211 for rtl8180/rtl8185
    cards.
    
    rtl8180 is then unconditionally reading out the priority and finally crashes on
    drivers/net/wireless/realtek/rtl818x/rtl8180/dev.c line 544 without this
    patch:
    	idx = (ring->idx + skb_queue_len(&ring->queue)) % ring->entries
    
    "ring->entries" is zero for rtl8180/rtl8185 cards, tx_ring[2] never got
    initialized.
    
    Cc: stable@vger.kernel.org
    Reported-by: pa@panix.com
    Tested-by: pa@panix.com
    Signed-off-by: default avatarAlexander Wetzel <alexander@wetzel-home.de>
    Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20220422145228.7567-1-alexander@wetzel-home.de
    746285cf
dev.c 56.2 KB