linux_dsm_epyc7002/drivers/misc
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
..
altera-stapl treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
c2port
cardreader
cb710 treewide: Use struct_size() for devm_kmalloc() and friends 2018-06-06 11:15:43 -07:00
cxl cxl: Remove abandonned capi support for the Mellanox CX4, final cleanup 2018-07-02 23:54:33 +10:00
echo
eeprom Merge branch 'i2c/for-4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2018-06-14 16:21:46 +09:00
genwqe treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
ibmasm
lis3lv02d
lkdtm
mei
mic
ocxl ocxl: Fix page fault handler in case of fault on dying process 2018-07-02 23:59:45 +10:00
sgi-gru Char/Misc driver patches for 4.18-rc1 2018-06-05 16:20:22 -07:00
sgi-xp treewide: kzalloc() -> kcalloc() 2018-06-12 16:19:22 -07:00
ti-st misc: ti-st: Replace GFP_ATOMIC with GFP_KERNEL in kim_probe 2018-04-23 13:31:27 +02:00
vmw_vmci treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
ad525x_dpot-i2c.c
ad525x_dpot-spi.c
ad525x_dpot.c
ad525x_dpot.h
apds990x.c
apds9802als.c
aspeed-lpc-ctrl.c
aspeed-lpc-snoop.c
atmel_tclib.c
atmel-ssc.c
bh1770glc.c
cs5535-mfgpt.c
ds1682.c
dummy-irq.c
enclosure.c
fsa9480.c
hmc6352.c
hpilo.c
hpilo.h
ibmvmc.c misc: IBM Virtual Management Channel Driver (VMC) 2018-05-14 16:35:42 +02:00
ibmvmc.h misc: IBM Virtual Management Channel Driver (VMC) 2018-05-14 16:35:42 +02:00
ics932s401.c
ioc4.c
isl29003.c
isl29020.c
Kconfig misc: IBM Virtual Management Channel Driver (VMC) 2018-05-14 16:35:42 +02:00
kgdbts.c
lattice-ecp3-config.c
Makefile misc: IBM Virtual Management Channel Driver (VMC) 2018-05-14 16:35:42 +02:00
pch_phub.c
pci_endpoint_test.c Merge branch 'lorenzo/pci/endpoint' 2018-06-06 16:10:30 -05:00
phantom.c
pti.c
qcom-coincell.c
spear13xx_pcie_gadget.c
sram-exec.c
sram.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
sram.h
tifm_7xx1.c misc: tifm: Remove VLA 2018-04-23 13:31:27 +02:00
tifm_core.c
tsl2550.c
vexpress-syscfg.c treewide: Use struct_size() for kmalloc()-family 2018-06-06 11:15:43 -07:00
vmw_balloon.c vmw_balloon: fixing double free when batching mode is off 2018-06-02 19:34:13 +02:00