linux/arch/s390/mm
Gerald Schaefer 24e2c6cfe8 s390/extmem: return correct segment type in __segment_load()
commit 8c42dd78df upstream.

Commit f05f62d042 ("s390/vmem: get rid of memory segment list")
reshuffled the call to vmem_add_mapping() in __segment_load(), which now
overwrites rc after it was set to contain the segment type code.

As result, __segment_load() will now always return 0 on success, which
corresponds to the segment type code SEG_TYPE_SW, i.e. a writeable
segment. This results in a kernel crash when loading a read-only segment
as dcssblk block device, and trying to write to it.

Instead of reshuffling code again, make sure to return the segment type
on success, and also describe this rather delicate and unexpected logic
in the function comment. Also initialize new segtype variable with
invalid value, to prevent possible future confusion.

Fixes: f05f62d042 ("s390/vmem: get rid of memory segment list")
Cc: <stable@vger.kernel.org> # 5.9+
Signed-off-by: Gerald Schaefer <gerald.schaefer@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2023-03-10 09:34:04 +01:00
..
cmm.c s390/cmm: add missing virt_to_phys() conversion 2021-12-10 16:14:25 +01:00
dump_pagetables.c s390/mm,ptdump: avoid Kasan vs Memcpy Real markers swapping 2023-03-10 09:33:51 +01:00
extable.c s390/uaccess: use exception handler to zero result on get_user() failure 2022-06-01 12:03:17 +02:00
extmem.c s390/extmem: return correct segment type in __segment_load() 2023-03-10 09:34:04 +01:00
fault.c s390/kfence: fix page fault reporting 2023-03-10 09:33:53 +01:00
gmap.c s390: remove vma linked list walks 2022-09-26 19:46:19 -07:00
hugetlbpage.c s390/hugetlb: switch to generic version of follow_huge_pud() 2022-09-11 20:26:01 -07:00
init.c s390/smp: rework absolute lowcore access 2022-09-14 16:46:00 +02:00
kasan_init.c s390/mm: use set_pXd()/set_pte() helper functions everywhere 2022-03-01 21:05:10 +01:00
maccess.c use less confusing names for iov_iter direction initializers 2023-02-09 11:28:04 +01:00
Makefile s390/extable: move extable related functions to mm/extable.c 2022-03-08 00:33:00 +01:00
mmap.c treewide: use get_random_u32() when possible 2022-10-11 17:42:58 -06:00
page-states.c s390/extable: move EX_TABLE define to asm-extable.h 2022-03-08 00:33:00 +01:00
pageattr.c s390/mm,pageattr: don't use pte_val()/pXd_val() as lvalue 2022-03-01 21:05:10 +01:00
pgalloc.c s390/mm: use CRST_ALLOC_ORDER instead of number 2022-02-09 22:56:04 +01:00
pgtable.c s390/mm: use non-quiescing sske for KVM switch to keyed guest 2022-06-01 12:03:16 +02:00
vmem.c s390/vmem: fix empty page tables cleanup under KASAN 2023-03-10 09:33:00 +01:00