Description
In the Linux kernel, the following vulnerability has been resolved: openvswitch: vport: fix self-deadlock on release of tunnel ports vports are used concurrently and protected by RCU, so netdev_put() must happen after the RCU grace period. So, either in an RCU call or after the synchronize_net(). The rtnl_delete_link() must happen under RTNL and so can't be executed in RCU context. Calling synchronize_net() while holding RTNL is not a good idea for performance and system stability under load in general, so calling netdev_put() in RCU call is the right solution here. However, when the device is deleted, rtnl_unlock() will call netdev_run_todo() and block until all the references are gone. In the current code this means that we never reach the call_rcu() and the vport is never freed and the reference is never released, causing a self-deadlock on device removal. Fix that by moving the rcu_call() before the rtnl_unlock(), so the scheduled RCU callback will be executed when synchronize_net() is called from the rtnl_unlock()->netdev_run_todo() while the RTNL itself is already released.
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
f0ec49d3a39c1f5a4f3270ea27ca0854fad2a2a2 to < 3600033f31b1afa16d73a24905eec9ee1d222b97affected9d56aced21fb9c104e8a3f3be9b21fbafe448ffc to < 8ae6c15fc473c9ad03b0173330cce9a092c76154affected42f0d3d81209654c08ffdde5a34b9b92d2645896 to < c741433f6c8dcdecd1d9549d89053761fd1ea413affectedbbe7bd722bfaea36aab3da6cc60fb4a05c644643 to < 6522d59fb7de55ce0f0f285d962243ddffebb01faffected98b726ab5e2a4811e27c28e4d041f75bba147eab to < 3df75fff46b1517eb479d8e6b8e3500763715dd0affected6931d21f87bc6d657f145798fad0bf077b82486c to < 366c482965c673565ecb8bcfb15d5548f13a6a10affected6931d21f87bc6d657f145798fad0bf077b82486c to < aa69918bd418e700309fdd08509dba324fb24296affectedb8c56a3fc5d879c0928f207a756b0f067f06c6a8affected6.1.168 to < 6.1.175affected6.6.131 to < 6.6.140affected6.12.80 to < 6.12.88affected6.18.21 to < 6.18.30affected6.19.11 to < 6.20affected
Linux Linux
Default version status: affected
7.0affected0 to < 7.0unaffected6.1.175 to ≤ 6.1.*unaffected6.6.140 to ≤ 6.6.*unaffected6.12.88 to ≤ 6.12.*unaffected6.18.30 to ≤ 6.18.*unaffected7.0.7 to ≤ 7.0.*unaffected7.1 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/3600033f31b1afa16d73a24905eec9ee1d222b97 ↗
- https://git.kernel.org/stable/c/8ae6c15fc473c9ad03b0173330cce9a092c76154 ↗
- https://git.kernel.org/stable/c/c741433f6c8dcdecd1d9549d89053761fd1ea413 ↗
- https://git.kernel.org/stable/c/6522d59fb7de55ce0f0f285d962243ddffebb01f ↗
- https://git.kernel.org/stable/c/3df75fff46b1517eb479d8e6b8e3500763715dd0 ↗
- https://git.kernel.org/stable/c/366c482965c673565ecb8bcfb15d5548f13a6a10 ↗
- https://git.kernel.org/stable/c/aa69918bd418e700309fdd08509dba324fb24296 ↗
- https://cert-portal.siemens.com/productcert/html/ssa-784472.html ↗