Btrfs: fix use after free in O_DIRECT
This fixes a bug where we use dip after we have freed it. Instead just use the file_offset that was passed to the function. Thanks, Signed-off-by: Josef Bacik <josef@redhat.com>
This commit is contained in:
@@ -5934,8 +5934,7 @@ free_ordered:
|
|||||||
*/
|
*/
|
||||||
if (write) {
|
if (write) {
|
||||||
struct btrfs_ordered_extent *ordered;
|
struct btrfs_ordered_extent *ordered;
|
||||||
ordered = btrfs_lookup_ordered_extent(inode,
|
ordered = btrfs_lookup_ordered_extent(inode, file_offset);
|
||||||
dip->logical_offset);
|
|
||||||
if (!test_bit(BTRFS_ORDERED_PREALLOC, &ordered->flags) &&
|
if (!test_bit(BTRFS_ORDERED_PREALLOC, &ordered->flags) &&
|
||||||
!test_bit(BTRFS_ORDERED_NOCOW, &ordered->flags))
|
!test_bit(BTRFS_ORDERED_NOCOW, &ordered->flags))
|
||||||
btrfs_free_reserved_extent(root, ordered->start,
|
btrfs_free_reserved_extent(root, ordered->start,
|
||||||
|
Reference in New Issue
Block a user