linux/drivers/misc/ocxl
Frederic Barrat d497ebf5fb 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: 5ef3166e8a ("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>
2018-07-02 23:59:45 +10:00
..
afu_irq.c ocxl: Add trace points 2018-01-24 11:42:59 +11:00
config.c ocxl: Add a kernel API for other opencapi drivers 2018-01-24 11:42:59 +11:00
context.c ocxl: Change return type for fault handler 2018-07-02 23:54:26 +10:00
file.c ocxl: Fix missing unlock on error in afu_ioctl_enable_p9_wait() 2018-06-05 21:33:57 +10:00
Kconfig ocxl: Add Makefile and Kconfig 2018-01-24 11:42:59 +11:00
link.c ocxl: Fix page fault handler in case of fault on dying process 2018-07-02 23:59:45 +10:00
main.c
Makefile ocxl: Add Makefile and Kconfig 2018-01-24 11:42:59 +11:00
ocxl_internal.h ocxl: Expose the thread_id needed for wait on POWER9 2018-06-03 20:40:32 +10:00
pasid.c
pci.c misc: ocxl: use put_device() instead of device_unregister() 2018-03-15 18:12:01 +01:00
sysfs.c ocxl: Change return type for fault handler 2018-07-02 23:54:26 +10:00
trace.c ocxl: Add trace points 2018-01-24 11:42:59 +11:00
trace.h ocxl: Add trace points 2018-01-24 11:42:59 +11:00