• Harshitha Prem's avatar
    wifi: ath12k: Ignore fragments from uninitialized peer in dp · bbc86757
    Harshitha Prem authored
    When max virtual ap interfaces are configured in all the bands with
    ACS and hostapd restart is done every 60s, a crash is observed at
    random times.
    
    In the above scenario, a fragmented packet is received for self peer,
    for which rx_tid and rx_frags are not initialized in datapath.
    While handling this fragment, crash is observed as the rx_frag list
    is uninitialized and when we walk in ath12k_dp_rx_h_sort_frags,
    skb null leads to exception.
    
    To address this, before processing received fragments we check
    dp_setup_done flag is set to ensure that peer has completed its
    dp peer setup for fragment queue, else ignore processing the
    fragments.
    
    Call trace:
        PC points to "ath12k_dp_process_rx_err+0x4e8/0xfcc [ath12k]"
        LR points to "ath12k_dp_process_rx_err+0x480/0xfcc [ath12k]".
        The Backtrace obtained is as follows:
        ath12k_dp_process_rx_err+0x4e8/0xfcc [ath12k]
        ath12k_dp_service_srng+0x78/0x260 [ath12k]
        ath12k_pci_write32+0x990/0xb0c [ath12k]
        __napi_poll+0x30/0xa4
        net_rx_action+0x118/0x270
        __do_softirq+0x10c/0x244
        irq_exit+0x64/0xb4
        __handle_domain_irq+0x88/0xac
        gic_handle_irq+0x74/0xbc
        el1_irq+0xf0/0x1c0
        arch_cpu_idle+0x10/0x18
        do_idle+0x104/0x248
        cpu_startup_entry+0x20/0x64
        rest_init+0xd0/0xdc
        arch_call_rest_init+0xc/0x14
    
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
    Signed-off-by: default avatarHarshitha Prem <quic_hprem@quicinc.com>
    Signed-off-by: default avatarKalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/20230821130343.29495-2-quic_hprem@quicinc.com
    bbc86757
peer.h 2.01 KB