[Pkg-bareos-devel] Bug#788543: bareos-sd will silently corrupt backups when using multi-volume disk-based jobs

Felix Geyer fgeyer at debian.org
Mon Jul 20 16:32:40 UTC 2015


Hi,

On 13.06.2015 01:32, Felix Geyer wrote:
> Hi,
> 
> On Fri, 12 Jun 2015 17:30:51 +0200 Michael Renner <robe at amd.co.at> wrote:
>> Package: bareos
>> Version: 14.2.1+20141017gitc6c5b56-4
>> Severity: critical
>> Justification: causes serious data loss
>>
>> In March 2015 bareos fixed a bug which caused silent corruption of
>> backups when the following conditions are met:
>>
>>  * backups are written to disk (tape backups are not affected)
>>  * autolabelling is enabled
>>  * a backup spans over multiple volumes
>>  * the additional volumes are newly created and labeled during the backup.
>>
>> Bug: https://bugs.bareos.org/view.php?id=437
>> Announcement: http://www.bareos.com/en/company_news/items/Bareos-14.2.4-published.html
>> Fix for 14.2: https://github.com/bareos/bareos/commit/263240eaa911563a8468ecdaf7d4957201b41426
>>
>> Given that the above conditions are met in most bareos installations
>> I've tagged this as critical.
>>
>>
>> While I'm at it I'd like to point out that Joerg Steffens, an upstream maintainer,
>> employee and/or partner of bareos.com and co-maintainer of this
>> package in Debian, hasn't found the time to inform the Debian community of this issue, lest
>> providing a patched package.
> 
> Attached is a debdiff that contains a backport of the upstream fix.

How about reverting the fix for #769536 ("circular dependency hell") until there is a proper
solution for it?
That way we can get this bug fixed and bareos back into testing.
I've prepared those changes in the attached debdiff.

What do you think?

