On Fri, Oct 12, 2018 at 01:02:48PM +0100, fdman...@kernel.org wrote: > From: Filipe Manana <fdman...@suse.com> > > At inode.c:evict_inode_truncate_pages(), when we iterate over the inode's > extent states, we access an extent state record's "state" field after we > unlocked the inode's io tree lock. This can lead to a use-after-free issue > because after we unlock the io tree that extent state record might have > been freed due to being merged into another adjacent extent state > record (a previous inflight bio for a read operation finished in the > meanwhile which unlocked a range in the io tree and cause a merge of > extent state records, as explained in the comment before the while loop > added in commit 6ca0709756710 ("Btrfs: fix hang during inode eviction due > to concurrent readahead")). > > Fix this by keeping a copy of the extent state's flags in a local variable > and using it after unlocking the io tree. > > Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=201189 > Fixes: b9d0b38928e2 ("btrfs: Add handler for invalidate page") > CC: sta...@vger.kernel.org # 4.4+ > Signed-off-by: Filipe Manana <fdman...@suse.com>
Reviewed-by: David Sterba <dste...@suse.com> Added to misc-next, thanks.