• Josef Bacik's avatar
    btrfs: fix double put of block group with nocow · 230ed397
    Josef Bacik authored
    While debugging a patch that I wrote I was hitting use-after-free panics
    when accessing block groups on unmount.  This turned out to be because
    in the nocow case if we bail out of doing the nocow for whatever reason
    we need to call btrfs_dec_nocow_writers() if we called the inc.  This
    puts our block group, but a few error cases does
    
    if (nocow) {
        btrfs_dec_nocow_writers();
        goto error;
    }
    
    unfortunately, error is
    
    error:
    	if (nocow)
    		btrfs_dec_nocow_writers();
    
    so we get a double put on our block group.  Fix this by dropping the
    error cases calling of btrfs_dec_nocow_writers(), as it's handled at the
    error label now.
    
    Fixes: 762bf098 ("btrfs: improve error handling in run_delalloc_nocow")
    CC: stable@vger.kernel.org # 5.4+
    Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
    Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    230ed397
inode.c 285 KB