OSDN Git Service

ocxl: Fix page fault handler in case of fault on dying process
authorFrederic Barrat <fbarrat@linux.ibm.com>
Mon, 18 Jun 2018 12:14:36 +0000 (14:14 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 2 Jul 2018 13:59:45 +0000 (23:59 +1000)
commitd497ebf5fb3a026c0817f8c96cde578787f24093
tree6ceb94dc7cae256e3a048feb3b055e8c2d8f51b6
parent24bf6864e8b3f9e07b461fe30e0e365b5bb8cdf8
ocxl: Fix page fault handler in case of fault on dying process

If a process exits without doing proper cleanup, there's a window
where an opencapi device can try to access the memory of the dying
process and may trigger a page fault. That's an expected scenario and
the ocxl driver holds a reference on the mm_struct of the process
until the opencapi device is notified of the process exiting.
However, if mm_users is already at 0, i.e. the address space of the
process has already been destroyed, the driver shouldn't try resolving
the page fault, as it will fail, but it can also try accessing already
freed data.

It is fixed by only calling the bottom half of the page fault handler
if mm_users is greater than 0 and get a reference on mm_users instead
of mm_count. Otherwise, we can safely return a translation fault to
the device, as its associated memory context is being removed. The
opencapi device will be properly cleaned up shortly after when closing
the file descriptors.

Fixes: 5ef3166e8a32 ("ocxl: Driver code for 'generic' opencapi devices")
Cc: stable@vger.kernel.org # v4.16+
Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com>
Reviewed-By: Alastair D'Silva <alastair@d-silva.org>
Acked-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
drivers/misc/ocxl/link.c