Description
In the Linux kernel, the following vulnerability has been resolved: net: add proper RCU protection to /proc/net/ptype Yin Fengwei reported an RCU stall in ptype_seq_show() and provided a patch. Real issue is that ptype_seq_next() and ptype_seq_show() violate RCU rules. ptype_seq_show() runs under rcu_read_lock(), and reads pt->dev to get device name without any barrier. At the same time, concurrent writers can remove a packet_type structure (which is correctly freed after an RCU grace period) and clear pt->dev without an RCU grace period. Define ptype_iter_state to carry a dev pointer along seq_net_private: struct ptype_iter_state { struct seq_net_private p; struct net_device *dev; // added in this patch }; We need to record the device pointer in ptype_get_idx() and ptype_seq_next() so that ptype_seq_show() is safe against concurrent pt->dev changes. We also need to add full RCU protection in ptype_seq_next(). (Missing READ_ONCE() when reading list.next values) Many thanks to Dong Chenchen for providing a repro.
Product status
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 002a73470b56848e4c81efeaaedd471e92d66d8d
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before dcefd3f0b9ed8288654c75254bdcee8e1085e861
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before 589a530ae44d0c80f523fcfd1a15af8087f27d35
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (git) before f613e8b4afea0cd17c7168e8b00e25bc8d33175d
2.6.12
Any version before 2.6.12
6.6.136 (semver)
6.12.80 (semver)
6.18.10 (semver)
6.19 (original_commit_for_fix)
References
git.kernel.org/...c/002a73470b56848e4c81efeaaedd471e92d66d8d
git.kernel.org/...c/dcefd3f0b9ed8288654c75254bdcee8e1085e861
git.kernel.org/...c/589a530ae44d0c80f523fcfd1a15af8087f27d35
git.kernel.org/...c/f613e8b4afea0cd17c7168e8b00e25bc8d33175d