[OE-core] [V2][PATCH] busybox: update to 1.28.3
akuster808
akuster808 at gmail.com
Mon May 21 19:13:56 UTC 2018
On 05/21/2018 11:18 AM, Andre McCurdy wrote:
> On Sun, May 20, 2018 at 7:49 AM, Armin Kuster <akuster808 at gmail.com> wrote:
>> From: Armin Kuster <akuster808 at gmail.com>
>>
>> [v2]
>> Add back busybox-udhcpc-no_deconfig.patch ti SRC_URI, missed earlier
>>
>> [v1]
>> removed patches included in update:
>> busybox/CVE-2011-5325.patch
>> busybox/CVE-2017-15873.patch
>> busybox/busybox-CVE-2017-16544.patch
>>
>> refactored busybox-udhcpc-no_deconfig.patch for this update
> Did you check the defconfig?
That patch does not touch the defconfigs? It changes the dhcpd.c it self.
>
> Often it needs a refresh, otherwise any new config options added
> between busybox 1.27.2 and 1.28.3 will take busybox's defaults (which
> may enable new applets or features which we haven't historically
> enabled when configuring busybox for OE).
am I missing some context here?
- Armin
>
>> Signed-off-by: Armin Kuster <akuster808 at gmail.com>
>> ---
>> .../busybox/busybox/CVE-2011-5325.patch | 481 ---------------------
>> .../busybox/busybox/CVE-2017-15873.patch | 95 ----
>> .../busybox/busybox/busybox-CVE-2017-16544.patch | 43 --
>> .../busybox/busybox-udhcpc-no_deconfig.patch | 36 +-
>> .../{busybox_1.27.2.bb => busybox_1.28.3.bb} | 7 +-
>> 5 files changed, 20 insertions(+), 642 deletions(-)
>> delete mode 100755 meta/recipes-core/busybox/busybox/CVE-2011-5325.patch
>> delete mode 100644 meta/recipes-core/busybox/busybox/CVE-2017-15873.patch
>> delete mode 100644 meta/recipes-core/busybox/busybox/busybox-CVE-2017-16544.patch
>> rename meta/recipes-core/busybox/{busybox_1.27.2.bb => busybox_1.28.3.bb} (86%)
>>
>> diff --git a/meta/recipes-core/busybox/busybox/CVE-2011-5325.patch b/meta/recipes-core/busybox/busybox/CVE-2011-5325.patch
>> deleted file mode 100755
>> index 0926107..0000000
>> --- a/meta/recipes-core/busybox/busybox/CVE-2011-5325.patch
>> +++ /dev/null
>> @@ -1,481 +0,0 @@
>> -busybox-1.27.2: Fix CVE-2011-5325
>> -
>> -[No upstream tracking] -- https://bugs.busybox.net/show_bug.cgi?id=8411
>> -
>> -libarchive: do not extract unsafe symlinks
>> -
>> -Prevent unsafe links extracting unless env variable $EXTRACT_UNSAFE_SYMLINKS=1
>> -is not set. Untarring file with -C DESTDIR parameter could be extracted with
>> -unwanted symlinks. This doesn't feel right, and IIRC GNU tar doesn't do that.
>> -Include necessary changes from previous commits.
>> -
>> -Upstream-Status: Backport [https://git.busybox.net/busybox/commit/?id=bc9bbeb2b81001e8731cd2ae501c8fccc8d87cc7]
>> -CVE: CVE-2011-5325
>> -bug: 8411
>> -Signed-off-by: Radovan Scasny <radovan.scasny at siemens.com>
>> -Signed-off-by: Andrej Valek <andrej.valek at siemens.com>
>> -
>> -diff --git a/archival/libarchive/Kbuild.src b/archival/libarchive/Kbuild.src
>> -index 942e755..e1a8a75 100644
>> ---- a/archival/libarchive/Kbuild.src
>> -+++ b/archival/libarchive/Kbuild.src
>> -@@ -12,6 +12,8 @@ COMMON_FILES:= \
>> - data_extract_all.o \
>> - data_extract_to_stdout.o \
>> - \
>> -+ unsafe_symlink_target.o \
>> -+\
>> - filter_accept_all.o \
>> - filter_accept_list.o \
>> - filter_accept_reject_list.o \
>> -diff --git a/archival/libarchive/data_extract_all.c b/archival/libarchive/data_extract_all.c
>> -index 1830ffb..b828b65 100644
>> ---- a/archival/libarchive/data_extract_all.c
>> -+++ b/archival/libarchive/data_extract_all.c
>> -@@ -128,10 +128,9 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle)
>> - res = link(hard_link, dst_name);
>> - if (res != 0 && !(archive_handle->ah_flags & ARCHIVE_EXTRACT_QUIET)) {
>> - /* shared message */
>> -- bb_perror_msg("can't create %slink "
>> -- "%s to %s", "hard",
>> -- dst_name,
>> -- hard_link);
>> -+ bb_perror_msg("can't create %slink '%s' to '%s'",
>> -+ "hard", dst_name, hard_link
>> -+ );
>> - }
>> - /* Hardlinks have no separate mode/ownership, skip chown/chmod */
>> - goto ret;
>> -@@ -178,15 +177,17 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle)
>> - case S_IFLNK:
>> - /* Symlink */
>> - //TODO: what if file_header->link_target == NULL (say, corrupted tarball?)
>> -- res = symlink(file_header->link_target, dst_name);
>> -- if (res != 0
>> -- && !(archive_handle->ah_flags & ARCHIVE_EXTRACT_QUIET)
>> -- ) {
>> -- /* shared message */
>> -- bb_perror_msg("can't create %slink "
>> -- "%s to %s", "sym",
>> -- dst_name,
>> -- file_header->link_target);
>> -+ if (!unsafe_symlink_target(file_header->link_target)) {
>> -+ res = symlink(file_header->link_target, dst_name);
>> -+ if (res != 0
>> -+ && !(archive_handle->ah_flags & ARCHIVE_EXTRACT_QUIET)
>> -+ ) {
>> -+ /* shared message */
>> -+ bb_perror_msg("can't create %slink '%s' to '%s'",
>> -+ "sym",
>> -+ dst_name, file_header->link_target
>> -+ );
>> -+ }
>> - }
>> - break;
>> - case S_IFSOCK:
>> -diff --git a/archival/libarchive/unsafe_symlink_target.c b/archival/libarchive/unsafe_symlink_target.c
>> -new file mode 100644
>> -index 0000000..ee46e28
>> ---- /dev/null
>> -+++ b/archival/libarchive/unsafe_symlink_target.c
>> -@@ -0,0 +1,48 @@
>> -+/* vi: set sw=4 ts=4: */
>> -+/*
>> -+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
>> -+ */
>> -+#include "libbb.h"
>> -+#include "bb_archive.h"
>> -+
>> -+int FAST_FUNC unsafe_symlink_target(const char *target)
>> -+{
>> -+ const char *dot;
>> -+
>> -+ if (target[0] == '/') {
>> -+ const char *var;
>> -+unsafe:
>> -+ var = getenv("EXTRACT_UNSAFE_SYMLINKS");
>> -+ if (var) {
>> -+ if (LONE_CHAR(var, '1'))
>> -+ return 0; /* pretend it's safe */
>> -+ return 1; /* "UNSAFE!" */
>> -+ }
>> -+ bb_error_msg("skipping unsafe symlink to '%s' in archive,"
>> -+ " set %s=1 to extract",
>> -+ target,
>> -+ "EXTRACT_UNSAFE_SYMLINKS"
>> -+ );
>> -+ /* Prevent further messages */
>> -+ setenv("EXTRACT_UNSAFE_SYMLINKS", "0", 0);
>> -+ return 1; /* "UNSAFE!" */
>> -+ }
>> -+
>> -+ dot = target;
>> -+ for (;;) {
>> -+ dot = strchr(dot, '.');
>> -+ if (!dot)
>> -+ return 0; /* safe target */
>> -+
>> -+ /* Is it a path component starting with ".."? */
>> -+ if ((dot[1] == '.')
>> -+ && (dot == target || dot[-1] == '/')
>> -+ /* Is it exactly ".."? */
>> -+ && (dot[2] == '/' || dot[2] == '\0')
>> -+ ) {
>> -+ goto unsafe;
>> -+ }
>> -+ /* NB: it can even be trailing ".", should only add 1 */
>> -+ dot += 1;
>> -+ }
>> -+}
>> -\ No newline at end of file
>> -diff --git a/archival/unzip.c b/archival/unzip.c
>> -index 9037262..270e261 100644
>> ---- a/archival/unzip.c
>> -+++ b/archival/unzip.c
>> -@@ -335,6 +335,44 @@ static void unzip_create_leading_dirs(const char *fn)
>> - free(name);
>> - }
>> -
>> -+static void unzip_extract_symlink(zip_header_t *zip, const char *dst_fn)
>> -+{
>> -+ char *target;
>> -+
>> -+ if (zip->fmt.ucmpsize > 0xfff) /* no funny business please */
>> -+ bb_error_msg_and_die("bad archive");
>> -+
>> -+ if (zip->fmt.method == 0) {
>> -+ /* Method 0 - stored (not compressed) */
>> -+ target = xzalloc(zip->fmt.ucmpsize + 1);
>> -+ xread(zip_fd, target, zip->fmt.ucmpsize);
>> -+ } else {
>> -+#if 1
>> -+ bb_error_msg_and_die("compressed symlink is not supported");
>> -+#else
>> -+ transformer_state_t xstate;
>> -+ init_transformer_state(&xstate);
>> -+ xstate.mem_output_size_max = zip->fmt.ucmpsize;
>> -+ /* ...unpack... */
>> -+ if (!xstate.mem_output_buf)
>> -+ WTF();
>> -+ target = xstate.mem_output_buf;
>> -+ target = xrealloc(target, xstate.mem_output_size + 1);
>> -+ target[xstate.mem_output_size] = '\0';
>> -+#endif
>> -+ }
>> -+ if (!unsafe_symlink_target(target)) {
>> -+//TODO: libbb candidate
>> -+ if (symlink(target, dst_fn)) {
>> -+ /* shared message */
>> -+ bb_perror_msg_and_die("can't create %slink '%s' to '%s'",
>> -+ "sym", dst_fn, target
>> -+ );
>> -+ }
>> -+ }
>> -+ free(target);
>> -+}
>> -+
>> - static void unzip_extract(zip_header_t *zip, int dst_fd)
>> - {
>> - transformer_state_t xstate;
>> -@@ -813,7 +851,7 @@ int unzip_main(int argc, char **argv)
>> - }
>> - check_file:
>> - /* Extract file */
>> -- if (stat(dst_fn, &stat_buf) == -1) {
>> -+ if (lstat(dst_fn, &stat_buf) == -1) {
>> - /* File does not exist */
>> - if (errno != ENOENT) {
>> - bb_perror_msg_and_die("can't stat '%s'", dst_fn);
>> -@@ -834,6 +872,7 @@ int unzip_main(int argc, char **argv)
>> - goto do_open_and_extract;
>> - printf("replace %s? [y]es, [n]o, [A]ll, [N]one, [r]ename: ", dst_fn);
>> - my_fgets80(key_buf);
>> -+//TODO: redo lstat + ISREG check! user input could have taken a long time!
>> -
>> - switch (key_buf[0]) {
>> - case 'A':
>> -@@ -842,7 +881,8 @@ int unzip_main(int argc, char **argv)
>> - do_open_and_extract:
>> - unzip_create_leading_dirs(dst_fn);
>> - #if ENABLE_FEATURE_UNZIP_CDF
>> -- dst_fd = xopen3(dst_fn, O_WRONLY | O_CREAT | O_TRUNC, file_mode);
>> -+ if (!S_ISLNK(file_mode))
>> -+ dst_fd = xopen3(dst_fn, O_WRONLY | O_CREAT | O_TRUNC, file_mode);
>> - #else
>> - dst_fd = xopen(dst_fn, O_WRONLY | O_CREAT | O_TRUNC);
>> - #endif
>> -@@ -852,10 +892,18 @@ int unzip_main(int argc, char **argv)
>> - ? " extracting: %s\n"
>> - : */ " inflating: %s\n", dst_fn);
>> - }
>> -- unzip_extract(&zip, dst_fd);
>> -- if (dst_fd != STDOUT_FILENO) {
>> -- /* closing STDOUT is potentially bad for future business */
>> -- close(dst_fd);
>> -+#if ENABLE_FEATURE_UNZIP_CDF
>> -+ if (S_ISLNK(file_mode)) {
>> -+ if (dst_fd != STDOUT_FILENO) /* no -p */
>> -+ unzip_extract_symlink(&zip, dst_fn);
>> -+ } else
>> -+#endif
>> -+ {
>> -+ unzip_extract(&zip, dst_fd);
>> -+ if (dst_fd != STDOUT_FILENO) {
>> -+ /* closing STDOUT is potentially bad for future business */
>> -+ close(dst_fd);
>> -+ };
>> - }
>> - break;
>> -
>> -diff --git a/coreutils/link.c b/coreutils/link.c
>> -index ac3ef85..aab249d 100644
>> ---- a/coreutils/link.c
>> -+++ b/coreutils/link.c
>> -@@ -32,9 +32,8 @@ int link_main(int argc UNUSED_PARAM, char **argv)
>> - argv += optind;
>> - if (link(argv[0], argv[1]) != 0) {
>> - /* shared message */
>> -- bb_perror_msg_and_die("can't create %slink "
>> -- "%s to %s", "hard",
>> -- argv[1], argv[0]
>> -+ bb_perror_msg_and_die("can't create %slink '%s' to '%s'",
>> -+ "hard", argv[1], argv[0]
>> - );
>> - }
>> - return EXIT_SUCCESS;
>> -diff --git a/include/bb_archive.h b/include/bb_archive.h
>> -index 2b9c5f0..1e4da3c 100644
>> ---- a/include/bb_archive.h
>> -+++ b/include/bb_archive.h
>> -@@ -196,6 +196,7 @@ void seek_by_jump(int fd, off_t amount) FAST_FUNC;
>> - void seek_by_read(int fd, off_t amount) FAST_FUNC;
>> -
>> - const char *strip_unsafe_prefix(const char *str) FAST_FUNC;
>> -+int unsafe_symlink_target(const char *target) FAST_FUNC;
>> -
>> - void data_align(archive_handle_t *archive_handle, unsigned boundary) FAST_FUNC;
>> - const llist_t *find_list_entry(const llist_t *list, const char *filename) FAST_FUNC;
>> -diff --git a/libbb/copy_file.c b/libbb/copy_file.c
>> -index 23c0f83..be90066 100644
>> ---- a/libbb/copy_file.c
>> -+++ b/libbb/copy_file.c
>> -@@ -371,7 +371,10 @@ int FAST_FUNC copy_file(const char *source, const char *dest, int flags)
>> - int r = symlink(lpath, dest);
>> - free(lpath);
>> - if (r < 0) {
>> -- bb_perror_msg("can't create symlink '%s'", dest);
>> -+ /* shared message */
>> -+ bb_perror_msg("can't create %slink '%s' to '%s'",
>> -+ "sym", dest, lpath
>> -+ );
>> - return -1;
>> - }
>> - if (flags & FILEUTILS_PRESERVE_STATUS)
>> -diff --git a/testsuite/tar.tests b/testsuite/tar.tests
>> -index 9f7ce15..b7cd74c 100755
>> ---- a/testsuite/tar.tests
>> -+++ b/testsuite/tar.tests
>> -@@ -10,9 +10,6 @@ unset LC_COLLATE
>> - unset LC_ALL
>> - umask 022
>> -
>> --rm -rf tar.tempdir 2>/dev/null
>> --mkdir tar.tempdir && cd tar.tempdir || exit 1
>> --
>> - # testing "test name" "script" "expected result" "file input" "stdin"
>> -
>> - testing "Empty file is not a tarball" '\
>> -@@ -53,6 +50,7 @@ dd if=/dev/zero bs=512 count=20 2>/dev/null | tar xvf - 2>&1; echo $?
>> - "" ""
>> - SKIP=
>> -
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> - # "tar cf test.tar input input_dir/ input_hard1 input_hard2 input_hard1 input_dir/ input":
>> - # GNU tar 1.26 records as hardlinks:
>> - # input_hard2 -> input_hard1
>> -@@ -64,7 +62,6 @@ SKIP=
>> - # We also don't use "hrw-r--r--" notation for hardlinks in "tar tv" listing.
>> - optional FEATURE_TAR_CREATE FEATURE_LS_SORTFILES
>> - testing "tar hardlinks and repeated files" '\
>> --rm -rf input_* test.tar 2>/dev/null
>> - >input_hard1
>> - ln input_hard1 input_hard2
>> - mkdir input_dir
>> -@@ -95,10 +92,11 @@ drwxr-xr-x input_dir
>> - " \
>> - "" ""
>> - SKIP=
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> - optional FEATURE_TAR_CREATE FEATURE_LS_SORTFILES
>> - testing "tar hardlinks mode" '\
>> --rm -rf input_* test.tar 2>/dev/null
>> - >input_hard1
>> - chmod 741 input_hard1
>> - ln input_hard1 input_hard2
>> -@@ -128,10 +126,11 @@ Ok: 0
>> - " \
>> - "" ""
>> - SKIP=
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> - optional FEATURE_TAR_CREATE FEATURE_LS_SORTFILES
>> - testing "tar symlinks mode" '\
>> --rm -rf input_* test.tar 2>/dev/null
>> - >input_file
>> - chmod 741 input_file
>> - ln -s input_file input_soft
>> -@@ -159,10 +158,11 @@ lrwxrwxrwx input_file
>> - " \
>> - "" ""
>> - SKIP=
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> - optional FEATURE_TAR_CREATE FEATURE_TAR_LONG_OPTIONS
>> - testing "tar --overwrite" "\
>> --rm -rf input_* test.tar 2>/dev/null
>> - ln input input_hard
>> - tar cf test.tar input_hard
>> - echo WRONG >input
>> -@@ -174,12 +174,13 @@ Ok
>> - " \
>> - "Ok\n" ""
>> - SKIP=
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> - test x"$SKIP_KNOWN_BUGS" = x"" && {
>> - # Needs to be run under non-root for meaningful test
>> - optional FEATURE_TAR_CREATE
>> - testing "tar writing into read-only dir" '\
>> --rm -rf input_* test.tar 2>/dev/null
>> - mkdir input_dir
>> - >input_dir/input_file
>> - chmod 550 input_dir
>> -@@ -201,7 +202,9 @@ dr-xr-x--- input_dir
>> - "" ""
>> - SKIP=
>> - }
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> - # Had a bug where on extract autodetect first "switched off" -z
>> - # and then failed to recognize .tgz extension
>> - optional FEATURE_TAR_CREATE FEATURE_SEAMLESS_GZ GUNZIP
>> -@@ -217,7 +220,9 @@ Ok
>> - " \
>> - "" ""
>> - SKIP=
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> - # Do we detect XZ-compressed data (even w/o .tar.xz or txz extension)?
>> - # (the uuencoded hello_world.txz contains one empty file named "hello_world")
>> - optional UUDECODE FEATURE_TAR_AUTODETECT FEATURE_SEAMLESS_XZ
>> -@@ -236,7 +241,9 @@ AAAEWVo=
>> - ====
>> - "
>> - SKIP=
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> - # On extract, everything up to and including last ".." component is stripped
>> - optional FEATURE_TAR_CREATE
>> - testing "tar strips /../ on extract" "\
>> -@@ -255,7 +262,9 @@ Ok
>> - " \
>> - "" ""
>> - SKIP=
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> - # attack.tar.bz2 has symlink pointing to a system file
>> - # followed by a regular file with the same name
>> - # containing "root::0:0::/root:/bin/sh":
>> -@@ -270,6 +279,7 @@ optional UUDECODE FEATURE_TAR_AUTODETECT FEATURE_SEAMLESS_BZ2
>> - testing "tar does not extract into symlinks" "\
>> - >>/tmp/passwd && uudecode -o input && tar xf input 2>&1 && rm passwd; cat /tmp/passwd; echo \$?
>> - " "\
>> -+tar: skipping unsafe symlink to '/tmp/passwd' in archive, set EXTRACT_UNSAFE_SYMLINKS=1 to extract
>> - 0
>> - " \
>> - "" "\
>> -@@ -281,12 +291,15 @@ l4/V8LDoe90yiWJhOJvIypgEfxdyRThQkBVn/bI=
>> - ====
>> - "
>> - SKIP=
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -+
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> - # And same with -k
>> - optional UUDECODE FEATURE_TAR_AUTODETECT FEATURE_SEAMLESS_BZ2
>> - testing "tar -k does not extract into symlinks" "\
>> - >>/tmp/passwd && uudecode -o input && tar xf input -k 2>&1 && rm passwd; cat /tmp/passwd; echo \$?
>> - " "\
>> --tar: can't open 'passwd': File exists
>> -+tar: skipping unsafe symlink to '/tmp/passwd' in archive, set EXTRACT_UNSAFE_SYMLINKS=1 to extract
>> - 0
>> - " \
>> - "" "\
>> -@@ -298,7 +311,9 @@ l4/V8LDoe90yiWJhOJvIypgEfxdyRThQkBVn/bI=
>> - ====
>> - "
>> - SKIP=
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> - optional UNICODE_SUPPORT FEATURE_TAR_GNU_EXTENSIONS FEATURE_SEAMLESS_BZ2 FEATURE_TAR_AUTODETECT
>> - testing "Pax-encoded UTF8 names and symlinks" '\
>> - tar xvf ../tar.utf8.tar.bz2 2>&1; echo $?
>> -@@ -309,17 +324,45 @@ rm -rf etc usr
>> - ' "\
>> - etc/ssl/certs/3b2716e5.0
>> - etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem
>> -+tar: skipping unsafe symlink to '/usr/share/ca-certificates/mozilla/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt' in archive, set EXTRACT_UNSAFE_SYMLINKS=1 to extract
>> - etc/ssl/certs/f80cc7f6.0
>> - usr/share/ca-certificates/mozilla/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt
>> - 0
>> - etc/ssl/certs/3b2716e5.0 -> EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem
>> --etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem -> /usr/share/ca-certificates/mozilla/EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.crt
>> - etc/ssl/certs/f80cc7f6.0 -> EBG_Elektronik_Sertifika_Hizmet_Sağlayıcısı.pem
>> - " \
>> - "" ""
>> - SKIP=
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -
>> --
>> --cd .. && rm -rf tar.tempdir || exit 1
>> -+mkdir tar.tempdir && cd tar.tempdir || exit 1
>> -+optional UUDECODE FEATURE_SEAMLESS_BZ2 FEATURE_TAR_AUTODETECT
>> -+testing "Symlink attack: create symlink and then write through it" '\
>> -+exec 2>&1
>> -+uudecode -o input && tar xvf input; echo $?
>> -+ls /tmp/bb_test_evilfile
>> -+ls bb_test_evilfile
>> -+ls symlink/bb_test_evilfile
>> -+' "\
>> -+anything.txt
>> -+symlink
>> -+tar: skipping unsafe symlink to '/tmp' in archive, set EXTRACT_UNSAFE_SYMLINKS=1 to extract
>> -+symlink/bb_test_evilfile
>> -+0
>> -+ls: /tmp/bb_test_evilfile: No such file or directory
>> -+ls: bb_test_evilfile: No such file or directory
>> -+symlink/bb_test_evilfile
>> -+" \
>> -+"" "\
>> -+begin-base64 644 tar_symlink_attack.tar.bz2
>> -+QlpoOTFBWSZTWZgs7bQAALT/hMmQAFBAAf+AEMAGJPPv32AAAIAIMAC5thlR
>> -+omAjAmCMADQT1BqNE0AEwAAjAEwElTKeo9NTR6h6gaeoA0DQNLVdwZZ5iNTk
>> -+AQwCAV6S00QFJYhrlfFkVCEDEGtgNVqYrI0uK3ggnt30gqk4e1TTQm5QIAKa
>> -+SJqzRGSFLMmOloHSAcvLiFxxRiQtQZF+qPxbo173ZDISOAoNoPN4PQPhBhKS
>> -+n8fYaKlioCTzL2oXYczyUUIP4u5IpwoSEwWdtoA=
>> -+====
>> -+"
>> -+SKIP=
>> -+cd .. || exit 1; rm -rf tar.tempdir 2>/dev/null
>> -
>> - exit $FAILCOUNT
>> diff --git a/meta/recipes-core/busybox/busybox/CVE-2017-15873.patch b/meta/recipes-core/busybox/busybox/CVE-2017-15873.patch
>> deleted file mode 100644
>> index 5a027c9..0000000
>> --- a/meta/recipes-core/busybox/busybox/CVE-2017-15873.patch
>> +++ /dev/null
>> @@ -1,95 +0,0 @@
>> -busybox-1.27.2: Fix CVE-2017-15873
>> -
>> -[No upstream tracking] -- https://bugs.busybox.net/show_bug.cgi?id=10431
>> -
>> -bunzip2: fix runCnt overflow
>> -
>> -The get_next_block function in archival/libarchive/decompress_bunzip2.c
>> -in BusyBox 1.27.2 has an Integer Overflow that may lead to a write
>> -access violation.
>> -
>> -Upstream-Status: Backport [https://git.busybox.net/busybox/commit/?id=0402cb32df015d9372578e3db27db47b33d5c7b0]
>> -CVE: CVE-2017-15873
>> -bug: 10431
>> -Signed-off-by: Radovan Scasny <radovan.scasny at siemens.com>
>> -
>> -diff --git a/archival/libarchive/decompress_bunzip2.c b/archival/libarchive/decompress_bunzip2.c
>> -index 7cd18f5..bec89ed 100644
>> ---- a/archival/libarchive/decompress_bunzip2.c
>> -+++ b/archival/libarchive/decompress_bunzip2.c
>> -@@ -156,15 +156,15 @@ static unsigned get_bits(bunzip_data *bd, int bits_wanted)
>> - static int get_next_block(bunzip_data *bd)
>> - {
>> - struct group_data *hufGroup;
>> -- int dbufCount, dbufSize, groupCount, *base, *limit, selector,
>> -- i, j, runPos, symCount, symTotal, nSelectors, byteCount[256];
>> -- int runCnt = runCnt; /* for compiler */
>> -+ int groupCount, *base, *limit, selector,
>> -+ i, j, symCount, symTotal, nSelectors, byteCount[256];
>> - uint8_t uc, symToByte[256], mtfSymbol[256], *selectors;
>> - uint32_t *dbuf;
>> - unsigned origPtr, t;
>> -+ unsigned dbufCount, runPos;
>> -+ unsigned runCnt = runCnt; /* for compiler */
>> -
>> - dbuf = bd->dbuf;
>> -- dbufSize = bd->dbufSize;
>> - selectors = bd->selectors;
>> -
>> - /* In bbox, we are ok with aborting through setjmp which is set up in start_bunzip */
>> -@@ -187,7 +187,7 @@ static int get_next_block(bunzip_data *bd)
>> - it didn't actually work. */
>> - if (get_bits(bd, 1)) return RETVAL_OBSOLETE_INPUT;
>> - origPtr = get_bits(bd, 24);
>> -- if ((int)origPtr > dbufSize) return RETVAL_DATA_ERROR;
>> -+ if (origPtr > bd->dbufSize) return RETVAL_DATA_ERROR;
>> -
>> - /* mapping table: if some byte values are never used (encoding things
>> - like ascii text), the compression code removes the gaps to have fewer
>> -@@ -435,7 +435,14 @@ static int get_next_block(bunzip_data *bd)
>> - symbols, but a run of length 0 doesn't mean anything in this
>> - context). Thus space is saved. */
>> - runCnt += (runPos << nextSym); /* +runPos if RUNA; +2*runPos if RUNB */
>> -- if (runPos < dbufSize) runPos <<= 1;
>> -+//The 32-bit overflow of runCnt wasn't yet seen, but probably can happen.
>> -+//This would be the fix (catches too large count way before it can overflow):
>> -+// if (runCnt > bd->dbufSize) {
>> -+// dbg("runCnt:%u > dbufSize:%u RETVAL_DATA_ERROR",
>> -+// runCnt, bd->dbufSize);
>> -+// return RETVAL_DATA_ERROR;
>> -+// }
>> -+ if (runPos < bd->dbufSize) runPos <<= 1;
>> - goto end_of_huffman_loop;
>> - }
>> -
>> -@@ -445,14 +452,15 @@ static int get_next_block(bunzip_data *bd)
>> - literal used is the one at the head of the mtfSymbol array.) */
>> - if (runPos != 0) {
>> - uint8_t tmp_byte;
>> -- if (dbufCount + runCnt > dbufSize) {
>> -- dbg("dbufCount:%d+runCnt:%d %d > dbufSize:%d RETVAL_DATA_ERROR",
>> -- dbufCount, runCnt, dbufCount + runCnt, dbufSize);
>> -+ if (dbufCount + runCnt > bd->dbufSize) {
>> -+ dbg("dbufCount:%u+runCnt:%u %u > dbufSize:%u RETVAL_DATA_ERROR",
>> -+ dbufCount, runCnt, dbufCount + runCnt, bd->dbufSize);
>> - return RETVAL_DATA_ERROR;
>> - }
>> - tmp_byte = symToByte[mtfSymbol[0]];
>> - byteCount[tmp_byte] += runCnt;
>> -- while (--runCnt >= 0) dbuf[dbufCount++] = (uint32_t)tmp_byte;
>> -+ while ((int)--runCnt >= 0)
>> -+ dbuf[dbufCount++] = (uint32_t)tmp_byte;
>> - runPos = 0;
>> - }
>> -
>> -@@ -466,7 +474,7 @@ static int get_next_block(bunzip_data *bd)
>> - first symbol in the mtf array, position 0, would have been handled
>> - as part of a run above. Therefore 1 unused mtf position minus
>> - 2 non-literal nextSym values equals -1.) */
>> -- if (dbufCount >= dbufSize) return RETVAL_DATA_ERROR;
>> -+ if (dbufCount >= bd->dbufSize) return RETVAL_DATA_ERROR;
>> - i = nextSym - 1;
>> - uc = mtfSymbol[i];
>> -
>> ---
>> -cgit v0.12
>> diff --git a/meta/recipes-core/busybox/busybox/busybox-CVE-2017-16544.patch b/meta/recipes-core/busybox/busybox/busybox-CVE-2017-16544.patch
>> deleted file mode 100644
>> index fc19ee3..0000000
>> --- a/meta/recipes-core/busybox/busybox/busybox-CVE-2017-16544.patch
>> +++ /dev/null
>> @@ -1,43 +0,0 @@
>> -From c3797d40a1c57352192c6106cc0f435e7d9c11e8 Mon Sep 17 00:00:00 2001
>> -From: Denys Vlasenko <vda.linux at googlemail.com>
>> -Date: Tue, 7 Nov 2017 18:09:29 +0100
>> -Subject: lineedit: do not tab-complete any strings which have control
>> - characters
>> -
>> -function old new delta
>> -add_match 41 68 +27
>> -
>> -CVE: CVE-2017-16544
>> -Upstream-Status: Backport
>> -
>> -Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
>> -Signed-off-by: Zhixiong Chi <zhixiong.chi at windriver.com>
>> ----
>> - libbb/lineedit.c | 12 ++++++++++++
>> - 1 file changed, 12 insertions(+)
>> -
>> -diff --git a/libbb/lineedit.c b/libbb/lineedit.c
>> -index c0e35bb..56e8140 100644
>> ---- a/libbb/lineedit.c
>> -+++ b/libbb/lineedit.c
>> -@@ -645,6 +645,18 @@ static void free_tab_completion_data(void)
>> -
>> - static void add_match(char *matched)
>> - {
>> -+ unsigned char *p = (unsigned char*)matched;
>> -+ while (*p) {
>> -+ /* ESC attack fix: drop any string with control chars */
>> -+ if (*p < ' '
>> -+ || (!ENABLE_UNICODE_SUPPORT && *p >= 0x7f)
>> -+ || (ENABLE_UNICODE_SUPPORT && *p == 0x7f)
>> -+ ) {
>> -+ free(matched);
>> -+ return;
>> -+ }
>> -+ p++;
>> -+ }
>> - matches = xrealloc_vector(matches, 4, num_matches);
>> - matches[num_matches] = matched;
>> - num_matches++;
>> ---
>> -cgit v0.12
>> diff --git a/meta/recipes-core/busybox/busybox/busybox-udhcpc-no_deconfig.patch b/meta/recipes-core/busybox/busybox/busybox-udhcpc-no_deconfig.patch
>> index 582a258..9e74653 100644
>> --- a/meta/recipes-core/busybox/busybox/busybox-udhcpc-no_deconfig.patch
>> +++ b/meta/recipes-core/busybox/busybox/busybox-udhcpc-no_deconfig.patch
>> @@ -31,11 +31,11 @@ Signed-off-by: Andreas Oberritter <obi at opendreambox.org>
>> networking/udhcp/dhcpc.c | 29 ++++++++++++++++------
>> 1 file changed, 21 insertions(+), 8 deletions(-)
>>
>> -Index: busybox-1.27.2/networking/udhcp/dhcpc.c
>> +Index: busybox-1.28.3/networking/udhcp/dhcpc.c
>> ===================================================================
>> ---- busybox-1.27.2.orig/networking/udhcp/dhcpc.c
>> -+++ busybox-1.27.2/networking/udhcp/dhcpc.c
>> -@@ -49,6 +49,8 @@ struct tpacket_auxdata {
>> +--- busybox-1.28.3.orig/networking/udhcp/dhcpc.c
>> ++++ busybox-1.28.3/networking/udhcp/dhcpc.c
>> +@@ -48,6 +48,8 @@ struct tpacket_auxdata {
>> };
>> #endif
>>
>> @@ -44,7 +44,7 @@ Index: busybox-1.27.2/networking/udhcp/dhcpc.c
>>
>> /* "struct client_config_t client_config" is in bb_common_bufsiz1 */
>>
>> -@@ -104,8 +106,9 @@ enum {
>> +@@ -103,8 +105,9 @@ enum {
>> OPT_x = 1 << 18,
>> OPT_f = 1 << 19,
>> OPT_B = 1 << 20,
>> @@ -55,7 +55,7 @@ Index: busybox-1.27.2/networking/udhcp/dhcpc.c
>> USE_FOR_MMU( OPTBIT_b,)
>> IF_FEATURE_UDHCPC_ARPING(OPTBIT_a,)
>> IF_FEATURE_UDHCP_PORT( OPTBIT_P,)
>> -@@ -1110,7 +1113,8 @@ static void perform_renew(void)
>> +@@ -1122,7 +1125,8 @@ static void perform_renew(void)
>> state = RENEW_REQUESTED;
>> break;
>> case RENEW_REQUESTED: /* impatient are we? fine, square 1 */
>> @@ -65,7 +65,7 @@ Index: busybox-1.27.2/networking/udhcp/dhcpc.c
>> case REQUESTING:
>> case RELEASED:
>> change_listen_mode(LISTEN_RAW);
>> -@@ -1146,7 +1150,8 @@ static void perform_release(uint32_t server_addr, uint32_t requested_ip)
>> +@@ -1158,7 +1162,8 @@ static void perform_release(uint32_t ser
>> * Users requested to be notified in all cases, even if not in one
>> * of the states above.
>> */
>> @@ -75,16 +75,16 @@ Index: busybox-1.27.2/networking/udhcp/dhcpc.c
>>
>> change_listen_mode(LISTEN_NONE);
>> state = RELEASED;
>> -@@ -1298,7 +1303,7 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
>> - /* O,x: list; -T,-t,-A take numeric param */
>> - IF_UDHCP_VERBOSE(opt_complementary = "vv";)
>> - IF_LONG_OPTS(applet_long_options = udhcpc_longopts;)
>> -- opt = getopt32(argv, "CV:H:h:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fB"
>> -+ opt = getopt32(argv, "CV:H:h:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fBD"
>> +@@ -1270,7 +1275,7 @@ int udhcpc_main(int argc UNUSED_PARAM, c
>> + /* Parse command line */
>> + opt = getopt32long(argv, "^"
>> + /* O,x: list; -T,-t,-A take numeric param */
>> +- "CV:H:h:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fB"
>> ++ "CV:H:h:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fBD"
>> USE_FOR_MMU("b")
>> IF_FEATURE_UDHCPC_ARPING("a::")
>> IF_FEATURE_UDHCP_PORT("P:")
>> -@@ -1409,6 +1414,10 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
>> +@@ -1384,6 +1389,10 @@ int udhcpc_main(int argc UNUSED_PARAM, c
>> logmode |= LOGMODE_SYSLOG;
>> }
>>
>> @@ -95,7 +95,7 @@ Index: busybox-1.27.2/networking/udhcp/dhcpc.c
>> /* Make sure fd 0,1,2 are open */
>> bb_sanitize_stdio();
>> /* Equivalent of doing a fflush after every \n */
>> -@@ -1423,7 +1432,8 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
>> +@@ -1398,7 +1407,8 @@ int udhcpc_main(int argc UNUSED_PARAM, c
>> srand(monotonic_us());
>>
>> state = INIT_SELECTING;
>> @@ -105,7 +105,7 @@ Index: busybox-1.27.2/networking/udhcp/dhcpc.c
>> change_listen_mode(LISTEN_RAW);
>> packet_num = 0;
>> timeout = 0;
>> -@@ -1577,7 +1587,8 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
>> +@@ -1565,7 +1575,8 @@ int udhcpc_main(int argc UNUSED_PARAM, c
>> }
>> /* Timed out, enter init state */
>> bb_error_msg("lease lost, entering init state");
>> @@ -115,7 +115,7 @@ Index: busybox-1.27.2/networking/udhcp/dhcpc.c
>> state = INIT_SELECTING;
>> client_config.first_secs = 0; /* make secs field count from 0 */
>> /*timeout = 0; - already is */
>> -@@ -1770,7 +1781,8 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
>> +@@ -1757,7 +1768,8 @@ int udhcpc_main(int argc UNUSED_PARAM, c
>> send_decline(/*xid,*/ server_addr, packet.yiaddr);
>>
>> if (state != REQUESTING)
>> @@ -125,7 +125,7 @@ Index: busybox-1.27.2/networking/udhcp/dhcpc.c
>> change_listen_mode(LISTEN_RAW);
>> state = INIT_SELECTING;
>> client_config.first_secs = 0; /* make secs field count from 0 */
>> -@@ -1840,7 +1852,8 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
>> +@@ -1827,7 +1839,8 @@ int udhcpc_main(int argc UNUSED_PARAM, c
>> bb_error_msg("received %s", "DHCP NAK");
>> udhcp_run_script(&packet, "nak");
>> if (state != REQUESTING)
>> diff --git a/meta/recipes-core/busybox/busybox_1.27.2.bb b/meta/recipes-core/busybox/busybox_1.28.3.bb
>> similarity index 86%
>> rename from meta/recipes-core/busybox/busybox_1.27.2.bb
>> rename to meta/recipes-core/busybox/busybox_1.28.3.bb
>> index 36a6342..8f25c64 100644
>> --- a/meta/recipes-core/busybox/busybox_1.27.2.bb
>> +++ b/meta/recipes-core/busybox/busybox_1.28.3.bb
>> @@ -42,11 +42,8 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
>> file://rcK \
>> file://runlevel \
>> file://makefile-libbb-race.patch \
>> - file://CVE-2011-5325.patch \
>> - file://CVE-2017-15873.patch \
>> - file://busybox-CVE-2017-16544.patch \
>> "
>> SRC_URI_append_libc-musl = " file://musl.cfg "
>>
>> -SRC_URI[tarball.md5sum] = "476186f4bab81781dab2369bfd42734e"
>> -SRC_URI[tarball.sha256sum] = "9d4be516b61e6480f156b11eb42577a13529f75d3383850bb75c50c285de63df"
>> +SRC_URI[tarball.md5sum] = "82e5ad09ae4a07c266fc179492b51757"
>> +SRC_URI[tarball.sha256sum] = "ad0d22033f23e696f9a71a4c2f9210194dda39b024a79151f4ac278995332a6e"
>> --
>> 2.7.4
>>
>> --
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core at lists.openembedded.org
>> http://lists.openembedded.org/mailman/listinfo/openembedded-core
More information about the Openembedded-core
mailing list