In the Linux kernel, the following vulnerability has been resolved:
fs/proc/task_mmu: fix loss of young/dirty bits during pagemap scan
makeuffdwp_pte() was previously doing:
pte = ptepget(ptep); ptepmodifyprotstart(ptep); pte = ptemkuffdwp(pte); ptepmodifyprot_commit(ptep, pte);
But if another thread accessed or dirtied the pte between the first 2 calls, this could lead to loss of that information. Since ptepmodifyprot_start() gets and clears atomically, the following is the correct pattern and prevents any possible race. Any access after the first call would see an invalid pte and cause a fault:
pte = ptepmodifyprotstart(ptep); pte = ptemkuffdwp(pte); ptepmodifyprotcommit(ptep, pte);
[
{
"deprecated": false,
"signature_version": "v1",
"digest": {
"threshold": 0.9,
"line_hashes": [
"178149443372465452950006555662685828140",
"259174068185066441737480883071601879488",
"154387457119575594475612024270051455521",
"123040074461021125722855029099230285685"
]
},
"id": "CVE-2024-36943-fc71f587",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@74b3d66f91d9f539f99faad74d796fa9a389a015",
"target": {
"file": "fs/proc/task_mmu.c"
}
}
]