Hello community,

here is the log from the commit of package squashfs for openSUSE:Factory 
checked in at 2015-11-08 14:35:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/squashfs (Old)
 and      /work/SRC/openSUSE:Factory/.squashfs.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "squashfs"

Changes:
--------
--- /work/SRC/openSUSE:Factory/squashfs/squashfs.changes        2015-09-03 
18:05:44.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.squashfs.new/squashfs.changes   2015-11-08 
14:35:15.000000000 +0100
@@ -1,0 +2,7 @@
+Thu Nov  5 08:29:56 UTC 2015 - seife+...@b1-systems.com
+
+- add patches to fix eventual file corruption (boo#953723)
+  0001-mksquashfs-fix-rare-race-in-fragment-waiting-in-file.patch
+  0002-Fix-2GB-limit-of-the-is_fragment-.-function.patch
+
+-------------------------------------------------------------------

New:
----
  0001-mksquashfs-fix-rare-race-in-fragment-waiting-in-file.patch
  0002-Fix-2GB-limit-of-the-is_fragment-.-function.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ squashfs.spec ++++++
--- /var/tmp/diff_new_pack.f3dEu8/_old  2015-11-08 14:35:16.000000000 +0100
+++ /var/tmp/diff_new_pack.f3dEu8/_new  2015-11-08 14:35:16.000000000 +0100
@@ -25,6 +25,10 @@
 Url:            http://squashfs.sourceforge.net/
 Source0:        
http://sourceforge.net/projects/squashfs/files/squashfs/%{name}%{version}/%{name}%{version}.tar.gz
 Patch0:         squashfs-64k.patch
+# PATCH-FIX-UPSTREAM 
0001-mksquashfs-fix-rare-race-in-fragment-waiting-in-file.patch boo#953723
+Patch1:         0001-mksquashfs-fix-rare-race-in-fragment-waiting-in-file.patch
+# PATCH-FIX-UPSTREAM 0002-Fix-2GB-limit-of-the-is_fragment-.-function.patch 
boo#953723
+Patch2:         0002-Fix-2GB-limit-of-the-is_fragment-.-function.patch
 BuildRequires:  liblz4-devel
 BuildRequires:  lzma-devel
 BuildRequires:  lzo-devel
@@ -39,6 +43,8 @@
 %prep
 %setup -q -n squashfs%{version}
 %patch0 -p1
+%patch1 -p1
+%patch2 -p1
 
 %build
 sed -i -e "s,-O2,%{optflags}," squashfs-tools/Makefile

++++++ 0001-mksquashfs-fix-rare-race-in-fragment-waiting-in-file.patch ++++++
>From de03266983ceb62e5365aac84fcd3b2fd4d16e6f Mon Sep 17 00:00:00 2001
From: Phillip Lougher <phil...@squashfs.org.uk>
Date: Thu, 18 Sep 2014 01:28:11 +0100
Subject: [PATCH 1/2] mksquashfs: fix rare race in fragment waiting in
 filesystem finalisation

Fix a rare race condition in fragment waiting when finalising the
filesystem.  This is a race condition that was initially fixed in 2009,
but inadvertantly re-introduced in the latest release when the code
was rewritten.

Background:

When finalising the filesystem, the main control thread needs to ensure
all the in-flight fragments have been queued to the writer thread before
asking the writer thread to finish, and then writing the metadata.

It does this by waiting on the fragments_outstanding counter.  Once this
counter reaches 0, it synchronises with the writer thread, waiting until
the writer thread reports no outstanding data to be written.

However, the main thread can race with the fragment deflator thread(s)
because the fragment deflator thread(s) decrement the fragments_outstanding
counter and release the mutex before queueing the compressed fragment
to the writer thread, i.e. the offending code is:

                        fragments_outstanding --;
                        pthread_mutex_unlock(&fragment_mutex);
                        queue_put(to_writer, write_buffer);

In extremely rare circumstances, the main thread may see the
fragments_outstanding counter is zero before the fragment
deflator sends the fragment buffer to the writer thread, and synchronise
with the writer thread, and finalise before the fragment has been written.

The fix is to ensure the fragment is queued to the writer thread
before releasing the mutex.

Signed-off-by: Phillip Lougher <phil...@squashfs.org.uk>
---
 squashfs-tools/mksquashfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c
index 87b7d86..f1fcff1 100644
--- a/squashfs-tools/mksquashfs.c
+++ b/squashfs-tools/mksquashfs.c
@@ -2419,8 +2419,8 @@ void *frag_deflator(void *arg)
                        write_buffer->block = bytes;
                        bytes += compressed_size;
                        fragments_outstanding --;
-                       pthread_mutex_unlock(&fragment_mutex);
                        queue_put(to_writer, write_buffer);
+                       pthread_mutex_unlock(&fragment_mutex);
                        TRACE("Writing fragment %lld, uncompressed size %d, "
                                "compressed size %d\n", file_buffer->block,
                                file_buffer->size, compressed_size);
-- 
2.1.4

++++++ 0002-Fix-2GB-limit-of-the-is_fragment-.-function.patch ++++++
>From 9c1db6d13a51a2e009f0027ef336ce03624eac0d Mon Sep 17 00:00:00 2001
From: "Guan, Xin" <guanx....@gmail.com>
Date: Sat, 13 Sep 2014 13:15:26 +0200
Subject: [PATCH 2/2] Fix 2GB-limit of the is_fragment(...) function.

Applies to squashfs-tools 4.3.

Reported-by: Bruno Wolff III <br...@wolff.to>
Signed-off-by: Guan, Xin <guanx....@gmail.com>
Signed-off-by: Phillip Lougher <phil...@squashfs.org.uk>
---
 squashfs-tools/mksquashfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c
index f1fcff1..d221c35 100644
--- a/squashfs-tools/mksquashfs.c
+++ b/squashfs-tools/mksquashfs.c
@@ -2029,7 +2029,7 @@ struct file_info *duplicate(long long file_size, long 
long bytes,
 
 inline int is_fragment(struct inode_info *inode)
 {
-       int file_size = inode->buf.st_size;
+       off_t file_size = inode->buf.st_size;
 
        /*
         * If this block is to be compressed differently to the
-- 
2.1.4


Reply via email to