Accepting request 741504 from home:seilerphilipp:filesystems
- Version 4.4 - 2019-08-29: * Reproducible builds, new compressors, CVE fixes, security hardening and new options for Mksquashfs/Unsquashfs. - Overall improvements: * Mksquashfs now generates reproducible images by default. * Mkfs time and file timestamps can also be specified. * Support for the Zstandard (ZSTD) compression algorithm. * CVE-2015-4645 and CVE-2015-4646 have been fixed. - Mksquashfs improvements and major bug fixes: * Pseudo files now support symbolic links. * New -mkfs-time option. * New -all-time option. * New -root-mode option. * New -quiet option. * New -noId option. * New -offset option. * Update lz4 wrapper to use new functions introduced in 1.7.0. * Bug fix, don't allow "/" pseudo filenames. * Bug fix, allow quoting of pseudo files, to better handle filenames with spaces. * Fix compilation with glibc 2.25+. - Unsquashfs improvements and major bug fixes: * CVE-2015-4645 and CVE-2015-4646 have been fixed. * Unsquashfs has been further hardened against corrupted filestems. * Unsquashfs is now more strict about error handling. * New -ignore-errors option. * New -strict-errors option. * New -lln[umeric] option. * New -lc option. * New -llc option. * New -mkfs-time option. * New -UTC option. * New -offset option. * New -quiet option. * Update lz4 wrapper to use new functions introduced in 1.7.0. * Bug fix, fatal and non-fatal errors now set the exit code to 1. * Bug fix, fix time setting for symlinks. * Bug fix, try to set sticky-bit when running as a user process. * Fix compilation with glibc 2.25+. - build changes * re-created patches to fit squashfs 4.4 OBS-URL: https://build.opensuse.org/request/show/741504 OBS-URL: https://build.opensuse.org/package/show/filesystems/squashfs?expand=0&rev=42
This commit is contained in:
parent
f160d77789
commit
65f4d119ab
@ -1,60 +0,0 @@
|
||||
From de03266983ceb62e5365aac84fcd3b2fd4d16e6f Mon Sep 17 00:00:00 2001
|
||||
From: Phillip Lougher <phillip@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 <phillip@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
|
||||
|
@ -1,30 +0,0 @@
|
||||
From 9c1db6d13a51a2e009f0027ef336ce03624eac0d Mon Sep 17 00:00:00 2001
|
||||
From: "Guan, Xin" <guanx.bac@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 <bruno@wolff.to>
|
||||
Signed-off-by: Guan, Xin <guanx.bac@gmail.com>
|
||||
Signed-off-by: Phillip Lougher <phillip@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
|
||||
|
@ -1,86 +0,0 @@
|
||||
From 5a498ad24dcfeac9f3d747e894f22901f3ac10ef Mon Sep 17 00:00:00 2001
|
||||
From: probonopd <probonopd@users.noreply.github.com>
|
||||
Date: Thu, 15 Sep 2016 21:09:52 +0200
|
||||
Subject: [PATCH] Add -offset function to skip n bytes at the beginning of the
|
||||
squashfs file
|
||||
|
||||
---
|
||||
squashfs-tools/mksquashfs.c | 25 +++++++++++++++++++------
|
||||
1 file changed, 19 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c
|
||||
index d221c358..92b6a319 100644
|
||||
--- a/squashfs-tools/mksquashfs.c
|
||||
+++ b/squashfs-tools/mksquashfs.c
|
||||
@@ -98,6 +98,7 @@ int old_exclude = TRUE;
|
||||
int use_regex = FALSE;
|
||||
int nopad = FALSE;
|
||||
int exit_on_error = FALSE;
|
||||
+static off_t squashfs_start_offset = 0;
|
||||
|
||||
long long global_uid = -1, global_gid = -1;
|
||||
|
||||
@@ -516,9 +517,9 @@ int read_fs_bytes(int fd, long long byte, int bytes, void *buff)
|
||||
|
||||
pthread_cleanup_push((void *) pthread_mutex_unlock, &pos_mutex);
|
||||
pthread_mutex_lock(&pos_mutex);
|
||||
- if(lseek(fd, off, SEEK_SET) == -1) {
|
||||
+ if(lseek(fd, off+squashfs_start_offset, SEEK_SET) == -1) {
|
||||
ERROR("read_fs_bytes: Lseek on destination failed because %s, "
|
||||
- "offset=0x%llx\n", strerror(errno), off);
|
||||
+ "offset=0x%llx\n", strerror(errno), off+squashfs_start_offset);
|
||||
res = 0;
|
||||
} else if(read_bytes(fd, buff, bytes) < bytes) {
|
||||
ERROR("Read on destination failed\n");
|
||||
@@ -557,10 +558,10 @@ void write_destination(int fd, long long byte, int bytes, void *buff)
|
||||
pthread_cleanup_push((void *) pthread_mutex_unlock, &pos_mutex);
|
||||
pthread_mutex_lock(&pos_mutex);
|
||||
|
||||
- if(lseek(fd, off, SEEK_SET) == -1) {
|
||||
+ if(lseek(fd, off+squashfs_start_offset, SEEK_SET) == -1) {
|
||||
ERROR("write_destination: Lseek on destination "
|
||||
"failed because %s, offset=0x%llx\n", strerror(errno),
|
||||
- off);
|
||||
+ off+squashfs_start_offset);
|
||||
BAD_ERROR("Probably out of space on output %s\n",
|
||||
block_device ? "block device" : "filesystem");
|
||||
}
|
||||
@@ -2315,9 +2316,9 @@ void *writer(void *arg)
|
||||
pthread_cleanup_push((void *) pthread_mutex_unlock, &pos_mutex);
|
||||
pthread_mutex_lock(&pos_mutex);
|
||||
|
||||
- if(lseek(fd, off, SEEK_SET) == -1) {
|
||||
+ if(lseek(fd, off+squashfs_start_offset, SEEK_SET) == -1) {
|
||||
ERROR("writer: Lseek on destination failed because "
|
||||
- "%s, offset=0x%llx\n", strerror(errno), off);
|
||||
+ "%s, offset=0x%llx\n", strerror(errno), off+squashfs_start_offset);
|
||||
BAD_ERROR("Probably out of space on output "
|
||||
"%s\n", block_device ? "block device" :
|
||||
"filesystem");
|
||||
@@ -5341,6 +5342,15 @@ int main(int argc, char *argv[])
|
||||
force_progress = TRUE;
|
||||
else if(strcmp(argv[i], "-no-exports") == 0)
|
||||
exportable = FALSE;
|
||||
+ else if(strcmp(argv[i], "-offset") == 0 ||
|
||||
+ strcmp(argv[i], "-o") ==0) {
|
||||
+ if(++i == argc) {
|
||||
+ ERROR("%s: %s offset missing argument\n", argv[0],
|
||||
+ argv[i - 1]);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+ squashfs_start_offset = (off_t)atol(argv[i]);
|
||||
+ }
|
||||
else if(strcmp(argv[i], "-processors") == 0) {
|
||||
if((++i == argc) || !parse_num(argv[i], &processors)) {
|
||||
ERROR("%s: -processors missing or invalid "
|
||||
@@ -5641,6 +5651,9 @@ int main(int argc, char *argv[])
|
||||
ERROR("\nMiscellaneous options:\n");
|
||||
ERROR("-root-owned\t\talternative name for -all-root"
|
||||
"\n");
|
||||
+ ERROR("-o <offset>\t\tSkip <offset> bytes at the "
|
||||
+ "beginning of the file.\n\t\t\t"
|
||||
+ "Default 0 bytes\n");
|
||||
ERROR("-noInodeCompression\talternative name for -noI"
|
||||
"\n");
|
||||
ERROR("-noDataCompression\talternative name for -noD"
|
||||
|
@ -1,6 +1,7 @@
|
||||
--- squashfs4.3/squashfs-tools/mksquashfs.c.orig 2014-05-13 00:18:20.000000000 +0200
|
||||
+++ squashfs4.3/squashfs-tools/mksquashfs.c 2014-05-16 14:59:30.802144932 +0200
|
||||
@@ -4674,9 +4674,9 @@ void write_filesystem_tables(struct squa
|
||||
diff -dupr squashfs4.4/squashfs-tools/mksquashfs.c squashfs4.4_new/squashfs-tools/mksquashfs.c
|
||||
--- squashfs4.4/squashfs-tools/mksquashfs.c 2019-08-29 03:58:04.000000000 +0200
|
||||
+++ squashfs4.4/squashfs-tools/mksquashfs.c 2019-10-21 15:34:39.393253955 +0200
|
||||
@@ -4948,9 +4948,9 @@ void write_filesystem_tables(struct squa
|
||||
SQUASHFS_INSWAP_SUPER_BLOCK(sBlk);
|
||||
write_destination(fd, SQUASHFS_START, sizeof(*sBlk), sBlk);
|
||||
|
||||
@ -13,9 +14,9 @@
|
||||
}
|
||||
|
||||
close(fd);
|
||||
@@ -5309,7 +5309,7 @@ printOptions:
|
||||
ERROR("-force-uid uid\t\tset all file uids to uid\n");
|
||||
ERROR("-force-gid gid\t\tset all file gids to gid\n");
|
||||
@@ -5898,7 +5898,7 @@ printOptions:
|
||||
ERROR("-force-uid <uid>\tset all file uids to <uid>\n");
|
||||
ERROR("-force-gid <gid>\tset all file gids to <gid>\n");
|
||||
ERROR("-nopad\t\t\tdo not pad filesystem to a multiple "
|
||||
- "of 4K\n");
|
||||
+ "of 64K\n");
|
||||
|
@ -1,6 +1,7 @@
|
||||
--- squashfs4.3/squashfs-tools/mksquashfs.c.orig 2014-05-13 00:18:20.000000000 +0200
|
||||
+++ squashfs4.3/squashfs-tools/mksquashfs.c 2016-06-16 17:06:56.347792650 +0200
|
||||
@@ -4126,6 +4126,15 @@ void initialise_threads(int readq, int f
|
||||
diff -dupr squashfs4.4_orig/squashfs-tools/mksquashfs.c squashfs4.4/squashfs-tools/mksquashfs.c
|
||||
--- squashfs4.4_orig/squashfs-tools/mksquashfs.c 2019-10-21 15:36:52.002369471 +0200
|
||||
+++ squashfs4.4/squashfs-tools/mksquashfs.c 2019-10-21 15:37:13.402549491 +0200
|
||||
@@ -4384,6 +4384,15 @@ void initialise_threads(int readq, int f
|
||||
processors = sysconf(_SC_NPROCESSORS_ONLN);
|
||||
#endif
|
||||
}
|
||||
|
@ -1,3 +1,58 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Oct 21 13:45:56 UTC 2019 - Philipp Seiler <p.seiler@linuxmail.org>
|
||||
|
||||
- Version 4.4 - 2019-08-29:
|
||||
* Reproducible builds, new compressors,
|
||||
CVE fixes, security hardening and new options
|
||||
for Mksquashfs/Unsquashfs.
|
||||
|
||||
- Overall improvements:
|
||||
* Mksquashfs now generates reproducible images by default.
|
||||
* Mkfs time and file timestamps can also be specified.
|
||||
* Support for the Zstandard (ZSTD) compression algorithm.
|
||||
* CVE-2015-4645 and CVE-2015-4646 have been fixed.
|
||||
|
||||
- Mksquashfs improvements and major bug fixes:
|
||||
* Pseudo files now support symbolic links.
|
||||
* New -mkfs-time option.
|
||||
* New -all-time option.
|
||||
* New -root-mode option.
|
||||
* New -quiet option.
|
||||
* New -noId option.
|
||||
* New -offset option.
|
||||
* Update lz4 wrapper to use new functions introduced
|
||||
in 1.7.0.
|
||||
* Bug fix, don't allow "/" pseudo filenames.
|
||||
* Bug fix, allow quoting of pseudo files, to
|
||||
better handle filenames with spaces.
|
||||
* Fix compilation with glibc 2.25+.
|
||||
|
||||
- Unsquashfs improvements and major bug fixes:
|
||||
* CVE-2015-4645 and CVE-2015-4646 have been fixed.
|
||||
* Unsquashfs has been further hardened against corrupted
|
||||
filestems.
|
||||
* Unsquashfs is now more strict about error handling.
|
||||
* New -ignore-errors option.
|
||||
* New -strict-errors option.
|
||||
* New -lln[umeric] option.
|
||||
* New -lc option.
|
||||
* New -llc option.
|
||||
* New -mkfs-time option.
|
||||
* New -UTC option.
|
||||
* New -offset option.
|
||||
* New -quiet option.
|
||||
* Update lz4 wrapper to use new functions introduced
|
||||
in 1.7.0.
|
||||
* Bug fix, fatal and non-fatal errors now set the exit
|
||||
code to 1.
|
||||
* Bug fix, fix time setting for symlinks.
|
||||
* Bug fix, try to set sticky-bit when running as a
|
||||
user process.
|
||||
* Fix compilation with glibc 2.25+.
|
||||
|
||||
- build changes
|
||||
* re-created patches to fit squashfs 4.4
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Jun 5 20:21:30 UTC 2019 - Philipp <p.seiler@linuxmail.org>
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
|
||||
Name: squashfs
|
||||
Version: 4.3
|
||||
Version: 4.4
|
||||
Release: 0
|
||||
Summary: A Read-Only File System with Efficient Compression
|
||||
License: GPL-2.0-or-later
|
||||
@ -25,15 +25,7 @@ Group: System/Filesystems
|
||||
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
|
||||
Patch3: squashfs-thread-limit
|
||||
# PATCH-FIX-UPSTREAM Include <sys/sysmacros.h> for major/minor/makedev
|
||||
Patch4: sysmacros.patch
|
||||
# PATCH-FIX_UPSTREAM add -offset function to skip n bytes
|
||||
Patch5: 0003-Add-offset-function-to-skip-n-bytes.patch
|
||||
Patch1: squashfs-thread-limit
|
||||
%if %{?suse_version} > 1315
|
||||
BuildRequires: liblz4-devel
|
||||
%endif
|
||||
@ -51,10 +43,6 @@ squashfs images.
|
||||
%setup -q -n squashfs%{version}
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
|
||||
%build
|
||||
%define _lto_cflags %{nil}
|
||||
@ -70,7 +58,7 @@ install -m 755 squashfs-tools/{un,mk}squashfs %{buildroot}%{_bindir}
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%doc README README-%{version} PERFORMANCE.README CHANGES
|
||||
%doc README-%{version} ACKNOWLEDGEMENTS CHANGES COPYING USAGE
|
||||
%{_bindir}/*squashfs
|
||||
|
||||
%changelog
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0d605512437b1eb800b4736791559295ee5f60177e102e4d4ccd0ee241a5f3f6
|
||||
size 182550
|
3
squashfs4.4.tar.gz
Normal file
3
squashfs4.4.tar.gz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a981b3f3f2054b5a2e658851a3c06a2460ad04a9a8a645e0afe063a63fdbb07e
|
||||
size 190797
|
@ -1,24 +0,0 @@
|
||||
Index: squashfs4.3/squashfs-tools/mksquashfs.c
|
||||
===================================================================
|
||||
--- squashfs4.3.orig/squashfs-tools/mksquashfs.c
|
||||
+++ squashfs4.3/squashfs-tools/mksquashfs.c
|
||||
@@ -43,6 +43,7 @@
|
||||
#include <signal.h>
|
||||
#include <setjmp.h>
|
||||
#include <sys/types.h>
|
||||
+#include <sys/sysmacros.h>
|
||||
#include <sys/mman.h>
|
||||
#include <pthread.h>
|
||||
#include <regex.h>
|
||||
Index: squashfs4.3/squashfs-tools/unsquashfs.c
|
||||
===================================================================
|
||||
--- squashfs4.3.orig/squashfs-tools/unsquashfs.c
|
||||
+++ squashfs4.3/squashfs-tools/unsquashfs.c
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
#include <sys/sysinfo.h>
|
||||
#include <sys/types.h>
|
||||
+#include <sys/sysmacros.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
#include <limits.h>
|
Loading…
Reference in New Issue
Block a user