Cheers,
Felix
-------------- next part --------------
diff -Nru bareos-14.2.1+20141017gitc6c5b56/debian/changelog bareos-14.2.1+20141017gitc6c5b56/debian/changelog
--- bareos-14.2.1+20141017gitc6c5b56/debian/changelog	2014-12-02 10:25:20.000000000 +0100
+++ bareos-14.2.1+20141017gitc6c5b56/debian/changelog	2015-07-20 18:24:24.000000000 +0200
@@ -1,3 +1,12 @@
+bareos (14.2.1+20141017gitc6c5b56-4.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Revert fix for #769536 until there is a proper solution. (Closes: #771870)
+  * Fix data corruption bug affecting file based backups. (Closes: #788543)
+    - Backport upstream fix as fix_multi_volume_data_corruption.diff
+
+ -- Felix Geyer <fgeyer at debian.org>  Mon, 20 Jul 2015 18:18:13 +0200
+
 bareos (14.2.1+20141017gitc6c5b56-4) unstable; urgency=medium
 
   [ Joerg Steffens ]
diff -Nru bareos-14.2.1+20141017gitc6c5b56/debian/control bareos-14.2.1+20141017gitc6c5b56/debian/control
--- bareos-14.2.1+20141017gitc6c5b56/debian/control	2014-12-01 19:28:21.000000000 +0100
+++ bareos-14.2.1+20141017gitc6c5b56/debian/control	2015-07-20 18:17:26.000000000 +0200
@@ -96,7 +96,7 @@
 Package:        bareos-database-common
 Architecture:   any
 Pre-Depends:    debconf (>= 1.4.30) | debconf-2.0
-Depends:        bareos-common (= ${binary:Version}), dbconfig-common, lsb-base (>= 3.2-13), ${shlibs:Depends}, ${misc:Depends}
+Depends:        bareos-database-postgresql  (= ${binary:Version}) | bareos-database-mysql (= ${binary:Version}) | bareos-database-sqlite3 (= ${binary:Version}), bareos-common (= ${binary:Version}), dbconfig-common, lsb-base (>= 3.2-13), ${shlibs:Depends}, ${misc:Depends}
 Description: Backup Archiving Recovery Open Sourced - common catalog files
  Bareos is a set of programs to manage backup, recovery and verification of
  data across a network of computers of different kinds.
@@ -146,7 +146,7 @@
 Package:        bareos-database-tools
 Architecture:   any
 Pre-Depends:    debconf (>= 1.4.30) | debconf-2.0
-Depends:        bareos-common (= ${binary:Version}), bareos-database-postgresql (= ${binary:Version}) | bareos-database-mysql (= ${binary:Version}) | bareos-database-sqlite3 (= ${binary:Version}), lsb-base (>= 3.2-13), ${shlibs:Depends}, ${misc:Depends}
+Depends:        bareos-common (= ${binary:Version}), bareos-database-common (= ${binary:Version}), lsb-base (>= 3.2-13), ${shlibs:Depends}, ${misc:Depends}
 Conflicts:	bacula-sd-mysql, bacula-sd-pgsql, bacula-sd-sqlite3
 Description: Backup Archiving Recovery Open Sourced - database tools
  Bareos is a set of programs to manage backup, recovery and verification of
@@ -184,7 +184,7 @@
 Package:        bareos-director
 Architecture:   any
 Pre-Depends:    debconf (>= 1.4.30) | debconf-2.0, adduser
-Depends:        bareos-common (= ${binary:Version}), bareos-database-postgresql (= ${binary:Version}) | bareos-database-mysql (= ${binary:Version}) | bareos-database-sqlite3 (= ${binary:Version}), bareos-database-tools, lsb-base (>= 3.2-13), bsd-mailx | mailx, ${shlibs:Depends}, ${misc:Depends}
+Depends:        bareos-common (= ${binary:Version}), bareos-database-common (= ${binary:Version}), bareos-database-tools, lsb-base (>= 3.2-13), bsd-mailx | mailx, ${shlibs:Depends}, ${misc:Depends}
 Recommends:     logrotate
 Conflicts:      bacula-director
 Replaces:       bacula-director
diff -Nru bareos-14.2.1+20141017gitc6c5b56/debian/control.in bareos-14.2.1+20141017gitc6c5b56/debian/control.in
--- bareos-14.2.1+20141017gitc6c5b56/debian/control.in	2014-12-01 19:28:21.000000000 +0100
+++ bareos-14.2.1+20141017gitc6c5b56/debian/control.in	2015-07-20 18:23:49.000000000 +0200
@@ -96,7 +96,7 @@
 Package:        bareos-database-common
 Architecture:   any
 Pre-Depends:    debconf (>= 1.4.30) | debconf-2.0
-Depends:        bareos-common (= ${binary:Version}), dbconfig-common, lsb-base (>= 3.2-13), ${shlibs:Depends}, ${misc:Depends}
+Depends:        bareos-database-postgresql  (= ${binary:Version}) | bareos-database-mysql (= ${binary:Version}) | bareos-database-sqlite3 (= ${binary:Version}), bareos-common (= ${binary:Version}), dbconfig-common, lsb-base (>= 3.2-13), ${shlibs:Depends}, ${misc:Depends}
 Description: Backup Archiving Recovery Open Sourced - common catalog files
  Bareos is a set of programs to manage backup, recovery and verification of
  data across a network of computers of different kinds.
@@ -146,7 +146,7 @@
 Package:        bareos-database-tools
 Architecture:   any
 Pre-Depends:    debconf (>= 1.4.30) | debconf-2.0
-Depends:        bareos-common (= ${binary:Version}), bareos-database-postgresql (= ${binary:Version}) | bareos-database-mysql (= ${binary:Version}) | bareos-database-sqlite3 (= ${binary:Version}), lsb-base (>= 3.2-13), ${shlibs:Depends}, ${misc:Depends}
+Depends:        bareos-common (= ${binary:Version}), bareos-database-common (= ${binary:Version}), lsb-base (>= 3.2-13), ${shlibs:Depends}, ${misc:Depends}
 Conflicts:	bacula-sd-mysql, bacula-sd-pgsql, bacula-sd-sqlite3
 Description: Backup Archiving Recovery Open Sourced - database tools
  Bareos is a set of programs to manage backup, recovery and verification of
@@ -184,7 +184,7 @@
 Package:        bareos-director
 Architecture:   any
 Pre-Depends:    debconf (>= 1.4.30) | debconf-2.0, adduser
-Depends:        bareos-common (= ${binary:Version}), bareos-database-postgresql (= ${binary:Version}) | bareos-database-mysql (= ${binary:Version}) | bareos-database-sqlite3 (= ${binary:Version}), bareos-database-tools, lsb-base (>= 3.2-13), bsd-mailx | mailx, ${shlibs:Depends}, ${misc:Depends}
+Depends:        bareos-common (= ${binary:Version}), bareos-database-common (= ${binary:Version}), bareos-database-tools, lsb-base (>= 3.2-13), bsd-mailx | mailx, ${shlibs:Depends}, ${misc:Depends}
 Recommends:     logrotate
 Conflicts:      bacula-director
 Replaces:       bacula-director
diff -Nru bareos-14.2.1+20141017gitc6c5b56/debian/patches/fix_multi_volume_data_corruption.diff bareos-14.2.1+20141017gitc6c5b56/debian/patches/fix_multi_volume_data_corruption.diff
--- bareos-14.2.1+20141017gitc6c5b56/debian/patches/fix_multi_volume_data_corruption.diff	1970-01-01 01:00:00.000000000 +0100
+++ bareos-14.2.1+20141017gitc6c5b56/debian/patches/fix_multi_volume_data_corruption.diff	2015-07-20 18:21:47.000000000 +0200
@@ -0,0 +1,39 @@
+Description: Backport of upstream fix "Don't trash dcr->rec while doing autolabeling."
+Origin: backport, https://github.com/bareos/bareos/commit/263240eaa911563a8468ecdaf7d4957201b41426
+Bug: https://bugs.bareos.org/view.php?id=437
+Bug-Debian: https://bugs.debian.org/788543
+
+--- bareos-14.2.1+20141017gitc6c5b56.orig/src/stored/label.c
++++ bareos-14.2.1+20141017gitc6c5b56/src/stored/label.c
+@@ -341,6 +341,7 @@ static bool write_volume_label_to_block(
+ bool write_new_volume_label_to_dev(DCR *dcr, const char *VolName,
+                                    const char *PoolName, bool relabel)
+ {
++   DEV_RECORD *rec;
+    JCR *jcr = dcr->jcr;
+    DEVICE *dev = dcr->dev;
+    DEV_BLOCK *block = dcr->block;
+@@ -420,15 +421,18 @@ bool write_new_volume_label_to_dev(DCR *
+          goto bail_out;
+       }
+ 
+-      create_volume_label_record(dcr, dev, dcr->rec);
+-      dcr->rec->Stream = 0;
+-      dcr->rec->maskedStream = 0;
++      rec = new_record();
++      create_volume_label_record(dcr, dev, rec);
++      rec->Stream = 0;
++      rec->maskedStream = 0;
+ 
+-      if (!write_record_to_block(dcr, dcr->rec)) {
++      if (!write_record_to_block(dcr, rec)) {
+          Dmsg2(130, "Bad Label write on %s: ERR=%s\n", dev->print_name(), dev->print_errmsg());
++         free_record(rec);
+          goto bail_out;
+       } else {
+-         Dmsg2(130, "Wrote label of %d bytes to %s\n", dcr->rec->data_len, dev->print_name());
++         Dmsg2(130, "Wrote label of %d bytes to %s\n", rec->data_len, dev->print_name());
++         free_record(rec);
+       }
+ 
+       Dmsg0(130, "Call write_block_to_dev()\n");
diff -Nru bareos-14.2.1+20141017gitc6c5b56/debian/patches/series bareos-14.2.1+20141017gitc6c5b56/debian/patches/series
--- bareos-14.2.1+20141017gitc6c5b56/debian/patches/series	2014-12-01 19:25:28.000000000 +0100
+++ bareos-14.2.1+20141017gitc6c5b56/debian/patches/series	2015-07-20 18:21:47.000000000 +0200
@@ -1 +1,2 @@
 size_t_cn_length.patch
+fix_multi_volume_data_corruption.diff


More information about the Pkg-bareos-devel mailing list