btrfs: check file extent backref offset underflow

Offset field in data extent backref can underflow if clone range ioctl
is used. We can reliably detect the underflow because max file size is
limited to 2^63 and max data extent size is limited by block group size.

Signed-off-by: Zheng Yan  <zheng.z.yan@intel.com>
This commit is contained in:
Yan, Zheng 2011-08-29 09:25:53 +08:00 committed by David Sterba
parent 016fc6a63e
commit 84850e8d8a
1 changed files with 4 additions and 1 deletions

View File

@ -3322,8 +3322,11 @@ static int find_data_references(struct reloc_control *rc,
} }
key.objectid = ref_objectid; key.objectid = ref_objectid;
key.offset = ref_offset;
key.type = BTRFS_EXTENT_DATA_KEY; key.type = BTRFS_EXTENT_DATA_KEY;
if (ref_offset > ((u64)-1 << 32))
key.offset = 0;
else
key.offset = ref_offset;
path->search_commit_root = 1; path->search_commit_root = 1;
path->skip_locking = 1; path->skip_locking = 1;