• Z
    dm btree: fix order of block initialization in btree_split_beneath · 19f55ba1
    ZhangXiaoxu 提交于
    mainline inclusion
    from mainline-v5.3-rc6
    commit e4f9d6013820d1eba1432d51dd1c5795759aa77f
    category: bugfix
    bugzilla: 20701
    CVE: NA
    
    -------------------------------------------------
    
    When btree_split_beneath() splits a node to two new children, it will
    allocate two blocks: left and right.  If right block's allocation
    failed, the left block will be unlocked and marked dirty.  If this
    happened, the left block'ss content is zero, because it wasn't
    initialized with the btree struct before the attempot to allocate the
    right block.  Upon return, when flushing the left block to disk, the
    validator will fail when check this block.  Then a BUG_ON is raised.
    
    Fix this by completely initializing the left block before allocating and
    initializing the right block.
    
    Fixes: 4dcb8b57 ("dm btree: fix leak of bufio-backed block in btree_split_beneath error path")
    Cc: stable@vger.kernel.org
    Signed-off-by: NZhangXiaoxu <zhangxiaoxu5@huawei.com>
    Signed-off-by: NMike Snitzer <snitzer@redhat.com>
    Signed-off-by: NZhangXiaoxu <zhangxiaoxu5@huawei.com>
    Reviewed-by: NYufen Yu <yuyufen@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    19f55ba1
dm-btree.c 25.5 KB