s390/mm: Fix potential use-after-free in __crst_table_upgrade()
authorHeiko Carstens <hca@linux.ibm.com>
Wed, 30 Apr 2025 07:58:05 +0000 (09:58 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Mon, 5 May 2025 13:47:20 +0000 (15:47 +0200)
commit3919600d32b92e67f1d28376bd63152306e99452
tree7607b413eb745fd3fa8fe166790ba6559a8d11d7
parentf049a4f7ffa50000485a61d5518ffae24b662aaa
s390/mm: Fix potential use-after-free in __crst_table_upgrade()

The pointer to the mm_struct which is passed to __crst_table_upgrade() may
only be dereferenced if it is identical to current->active_mm. Otherwise
the current task has no reference to the mm_struct and it may already be
freed. In such a case this would result in a use-after-free bug.

Make sure this use-after-free scenario does not happen by moving the code,
which dereferences the mm_struct pointer, after the check which verifies
that the pointer is identical to current->active_mm, like it was before
lazy ASCE handling was reimplemented.

Fixes: 8b72f5a97b82 ("s390/mm: Reimplement lazy ASCE handling")
Reviewed-by: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/mm/pgalloc.c