squashfs: fix for mksquashfs 4.0 race condition

Fix for the race condition in mksquashfs recently seen.
Patch by Phillip Lougher.

See http://thread.gmane.org/gmane.comp.file-systems.squashfs.devel/76
for details.

Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
This commit is contained in:
Peter Korsgaard 2009-09-14 15:54:24 +02:00
parent f76d8a3fd4
commit 76aaac62a6
3 changed files with 44 additions and 1 deletions

View File

@ -2,6 +2,8 @@
New packages: divine, libarchive
Updated/fixed packages: squashfs
Issues resolved (http://bugs.uclibc.org):
#487: Make kismet package sexier

View File

@ -0,0 +1,41 @@
[PATCH]: fix mksquashfs race condition
See http://thread.gmane.org/gmane.comp.file-systems.squashfs.devel/76
for details.
---
squashfs-tools/mksquashfs.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
Index: squashfs4.0/squashfs-tools/mksquashfs.c
===================================================================
--- squashfs4.0.orig/squashfs-tools/mksquashfs.c
+++ squashfs4.0/squashfs-tools/mksquashfs.c
@@ -1733,8 +1733,8 @@ void unlock_fragments()
entry->buffer->block = bytes;
bytes += compressed_size;
fragments_outstanding --;
- pthread_mutex_unlock(&fragment_mutex);
queue_put(to_writer, entry->buffer);
+ pthread_mutex_unlock(&fragment_mutex);
pthread_mutex_lock(&fragment_mutex);
TRACE("fragment_locked writing fragment %d, compressed size %d"
"\n", entry->fragment, compressed_size);
@@ -2426,8 +2426,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);
@@ -4137,7 +4137,7 @@ void read_recovery_data(char *recovery_f
#define VERSION() \
- printf("mksquashfs version 4.0 (2009/04/05)\n");\
+ printf("mksquashfs version 4.0-test (2009/04/05)\n");\
printf("copyright (C) 2009 Phillip Lougher <phillip@lougher.demon.co.uk>\n\n"); \
printf("This program is free software; you can redistribute it and/or\n");\
printf("modify it under the terms of the GNU General Public License\n");\

View File

@ -14,7 +14,7 @@ $(DL_DIR)/$(SQUASHFS_SOURCE):
$(SQUASHFS_DIR)/.unpacked: $(DL_DIR)/$(SQUASHFS_SOURCE) #$(SQUASHFS_PATCH)
$(SQUASHFS_CAT) $(DL_DIR)/$(SQUASHFS_SOURCE) | tar -C $(BUILD_DIR) -xvf -
toolchain/patch-kernel.sh $(SQUASHFS_DIR) target/squashfs/ squashfs\*.patch
toolchain/patch-kernel.sh $(SQUASHFS_DIR) target/squashfs/ squashfs-$(SQUASHFS_VERSION)-\*.patch
touch $@
$(SQUASHFS_DIR)/squashfs-tools/mksquashfs: $(SQUASHFS_DIR)/.unpacked