[btrfs-progs] Add upstream patch to correct uninitialized fsid variable

Richard W.M. Jones rjones at fedoraproject.org
Wed Oct 10 20:16:42 UTC 2012


commit 089650c0d700ca7b794a8db9a68ecb59ccacb3df
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Wed Oct 10 12:46:04 2012 +0000

    Add upstream patch to correct uninitialized fsid variable
    
      (possible fix for RHBZ#863978).

 ...progs-correct-uninitialized-fsid-variable.patch |   55 ++++++++++++++++++++
 btrfs-progs.spec                                   |    8 +++-
 2 files changed, 62 insertions(+), 1 deletions(-)
---
diff --git a/btrfs-progs-correct-uninitialized-fsid-variable.patch b/btrfs-progs-correct-uninitialized-fsid-variable.patch
new file mode 100644
index 0000000..3e060a0
--- /dev/null
+++ b/btrfs-progs-correct-uninitialized-fsid-variable.patch
@@ -0,0 +1,55 @@
+From 6eba9002956ac40db87d42fb653a0524dc568810 Mon Sep 17 00:00:00 2001
+From: Goffredo Baroncelli <kreijack at inwind.it>
+Date: Tue, 4 Sep 2012 19:59:26 +0200
+Subject: [PATCH 1/1] Correct un-initialized fsid variable
+
+---
+ disk-io.c |   20 ++++++++++++++++----
+ 1 files changed, 16 insertions(+), 4 deletions(-)
+
+diff --git a/disk-io.c b/disk-io.c
+index b21a87f..0395205 100644
+--- a/disk-io.c
++++ b/disk-io.c
+@@ -910,6 +910,7 @@ struct btrfs_root *open_ctree_fd(int fp, const char *path, u64 sb_bytenr,
+ int btrfs_read_dev_super(int fd, struct btrfs_super_block *sb, u64 sb_bytenr)
+ {
+ 	u8 fsid[BTRFS_FSID_SIZE];
++	int fsid_is_initialized = 0;
+ 	struct btrfs_super_block buf;
+ 	int i;
+ 	int ret;
+@@ -936,15 +937,26 @@ int btrfs_read_dev_super(int fd, struct btrfs_super_block *sb, u64 sb_bytenr)
+ 		if (ret < sizeof(buf))
+ 			break;
+ 
+-		if (btrfs_super_bytenr(&buf) != bytenr ||
+-		    strncmp((char *)(&buf.magic), BTRFS_MAGIC,
++		if (btrfs_super_bytenr(&buf) != bytenr )
++			continue;
++		/* if magic is NULL, the device was removed */
++		if (buf.magic == 0 && i == 0) 
++			return -1;
++		if (strncmp((char *)(&buf.magic), BTRFS_MAGIC,
+ 			    sizeof(buf.magic)))
+ 			continue;
+ 
+-		if (i == 0)
++		if (!fsid_is_initialized) {
+ 			memcpy(fsid, buf.fsid, sizeof(fsid));
+-		else if (memcmp(fsid, buf.fsid, sizeof(fsid)))
++			fsid_is_initialized = 1;
++		} else if (memcmp(fsid, buf.fsid, sizeof(fsid))) {
++			/*
++			 * the superblocks (the original one and
++			 * its backups) contain data of different
++			 * filesystems -> the super cannot be trusted
++			 */
+ 			continue;
++		}
+ 
+ 		if (btrfs_super_generation(&buf) > transid) {
+ 			memcpy(sb, &buf, sizeof(*sb));
+-- 
+1.7.7.6
+
diff --git a/btrfs-progs.spec b/btrfs-progs.spec
index 936ac20..756041a 100644
--- a/btrfs-progs.spec
+++ b/btrfs-progs.spec
@@ -1,6 +1,6 @@
 Name:           btrfs-progs
 Version:        0.19.20120817git043a639
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        Userspace programs for btrfs
 
 Group:          System Environment/Base
@@ -14,6 +14,7 @@ Patch3: Btrfs-progs-add-btrfs-device-ready-command.patch
 Patch4: Btrfs-progs-detect-if-the-disk-we-are-formatting-is-.patch
 Patch5: Btrfs-progs-only-enforce-a-maximum-size-if-we-specif.patch
 Patch6: btrfs-init-dev-list.patch
+Patch7: btrfs-progs-correct-uninitialized-fsid-variable.patch
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
@@ -34,6 +35,7 @@ check, modify and correct any inconsistencies in the btrfs filesystem.
 %patch4 -p1
 %patch5 -p1
 %patch6 -p1
+%patch7 -p1
 
 %build
 make CFLAGS="$RPM_OPT_FLAGS" %{?_smp_mflags}
@@ -70,6 +72,10 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/man8/btrfs.8.gz
 
 %changelog
+* Wed Oct 10 2012 Richard W.M. Jones <rjones at redhat.com> 0.19.20120817git043a639-2
+- Add upstream patch to correct uninitialized fsid variable
+  (possible fix for RHBZ#863978).
+
 * Fri Aug 17 2012 Josef Bacik <josef at toxicpanda.com> 0.19.20120817git043a639-1
 - update to latest btrfs-progs
 


More information about the scm-commits mailing list