• Chao Yu's avatar
    f2fs: fix to avoid accessing uninitialized field of inode page in is_alive() · 98194030
    Chao Yu authored
    If inode is newly created, inode page may not synchronize with inode cache,
    so fields like .i_inline or .i_extra_isize could be wrong, in below call
    path, we may access such wrong fields, result in failing to migrate valid
    target block.
    
    Thread A				Thread B
    - f2fs_create
     - f2fs_add_link
      - f2fs_add_dentry
       - f2fs_init_inode_metadata
        - f2fs_add_inline_entry
         - f2fs_new_inode_page
         - f2fs_put_page
         : inode page wasn't updated with inode cache
    					- gc_data_segment
    					 - is_alive
    					  - f2fs_get_node_page
    					  - datablock_addr
    					   - offset_in_addr
    					   : access uninitialized fields
    
    Fixes: 7a2af766 ("f2fs: enhance on-disk inode structure scalability")
    Signed-off-by: default avatarChao Yu <yuchao0@huawei.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    98194030
inline.c 17.5 KB