Description
In the Linux kernel, the following vulnerability has been resolved: wifi: cfg80211: use wiphy work for socket owner autodisconnect nl80211_netlink_notify() walks the cfg80211 wireless device list when a NETLINK_GENERIC socket is released. If the socket owns a connection, the notifier queues the embedded wdev->disconnect_wk work item. That work is a plain work_struct today. NETDEV_GOING_DOWN cancels it, but a NETLINK_URELEASE notifier that already observed conn_owner_nlportid can queue it after that cancel returns. _cfg80211_unregister_wdev() then removes the wdev from the list and waits for RCU readers, but synchronize_net() does not drain work queued by such a reader. Make the autodisconnect work a wiphy_work instead. The callback already needs the wiphy mutex, and wiphy_work runs under that mutex. This lets teardown cancel pending autodisconnect work while holding the mutex, without a cancel_work_sync() vs. worker locking concern. Also cancel the wiphy work after list_del_rcu() and synchronize_net(). Any NETLINK_URELEASE notifier that had already reached the wdev list has then either queued the work and it is removed, or can no longer find the wdev.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
bd2522b168847106c1885f0319a2833bdf88bf9a to < c55590e4c69e0fd194df6d20bc35381c201d99e1affectedbd2522b168847106c1885f0319a2833bdf88bf9a to < 4087a9ba4ece70297a4174afaa41c0b700302b65affectedbd2522b168847106c1885f0319a2833bdf88bf9a to < c2ddd180bbee766cf7359473d623423ea9485d93affectedbd2522b168847106c1885f0319a2833bdf88bf9a to < 6d6123fef5a4af175cc6b6b12a03dd0f3c240b79affectedbd2522b168847106c1885f0319a2833bdf88bf9a to < 0c2ed186bbe14304415476d6707b747dddcd8583affected
Linux Linux
Default version status: affected
4.11affected0 to < 4.11unaffected6.6.160 to ≤ 6.6.*unaffected6.12.114 to ≤ 6.12.*unaffected6.18.57 to ≤ 6.18.*unaffected7.1.6 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/c55590e4c69e0fd194df6d20bc35381c201d99e1 ↗
- https://git.kernel.org/stable/c/4087a9ba4ece70297a4174afaa41c0b700302b65 ↗
- https://git.kernel.org/stable/c/c2ddd180bbee766cf7359473d623423ea9485d93 ↗
- https://git.kernel.org/stable/c/6d6123fef5a4af175cc6b6b12a03dd0f3c240b79 ↗
- https://git.kernel.org/stable/c/0c2ed186bbe14304415476d6707b747dddcd8583 ↗