浏览代码

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>
Yan, Zheng 13 年之前
父节点
当前提交
84850e8d8a
共有 1 个文件被更改,包括 4 次插入1 次删除
  1. 4 1
      fs/btrfs/relocation.c

+ 4 - 1
fs/btrfs/relocation.c

@@ -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;