Description
In the Linux kernel, the following vulnerability has been resolved: tipc: avoid busy looping in tipc_exit_net() Blamed commit introduced a busy-wait loop in tipc_exit_net() to wait for pending UDP bearer cleanup works to complete: while (atomic_read(&tn->wq_count)) cond_resched(); This loop can busy-wait for a long time if cond_resched() is a NOP. This typically happens if the netns exit is executed by a high priority task, or under kernels configured without preemption (CONFIG_PREEMPT_NONE). In such cases, it wastes CPU cycles and can lead to soft lockups. Fix this by replacing the busy loop with wait_var_event(), allowing the thread to sleep properly until the work queue count reaches zero. Accordingly, update cleanup_bearer() to use atomic_dec_and_test() and wake_up_var() to wake up the waiter when the count drops to zero. This uses the global wait queue hash table, avoiding the need to bloat struct tipc_net with a wait_queue_head_t. The atomic_dec_and_test() provides the necessary memory barrier to ensure the wakeup is not missed.
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
04c26faa51d1e2fe71cf13c45791f5174c37f986 to < 772769859226a5b004442403510acb58a1c32e72affected04c26faa51d1e2fe71cf13c45791f5174c37f986 to < 99b82c8452887408ea908fdfa5df33c4a5dfa88faffected04c26faa51d1e2fe71cf13c45791f5174c37f986 to < 110bb16d37bdba03213156c0df37e7119c190936affected04c26faa51d1e2fe71cf13c45791f5174c37f986 to < 7672973957e3e20780afe5937a9fec70b72bc060affected04c26faa51d1e2fe71cf13c45791f5174c37f986 to < 522d1d950b9e3b68190a6de7534827c8dccedb73affected04c26faa51d1e2fe71cf13c45791f5174c37f986 to < c1481c94e74c955e0448ddf46b8615a44d840c1eaffectedd1f76dfadaf8f47ed1753f97dbcbd41c16215ffaaffected5195ec5e365a2a9331bfeb585b613a6e94f98dbaaffectedb9f5b7ad4ac3af006443f535b1ce7bff1d130d7daffected5.4.124 to < 5.5affected5.10.42 to < 5.11affected5.12.9 to < 5.13affected
Linux Linux
Default version status: affected
5.13affected0 to < 5.13unaffected6.1.191 to ≤ 6.1.*unaffected6.6.160 to ≤ 6.6.*unaffected6.12.114 to ≤ 6.12.*unaffected6.18.57 to ≤ 6.18.*unaffected7.1.5 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/772769859226a5b004442403510acb58a1c32e72 ↗
- https://git.kernel.org/stable/c/99b82c8452887408ea908fdfa5df33c4a5dfa88f ↗
- https://git.kernel.org/stable/c/110bb16d37bdba03213156c0df37e7119c190936 ↗
- https://git.kernel.org/stable/c/7672973957e3e20780afe5937a9fec70b72bc060 ↗
- https://git.kernel.org/stable/c/522d1d950b9e3b68190a6de7534827c8dccedb73 ↗
- https://git.kernel.org/stable/c/c1481c94e74c955e0448ddf46b8615a44d840c1e ↗