summaryrefslogtreecommitdiffstats
path: root/meta/recipes-extended
diff options
context:
space:
mode:
authorZang Ruochen <zangrc.fnst@cn.fujitsu.com>2019-08-27 10:45:16 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-08-27 22:52:41 +0100
commit4f8fa80b6c57f29c68678cabcac5d114d1ff0500 (patch)
treec4ae2aa434d230dc042a70abd398d4ac34709027 /meta/recipes-extended
parente8482da4543841899f7ed9091c87dd3e0f23bfd9 (diff)
downloadopenembedded-core-contrib-4f8fa80b6c57f29c68678cabcac5d114d1ff0500.tar.gz
libarchive:upgrade 3.3.3 -> 3.4.0
-libarchive/CVE-2018-1000877.patch -libarchive/CVE-2018-1000878.patch -libarchive/CVE-2018-1000879.patch -libarchive/CVE-2018-1000880.patch -libarchive/CVE-2019-1000019.patch -libarchive/CVE-2019-1000020.patch -libarchive/bug1066.patch -libarchive/non-recursive-extract-and-list.patch Removed since these are included in 3.4.0. -License-Update: Copyright year updated to 2018. Signed-off-by: Zang Ruochen <zangrc.fnst@cn.fujitsu.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-extended')
-rw-r--r--meta/recipes-extended/libarchive/libarchive/CVE-2018-1000877.patch38
-rw-r--r--meta/recipes-extended/libarchive/libarchive/CVE-2018-1000878.patch79
-rw-r--r--meta/recipes-extended/libarchive/libarchive/CVE-2018-1000879.patch50
-rw-r--r--meta/recipes-extended/libarchive/libarchive/CVE-2018-1000880.patch44
-rw-r--r--meta/recipes-extended/libarchive/libarchive/CVE-2019-1000019.patch59
-rw-r--r--meta/recipes-extended/libarchive/libarchive/CVE-2019-1000020.patch61
-rw-r--r--meta/recipes-extended/libarchive/libarchive/bug1066.patch54
-rw-r--r--meta/recipes-extended/libarchive/libarchive/non-recursive-extract-and-list.patch153
-rw-r--r--meta/recipes-extended/libarchive/libarchive_3.4.0.bb (renamed from meta/recipes-extended/libarchive/libarchive_3.3.3.bb)14
9 files changed, 3 insertions, 549 deletions
diff --git a/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000877.patch b/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000877.patch
deleted file mode 100644
index ce638370bd..0000000000
--- a/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000877.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-CVE: CVE-2018-1000877
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 021efa522ad729ff0f5806c4ce53e4a6cc1daa31 Mon Sep 17 00:00:00 2001
-From: Daniel Axtens <dja@axtens.net>
-Date: Tue, 20 Nov 2018 17:56:29 +1100
-Subject: [PATCH] Avoid a double-free when a window size of 0 is specified
-
-new_size can be 0 with a malicious or corrupted RAR archive.
-
-realloc(area, 0) is equivalent to free(area), so the region would
-be free()d here and the free()d again in the cleanup function.
-
-Found with a setup running AFL, afl-rb, and qsym.
----
- libarchive/archive_read_support_format_rar.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/libarchive/archive_read_support_format_rar.c b/libarchive/archive_read_support_format_rar.c
-index 23452222..6f419c27 100644
---- a/libarchive/archive_read_support_format_rar.c
-+++ b/libarchive/archive_read_support_format_rar.c
-@@ -2300,6 +2300,11 @@ parse_codes(struct archive_read *a)
- new_size = DICTIONARY_MAX_SIZE;
- else
- new_size = rar_fls((unsigned int)rar->unp_size) << 1;
-+ if (new_size == 0) {
-+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
-+ "Zero window size is invalid.");
-+ return (ARCHIVE_FATAL);
-+ }
- new_window = realloc(rar->lzss.window, new_size);
- if (new_window == NULL) {
- archive_set_error(&a->archive, ENOMEM,
---
-2.20.0
-
diff --git a/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000878.patch b/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000878.patch
deleted file mode 100644
index 7468fd3c93..0000000000
--- a/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000878.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-CVE: CVE-2018-1000878
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From bfcfe6f04ed20db2504db8a254d1f40a1d84eb28 Mon Sep 17 00:00:00 2001
-From: Daniel Axtens <dja@axtens.net>
-Date: Tue, 4 Dec 2018 00:55:22 +1100
-Subject: [PATCH] rar: file split across multi-part archives must match
-
-Fuzzing uncovered some UAF and memory overrun bugs where a file in a
-single file archive reported that it was split across multiple
-volumes. This was caused by ppmd7 operations calling
-rar_br_fillup. This would invoke rar_read_ahead, which would in some
-situations invoke archive_read_format_rar_read_header. That would
-check the new file name against the old file name, and if they didn't
-match up it would free the ppmd7 buffer and allocate a new
-one. However, because the ppmd7 decoder wasn't actually done with the
-buffer, it would continue to used the freed buffer. Both reads and
-writes to the freed region can be observed.
-
-This is quite tricky to solve: once the buffer has been freed it is
-too late, as the ppmd7 decoder functions almost universally assume
-success - there's no way for ppmd_read to signal error, nor are there
-good ways for functions like Range_Normalise to propagate them. So we
-can't detect after the fact that we're in an invalid state - e.g. by
-checking rar->cursor, we have to prevent ourselves from ever ending up
-there. So, when we are in the dangerous part or rar_read_ahead that
-assumes a valid split, we set a flag force read_header to either go
-down the path for split files or bail. This means that the ppmd7
-decoder keeps a valid buffer and just runs out of data.
-
-Found with a combination of AFL, afl-rb and qsym.
----
- libarchive/archive_read_support_format_rar.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/libarchive/archive_read_support_format_rar.c b/libarchive/archive_read_support_format_rar.c
-index 6f419c27..a8cc5c94 100644
---- a/libarchive/archive_read_support_format_rar.c
-+++ b/libarchive/archive_read_support_format_rar.c
-@@ -258,6 +258,7 @@ struct rar
- struct data_block_offsets *dbo;
- unsigned int cursor;
- unsigned int nodes;
-+ char filename_must_match;
-
- /* LZSS members */
- struct huffman_code maincode;
-@@ -1560,6 +1561,12 @@ read_header(struct archive_read *a, struct archive_entry *entry,
- }
- return ret;
- }
-+ else if (rar->filename_must_match)
-+ {
-+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
-+ "Mismatch of file parts split across multi-volume archive");
-+ return (ARCHIVE_FATAL);
-+ }
-
- rar->filename_save = (char*)realloc(rar->filename_save,
- filename_size + 1);
-@@ -2933,12 +2940,14 @@ rar_read_ahead(struct archive_read *a, size_t min, ssize_t *avail)
- else if (*avail == 0 && rar->main_flags & MHD_VOLUME &&
- rar->file_flags & FHD_SPLIT_AFTER)
- {
-+ rar->filename_must_match = 1;
- ret = archive_read_format_rar_read_header(a, a->entry);
- if (ret == (ARCHIVE_EOF))
- {
- rar->has_endarc_header = 1;
- ret = archive_read_format_rar_read_header(a, a->entry);
- }
-+ rar->filename_must_match = 0;
- if (ret != (ARCHIVE_OK))
- return NULL;
- return rar_read_ahead(a, min, avail);
---
-2.20.0
-
diff --git a/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000879.patch b/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000879.patch
deleted file mode 100644
index 9f25932a1a..0000000000
--- a/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000879.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-CVE: CVE-2018-1000879
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 15bf44fd2c1ad0e3fd87048b3fcc90c4dcff1175 Mon Sep 17 00:00:00 2001
-From: Daniel Axtens <dja@axtens.net>
-Date: Tue, 4 Dec 2018 14:29:42 +1100
-Subject: [PATCH] Skip 0-length ACL fields
-
-Currently, it is possible to create an archive that crashes bsdtar
-with a malformed ACL:
-
-Program received signal SIGSEGV, Segmentation fault.
-archive_acl_from_text_l (acl=<optimised out>, text=0x7e2e92 "", want_type=<optimised out>, sc=<optimised out>) at libarchive/archive_acl.c:1726
-1726 switch (*s) {
-(gdb) p n
-$1 = 1
-(gdb) p field[n]
-$2 = {start = 0x0, end = 0x0}
-
-Stop this by checking that the length is not zero before beginning
-the switch statement.
-
-I am pretty sure this is the bug mentioned in the qsym paper [1],
-and I was able to replicate it with a qsym + AFL + afl-rb setup.
-
-[1] https://www.usenix.org/conference/usenixsecurity18/presentation/yun
----
- libarchive/archive_acl.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/libarchive/archive_acl.c b/libarchive/archive_acl.c
-index 512beee1..7beeee86 100644
---- a/libarchive/archive_acl.c
-+++ b/libarchive/archive_acl.c
-@@ -1723,6 +1723,11 @@ archive_acl_from_text_l(struct archive_acl *acl, const char *text,
- st = field[n].start + 1;
- len = field[n].end - field[n].start;
-
-+ if (len == 0) {
-+ ret = ARCHIVE_WARN;
-+ continue;
-+ }
-+
- switch (*s) {
- case 'u':
- if (len == 1 || (len == 4
---
-2.20.0
-
diff --git a/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000880.patch b/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000880.patch
deleted file mode 100644
index bc264a1242..0000000000
--- a/meta/recipes-extended/libarchive/libarchive/CVE-2018-1000880.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-CVE: CVE-2018-1000880
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 9c84b7426660c09c18cc349f6d70b5f8168b5680 Mon Sep 17 00:00:00 2001
-From: Daniel Axtens <dja@axtens.net>
-Date: Tue, 4 Dec 2018 16:33:42 +1100
-Subject: [PATCH] warc: consume data once read
-
-The warc decoder only used read ahead, it wouldn't actually consume
-data that had previously been printed. This means that if you specify
-an invalid content length, it will just reprint the same data over
-and over and over again until it hits the desired length.
-
-This means that a WARC resource with e.g.
-Content-Length: 666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666665
-but only a few hundred bytes of data, causes a quasi-infinite loop.
-
-Consume data in subsequent calls to _warc_read.
-
-Found with an AFL + afl-rb + qsym setup.
----
- libarchive/archive_read_support_format_warc.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/libarchive/archive_read_support_format_warc.c b/libarchive/archive_read_support_format_warc.c
-index e8753853..e8fc8428 100644
---- a/libarchive/archive_read_support_format_warc.c
-+++ b/libarchive/archive_read_support_format_warc.c
-@@ -386,6 +386,11 @@ _warc_read(struct archive_read *a, const void **buf, size_t *bsz, int64_t *off)
- return (ARCHIVE_EOF);
- }
-
-+ if (w->unconsumed) {
-+ __archive_read_consume(a, w->unconsumed);
-+ w->unconsumed = 0U;
-+ }
-+
- rab = __archive_read_ahead(a, 1U, &nrd);
- if (nrd < 0) {
- *bsz = 0U;
---
-2.20.0
-
diff --git a/meta/recipes-extended/libarchive/libarchive/CVE-2019-1000019.patch b/meta/recipes-extended/libarchive/libarchive/CVE-2019-1000019.patch
deleted file mode 100644
index 7f39893c25..0000000000
--- a/meta/recipes-extended/libarchive/libarchive/CVE-2019-1000019.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-CVE: CVE-2019-1000019
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 65a23f5dbee4497064e9bb467f81138a62b0dae1 Mon Sep 17 00:00:00 2001
-From: Daniel Axtens <dja@axtens.net>
-Date: Tue, 1 Jan 2019 16:01:40 +1100
-Subject: [PATCH 2/2] 7zip: fix crash when parsing certain archives
-
-Fuzzing with CRCs disabled revealed that a call to get_uncompressed_data()
-would sometimes fail to return at least 'minimum' bytes. This can cause
-the crc32() invocation in header_bytes to read off into invalid memory.
-
-A specially crafted archive can use this to cause a crash.
-
-An ASAN trace is below, but ASAN is not required - an uninstrumented
-binary will also crash.
-
-==7719==ERROR: AddressSanitizer: SEGV on unknown address 0x631000040000 (pc 0x7fbdb3b3ec1d bp 0x7ffe77a51310 sp 0x7ffe77a51150 T0)
-==7719==The signal is caused by a READ memory access.
- #0 0x7fbdb3b3ec1c in crc32_z (/lib/x86_64-linux-gnu/libz.so.1+0x2c1c)
- #1 0x84f5eb in header_bytes (/tmp/libarchive/bsdtar+0x84f5eb)
- #2 0x856156 in read_Header (/tmp/libarchive/bsdtar+0x856156)
- #3 0x84e134 in slurp_central_directory (/tmp/libarchive/bsdtar+0x84e134)
- #4 0x849690 in archive_read_format_7zip_read_header (/tmp/libarchive/bsdtar+0x849690)
- #5 0x5713b7 in _archive_read_next_header2 (/tmp/libarchive/bsdtar+0x5713b7)
- #6 0x570e63 in _archive_read_next_header (/tmp/libarchive/bsdtar+0x570e63)
- #7 0x6f08bd in archive_read_next_header (/tmp/libarchive/bsdtar+0x6f08bd)
- #8 0x52373f in read_archive (/tmp/libarchive/bsdtar+0x52373f)
- #9 0x5257be in tar_mode_x (/tmp/libarchive/bsdtar+0x5257be)
- #10 0x51daeb in main (/tmp/libarchive/bsdtar+0x51daeb)
- #11 0x7fbdb27cab96 in __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310
- #12 0x41dd09 in _start (/tmp/libarchive/bsdtar+0x41dd09)
-
-This was primarly done with afl and FairFuzz. Some early corpus entries
-may have been generated by qsym.
----
- libarchive/archive_read_support_format_7zip.c | 8 +-------
- 1 file changed, 1 insertion(+), 7 deletions(-)
-
-diff --git a/libarchive/archive_read_support_format_7zip.c b/libarchive/archive_read_support_format_7zip.c
-index bccbf8966..b6d1505d3 100644
---- a/libarchive/archive_read_support_format_7zip.c
-+++ b/libarchive/archive_read_support_format_7zip.c
-@@ -2964,13 +2964,7 @@ get_uncompressed_data(struct archive_read *a, const void **buff, size_t size,
- if (zip->codec == _7Z_COPY && zip->codec2 == (unsigned long)-1) {
- /* Copy mode. */
-
-- /*
-- * Note: '1' here is a performance optimization.
-- * Recall that the decompression layer returns a count of
-- * available bytes; asking for more than that forces the
-- * decompressor to combine reads by copying data.
-- */
-- *buff = __archive_read_ahead(a, 1, &bytes_avail);
-+ *buff = __archive_read_ahead(a, minimum, &bytes_avail);
- if (bytes_avail <= 0) {
- archive_set_error(&a->archive,
- ARCHIVE_ERRNO_FILE_FORMAT,
diff --git a/meta/recipes-extended/libarchive/libarchive/CVE-2019-1000020.patch b/meta/recipes-extended/libarchive/libarchive/CVE-2019-1000020.patch
deleted file mode 100644
index 25a76fdcd2..0000000000
--- a/meta/recipes-extended/libarchive/libarchive/CVE-2019-1000020.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-CVE: CVE-2019-1000020
-Upstream-Status: Backport
-Signed-off-by: Ross Burton <ross.burton@intel.com>
-
-From 8312eaa576014cd9b965012af51bc1f967b12423 Mon Sep 17 00:00:00 2001
-From: Daniel Axtens <dja@axtens.net>
-Date: Tue, 1 Jan 2019 17:10:49 +1100
-Subject: [PATCH 1/2] iso9660: Fail when expected Rockridge extensions is
- missing
-
-A corrupted or malicious ISO9660 image can cause read_CE() to loop
-forever.
-
-read_CE() calls parse_rockridge(), expecting a Rockridge extension
-to be read. However, parse_rockridge() is structured as a while
-loop starting with a sanity check, and if the sanity check fails
-before the loop has run, the function returns ARCHIVE_OK without
-advancing the position in the file. This causes read_CE() to retry
-indefinitely.
-
-Make parse_rockridge() return ARCHIVE_WARN if it didn't read an
-extension. As someone with no real knowledge of the format, this
-seems more apt than ARCHIVE_FATAL, but both the call-sites escalate
-it to a fatal error immediately anyway.
-
-Found with a combination of AFL, afl-rb (FairFuzz) and qsym.
----
- libarchive/archive_read_support_format_iso9660.c | 11 ++++++++++-
- 1 file changed, 10 insertions(+), 1 deletion(-)
-
-diff --git a/libarchive/archive_read_support_format_iso9660.c b/libarchive/archive_read_support_format_iso9660.c
-index 28acfefbb..bad8f1dfe 100644
---- a/libarchive/archive_read_support_format_iso9660.c
-+++ b/libarchive/archive_read_support_format_iso9660.c
-@@ -2102,6 +2102,7 @@ parse_rockridge(struct archive_read *a, struct file_info *file,
- const unsigned char *p, const unsigned char *end)
- {
- struct iso9660 *iso9660;
-+ int entry_seen = 0;
-
- iso9660 = (struct iso9660 *)(a->format->data);
-
-@@ -2257,8 +2258,16 @@ parse_rockridge(struct archive_read *a, struct file_info *file,
- }
-
- p += p[2];
-+ entry_seen = 1;
-+ }
-+
-+ if (entry_seen)
-+ return (ARCHIVE_OK);
-+ else {
-+ archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
-+ "Tried to parse Rockridge extensions, but none found");
-+ return (ARCHIVE_WARN);
- }
-- return (ARCHIVE_OK);
- }
-
- static int
-
diff --git a/meta/recipes-extended/libarchive/libarchive/bug1066.patch b/meta/recipes-extended/libarchive/libarchive/bug1066.patch
deleted file mode 100644
index 0a662b57b4..0000000000
--- a/meta/recipes-extended/libarchive/libarchive/bug1066.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-libarchive-3.3.3: Fix bug1066
-
-[No upstream tracking] -- https://github.com/libarchive/libarchive/pull/1066
-
-archive_write_set_format_*.c: fix out of bounds read on empty string () filename
-for guntar, pax and v7tar
-
-There is an out of bounds read flaw in the archive_write_gnutar_header,
-archive_write_pax_header and archive_write_v7tar_header functions which
-could leds to cause a denial of service.
-
-Upstream-Status: Backport [https://github.com/libarchive/libarchive/commit/c246ec5d058a3f70a2d3fb765f92fe9db77b25df]
-Bug: 1066
-Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
-
-diff --git a/libarchive/archive_write_set_format_gnutar.c b/libarchive/archive_write_set_format_gnutar.c
-index 2d858c9..1966c53 100644
---- a/libarchive/archive_write_set_format_gnutar.c
-+++ b/libarchive/archive_write_set_format_gnutar.c
-@@ -339,7 +339,7 @@ archive_write_gnutar_header(struct archive_write *a,
- * case getting WCS failed. On POSIX, this is a
- * normal operation.
- */
-- if (p != NULL && p[strlen(p) - 1] != '/') {
-+ if (p != NULL && p[0] != '\0' && p[strlen(p) - 1] != '/') {
- struct archive_string as;
-
- archive_string_init(&as);
-diff --git a/libarchive/archive_write_set_format_pax.c b/libarchive/archive_write_set_format_pax.c
-index 6a301ac..4cfa8ff 100644
---- a/libarchive/archive_write_set_format_pax.c
-+++ b/libarchive/archive_write_set_format_pax.c
-@@ -660,7 +660,7 @@ archive_write_pax_header(struct archive_write *a,
- * case getting WCS failed. On POSIX, this is a
- * normal operation.
- */
-- if (p != NULL && p[strlen(p) - 1] != '/') {
-+ if (p != NULL && p[0] != '\0' && p[strlen(p) - 1] != '/') {
- struct archive_string as;
-
- archive_string_init(&as);
-diff --git a/libarchive/archive_write_set_format_v7tar.c b/libarchive/archive_write_set_format_v7tar.c
-index 62b1522..53c0db0 100644
---- a/libarchive/archive_write_set_format_v7tar.c
-+++ b/libarchive/archive_write_set_format_v7tar.c
-@@ -284,7 +284,7 @@ archive_write_v7tar_header(struct archive_write *a, struct archive_entry *entry)
- * case getting WCS failed. On POSIX, this is a
- * normal operation.
- */
-- if (p != NULL && p[strlen(p) - 1] != '/') {
-+ if (p != NULL && p[0] != '\0' && p[strlen(p) - 1] != '/') {
- struct archive_string as;
-
- archive_string_init(&as);
diff --git a/meta/recipes-extended/libarchive/libarchive/non-recursive-extract-and-list.patch b/meta/recipes-extended/libarchive/libarchive/non-recursive-extract-and-list.patch
deleted file mode 100644
index cd7be5127a..0000000000
--- a/meta/recipes-extended/libarchive/libarchive/non-recursive-extract-and-list.patch
+++ /dev/null
@@ -1,153 +0,0 @@
-From 47f7566f6829c2b14e21bbbba699916de4998c72 Mon Sep 17 00:00:00 2001
-From: Patrick Ohly <patrick.ohly@intel.com>
-Date: Mon, 24 Oct 2016 12:54:48 +0200
-Subject: [PATCH 1/1] non-recursive extract and list
-
-Sometimes it makes sense to extract or list a directory contained in
-an archive without also doing the same for the content of the
-directory, i.e. allowing -n (= --no-recursion) in combination with the
-x and t modes.
-
-bsdtar uses the match functionality in libarchive to track include
-matches. A new libarchive API call
-archive_match_include_directories_recursively() gets introduced to
-influence the matching behavior, with the default behavior as before.
-
-Non-recursive matching can be achieved by anchoring the path match at
-both start and end. Asking for a directory which itself isn't in the
-archive when in non-recursive mode is an error and handled by the
-existing mechanism for tracking unused inclusion entries.
-
-Upstream-Status: Submitted [https://github.com/libarchive/libarchive/pull/812]
-
-Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
-
----
- libarchive/archive.h | 2 ++
- libarchive/archive_match.c | 30 +++++++++++++++++++++++++++++-
- tar/bsdtar.1 | 3 +--
- tar/bsdtar.c | 12 ++++++++++--
- 4 files changed, 42 insertions(+), 5 deletions(-)
-
-diff --git a/libarchive/archive.h b/libarchive/archive.h
-index 32710201..59fb4aa6 100644
---- a/libarchive/archive.h
-+++ b/libarchive/archive.h
-@@ -1093,6 +1093,8 @@ __LA_DECL int archive_match_excluded(struct archive *,
- */
- __LA_DECL int archive_match_path_excluded(struct archive *,
- struct archive_entry *);
-+/* Control recursive inclusion of directory content when directory is included. Default on. */
-+__LA_DECL int archive_match_include_directories_recursively(struct archive *, int _enabled);
- /* Add exclusion pathname pattern. */
- __LA_DECL int archive_match_exclude_pattern(struct archive *, const char *);
- __LA_DECL int archive_match_exclude_pattern_w(struct archive *,
-diff --git a/libarchive/archive_match.c b/libarchive/archive_match.c
-index be72066e..bb6a3407 100644
---- a/libarchive/archive_match.c
-+++ b/libarchive/archive_match.c
-@@ -93,6 +93,9 @@ struct archive_match {
- /* exclusion/inclusion set flag. */
- int setflag;
-
-+ /* Recursively include directory content? */
-+ int recursive_include;
-+
- /*
- * Matching filename patterns.
- */
-@@ -223,6 +226,7 @@ archive_match_new(void)
- return (NULL);
- a->archive.magic = ARCHIVE_MATCH_MAGIC;
- a->archive.state = ARCHIVE_STATE_NEW;
-+ a->recursive_include = 1;
- match_list_init(&(a->inclusions));
- match_list_init(&(a->exclusions));
- __archive_rb_tree_init(&(a->exclusion_tree), &rb_ops_mbs);
-@@ -471,6 +475,28 @@ archive_match_path_excluded(struct archive *_a,
- }
-
- /*
-+ * When recursive inclusion of directory content is enabled,
-+ * an inclusion pattern that matches a directory will also
-+ * include everything beneath that directory. Enabled by default.
-+ *
-+ * For compatibility with GNU tar, exclusion patterns always
-+ * match if a subset of the full patch matches (i.e., they are
-+ * are not rooted at the beginning of the path) and thus there
-+ * is no corresponding non-recursive exclusion mode.
-+ */
-+int
-+archive_match_include_directories_recursively(struct archive *_a, int _enabled)
-+{
-+ struct archive_match *a;
-+
-+ archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
-+ ARCHIVE_STATE_NEW, "archive_match_include_directories_recursively");
-+ a = (struct archive_match *)_a;
-+ a->recursive_include = _enabled;
-+ return (ARCHIVE_OK);
-+}
-+
-+/*
- * Utility functions to get statistic information for inclusion patterns.
- */
- int
-@@ -781,7 +807,9 @@ static int
- match_path_inclusion(struct archive_match *a, struct match *m,
- int mbs, const void *pn)
- {
-- int flag = PATHMATCH_NO_ANCHOR_END;
-+ int flag = a->recursive_include ?
-+ PATHMATCH_NO_ANCHOR_END : /* Prefix match is good enough. */
-+ 0; /* Full match required. */
- int r;
-
- if (mbs) {
-diff --git a/tar/bsdtar.1 b/tar/bsdtar.1
-index 132e1145..1dd2a847 100644
---- a/tar/bsdtar.1
-+++ b/tar/bsdtar.1
-@@ -386,8 +386,7 @@ and the default behavior in c, r, and u modes or if
- .Nm
- is run in x mode as root.
- .It Fl n , Fl Fl norecurse , Fl Fl no-recursion
--(c, r, u modes only)
--Do not recursively archive the contents of directories.
-+Do not recursively archive (c, r, u), extract (x) or list (t) the contents of directories.
- .It Fl Fl newer Ar date
- (c, r, u modes only)
- Only include files and directories newer than the specified date.
-diff --git a/tar/bsdtar.c b/tar/bsdtar.c
-index 11dedbf9..d014cc3e 100644
---- a/tar/bsdtar.c
-+++ b/tar/bsdtar.c
-@@ -794,8 +794,6 @@ main(int argc, char **argv)
- break;
- }
- }
-- if (bsdtar->flags & OPTFLAG_NO_SUBDIRS)
-- only_mode(bsdtar, "-n", "cru");
- if (bsdtar->flags & OPTFLAG_STDOUT)
- only_mode(bsdtar, "-O", "xt");
- if (bsdtar->flags & OPTFLAG_UNLINK_FIRST)
-@@ -845,6 +843,16 @@ main(int argc, char **argv)
- only_mode(bsdtar, buff, "cru");
- }
-
-+ /*
-+ * When creating an archive from a directory tree, the directory
-+ * walking code will already avoid entering directories when
-+ * recursive inclusion of directory content is disabled, therefore
-+ * changing the matching behavior has no effect for creation modes.
-+ * It is relevant for extraction or listing.
-+ */
-+ archive_match_include_directories_recursively(bsdtar->matching,
-+ !(bsdtar->flags & OPTFLAG_NO_SUBDIRS));
-+
- /* Filename "-" implies stdio. */
- if (strcmp(bsdtar->filename, "-") == 0)
- bsdtar->filename = NULL;
---
-2.11.0
-
diff --git a/meta/recipes-extended/libarchive/libarchive_3.3.3.bb b/meta/recipes-extended/libarchive/libarchive_3.4.0.bb
index af5ca65297..c789cd44d2 100644
--- a/meta/recipes-extended/libarchive/libarchive_3.3.3.bb
+++ b/meta/recipes-extended/libarchive/libarchive_3.4.0.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "C library and command-line tools for reading and writing tar, cpi
HOMEPAGE = "http://www.libarchive.org/"
SECTION = "devel"
LICENSE = "BSD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=ed99aca006bc346974bb745a35336425"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fe01f5e02b1f0cc934d593a7b0ddceb6"
DEPENDS = "e2fsprogs-native"
@@ -32,18 +32,10 @@ PACKAGECONFIG[lz4] = "--with-lz4,--without-lz4,lz4,"
EXTRA_OECONF += "--enable-largefile"
SRC_URI = "http://libarchive.org/downloads/libarchive-${PV}.tar.gz \
- file://non-recursive-extract-and-list.patch \
- file://bug1066.patch \
- file://CVE-2018-1000877.patch \
- file://CVE-2018-1000878.patch \
- file://CVE-2018-1000879.patch \
- file://CVE-2018-1000880.patch \
- file://CVE-2019-1000019.patch \
- file://CVE-2019-1000020.patch \
"
-SRC_URI[md5sum] = "4038e366ca5b659dae3efcc744e72120"
-SRC_URI[sha256sum] = "ba7eb1781c9fbbae178c4c6bad1c6eb08edab9a1496c64833d1715d022b30e2e"
+SRC_URI[md5sum] = "6046396255bd7cf6d0f6603a9bda39ac"
+SRC_URI[sha256sum] = "8643d50ed40c759f5412a3af4e353cffbce4fdf3b5cf321cb72cacf06b2d825e"
inherit autotools update-alternatives pkgconfig