• Frederic Barrat's avatar
    ocxl: Fix page fault handler in case of fault on dying process · d497ebf5
    Frederic Barrat authored
    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: 5ef3166e ("ocxl: Driver code for 'generic' opencapi devices")
    Cc: stable@vger.kernel.org # v4.16+
    Signed-off-by: default avatarFrederic Barrat <fbarrat@linux.ibm.com>
    Reviewed-By: default avatarAlastair D'Silva <alastair@d-silva.org>
    Acked-by: default avatarAndrew Donnellan <andrew.donnellan@au1.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    d497ebf5
link.c 17 KB