diff options
Diffstat (limited to 'poky/meta/recipes-devtools/squashfs-tools/squashfs-tools/CVE-2021-41072-requisite-3.patch')
-rw-r--r-- | poky/meta/recipes-devtools/squashfs-tools/squashfs-tools/CVE-2021-41072-requisite-3.patch | 326 |
1 files changed, 0 insertions, 326 deletions
diff --git a/poky/meta/recipes-devtools/squashfs-tools/squashfs-tools/CVE-2021-41072-requisite-3.patch b/poky/meta/recipes-devtools/squashfs-tools/squashfs-tools/CVE-2021-41072-requisite-3.patch deleted file mode 100644 index 5d5df6f15b..0000000000 --- a/poky/meta/recipes-devtools/squashfs-tools/squashfs-tools/CVE-2021-41072-requisite-3.patch +++ /dev/null @@ -1,326 +0,0 @@ -The commit is required by the fix for CVE-2021-41072. - -Upstream-Status: Backport [https://github.com/plougher/squashfs-tools/commit/9938154] - -Signed-off-by: Kai Kang <kai.kang@windriver.com> - -From 9938154174756ee48a94ea0b076397a2944b028d Mon Sep 17 00:00:00 2001 -From: Phillip Lougher <phillip@squashfs.org.uk> -Date: Sun, 12 Sep 2021 22:58:11 +0100 -Subject: [PATCH] unsquashfs: use linked list to store directory names - -This should bring higher performance, and it allows sorting -if necessary (1.x and 2.0 filesystems). - -Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk> ---- - squashfs-tools/unsquash-1.c | 30 +++++++++++++++--------------- - squashfs-tools/unsquash-1234.c | 12 ++++++++---- - squashfs-tools/unsquash-2.c | 29 +++++++++++++++-------------- - squashfs-tools/unsquash-3.c | 29 +++++++++++++++-------------- - squashfs-tools/unsquash-4.c | 29 +++++++++++++++-------------- - squashfs-tools/unsquashfs.c | 16 ++++++++++------ - squashfs-tools/unsquashfs.h | 3 ++- - 7 files changed, 80 insertions(+), 68 deletions(-) - -diff --git a/squashfs-tools/unsquash-1.c b/squashfs-tools/unsquash-1.c -index d0121c6..b604434 100644 ---- a/squashfs-tools/unsquash-1.c -+++ b/squashfs-tools/unsquash-1.c -@@ -254,7 +254,7 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - long long start; - int bytes = 0; - int dir_count, size, res; -- struct dir_ent *new_dir; -+ struct dir_ent *ent, *cur_ent = NULL; - struct dir *dir; - - TRACE("squashfs_opendir: inode start block %d, offset %d\n", -@@ -267,7 +267,7 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - MEM_ERROR(); - - dir->dir_count = 0; -- dir->cur_entry = 0; -+ dir->cur_entry = NULL; - dir->mode = (*i)->mode; - dir->uid = (*i)->uid; - dir->guid = (*i)->gid; -@@ -351,20 +351,20 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - "%d:%d, type %d\n", dire->name, - dirh.start_block, dire->offset, dire->type); - -- if((dir->dir_count % DIR_ENT_SIZE) == 0) { -- new_dir = realloc(dir->dirs, (dir->dir_count + -- DIR_ENT_SIZE) * sizeof(struct dir_ent)); -- if(new_dir == NULL) -- MEM_ERROR(); -- -- dir->dirs = new_dir; -- } -+ ent = malloc(sizeof(struct dir_ent)); -+ if(ent == NULL) -+ MEM_ERROR(); - -- dir->dirs[dir->dir_count].name = strdup(dire->name); -- dir->dirs[dir->dir_count].start_block = -- dirh.start_block; -- dir->dirs[dir->dir_count].offset = dire->offset; -- dir->dirs[dir->dir_count].type = dire->type; -+ ent->name = strdup(dire->name); -+ ent->start_block = dirh.start_block; -+ ent->offset = dire->offset; -+ ent->type = dire->type; -+ ent->next = NULL; -+ if(cur_ent == NULL) -+ dir->dirs = ent; -+ else -+ cur_ent->next = ent; -+ cur_ent = ent; - dir->dir_count ++; - bytes += dire->size + 1; - } -diff --git a/squashfs-tools/unsquash-1234.c b/squashfs-tools/unsquash-1234.c -index ac46d9d..e389f8d 100644 ---- a/squashfs-tools/unsquash-1234.c -+++ b/squashfs-tools/unsquash-1234.c -@@ -60,11 +60,15 @@ int check_name(char *name, int size) - - void squashfs_closedir(struct dir *dir) - { -- int i; -+ struct dir_ent *ent = dir->dirs; - -- for(i = 0; i < dir->dir_count; i++) -- free(dir->dirs[i].name); -+ while(ent) { -+ struct dir_ent *tmp = ent; -+ -+ ent = ent->next; -+ free(tmp->name); -+ free(tmp); -+ } - -- free(dir->dirs); - free(dir); - } -diff --git a/squashfs-tools/unsquash-2.c b/squashfs-tools/unsquash-2.c -index e847980..956f96f 100644 ---- a/squashfs-tools/unsquash-2.c -+++ b/squashfs-tools/unsquash-2.c -@@ -347,7 +347,7 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - long long start; - int bytes = 0; - int dir_count, size, res; -- struct dir_ent *new_dir; -+ struct dir_ent *ent, *cur_ent = NULL; - struct dir *dir; - - TRACE("squashfs_opendir: inode start block %d, offset %d\n", -@@ -360,7 +360,7 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - MEM_ERROR(); - - dir->dir_count = 0; -- dir->cur_entry = 0; -+ dir->cur_entry = NULL; - dir->mode = (*i)->mode; - dir->uid = (*i)->uid; - dir->guid = (*i)->gid; -@@ -444,19 +444,20 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - "%d:%d, type %d\n", dire->name, - dirh.start_block, dire->offset, dire->type); - -- if((dir->dir_count % DIR_ENT_SIZE) == 0) { -- new_dir = realloc(dir->dirs, (dir->dir_count + -- DIR_ENT_SIZE) * sizeof(struct dir_ent)); -- if(new_dir == NULL) -- MEM_ERROR(); -- dir->dirs = new_dir; -- } -+ ent = malloc(sizeof(struct dir_ent)); -+ if(ent == NULL) -+ MEM_ERROR(); - -- dir->dirs[dir->dir_count].name = strdup(dire->name); -- dir->dirs[dir->dir_count].start_block = -- dirh.start_block; -- dir->dirs[dir->dir_count].offset = dire->offset; -- dir->dirs[dir->dir_count].type = dire->type; -+ ent->name = strdup(dire->name); -+ ent->start_block = dirh.start_block; -+ ent->offset = dire->offset; -+ ent->type = dire->type; -+ ent->next = NULL; -+ if(cur_ent == NULL) -+ dir->dirs = ent; -+ else -+ cur_ent->next = ent; -+ cur_ent = ent; - dir->dir_count ++; - bytes += dire->size + 1; - } -diff --git a/squashfs-tools/unsquash-3.c b/squashfs-tools/unsquash-3.c -index 8223f27..835a574 100644 ---- a/squashfs-tools/unsquash-3.c -+++ b/squashfs-tools/unsquash-3.c -@@ -381,7 +381,7 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - long long start; - int bytes = 0; - int dir_count, size, res; -- struct dir_ent *new_dir; -+ struct dir_ent *ent, *cur_ent = NULL; - struct dir *dir; - - TRACE("squashfs_opendir: inode start block %d, offset %d\n", -@@ -394,7 +394,7 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - MEM_ERROR(); - - dir->dir_count = 0; -- dir->cur_entry = 0; -+ dir->cur_entry = NULL; - dir->mode = (*i)->mode; - dir->uid = (*i)->uid; - dir->guid = (*i)->gid; -@@ -478,19 +478,20 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - "%d:%d, type %d\n", dire->name, - dirh.start_block, dire->offset, dire->type); - -- if((dir->dir_count % DIR_ENT_SIZE) == 0) { -- new_dir = realloc(dir->dirs, (dir->dir_count + -- DIR_ENT_SIZE) * sizeof(struct dir_ent)); -- if(new_dir == NULL) -- MEM_ERROR(); -- dir->dirs = new_dir; -- } -+ ent = malloc(sizeof(struct dir_ent)); -+ if(ent == NULL) -+ MEM_ERROR(); - -- dir->dirs[dir->dir_count].name = strdup(dire->name); -- dir->dirs[dir->dir_count].start_block = -- dirh.start_block; -- dir->dirs[dir->dir_count].offset = dire->offset; -- dir->dirs[dir->dir_count].type = dire->type; -+ ent->name = strdup(dire->name); -+ ent->start_block = dirh.start_block; -+ ent->offset = dire->offset; -+ ent->type = dire->type; -+ ent->next = NULL; -+ if(cur_ent == NULL) -+ dir->dirs = ent; -+ else -+ cur_ent->next = ent; -+ cur_ent = ent; - dir->dir_count ++; - bytes += dire->size + 1; - } -diff --git a/squashfs-tools/unsquash-4.c b/squashfs-tools/unsquash-4.c -index 1e199a7..694783d 100644 ---- a/squashfs-tools/unsquash-4.c -+++ b/squashfs-tools/unsquash-4.c -@@ -331,7 +331,7 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer; - long long start; - int bytes = 0, dir_count, size, res; -- struct dir_ent *new_dir; -+ struct dir_ent *ent, *cur_ent = NULL; - struct dir *dir; - - TRACE("squashfs_opendir: inode start block %d, offset %d\n", -@@ -344,7 +344,7 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - MEM_ERROR(); - - dir->dir_count = 0; -- dir->cur_entry = 0; -+ dir->cur_entry = NULL; - dir->mode = (*i)->mode; - dir->uid = (*i)->uid; - dir->guid = (*i)->gid; -@@ -415,19 +415,20 @@ static struct dir *squashfs_opendir(unsigned int block_start, unsigned int offse - "%d:%d, type %d\n", dire->name, - dirh.start_block, dire->offset, dire->type); - -- if((dir->dir_count % DIR_ENT_SIZE) == 0) { -- new_dir = realloc(dir->dirs, (dir->dir_count + -- DIR_ENT_SIZE) * sizeof(struct dir_ent)); -- if(new_dir == NULL) -- MEM_ERROR(); -- dir->dirs = new_dir; -- } -+ ent = malloc(sizeof(struct dir_ent)); -+ if(ent == NULL) -+ MEM_ERROR(); - -- dir->dirs[dir->dir_count].name = strdup(dire->name); -- dir->dirs[dir->dir_count].start_block = -- dirh.start_block; -- dir->dirs[dir->dir_count].offset = dire->offset; -- dir->dirs[dir->dir_count].type = dire->type; -+ ent->name = strdup(dire->name); -+ ent->start_block = dirh.start_block; -+ ent->offset = dire->offset; -+ ent->type = dire->type; -+ ent->next = NULL; -+ if(cur_ent == NULL) -+ dir->dirs = ent; -+ else -+ cur_ent->next = ent; -+ cur_ent = ent; - dir->dir_count ++; - bytes += dire->size + 1; - } -diff --git a/squashfs-tools/unsquashfs.c b/squashfs-tools/unsquashfs.c -index 04be53c..fee28ec 100644 ---- a/squashfs-tools/unsquashfs.c -+++ b/squashfs-tools/unsquashfs.c -@@ -1337,14 +1337,18 @@ failed: - int squashfs_readdir(struct dir *dir, char **name, unsigned int *start_block, - unsigned int *offset, unsigned int *type) - { -- if(dir->cur_entry == dir->dir_count) -+ if(dir->cur_entry == NULL) -+ dir->cur_entry = dir->dirs; -+ else -+ dir->cur_entry = dir->cur_entry->next; -+ -+ if(dir->cur_entry == NULL) - return FALSE; - -- *name = dir->dirs[dir->cur_entry].name; -- *start_block = dir->dirs[dir->cur_entry].start_block; -- *offset = dir->dirs[dir->cur_entry].offset; -- *type = dir->dirs[dir->cur_entry].type; -- dir->cur_entry ++; -+ *name = dir->cur_entry->name; -+ *start_block = dir->cur_entry->start_block; -+ *offset = dir->cur_entry->offset; -+ *type = dir->cur_entry->type; - - return TRUE; - } -diff --git a/squashfs-tools/unsquashfs.h b/squashfs-tools/unsquashfs.h -index 583fbe4..f8cf78c 100644 ---- a/squashfs-tools/unsquashfs.h -+++ b/squashfs-tools/unsquashfs.h -@@ -168,17 +168,18 @@ struct dir_ent { - unsigned int start_block; - unsigned int offset; - unsigned int type; -+ struct dir_ent *next; - }; - - struct dir { - int dir_count; -- int cur_entry; - unsigned int mode; - uid_t uid; - gid_t guid; - unsigned int mtime; - unsigned int xattr; - struct dir_ent *dirs; -+ struct dir_ent *cur_entry; - }; - - struct file_entry { --- -2.17.1 - |