aboutsummaryrefslogtreecommitdiffstats
path: root/btrfs-image.c
diff options
context:
space:
mode:
authorQu Wenruo <quwenruo@cn.fujitsu.com>2015-08-21 11:21:26 +0800
committerDavid Sterba <dsterba@suse.com>2015-08-31 19:25:12 +0200
commitc0f32c54a3de142201847cbcbf83ae83a4b76fd2 (patch)
treea5b957f2a214d8504c94cc69bfb171ec4fe8bf17 /btrfs-image.c
parent919d2becc8a5a894d8d95e8e1b3ac8d7fb54035f (diff)
downloadbtrfs-progs-c0f32c54a3de142201847cbcbf83ae83a4b76fd2.tar.gz
btrfs-progs-c0f32c54a3de142201847cbcbf83ae83a4b76fd2.tar.xz
btrfs-progs-c0f32c54a3de142201847cbcbf83ae83a4b76fd2.zip
btrfs-progs: Avoid reading bad fd in case of missing device.
Offline btrfs tools, like btrfs-image, will infinitely loop when there is missing device. The reason is, for missing device, it's fd will be set to -1, but before we reading, we only check the fd validation by checking if it's 0. So in that case, -1 will pass the validation check, and cause pread to return 0, and loop to read. Just change the validation check from "== 0" to "<= 0" to avoid such problem. Reported-by: Timothy Normand Miller <theosib@gmail.com> Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'btrfs-image.c')
-rw-r--r--btrfs-image.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/btrfs-image.c b/btrfs-image.c
index 3684a05..b225325 100644
--- a/btrfs-image.c
+++ b/btrfs-image.c
@@ -894,7 +894,7 @@ static int read_data_extent(struct metadump_struct *md,
device = multi->stripes[0].dev;
- if (device->fd == 0) {
+ if (device->fd <= 0) {
fprintf(stderr,
"Device we need to read from is not open\n");
free(multi);