Linux: dma-buf/dma-fence: fix checking signaling bit for timeline and driver name v3
What fixes it
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
dma-buf/dma-fence: fix checking signaling bit for timeline and driver name v3
The patch "dma-buf: dma-fence: Fix potential NULL pointer dereference" changed the check to test for the ops pointer instead of the signaled bit to avoid a potential NULL dereference when the ops pointer has been cleared.
The problem is now that the ops pointer is cleared only when neither the release nor the wait callback is implemented and this isn't true for a lot of dma_fence implementations yet. So those implementations lost the RCU protection after signaling of the returned string resulting in potential use after free.
Add the signaling check additional to the ops pointer check so that we have both the protection against NULL dereference as well as the RCU protection after signaling for the returned string.
v2: improve comments to note RCU protection and explain why we check both signaling state and ops pointer v3: some comment improvements suggested by Philip
Text from CVE List
Affected versions 8
- Linuxaffected: 035219a760edb35ae9a9e96beba7f122e26a997b before a4db25b8949d6ff9c1a685a1273a015e8bab29dbCVE List
- Linuxaffected: 035219a760edb35ae9a9e96beba7f122e26a997b before 3ed11c671ff7ec58c8fd96410233c677df23f407CVE List
- Linuxaffected: 15ecfdf0ef6f6d874d0a26690d300857b39ebfd0CVE List
- Linuxaffected: 7.1.5 before 7.2CVE List
- Linuxaffected: 7.2CVE List
- Linuxunaffected: all versions before 7.2CVE List
- Linuxunaffected: 7.2.8 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List