Searched hist:"14331726 a3c47bb1649dab155a84610f509d414e" (Results 1 – 1 of 1) sorted by relevance
/linux/mm/ |
H A D | hmm.c | diff 14331726a3c47bb1649dab155a84610f509d414e Fri May 24 17:14:08 CEST 2019 Jason Gunthorpe <jgg@mellanox.com> mm/hmm: Remove confusing comment and logic from hmm_release
hmm_release() is called exactly once per hmm. ops->release() cannot accidentally trigger any action that would recurse back onto hmm->mirrors_sem.
This fixes a use after-free race of the form:
CPU0 CPU1 hmm_release() up_write(&hmm->mirrors_sem); hmm_mirror_unregister(mirror) down_write(&hmm->mirrors_sem); up_write(&hmm->mirrors_sem); kfree(mirror) mirror->ops->release(mirror)
The only user we have today for ops->release is an empty function, so this is unambiguously safe.
As a consequence of plugging this race drivers are not allowed to register/unregister mirrors from within a release op.
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Tested-by: Philip Yang <Philip.Yang@amd.com>
|