Description
In the Linux kernel, the following vulnerability has been resolved: dm: fix reading free memory in do_resume When do_resume calls dm_table_get_mode(new_map), the call is done without holding any locks (it only holds a reference to the md). It may be possible that another concurrent ioctl on the same device will swap table after dm_swap_table and before dm_table_get_mode. In this case, dm_table_get_mode(new_map) reads freed memory. This race condition was triggered by syzbot. This commit fixes the race by reading mode of the new table before dm_swap_table. Note that new_map is also passed to dm_ima_need_measure, but this function doesn't attempt to dereference it, so this call should be safe. Note that this is not a security bug because only root can trigger it and the commonly used tools such as lvm or cryptsetup do not call the ioctls concurrently, so that they can't trigger it acceidentally.
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
d58168763f74d1edbc296d7038c60efe6493fdd4 to < 2bc5df0cf906f36a8f59ac864139ee2b7b53d3c0affectedd58168763f74d1edbc296d7038c60efe6493fdd4 to < 48169328021dfd59121f9a66cca919b7defcd3faaffectedd58168763f74d1edbc296d7038c60efe6493fdd4 to < 7a272c2338f758e3b6e664ebf7488ac40f48a2a4affectedd58168763f74d1edbc296d7038c60efe6493fdd4 to < 281f68d6cf8acb2547ebf0a849b8beae8fb0ec3caffectedd58168763f74d1edbc296d7038c60efe6493fdd4 to < 2c96d1a8324e7736e0f8a5790ecf39d36c2c4a82affectedd58168763f74d1edbc296d7038c60efe6493fdd4 to < e3bf232c913b7e0103d323f15e6342d37cb1b357affectedd58168763f74d1edbc296d7038c60efe6493fdd4 to < 301691c32b8ad023e3316d5dbb6a8cf52d47b0dcaffectedd58168763f74d1edbc296d7038c60efe6493fdd4 to < c9417c1c5269e2bd0570fbe53e4ec03a8d31f008affected
Linux Linux
Default version status: affected
2.6.29affected0 to < 2.6.29unaffected5.10.273 to ≤ 5.10.*unaffected5.15.224 to ≤ 5.15.*unaffected6.1.191 to ≤ 6.1.*unaffected6.6.160 to ≤ 6.6.*unaffected6.12.113 to ≤ 6.12.*unaffected6.18.57 to ≤ 6.18.*unaffected7.2.11 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/2bc5df0cf906f36a8f59ac864139ee2b7b53d3c0 ↗
- https://git.kernel.org/stable/c/48169328021dfd59121f9a66cca919b7defcd3fa ↗
- https://git.kernel.org/stable/c/7a272c2338f758e3b6e664ebf7488ac40f48a2a4 ↗
- https://git.kernel.org/stable/c/281f68d6cf8acb2547ebf0a849b8beae8fb0ec3c ↗
- https://git.kernel.org/stable/c/2c96d1a8324e7736e0f8a5790ecf39d36c2c4a82 ↗
- https://git.kernel.org/stable/c/e3bf232c913b7e0103d323f15e6342d37cb1b357 ↗
- https://git.kernel.org/stable/c/301691c32b8ad023e3316d5dbb6a8cf52d47b0dc ↗
- https://git.kernel.org/stable/c/c9417c1c5269e2bd0570fbe53e4ec03a8d31f008 ↗