• ZhaoLong Wang's avatar
    tmpfs: fix the issue that the mount and remount results are inconsistent. · 0c98c8e1
    ZhaoLong Wang authored
    An undefined-behavior issue has not been completely fixed since commit
    d14f5efa ("tmpfs: fix undefined-behaviour in shmem_reconfigure()"). 
    In the commit, check in the shmem_reconfigure() is added in remount
    process to avoid the Ubsan problem.  However, the check is not added to
    the mount process.  It causes inconsistent results between mount and
    remount.  The operations to reproduce the problem in user mode as follows:
    
    If nr_blocks is set to 0x8000000000000000, the mounting is successful.
    
      # mount tmpfs /dev/shm/ -t tmpfs -o nr_blocks=0x8000000000000000
    
    However, when -o remount is used, the mount fails because of the
    check in the shmem_reconfigure()
    
      # mount tmpfs /dev/shm/ -t tmpfs -o remount,nr_blocks=0x8000000000000000
      mount: /dev/shm: mount point not mounted or bad option.
    
    Therefore, add checks in the shmem_parse_one() function and remove the
    check in shmem_reconfigure() to avoid this problem.
    
    Link: https://lkml.kernel.org/r/20220629124324.1640807-1-wangzhaolong1@huawei.comSigned-off-by: default avatarZhaoLong Wang <wangzhaolong1@huawei.com>
    Cc: Luo Meng <luomeng12@huawei.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Yu Kuai <yukuai3@huawei.com>
    Cc: Zhihao Cheng <chengzhihao1@huawei.com>
    Cc: Zhang Yi <yi.zhang@huawei.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    0c98c8e1
shmem.c 108 KB