• Gerald Schaefer's avatar
    s390/extmem: return correct segment type in __segment_load() · 8c42dd78
    Gerald Schaefer authored
    Commit f05f62d0 ("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: f05f62d0 ("s390/vmem: get rid of memory segment list")
    Cc: <stable@vger.kernel.org> # 5.9+
    Signed-off-by: default avatarGerald Schaefer <gerald.schaefer@linux.ibm.com>
    Reviewed-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    8c42dd78
extmem.c 15.8 KB