{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2025-39732",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2025-39732"
  ],
  "published": "2025-09-07T15:16:37Z",
  "summary": "wifi: ath11k: fix sleeping-in-atomic in ath11k_mac_op_set_bitrate_mask()",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nwifi: ath11k: fix sleeping-in-atomic in ath11k_mac_op_set_bitrate_mask()\n\nath11k_mac_disable_peer_fixed_rate() is passed as the iterator to\nieee80211_iterate_stations_atomic(). Note in this case the iterator is\nrequired to be atomic, however ath11k_mac_disable_peer_fixed_rate() does\nnot follow it as it might sleep. Consequently below warning is seen:\n\nBUG: sleeping function called from invalid context at wmi.c:304\nCall Trace:\n <TASK>\n dump_stack_lvl\n __might_resched.cold\n ath11k_wmi_cmd_send\n ath11k_wmi_set_peer_param\n ath11k_mac_disable_peer_fixed_rate\n ieee80211_iterate_stations_atomic\n ath11k_mac_op_set_bitrate_mask.cold\n\nChange to ieee80211_iterate_stations_mtx() to fix this issue.\n\nTested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.30",
  "severity": [
    {
      "type": "CVSS_V3",
      "score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"
    }
  ],
  "affected": [
    {
      "package": {
        "ecosystem": "Raspberry Pi OS:12",
        "name": "linux"
      },
      "versions": [
        "1:6.1.47-1+rpt4"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-2712",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v6",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7l",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v8",
            "binary_version": "1:6.1.47-1+rpt4"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.1.47-1+rpt4": {
            "linux_commit": "655fc658a15ae7a6f37103754adb39ba52a9a14e",
            "upstream_version": "6.1.47",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": null,
            "compiled_filter": false
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2025-39732"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/9c0e3144924c7db701575a73af341d33184afeaf"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/7d4d0db0dc9424de2bdc0b45e919e4892603356f"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/6bdef22d540258ca06f079f7b6ae100669a19b47"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/65c12b104cb942d588a1a093acc4537fb3d3b129"
    }
  ],
  "database_specific": {
    "source": "https://git.kernel.org/pub/scm/linux/security/vulns.git",
    "upstream_modified": "2026-08-05T12:19:11Z",
    "severity": {
      "source": "kernel CNA",
      "cvss_v3_score": 7.8,
      "cvss_v3_severity": "High",
      "scenario": "AV:L - The vulnerable driver op is only reachable through local configuration interfaces \u2014 the nl80211 netlink command NL80211_CMD_SET_TX_BITRATE_MASK or the legacy WEXT SIOCSIWRATE ioctl on the wireless netdev. No received 802.11 frame or remote peer action can invoke ath11k_mac_op_set_bitrate_mask(), so the attack surface is local syscall/netlink only.\nAC:L - The atomic-context violation is unconditional: every invocation of the affected branches runs a might_sleep()/wait_event_timeout() callback inside rcu_read_lock(), and the attacker fully controls the bitrate mask that selects those branches. Extending it to an actual block (and thus a grace-period-completing context switch) only requires having peers associated and saturating WMI credits, both of which the attacker can arrange.\nPR:L - Both entry points gate on CAP_NET_ADMIN (GENL_UNS_ADMIN_PERM for nl80211, capable(CAP_NET_ADMIN) for WEXT), which is a namespace-aware network-administration capability rather than real root, and is routinely delegated to unprivileged-facing daemons (wpa_supplicant, NetworkManager helpers, hostapd) on phones, APs and embedded gateways.\nUI:N - The attacker performs the bitrate-mask configuration itself; no second user has to open a file, mount media, or take any action for the bug to fire.\nS:U - The fault, the corrupted RCU-protected station list, and the resulting crash all stay within the same kernel security authority on the host; no VM, IOMMU, container, or sandbox boundary is crossed.\nC:H - Blocking for up to WMI_SEND_TIMEOUT_HZ inside the rcu_read_lock() of __iterate_stations() lets the grace period complete on non-preemptible-RCU builds, so a concurrently destroyed sta_info can be freed and reallocated while the iterator is parked on it; the resumed list_for_each_entry_rcu() then reads freed/attacker-groomed heap through sta->addr and the list pointers, leaking that content into the WMI peer command and the ath11k_warn(\"...for STA %pM\") log line.\nI:H - The same use-after-free lets the traversal follow a dangling next pointer into reclaimed, attacker-sprayable memory and feed the resulting garbage into firmware peer-parameter commands, and __schedule_bug() additionally resets the preempt count, leaving the scheduler's atomic-nesting state inconsistent for the remainder of the task.\nA:H - The bug reliably produces a \"BUG: sleeping function called from invalid context\" splat plus a scheduling-while-atomic BUG with full call trace, which escalates to a full panic on panic_on_warn/panic_on_oops kernels common in embedded and cloud images, and the RCU-list use-after-free can oops the kernel outright."
    }
  }
}
