From ffe52f2bd07321a8f2cff259d0dcc7f9c29f77c8 Mon Sep 17 00:00:00 2001 From: jbnadal Date: Thu, 4 Jan 2018 17:43:08 +0100 Subject: [PATCH] Update Buildroot from 17.02.4 -> 17.02.5 --- bsp/buildroot/CHANGES | 23 ++++ bsp/buildroot/Config.in | 5 + bsp/buildroot/Makefile | 4 +- bsp/buildroot/VERSION | 2 +- bsp/buildroot/arch/Config.in.arm | 12 +- bsp/buildroot/boot/syslinux/Config.in | 1 + bsp/buildroot/boot/syslinux/syslinux.mk | 3 +- .../docs/manual/adding-packages-generic.txt | 5 +- .../docs/manual/adding-packages-hooks.txt | 1 + bsp/buildroot/docs/manual/manual.html | 25 ++-- bsp/buildroot/docs/manual/manual.pdf | Bin 499405 -> 499445 bytes bsp/buildroot/docs/manual/manual.text | 9 +- bsp/buildroot/package/Makefile.in | 21 ++++ bsp/buildroot/package/aespipe/aespipe.mk | 10 ++ bsp/buildroot/package/apache/apache.hash | 4 +- bsp/buildroot/package/apache/apache.mk | 2 +- bsp/buildroot/package/bind/bind.hash | 5 +- bsp/buildroot/package/bind/bind.mk | 2 +- ...able-CRC-instructions-on-supported-A.patch | 88 ++++++++++++++ .../package/busybox/busybox-minimal.config | 2 +- bsp/buildroot/package/busybox/busybox.config | 2 +- bsp/buildroot/package/ccache/ccache.mk | 6 +- ...collectdclient-increase-error-buffer.patch | 87 ++++++++++++++ ...ra-const-keywords-gcc-7-gripes-about.patch | 51 ++++++++ ...extra-const-that-gcc-complains-about.patch | 47 ++++++++ ...-mis-detection-of-getrandom-on-Debia.patch | 29 ----- bsp/buildroot/package/expat/expat.hash | 8 +- bsp/buildroot/package/expat/expat.mk | 13 ++- bsp/buildroot/package/ffmpeg/ffmpeg.mk | 9 ++ ...42-asan-fix-missing-include-signal-h.patch | 36 ++++++ ...42-asan-fix-missing-include-signal-h.patch | 36 ++++++ bsp/buildroot/package/heimdal/heimdal.hash | 4 +- bsp/buildroot/package/heimdal/heimdal.mk | 5 +- bsp/buildroot/package/iproute2/iproute2.mk | 2 +- bsp/buildroot/package/irssi/irssi.hash | 2 +- bsp/buildroot/package/irssi/irssi.mk | 3 +- bsp/buildroot/package/libglib2/libglib2.mk | 3 +- .../0005-fix-pointer-comparaison.patch | 30 +++++ ...r-109133-Heap-buffer-overflow-in-uti.patch | 30 +++++ ...parts-of-TIRPC-requiring-NIS-support.patch | 6 +- ...t-and-musl-does-not-install-rpcent.h.patch | 4 +- ...Disable-DES-authentification-support.patch | 12 +- ...sing-rwlock_unlocks-in-xprt_register.patch | 63 ---------- .../0007-include-stdint.h-for-uintptr_t.patch | 31 +++++ bsp/buildroot/package/libtirpc/libtirpc.hash | 4 +- bsp/buildroot/package/libtirpc/libtirpc.mk | 2 +- .../libxml-parser-perl/libxml-parser-perl.mk | 1 + ...0004-Port-one-one_udp.c-to-Linux-4.1.patch | 27 ++++- .../package/linux-headers/Config.in.host | 10 +- .../package/linux-zigbee/linux-zigbee.mk | 1 + bsp/buildroot/package/mpg123/mpg123.hash | 5 +- bsp/buildroot/package/mpg123/mpg123.mk | 2 +- ...01-gyp-force-link-command-to-use-CXX.patch | 0 ...t-build-when-ssl-support-is-disabled.patch | 0 ..._OPENSSL-directive-to-openssl_config.patch | 0 bsp/buildroot/package/nodejs/Config.in | 2 +- bsp/buildroot/package/nodejs/nodejs.hash | 4 +- bsp/buildroot/package/orc/Config.in | 2 +- .../package/pcre/0003-CVE-2017-6004.patch | 21 ---- .../package/pcre/0004-CVE-2017-7186.patch | 60 ---------- bsp/buildroot/package/pcre/pcre.hash | 2 +- bsp/buildroot/package/pcre/pcre.mk | 2 +- bsp/buildroot/package/php/php.hash | 5 +- bsp/buildroot/package/php/php.mk | 4 +- .../package/pulseaudio/pulseaudio.mk | 3 +- .../python-setproctitle.mk | 2 +- ...rror-attribute-target-crc-is-unknown.patch | 44 +++++++ .../package/rpi-firmware/rpi-firmware.mk | 2 + bsp/buildroot/package/samba4/samba4.hash | 2 +- bsp/buildroot/package/samba4/samba4.mk | 2 +- ...when-receiving-overly-big-ClientMoni.patch | 75 ++++++++++++ ...er-overflows-handling-monitor-config.patch | 31 +++++ ...r-overflows-handling-monitor-configu.patch | 48 ++++++++ ...ull-pointer-p-question-dereferencing.patch | 28 +++++ ...lved-simplify-alloc-size-calculation.patch | 51 ++++++++ ...t-allocate-packets-with-minimum-size.patch | 48 ++++++++ ...y-unit.patch => 0004-fix-getty-unit.patch} | 0 ...ys-revert-use-of-ln-relative-option.patch} | 0 ...0006-fix-am-path-libgcrypt-no-found.patch} | 0 bsp/buildroot/package/systemd/Config.in | 1 + bsp/buildroot/package/systemd/systemd.hash | 3 - bsp/buildroot/package/systemd/systemd.mk | 5 - bsp/buildroot/package/tcpdump/tcpdump.hash | 4 +- bsp/buildroot/package/tcpdump/tcpdump.mk | 2 +- ...rite.c-in-TIFFWriteDirectoryTagCheck.patch | 70 +++++++++++ ....c-libtiff-tiffiop.h-fix-uint32-over.patch | 46 -------- ...g.c-make-OJPEGDecode-early-exit-in-c.patch | 53 --------- ...rlog.c-libtiff-tif_luv.c-fix-heap-ba.patch | 110 ------------------ ...ead.c-modify-ChopUpSingleUncompresse.patch | 107 ----------------- ...rror-out-cleanly-in-cpContig2Separat.patch | 74 ------------ ...mage.c-add-explicit-uint32-cast-in-p.patch | 31 ----- ...h-tif_unix.c-tif_win32.c-tif_vms.c-a.patch | 88 -------------- ...g.c-fix-leak-in-OJPEGReadHeaderInfoS.patch | 43 ------- ...g.c-fix-leak-in-OJPEGReadHeaderInfoS.patch | 36 ------ ....c-avoid-integer-division-by-zero-in.patch | 35 ------ ...ead.c-avoid-division-by-floating-poi.patch | 47 -------- ....c-validate-BitsPerSample-in-JPEGSet.patch | 35 ------ ....c-avoid-potential-undefined-behavio.patch | 56 --------- bsp/buildroot/package/tiff/tiff.hash | 2 +- bsp/buildroot/package/tiff/tiff.mk | 2 +- .../webkitgtk/0001-fix-gcc6-builds.patch | 53 --------- bsp/buildroot/package/webkitgtk/Config.in | 2 + .../package/webkitgtk/webkitgtk.hash | 8 +- bsp/buildroot/package/webkitgtk/webkitgtk.mk | 4 +- ...t-buffer-in-SProcXSendExtensionEvent.patch | 39 +++++++ ...ow-GenericEvent-in-SendEvent-request.patch | 71 +++++++++++ ...ll-events-in-ProcXSendExtensionEvent.patch | 50 ++++++++ ...5-Xi-Do-not-try-to-swap-GenericEvent.patch | 45 +++++++ ...t-buffer-in-SProcXSendExtensionEvent.patch | 39 +++++++ ...ow-GenericEvent-in-SendEvent-request.patch | 71 +++++++++++ ...ll-events-in-ProcXSendExtensionEvent.patch | 50 ++++++++ ...5-Xi-Do-not-try-to-swap-GenericEvent.patch | 45 +++++++ ...t-buffer-in-SProcXSendExtensionEvent.patch | 39 +++++++ ...ow-GenericEvent-in-SendEvent-request.patch | 71 +++++++++++ ...ll-events-in-ProcXSendExtensionEvent.patch | 50 ++++++++ ...7-Xi-Do-not-try-to-swap-GenericEvent.patch | 45 +++++++ bsp/buildroot/package/x265/x265.mk | 6 + bsp/buildroot/package/xen/xen.hash | 2 +- bsp/buildroot/package/xen/xen.mk | 4 +- bsp/buildroot/package/xvisor/Config.in | 2 +- bsp/buildroot/package/xvisor/xvisor.mk | 14 ++- bsp/buildroot/toolchain/toolchain-common.in | 5 + .../Config.in | 1 + 123 files changed, 1695 insertions(+), 1104 deletions(-) create mode 100644 bsp/buildroot/package/binutils/2.27/0907-Automatically-enable-CRC-instructions-on-supported-A.patch create mode 100644 bsp/buildroot/package/collectd/0001-libcollectdclient-increase-error-buffer.patch create mode 100644 bsp/buildroot/package/efibootmgr/0003-Remove-extra-const-keywords-gcc-7-gripes-about.patch create mode 100644 bsp/buildroot/package/efivar/0003-Remove-some-extra-const-that-gcc-complains-about.patch delete mode 100644 bsp/buildroot/package/expat/0001-configure.ac-Fix-mis-detection-of-getrandom-on-Debia.patch create mode 100644 bsp/buildroot/package/gcc/4.9.4/942-asan-fix-missing-include-signal-h.patch create mode 100644 bsp/buildroot/package/gcc/5.4.0/942-asan-fix-missing-include-signal-h.patch create mode 100644 bsp/buildroot/package/libmemcached/0005-fix-pointer-comparaison.patch create mode 100644 bsp/buildroot/package/libosip2/0001-fix-bug-report-sr-109133-Heap-buffer-overflow-in-uti.patch delete mode 100644 bsp/buildroot/package/libtirpc/0007-Add-missing-rwlock_unlocks-in-xprt_register.patch create mode 100644 bsp/buildroot/package/libtirpc/0007-include-stdint.h-for-uintptr_t.patch rename bsp/buildroot/package/nodejs/{6.11.0 => 6.11.1}/0001-gyp-force-link-command-to-use-CXX.patch (100%) rename bsp/buildroot/package/nodejs/{6.11.0 => 6.11.1}/0002-inspector-don-t-build-when-ssl-support-is-disabled.patch (100%) rename bsp/buildroot/package/nodejs/{6.11.0 => 6.11.1}/0003-src-add-HAVE_OPENSSL-directive-to-openssl_config.patch (100%) delete mode 100644 bsp/buildroot/package/pcre/0003-CVE-2017-6004.patch delete mode 100644 bsp/buildroot/package/pcre/0004-CVE-2017-7186.patch create mode 100644 bsp/buildroot/package/qt5/qt5base/5.8.0/0005-Fix-error-attribute-target-crc-is-unknown.patch create mode 100644 bsp/buildroot/package/spice/0004-reds-Disconnect-when-receiving-overly-big-ClientMoni.patch create mode 100644 bsp/buildroot/package/spice/0005-reds-Avoid-integer-overflows-handling-monitor-config.patch create mode 100644 bsp/buildroot/package/spice/0006-reds-Avoid-buffer-overflows-handling-monitor-configu.patch create mode 100644 bsp/buildroot/package/systemd/0001-resolved-bugfix-of-null-pointer-p-question-dereferencing.patch create mode 100644 bsp/buildroot/package/systemd/0002-resolved-simplify-alloc-size-calculation.patch create mode 100644 bsp/buildroot/package/systemd/0003-resolved-do-not-allocate-packets-with-minimum-size.patch rename bsp/buildroot/package/systemd/{0001-fix-getty-unit.patch => 0004-fix-getty-unit.patch} (100%) rename bsp/buildroot/package/systemd/{0002-build-sys-revert-use-of-ln-relative-option.patch => 0005-build-sys-revert-use-of-ln-relative-option.patch} (100%) rename bsp/buildroot/package/systemd/{0003-fix-am-path-libgcrypt-no-found.patch => 0006-fix-am-path-libgcrypt-no-found.patch} (100%) create mode 100644 bsp/buildroot/package/tiff/0001-libtiff-tif_dirwrite.c-in-TIFFWriteDirectoryTagCheck.patch delete mode 100644 bsp/buildroot/package/tiff/0001-libtiff-tif_read.c-libtiff-tiffiop.h-fix-uint32-over.patch delete mode 100644 bsp/buildroot/package/tiff/0002-libtiff-tif_ojpeg.c-make-OJPEGDecode-early-exit-in-c.patch delete mode 100644 bsp/buildroot/package/tiff/0003-libtiff-tif_pixarlog.c-libtiff-tif_luv.c-fix-heap-ba.patch delete mode 100644 bsp/buildroot/package/tiff/0004-libtiff-tif_dirread.c-modify-ChopUpSingleUncompresse.patch delete mode 100644 bsp/buildroot/package/tiff/0005-tools-tiffcp.c-error-out-cleanly-in-cpContig2Separat.patch delete mode 100644 bsp/buildroot/package/tiff/0006-libtiff-tif_getimage.c-add-explicit-uint32-cast-in-p.patch delete mode 100644 bsp/buildroot/package/tiff/0007-libtiff-tiffiop.h-tif_unix.c-tif_win32.c-tif_vms.c-a.patch delete mode 100644 bsp/buildroot/package/tiff/0008-libtiff-tif_ojpeg.c-fix-leak-in-OJPEGReadHeaderInfoS.patch delete mode 100644 bsp/buildroot/package/tiff/0009-libtiff-tif_ojpeg.c-fix-leak-in-OJPEGReadHeaderInfoS.patch delete mode 100644 bsp/buildroot/package/tiff/0010-libtiff-tif_jpeg.c-avoid-integer-division-by-zero-in.patch delete mode 100644 bsp/buildroot/package/tiff/0011-libtiff-tif_dirread.c-avoid-division-by-floating-poi.patch delete mode 100644 bsp/buildroot/package/tiff/0012-libtiff-tif_jpeg.c-validate-BitsPerSample-in-JPEGSet.patch delete mode 100644 bsp/buildroot/package/tiff/0013-libtiff-tif_read.c-avoid-potential-undefined-behavio.patch delete mode 100644 bsp/buildroot/package/webkitgtk/0001-fix-gcc6-builds.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0002-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0003-dix-Disallow-GenericEvent-in-SendEvent-request.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0004-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0005-Xi-Do-not-try-to-swap-GenericEvent.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0002-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0003-dix-Disallow-GenericEvent-in-SendEvent-request.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0004-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0005-Xi-Do-not-try-to-swap-GenericEvent.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0004-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0005-dix-Disallow-GenericEvent-in-SendEvent-request.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0006-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch create mode 100644 bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0007-Xi-Do-not-try-to-swap-GenericEvent.patch diff --git a/bsp/buildroot/CHANGES b/bsp/buildroot/CHANGES index 90d409f2..73936428 100644 --- a/bsp/buildroot/CHANGES +++ b/bsp/buildroot/CHANGES @@ -1,3 +1,26 @@ +2017.02.5, Released July 27th, 2017 + + Important / security related fixes. + + Webkitgtk bumped to the 2.16.x series, fixing a large number + of security issues. + + host-aespipe compile fix for Debian/Gentoo/Ubuntu toolchains + which default to PIE mode. + + Updated/fixed packages: aespipe, apache, bind, binutils, + ccache, collectd, efibootmgr, efivar, expat, ffmpeg, gcc, + heimdal, iproute2, irssi, libglib2, libmemcached, libosip2, + libtirpc, libxml-parser-perl, linux-fusion, linux-zigbee, + mpg123, nodejs, orc, pcre, php, pulseaudio, + python-setproctitle, qt5base, rpi-firmware, samba4, syslinux, + systemd, spice, tiff, webkitgtk, x265, xen, + xserver_xorg-server, xvisor + + Issues resolved (http://bugs.buildroot.org): + + #10061: gcc5.4 buildroot toolchain for powerpc libsanitizer... + 2017.02.4, Released July 4th, 2017 Important / security related fixes. diff --git a/bsp/buildroot/Config.in b/bsp/buildroot/Config.in index bd8f0d1a..434935bf 100644 --- a/bsp/buildroot/Config.in +++ b/bsp/buildroot/Config.in @@ -57,6 +57,11 @@ config BR2_HOST_GCC_AT_LEAST_6 default y if BR2_HOST_GCC_VERSION = "6" select BR2_HOST_GCC_AT_LEAST_5 +config BR2_HOST_GCC_AT_LEAST_7 + bool + default y if BR2_HOST_GCC_VERSION = "7" + select BR2_HOST_GCC_AT_LEAST_6 + # Hidden boolean selected by packages in need of Java in order to build # (example: xbmc) config BR2_NEEDS_HOST_JAVA diff --git a/bsp/buildroot/Makefile b/bsp/buildroot/Makefile index fdb37e36..63610cdc 100644 --- a/bsp/buildroot/Makefile +++ b/bsp/buildroot/Makefile @@ -86,9 +86,9 @@ else # umask / $(CURDIR) / $(O) all: # Set and export the version string -export BR2_VERSION := 2017.02.4 +export BR2_VERSION := 2017.02.5 # Actual time the release is cut (for reproducible builds) -BR2_VERSION_EPOCH = 1499186000 +BR2_VERSION_EPOCH = 1501100000 # Save running make version since it's clobbered by the make package RUNNING_MAKE_VERSION := $(MAKE_VERSION) diff --git a/bsp/buildroot/VERSION b/bsp/buildroot/VERSION index 3825a791..23b8bad9 100644 --- a/bsp/buildroot/VERSION +++ b/bsp/buildroot/VERSION @@ -1 +1 @@ -buildroot 2017_02_4 +buildroot 2017_02_5 diff --git a/bsp/buildroot/arch/Config.in.arm b/bsp/buildroot/arch/Config.in.arm index 2617976f..596921df 100644 --- a/bsp/buildroot/arch/Config.in.arm +++ b/bsp/buildroot/arch/Config.in.arm @@ -534,15 +534,9 @@ config BR2_GCC_TARGET_CPU default "strongarm" if BR2_strongarm default "xscale" if BR2_xscale default "iwmmxt" if BR2_iwmmxt - default "cortex-a53" if (BR2_cortex_a53 && !BR2_ARCH_IS_64) - default "cortex-a53+fp" if (BR2_cortex_a53 && BR2_ARCH_IS_64 && BR2_ARM_FPU_FP_ARMV8) - default "cortex-a53+fp+simd" if (BR2_cortex_a53 && BR2_ARCH_IS_64 && BR2_ARM_FPU_NEON_FP_ARMV8) - default "cortex-a57" if (BR2_cortex_a57 && !BR2_ARCH_IS_64) - default "cortex-a57+fp" if (BR2_cortex_a57 && BR2_ARCH_IS_64 && BR2_ARM_FPU_FP_ARMV8) - default "cortex-a57+fp+simd" if (BR2_cortex_a57 && BR2_ARCH_IS_64 && BR2_ARM_FPU_NEON_FP_ARMV8) - default "cortex-a72" if (BR2_cortex_a72 && !BR2_ARCH_IS_64) - default "cortex-a72+fp" if (BR2_cortex_a72 && BR2_ARCH_IS_64 && BR2_ARM_FPU_FP_ARMV8) - default "cortex-a72+fp+simd" if (BR2_cortex_a72 && BR2_ARCH_IS_64 && BR2_ARM_FPU_NEON_FP_ARMV8) + default "cortex-a53" if BR2_cortex_a53 + default "cortex-a57" if BR2_cortex_a57 + default "cortex-a72" if BR2_cortex_a72 config BR2_GCC_TARGET_ABI default "aapcs-linux" if BR2_arm || BR2_armeb diff --git a/bsp/buildroot/boot/syslinux/Config.in b/bsp/buildroot/boot/syslinux/Config.in index 299a559f..da035498 100644 --- a/bsp/buildroot/boot/syslinux/Config.in +++ b/bsp/buildroot/boot/syslinux/Config.in @@ -35,6 +35,7 @@ config BR2_TARGET_SYSLINUX_PXELINUX config BR2_TARGET_SYSLINUX_MBR bool "install mbr" + depends on !BR2_TOOLCHAIN_HAS_BINUTILS_BUG_19615 select BR2_TARGET_SYSLINUX_LEGACY_BIOS help Install the legacy-BIOS 'mbr' image, to boot off a diff --git a/bsp/buildroot/boot/syslinux/syslinux.mk b/bsp/buildroot/boot/syslinux/syslinux.mk index a88885bc..f07e3b97 100644 --- a/bsp/buildroot/boot/syslinux/syslinux.mk +++ b/bsp/buildroot/boot/syslinux/syslinux.mk @@ -13,7 +13,8 @@ SYSLINUX_LICENSE_FILES = COPYING SYSLINUX_INSTALL_IMAGES = YES -SYSLINUX_DEPENDENCIES = host-nasm host-upx util-linux +# host-util-linux needed to provide libuuid when building host tools +SYSLINUX_DEPENDENCIES = host-nasm host-upx util-linux host-util-linux ifeq ($(BR2_TARGET_SYSLINUX_LEGACY_BIOS),y) SYSLINUX_TARGET += bios diff --git a/bsp/buildroot/docs/manual/adding-packages-generic.txt b/bsp/buildroot/docs/manual/adding-packages-generic.txt index a08283c5..e5f165d9 100644 --- a/bsp/buildroot/docs/manual/adding-packages-generic.txt +++ b/bsp/buildroot/docs/manual/adding-packages-generic.txt @@ -315,7 +315,10 @@ information is (assuming the package name is +libfoo+) : ** +local+ for a local source code directory. One should use this when +LIBFOO_SITE+ specifies a local directory path containing the package source code. Buildroot copies the contents of the - source directory into the package's build directory. + source directory into the package's build directory. Note that + for +local+ packages, no patches are applied. If you need to + still patch the source code, use +LIBFOO_POST_RSYNC_HOOKS+, see + xref:hooks-rsync[]. * +LIBFOO_GIT_SUBMODULES+ can be set to +YES+ to create an archive with the git submodules in the repository. This is only available diff --git a/bsp/buildroot/docs/manual/adding-packages-hooks.txt b/bsp/buildroot/docs/manual/adding-packages-hooks.txt index d25092ac..0ce79f89 100644 --- a/bsp/buildroot/docs/manual/adding-packages-hooks.txt +++ b/bsp/buildroot/docs/manual/adding-packages-hooks.txt @@ -59,6 +59,7 @@ endef LIBFOO_POST_PATCH_HOOKS += LIBFOO_POST_PATCH_FIXUP ---------------------- +[[hooks-rsync]] ==== Using the +POST_RSYNC+ hook The +POST_RSYNC+ hook is run only for packages that use a local source, either through the +local+ site method or the +OVERRIDE_SRCDIR+ diff --git a/bsp/buildroot/docs/manual/manual.html b/bsp/buildroot/docs/manual/manual.html index 398369f8..f3ab7349 100644 --- a/bsp/buildroot/docs/manual/manual.html +++ b/bsp/buildroot/docs/manual/manual.html @@ -1,6 +1,6 @@ -The Buildroot user manual

The Buildroot user manual


Table of Contents

I. Getting started
1. About Buildroot
2. System requirements
2.1. Mandatory packages
2.2. Optional packages
3. Getting Buildroot
4. Buildroot quick start
5. Community resources
II. User guide
6. Buildroot configuration
6.1. Cross-compilation toolchain
6.2. /dev management
6.3. init system
7. Configuration of other components
8. General Buildroot usage
8.1. make tips
8.2. Understanding when a full rebuild is necessary
8.3. Understanding how to rebuild packages
8.4. Offline builds
8.5. Building out-of-tree
8.6. Environment variables
8.7. Dealing efficiently with filesystem images
8.8. Graphing the dependencies between packages
8.9. Graphing the build duration
8.10. Graphing the filesystem size contribution of packages
8.11. Integration with Eclipse
8.12. Advanced usage
9. Project-specific customization
9.1. Recommended directory structure
9.2. Keeping customizations outside of Buildroot
9.3. Storing the Buildroot configuration
9.4. Storing the configuration of other components
9.5. Customizing the generated target filesystem
9.6. Adding custom user accounts
9.7. Customization after the images have been created
9.8. Adding project-specific patches
9.9. Adding project-specific packages
9.10. Quick guide to storing your project-specific customizations
10. Frequently Asked Questions & Troubleshooting
10.1. The boot hangs after Starting network…
10.2. Why is there no compiler on the target?
10.3. Why are there no development files on the target?
10.4. Why is there no documentation on the target?
10.5. Why are some packages not visible in the Buildroot config menu?
10.6. Why not use the target directory as a chroot directory?
10.7. Why doesn’t Buildroot generate binary packages (.deb, .ipkg…)?
10.8. How to speed-up the build process?
11. Known issues
12. Legal notice and licensing
12.1. Complying with open source licenses
12.2. License abbreviations
12.3. Complying with the Buildroot license
13. Beyond Buildroot
13.1. Boot the generated images
13.2. Chroot
III. Developer guide
14. How Buildroot works
15. Coding style
15.1. Config.in file
15.2. The .mk file
15.3. The documentation
16. Adding support for a particular board
17. Adding new packages to Buildroot
17.1. Package directory
17.2. Config files
17.3. The .mk file
17.4. The .hash file
17.5. Infrastructure for packages with specific build systems
17.6. Infrastructure for autotools-based packages
17.7. Infrastructure for CMake-based packages
17.8. Infrastructure for Python packages
17.9. Infrastructure for LuaRocks-based packages
17.10. Infrastructure for Perl/CPAN packages
17.11. Infrastructure for virtual packages
17.12. Infrastructure for packages using kconfig for configuration files
17.13. Infrastructure for rebar-based packages
17.14. Infrastructure for Waf-based packages
17.15. Infrastructure for packages building kernel modules
17.16. Infrastructure for asciidoc documents
17.17. Infrastructure specific to the Linux kernel package
17.18. Hooks available in the various build steps
17.19. Gettext integration and interaction with packages
17.20. Tips and tricks
17.21. Conclusion
18. Patching a package
18.1. Providing patches
18.2. How patches are applied
18.3. Format and licensing of the package patches
18.4. Integrating patches found on the Web
19. Download infrastructure
20. Debugging Buildroot
21. Contributing to Buildroot
21.1. Reproducing, analyzing and fixing bugs
21.2. Analyzing and fixing autobuild failures
21.3. Reviewing and testing patches
21.4. Work on items from the TODO list
21.5. Submitting patches
21.6. Reporting issues/bugs or getting help
22. DEVELOPERS file and get-developers
IV. Appendix
23. Makedev syntax documentation
24. Makeusers syntax documentation
25. Converting old br2-external trees

Buildroot 2017.02.4 manual generated on 2017-07-04 -16:52:46 UTC from git revision 7ea1487c0a

The Buildroot manual is written by the Buildroot developers. +The Buildroot user manual

The Buildroot user manual


Table of Contents

I. Getting started
1. About Buildroot
2. System requirements
2.1. Mandatory packages
2.2. Optional packages
3. Getting Buildroot
4. Buildroot quick start
5. Community resources
II. User guide
6. Buildroot configuration
6.1. Cross-compilation toolchain
6.2. /dev management
6.3. init system
7. Configuration of other components
8. General Buildroot usage
8.1. make tips
8.2. Understanding when a full rebuild is necessary
8.3. Understanding how to rebuild packages
8.4. Offline builds
8.5. Building out-of-tree
8.6. Environment variables
8.7. Dealing efficiently with filesystem images
8.8. Graphing the dependencies between packages
8.9. Graphing the build duration
8.10. Graphing the filesystem size contribution of packages
8.11. Integration with Eclipse
8.12. Advanced usage
9. Project-specific customization
9.1. Recommended directory structure
9.2. Keeping customizations outside of Buildroot
9.3. Storing the Buildroot configuration
9.4. Storing the configuration of other components
9.5. Customizing the generated target filesystem
9.6. Adding custom user accounts
9.7. Customization after the images have been created
9.8. Adding project-specific patches
9.9. Adding project-specific packages
9.10. Quick guide to storing your project-specific customizations
10. Frequently Asked Questions & Troubleshooting
10.1. The boot hangs after Starting network…
10.2. Why is there no compiler on the target?
10.3. Why are there no development files on the target?
10.4. Why is there no documentation on the target?
10.5. Why are some packages not visible in the Buildroot config menu?
10.6. Why not use the target directory as a chroot directory?
10.7. Why doesn’t Buildroot generate binary packages (.deb, .ipkg…)?
10.8. How to speed-up the build process?
11. Known issues
12. Legal notice and licensing
12.1. Complying with open source licenses
12.2. License abbreviations
12.3. Complying with the Buildroot license
13. Beyond Buildroot
13.1. Boot the generated images
13.2. Chroot
III. Developer guide
14. How Buildroot works
15. Coding style
15.1. Config.in file
15.2. The .mk file
15.3. The documentation
16. Adding support for a particular board
17. Adding new packages to Buildroot
17.1. Package directory
17.2. Config files
17.3. The .mk file
17.4. The .hash file
17.5. Infrastructure for packages with specific build systems
17.6. Infrastructure for autotools-based packages
17.7. Infrastructure for CMake-based packages
17.8. Infrastructure for Python packages
17.9. Infrastructure for LuaRocks-based packages
17.10. Infrastructure for Perl/CPAN packages
17.11. Infrastructure for virtual packages
17.12. Infrastructure for packages using kconfig for configuration files
17.13. Infrastructure for rebar-based packages
17.14. Infrastructure for Waf-based packages
17.15. Infrastructure for packages building kernel modules
17.16. Infrastructure for asciidoc documents
17.17. Infrastructure specific to the Linux kernel package
17.18. Hooks available in the various build steps
17.19. Gettext integration and interaction with packages
17.20. Tips and tricks
17.21. Conclusion
18. Patching a package
18.1. Providing patches
18.2. How patches are applied
18.3. Format and licensing of the package patches
18.4. Integrating patches found on the Web
19. Download infrastructure
20. Debugging Buildroot
21. Contributing to Buildroot
21.1. Reproducing, analyzing and fixing bugs
21.2. Analyzing and fixing autobuild failures
21.3. Reviewing and testing patches
21.4. Work on items from the TODO list
21.5. Submitting patches
21.6. Reporting issues/bugs or getting help
22. DEVELOPERS file and get-developers
IV. Appendix
23. Makedev syntax documentation
24. Makeusers syntax documentation
25. Converting old br2-external trees

Buildroot 2017.02.5 manual generated on 2017-07-26 +21:36:53 UTC from git revision a2818c7cfa

The Buildroot manual is written by the Buildroot developers. It is licensed under the GNU General Public License, version 2. Refer to the COPYING file in the Buildroot sources for the full text of this license.

Copyright © 2004-2017 The Buildroot developers

logo.png

Part I. Getting started

Chapter 1. About Buildroot

Buildroot is a tool that simplifies and automates the process of @@ -16,8 +16,8 @@ processors everyone is used to having in his PC. They can be PowerPC processors, MIPS processors, ARM processors, etc.

Buildroot supports numerous processors and their variants; it also comes with default configurations for several boards available off-the-shelf. Besides this, a number of third-party projects are based on, -or develop their BSP [1] or -SDK [2] on top of Buildroot.



[1] BSP: Board Support Package

[2] SDK: Software Development Kit

Chapter 2. System requirements

Buildroot is designed to run on Linux systems.

While Buildroot itself will build most host packages it needs for the +or develop their BSP [1] or +SDK [2] on top of Buildroot.



[1] BSP: Board Support Package

[2] SDK: Software Development Kit

Chapter 2. System requirements

Buildroot is designed to run on Linux systems.

While Buildroot itself will build most host packages it needs for the compilation, certain standard Linux utilities are expected to be already installed on the host system. Below you will find an overview of the mandatory and optional packages (note that package names may vary @@ -272,7 +272,7 @@ processor. Under most Linux systems, the compilation toolchain uses the GNU libc (glibc) as the C standard library. This compilation toolchain is called the "host compilation toolchain". The machine on which it is running, and on which you’re working, is called the "host -system" [3].

The compilation toolchain is provided by your distribution, and +system" [3].

The compilation toolchain is provided by your distribution, and Buildroot has nothing to do with it (other than using it to build a cross-compilation toolchain and other tools that are run on the development host).

As said above, the compilation toolchain that comes with your system @@ -551,7 +551,7 @@ The third solution is systemd. http://www.freedesktop.org/wiki/Software/systemd.

The solution recommended by Buildroot developers is to use the BusyBox init as it is sufficient for most embedded -systems. systemd can be used for more complex situations.



[3] This terminology differs from what is used by GNU +systems. systemd can be used for more complex situations.



[3] This terminology differs from what is used by GNU configure, where the host is the machine on which the application will run (which is usually the same as target)

Chapter 7. Configuration of other components

Before attempting to modify any of the components below, make sure you have already configured Buildroot itself, and have enabled the @@ -2673,7 +2673,7 @@ flags. The argument to be given to LIBFOO_CONFIG_SCRIPTS is the file name(s) of the shell script(s) needing fixing. All these names are relative to $(STAGING_DIR)/usr/bin and if needed multiple names can be given.

In addition, the scripts listed in LIBFOO_CONFIG_SCRIPTS are removed -from $(TARGET_DIR)/usr/bin, since they are not needed on the target.

Example 17.1. Config script: divine package

Package divine installs shell script $(STAGING_DIR)/usr/bin/divine-config.

So its fixup would be:

DIVINE_CONFIG_SCRIPTS = divine-config

Example 17.2. Config script: imagemagick package:

Package imagemagick installs the following scripts: +from $(TARGET_DIR)/usr/bin, since they are not needed on the target.

Example 17.1. Config script: divine package

Package divine installs shell script $(STAGING_DIR)/usr/bin/divine-config.

So its fixup would be:

DIVINE_CONFIG_SCRIPTS = divine-config

Example 17.2. Config script: imagemagick package:

Package imagemagick installs the following scripts: $(STAGING_DIR)/usr/bin/{Magick,Magick++,MagickCore,MagickWand,Wand}-config

So it’s fixup would be:

IMAGEMAGICK_CONFIG_SCRIPTS = \
    Magick-config Magick++-config \
    MagickCore-config MagickWand-config Wand-config

On line 14, we specify the list of dependencies this package relies @@ -2848,7 +2848,10 @@ information is (assuming the package name is libfoo local for a local source code directory. One should use this when LIBFOO_SITE specifies a local directory path containing the package source code. Buildroot copies the contents of the - source directory into the package’s build directory. + source directory into the package’s build directory. Note that + for local packages, no patches are applied. If you need to + still patch the source code, use LIBFOO_POST_RSYNC_HOOKS, see + Section 17.18.1, “Using the POST_RSYNC hook”.

  • LIBFOO_GIT_SUBMODULES can be set to YES to create an archive with the git submodules in the repository. This is only available @@ -4152,7 +4155,7 @@ registered at a given hook point. Here is an example:

    def
             action2
     endef
     
    -LIBFOO_POST_PATCH_HOOKS += LIBFOO_POST_PATCH_FIXUP

    17.18.1. Using the POST_RSYNC hook

    The POST_RSYNC hook is run only for packages that use a local source, +LIBFOO_POST_PATCH_HOOKS += LIBFOO_POST_PATCH_FIXUP

    17.18.1. Using the POST_RSYNC hook

    The POST_RSYNC hook is run only for packages that use a local source, either through the local site method or the OVERRIDE_SRCDIR mechanism. In this case, package sources are copied using rsync from the local location into the buildroot build directory. The rsync @@ -4598,7 +4601,7 @@ large number of commits in the series;

  • deep impact of the changes in the rest of the project;
  • -RFC [4]; +RFC [4];
  • whenever you feel it will help presenting your work, your choices, the review process, etc. @@ -4680,7 +4683,7 @@ pastebin service. Note that not all available pastebin services will preserve Unix-style line terminators when downloading raw pastes. Following pastebin services are known to work correctly: - https://gist.github.com/ -- http://code.bulix.org/



  • [4] RFC: (Request for comments) change proposal

    Chapter 22. DEVELOPERS file and get-developers

    The main Buildroot directory contains a file named DEVELOPERS that +- http://code.bulix.org/



    [4] RFC: (Request for comments) change proposal

    Chapter 22. DEVELOPERS file and get-developers

    The main Buildroot directory contains a file named DEVELOPERS that lists the developers involved with various areas of Buildroot. Thanks to this file, the get-developer tool allows to:

    • Calculate the list of developers to whom patches should be sent, by diff --git a/bsp/buildroot/docs/manual/manual.pdf b/bsp/buildroot/docs/manual/manual.pdf index 8ec3ec554f262a07af9adda11a0d390fac44c14f..907ebb7fe82673ee02f46d70f06fde9c2be2cfb4 100644 GIT binary patch delta 52210 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 diff --git a/bsp/buildroot/docs/manual/manual.text b/bsp/buildroot/docs/manual/manual.text index 77b66052..98ed5eae 100644 --- a/bsp/buildroot/docs/manual/manual.text +++ b/bsp/buildroot/docs/manual/manual.text @@ -155,8 +155,8 @@ List of Examples --------------------------------------------------------------------- -Buildroot 2017.02.4 manual generated on 2017-07-04 16:52:52 UTC from -git revision 7ea1487c0a +Buildroot 2017.02.5 manual generated on 2017-07-26 21:36:58 UTC from +git revision a2818c7cfa The Buildroot manual is written by the Buildroot developers. It is licensed under the GNU General Public License, version 2. Refer to @@ -4171,7 +4171,10 @@ information is (assuming the package name is libfoo) : + local for a local source code directory. One should use this when LIBFOO_SITE specifies a local directory path containing the package source code. Buildroot copies the contents of the - source directory into the package’s build directory. + source directory into the package’s build directory. Note + that for local packages, no patches are applied. If you need + to still patch the source code, use LIBFOO_POST_RSYNC_HOOKS, + see Section 17.18.1, “Using the POST_RSYNC hook”. * LIBFOO_GIT_SUBMODULES can be set to YES to create an archive with the git submodules in the repository. This is only available for packages downloaded with git (i.e. when LIBFOO_SITE_METHOD=git). diff --git a/bsp/buildroot/package/Makefile.in b/bsp/buildroot/package/Makefile.in index c1dc7143..b32ad8e4 100644 --- a/bsp/buildroot/package/Makefile.in +++ b/bsp/buildroot/package/Makefile.in @@ -223,6 +223,27 @@ HOST_CFLAGS += $(HOST_CPPFLAGS) HOST_CXXFLAGS += $(HOST_CFLAGS) HOST_LDFLAGS += -L$(HOST_DIR)/lib -L$(HOST_DIR)/usr/lib -Wl,-rpath,$(HOST_DIR)/usr/lib +# The macros below are taken from linux 4.11 and adapted slightly. +# Copy more when needed. + +# try-run +# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise) +# Exit code chooses option. "$$TMP" is can be used as temporary file and +# is automatically cleaned up. +try-run = $(shell set -e; \ + TMP="$$(tempfile)"; \ + if ($(1)) >/dev/null 2>&1; \ + then echo "$(2)"; \ + else echo "$(3)"; \ + fi; \ + rm -f "$$TMP") + +# host-cc-option +# Usage: HOST_FOO_CFLAGS += $(call host-cc-option,-no-pie,) +host-cc-option = $(call try-run,\ + $(HOSTCC) $(HOST_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2)) + + # host-intltool should be executed with the system perl, so we save # the path to the system perl, before a host-perl built by Buildroot # might get installed into $(HOST_DIR)/usr/bin and therefore appears diff --git a/bsp/buildroot/package/aespipe/aespipe.mk b/bsp/buildroot/package/aespipe/aespipe.mk index 6a38556e..5ef95d52 100644 --- a/bsp/buildroot/package/aespipe/aespipe.mk +++ b/bsp/buildroot/package/aespipe/aespipe.mk @@ -9,5 +9,15 @@ AESPIPE_SOURCE = aespipe-v$(AESPIPE_VERSION).tar.bz2 AESPIPE_SITE = http://loop-aes.sourceforge.net/aespipe AESPIPE_LICENSE = GPL +# Recent Debian, Gentoo and Ubuntu enable -fPIE by default, breaking the build: +# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=837393 +# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=835148 +# Older gcc versions however don't support the -no-pie flag, so we have to +# check its availability. +HOST_AESPIPE_NO_PIE_FLAG = $(call host-cc-option,-no-pie) +HOST_AESPIPE_CONF_ENV = \ + CFLAGS="$(HOST_CFLAGS) $(HOST_AESPIPE_NO_PIE_FLAG)" \ + LDFLAGS="$(HOST_LDFLAGS) $(HOST_AESPIPE_NO_PIE_FLAG)" + $(eval $(autotools-package)) $(eval $(host-autotools-package)) diff --git a/bsp/buildroot/package/apache/apache.hash b/bsp/buildroot/package/apache/apache.hash index fe7174a4..f29ae451 100644 --- a/bsp/buildroot/package/apache/apache.hash +++ b/bsp/buildroot/package/apache/apache.hash @@ -1,2 +1,2 @@ -# From http://www.apache.org/dist/httpd/httpd-2.4.26.tar.bz2.sha256 -sha256 a07eb52fafc879e0149d31882f7da63173e72df4478db4dc69f7a775b663d387 httpd-2.4.26.tar.bz2 +# From http://www.apache.org/dist/httpd/httpd-2.4.27.tar.bz2.sha256 +sha256 71fcc128238a690515bd8174d5330a5309161ef314a326ae45c7c15ed139c13a httpd-2.4.27.tar.bz2 diff --git a/bsp/buildroot/package/apache/apache.mk b/bsp/buildroot/package/apache/apache.mk index b276b8d4..857e5383 100644 --- a/bsp/buildroot/package/apache/apache.mk +++ b/bsp/buildroot/package/apache/apache.mk @@ -4,7 +4,7 @@ # ################################################################################ -APACHE_VERSION = 2.4.26 +APACHE_VERSION = 2.4.27 APACHE_SOURCE = httpd-$(APACHE_VERSION).tar.bz2 APACHE_SITE = http://archive.apache.org/dist/httpd APACHE_LICENSE = Apache-2.0 diff --git a/bsp/buildroot/package/bind/bind.hash b/bsp/buildroot/package/bind/bind.hash index 5dd15cb8..3a631def 100644 --- a/bsp/buildroot/package/bind/bind.hash +++ b/bsp/buildroot/package/bind/bind.hash @@ -1,2 +1,3 @@ -# Verified from http://ftp.isc.org/isc/bind9/9.11.1-P1/bind-9.11.1-P2.tar.gz.sha256.asc -sha256 bf53c6431575ae1612ddef66d18ef9baf2a22d842fa5b0cadc971919fd81fea5 bind-9.11.1-P2.tar.gz +# Verified from http://ftp.isc.org/isc/bind9/9.11.1-P3/bind-9.11.1-P3.tar.gz.sha256.asc +sha256 52426e75432e46996dc90f24fca027805a341c38fbbb022b60dc9acd2677ccf4 bind-9.11.1-P3.tar.gz +sha256 d3906dfe153e2c48440d3ca1d5319f5e89b4b820cdfc5d0779c23d7ac2b175e9 COPYRIGHT diff --git a/bsp/buildroot/package/bind/bind.mk b/bsp/buildroot/package/bind/bind.mk index ee7621cb..acc09119 100644 --- a/bsp/buildroot/package/bind/bind.mk +++ b/bsp/buildroot/package/bind/bind.mk @@ -4,7 +4,7 @@ # ################################################################################ -BIND_VERSION = 9.11.1-P2 +BIND_VERSION = 9.11.1-P3 BIND_SITE = ftp://ftp.isc.org/isc/bind9/$(BIND_VERSION) # bind does not support parallel builds. BIND_MAKE = $(MAKE1) diff --git a/bsp/buildroot/package/binutils/2.27/0907-Automatically-enable-CRC-instructions-on-supported-A.patch b/bsp/buildroot/package/binutils/2.27/0907-Automatically-enable-CRC-instructions-on-supported-A.patch new file mode 100644 index 00000000..3b7fcfc9 --- /dev/null +++ b/bsp/buildroot/package/binutils/2.27/0907-Automatically-enable-CRC-instructions-on-supported-A.patch @@ -0,0 +1,88 @@ +From 29a4659015ca7044c2d425d32a0b828e0fbb5ac1 Mon Sep 17 00:00:00 2001 +From: Richard Earnshaw +Date: Wed, 7 Sep 2016 17:14:54 +0100 +Subject: [PATCH] Automatically enable CRC instructions on supported ARMv8-A + CPUs. + +2016-09-07 Richard Earnshaw + + * opcode/arm.h (ARM_ARCH_V8A_CRC): New architecture. + +2016-09-07 Richard Earnshaw + + * config/tc-arm.c ((arm_cpus): Use ARM_ARCH_V8A_CRC for all + ARMv8-A CPUs except xgene1. + +Upstream: https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=patch;h=27e5a270962fb92c07e7d476966ba380fa3bb68e +Signed-off-by: Peter Seiderer +--- + gas/config/tc-arm.c | 18 +++++++++--------- + include/opcode/arm.h | 2 ++ + 2 files changed, 11 insertions(+), 9 deletions(-) + +diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c +index 73d05316..7c86184d 100644 +--- a/gas/config/tc-arm.c ++++ b/gas/config/tc-arm.c +@@ -25332,17 +25332,17 @@ static const struct arm_cpu_option_table arm_cpus[] = + "Cortex-A15"), + ARM_CPU_OPT ("cortex-a17", ARM_ARCH_V7VE, FPU_ARCH_NEON_VFP_V4, + "Cortex-A17"), +- ARM_CPU_OPT ("cortex-a32", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, ++ ARM_CPU_OPT ("cortex-a32", ARM_ARCH_V8A_CRC, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, + "Cortex-A32"), +- ARM_CPU_OPT ("cortex-a35", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, ++ ARM_CPU_OPT ("cortex-a35", ARM_ARCH_V8A_CRC, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, + "Cortex-A35"), +- ARM_CPU_OPT ("cortex-a53", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, ++ ARM_CPU_OPT ("cortex-a53", ARM_ARCH_V8A_CRC, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, + "Cortex-A53"), +- ARM_CPU_OPT ("cortex-a57", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, ++ ARM_CPU_OPT ("cortex-a57", ARM_ARCH_V8A_CRC, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, + "Cortex-A57"), +- ARM_CPU_OPT ("cortex-a72", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, ++ ARM_CPU_OPT ("cortex-a72", ARM_ARCH_V8A_CRC, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, + "Cortex-A72"), +- ARM_CPU_OPT ("cortex-a73", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, ++ ARM_CPU_OPT ("cortex-a73", ARM_ARCH_V8A_CRC, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, + "Cortex-A73"), + ARM_CPU_OPT ("cortex-r4", ARM_ARCH_V7R, FPU_NONE, "Cortex-R4"), + ARM_CPU_OPT ("cortex-r4f", ARM_ARCH_V7R, FPU_ARCH_VFP_V3D16, +@@ -25361,10 +25361,10 @@ static const struct arm_cpu_option_table arm_cpus[] = + ARM_CPU_OPT ("cortex-m1", ARM_ARCH_V6SM, FPU_NONE, "Cortex-M1"), + ARM_CPU_OPT ("cortex-m0", ARM_ARCH_V6SM, FPU_NONE, "Cortex-M0"), + ARM_CPU_OPT ("cortex-m0plus", ARM_ARCH_V6SM, FPU_NONE, "Cortex-M0+"), +- ARM_CPU_OPT ("exynos-m1", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, ++ ARM_CPU_OPT ("exynos-m1", ARM_ARCH_V8A_CRC, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, + "Samsung " \ + "Exynos M1"), +- ARM_CPU_OPT ("qdf24xx", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, ++ ARM_CPU_OPT ("qdf24xx", ARM_ARCH_V8A_CRC, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, + "Qualcomm " + "QDF24XX"), + +@@ -25389,7 +25389,7 @@ static const struct arm_cpu_option_table arm_cpus[] = + /* APM X-Gene family. */ + ARM_CPU_OPT ("xgene1", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, + "APM X-Gene 1"), +- ARM_CPU_OPT ("xgene2", ARM_ARCH_V8A, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, ++ ARM_CPU_OPT ("xgene2", ARM_ARCH_V8A_CRC, FPU_ARCH_CRYPTO_NEON_VFP_ARMV8, + "APM X-Gene 2"), + + { NULL, 0, ARM_ARCH_NONE, ARM_ARCH_NONE, NULL } +diff --git a/include/opcode/arm.h b/include/opcode/arm.h +index 60715cf8..feace5cd 100644 +--- a/include/opcode/arm.h ++++ b/include/opcode/arm.h +@@ -263,6 +263,8 @@ + #define ARM_ARCH_V7M ARM_FEATURE_CORE (ARM_AEXT_V7M, ARM_EXT2_V6T2_V8M) + #define ARM_ARCH_V7EM ARM_FEATURE_CORE (ARM_AEXT_V7EM, ARM_EXT2_V6T2_V8M) + #define ARM_ARCH_V8A ARM_FEATURE_CORE (ARM_AEXT_V8A, ARM_AEXT2_V8A) ++#define ARM_ARCH_V8A_CRC ARM_FEATURE (ARM_AEXT_V8A, ARM_AEXT2_V8A, \ ++ CRC_EXT_ARMV8) + #define ARM_ARCH_V8_1A ARM_FEATURE (ARM_AEXT_V8A, ARM_AEXT2_V8_1A, \ + CRC_EXT_ARMV8 | FPU_NEON_EXT_RDMA) + #define ARM_ARCH_V8_2A ARM_FEATURE (ARM_AEXT_V8A, ARM_AEXT2_V8_2A, \ +-- +2.11.0 + diff --git a/bsp/buildroot/package/busybox/busybox-minimal.config b/bsp/buildroot/package/busybox/busybox-minimal.config index 2abf458b..0c8e63e6 100644 --- a/bsp/buildroot/package/busybox/busybox-minimal.config +++ b/bsp/buildroot/package/busybox/busybox-minimal.config @@ -22,7 +22,7 @@ CONFIG_FEATURE_INSTALLER=y # CONFIG_PAM is not set CONFIG_LONG_OPTS=y CONFIG_FEATURE_DEVPTS=y -CONFIG_FEATURE_CLEAN_UP=y +# CONFIG_FEATURE_CLEAN_UP is not set CONFIG_FEATURE_UTMP=y CONFIG_FEATURE_WTMP=y # CONFIG_FEATURE_PIDFILE is not set diff --git a/bsp/buildroot/package/busybox/busybox.config b/bsp/buildroot/package/busybox/busybox.config index c45de218..508128d5 100644 --- a/bsp/buildroot/package/busybox/busybox.config +++ b/bsp/buildroot/package/busybox/busybox.config @@ -22,7 +22,7 @@ CONFIG_FEATURE_INSTALLER=y # CONFIG_PAM is not set CONFIG_LONG_OPTS=y CONFIG_FEATURE_DEVPTS=y -CONFIG_FEATURE_CLEAN_UP=y +# CONFIG_FEATURE_CLEAN_UP is not set CONFIG_FEATURE_UTMP=y CONFIG_FEATURE_WTMP=y # CONFIG_FEATURE_PIDFILE is not set diff --git a/bsp/buildroot/package/ccache/ccache.mk b/bsp/buildroot/package/ccache/ccache.mk index f174a5d0..55a91325 100644 --- a/bsp/buildroot/package/ccache/ccache.mk +++ b/bsp/buildroot/package/ccache/ccache.mk @@ -28,9 +28,13 @@ HOST_CCACHE_CONF_OPTS += --with-bundled-zlib # BR2_CCACHE_DIR. # - Change hard-coded last-ditch default to match path in .config, to avoid # the need to specify BR_CACHE_DIR when invoking ccache directly. +# CCache replaces "%s" with the home directory of the current user, +# So rewrite BR_CACHE_DIR to take that into consideration for SDK purpose +HOST_CCACHE_DEFAULT_CCACHE_DIR = $(patsubst $(HOME)/%,\%s/%,$(BR_CACHE_DIR)) + define HOST_CCACHE_PATCH_CONFIGURATION sed -i 's,getenv("CCACHE_DIR"),getenv("BR_CACHE_DIR"),' $(@D)/ccache.c - sed -i 's,"%s/.ccache","$(BR_CACHE_DIR)",' $(@D)/conf.c + sed -i 's,"%s/.ccache","$(HOST_CCACHE_DEFAULT_CCACHE_DIR)",' $(@D)/conf.c endef HOST_CCACHE_POST_PATCH_HOOKS += HOST_CCACHE_PATCH_CONFIGURATION diff --git a/bsp/buildroot/package/collectd/0001-libcollectdclient-increase-error-buffer.patch b/bsp/buildroot/package/collectd/0001-libcollectdclient-increase-error-buffer.patch new file mode 100644 index 00000000..247d32b5 --- /dev/null +++ b/bsp/buildroot/package/collectd/0001-libcollectdclient-increase-error-buffer.patch @@ -0,0 +1,87 @@ +From e170f3559fcda6d37a012aba187a96b1f42e8f9d Mon Sep 17 00:00:00 2001 +From: Ruben Kerkhof +Date: Sun, 2 Jul 2017 21:52:14 +0200 +Subject: [PATCH] libcollectdclient: increase error buffer +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf8 +Content-Transfer-Encoding: 8bit + +make[1]: Entering directory '/home/ruben/src/collectd' + CC src/libcollectdclient/libcollectdclient_la-client.lo +src/libcollectdclient/client.c: In function ‘lcc_getval’: +src/libcollectdclient/client.c:621:23: warning: ‘%s’ directive output may be truncated writing up to 1023 bytes into a region of size 1010 [-Wformat-truncation=] + LCC_SET_ERRSTR(c, "Server error: %s", res.message); + ^ ~ +src/libcollectdclient/client.c:94:48: note: in definition of macro ‘LCC_SET_ERRSTR’ + snprintf((c)->errbuf, sizeof((c)->errbuf), __VA_ARGS__); \ + ^~~~~~~~~~~ +src/libcollectdclient/client.c:94:5: note: ‘snprintf’ output between 15 and 1038 bytes into a destination of size 1024 + snprintf((c)->errbuf, sizeof((c)->errbuf), __VA_ARGS__); \ + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +src/libcollectdclient/client.c:621:5: note: in expansion of macro ‘LCC_SET_ERRSTR’ + LCC_SET_ERRSTR(c, "Server error: %s", res.message); + ^~~~~~~~~~~~~~ +src/libcollectdclient/client.c: In function ‘lcc_putval’: +src/libcollectdclient/client.c:754:23: warning: ‘%s’ directive output may be truncated writing up to 1023 bytes into a region of size 1010 [-Wformat-truncation=] + LCC_SET_ERRSTR(c, "Server error: %s", res.message); + ^ ~ +src/libcollectdclient/client.c:94:48: note: in definition of macro ‘LCC_SET_ERRSTR’ + snprintf((c)->errbuf, sizeof((c)->errbuf), __VA_ARGS__); \ + ^~~~~~~~~~~ +src/libcollectdclient/client.c:94:5: note: ‘snprintf’ output between 15 and 1038 bytes into a destination of size 1024 + snprintf((c)->errbuf, sizeof((c)->errbuf), __VA_ARGS__); \ + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +src/libcollectdclient/client.c:754:5: note: in expansion of macro ‘LCC_SET_ERRSTR’ + LCC_SET_ERRSTR(c, "Server error: %s", res.message); + ^~~~~~~~~~~~~~ +src/libcollectdclient/client.c: In function ‘lcc_flush’: +src/libcollectdclient/client.c:802:23: warning: ‘%s’ directive output may be truncated writing up to 1023 bytes into a region of size 1010 [-Wformat-truncation=] + LCC_SET_ERRSTR(c, "Server error: %s", res.message); + ^ ~ +src/libcollectdclient/client.c:94:48: note: in definition of macro ‘LCC_SET_ERRSTR’ + snprintf((c)->errbuf, sizeof((c)->errbuf), __VA_ARGS__); \ + ^~~~~~~~~~~ +src/libcollectdclient/client.c:94:5: note: ‘snprintf’ output between 15 and 1038 bytes into a destination of size 1024 + snprintf((c)->errbuf, sizeof((c)->errbuf), __VA_ARGS__); \ + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +src/libcollectdclient/client.c:802:5: note: in expansion of macro ‘LCC_SET_ERRSTR’ + LCC_SET_ERRSTR(c, "Server error: %s", res.message); + ^~~~~~~~~~~~~~ +src/libcollectdclient/client.c: In function ‘lcc_listval’: +src/libcollectdclient/client.c:834:23: warning: ‘%s’ directive output may be truncated writing up to 1023 bytes into a region of size 1010 [-Wformat-truncation=] + LCC_SET_ERRSTR(c, "Server error: %s", res.message); + ^ ~ +src/libcollectdclient/client.c:94:48: note: in definition of macro ‘LCC_SET_ERRSTR’ + snprintf((c)->errbuf, sizeof((c)->errbuf), __VA_ARGS__); \ + ^~~~~~~~~~~ +src/libcollectdclient/client.c:94:5: note: ‘snprintf’ output between 15 and 1038 bytes into a destination of size 1024 + snprintf((c)->errbuf, sizeof((c)->errbuf), __VA_ARGS__); \ + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +src/libcollectdclient/client.c:834:5: note: in expansion of macro ‘LCC_SET_ERRSTR’ + LCC_SET_ERRSTR(c, "Server error: %s", res.message); + ^~~~~~~~~~~~~~ + +Fixes #2200 + +[Upstream commit: https://git.octo.it/?p=collectd.git;a=commitdiff;h=e170f3559fcda6d37a012aba187a96b1f42e8f9d] +Signed-off-by: Thomas Petazzoni +--- + src/libcollectdclient/client.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libcollectdclient/client.c b/src/libcollectdclient/client.c +index 51a4ab2..3ae2e71 100644 +--- a/src/libcollectdclient/client.c ++++ b/src/libcollectdclient/client.c +@@ -99,7 +99,7 @@ + */ + struct lcc_connection_s { + FILE *fh; +- char errbuf[1024]; ++ char errbuf[2048]; + }; + + struct lcc_response_s { +-- +1.7.10.4 + diff --git a/bsp/buildroot/package/efibootmgr/0003-Remove-extra-const-keywords-gcc-7-gripes-about.patch b/bsp/buildroot/package/efibootmgr/0003-Remove-extra-const-keywords-gcc-7-gripes-about.patch new file mode 100644 index 00000000..8bc6f01e --- /dev/null +++ b/bsp/buildroot/package/efibootmgr/0003-Remove-extra-const-keywords-gcc-7-gripes-about.patch @@ -0,0 +1,51 @@ +From a542b169003c2ef95ce6c00d40050eb10568b612 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 6 Feb 2017 16:34:54 -0500 +Subject: [PATCH] Remove extra const keywords gcc 7 gripes about. + +Signed-off-by: Peter Jones +[Backported from upstream commit a542b169003c2ef95ce6c00d40050eb10568b612] +Signed-off-by: Thomas Petazzoni +--- + src/efibootdump.c | 2 +- + src/efibootmgr.c | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/efibootdump.c b/src/efibootdump.c +index 6ff8360..30a1943 100644 +--- a/src/efibootdump.c ++++ b/src/efibootdump.c +@@ -39,7 +39,7 @@ print_boot_entry(efi_load_option *loadopt, size_t data_size) + uint8_t *optional_data = NULL; + size_t optional_data_len = 0; + uint16_t pathlen; +- const unsigned char const *desc; ++ const unsigned char *desc; + char *raw; + size_t raw_len; + +diff --git a/src/efibootmgr.c b/src/efibootmgr.c +index 493f2cf..90a0998 100644 +--- a/src/efibootmgr.c ++++ b/src/efibootmgr.c +@@ -221,7 +221,7 @@ warn_duplicate_name(list_t *var_list) + list_t *pos; + var_entry_t *entry; + efi_load_option *load_option; +- const unsigned char const *desc; ++ const unsigned char *desc; + + list_for_each(pos, var_list) { + entry = list_entry(pos, var_entry_t, list); +@@ -873,7 +873,7 @@ show_vars(const char *prefix) + { + list_t *pos; + var_entry_t *boot; +- const unsigned char const *description; ++ const unsigned char *description; + efi_load_option *load_option; + efidp dp = NULL; + unsigned char *optional_data = NULL; +-- +2.9.4 + diff --git a/bsp/buildroot/package/efivar/0003-Remove-some-extra-const-that-gcc-complains-about.patch b/bsp/buildroot/package/efivar/0003-Remove-some-extra-const-that-gcc-complains-about.patch new file mode 100644 index 00000000..6b9f77eb --- /dev/null +++ b/bsp/buildroot/package/efivar/0003-Remove-some-extra-const-that-gcc-complains-about.patch @@ -0,0 +1,47 @@ +From 1c7c0f71c9d22efda4156881eb187b8c69d1cca7 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 6 Feb 2017 14:28:19 -0500 +Subject: [PATCH] Remove some extra "const" that gcc complains about. + +One of these days I'll get these right. + +Signed-off-by: Peter Jones +Signed-off-by: Baruch Siach +--- +Upstream commit 1c7c0f71c9d22e. + + src/include/efivar/efiboot-loadopt.h | 4 ++-- + src/loadopt.c | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/include/efivar/efiboot-loadopt.h b/src/include/efivar/efiboot-loadopt.h +index 07db5c4c53e3..efc29c69d47e 100644 +--- a/src/include/efivar/efiboot-loadopt.h ++++ b/src/include/efivar/efiboot-loadopt.h +@@ -32,8 +32,8 @@ extern ssize_t efi_loadopt_create(uint8_t *buf, ssize_t size, + + extern efidp efi_loadopt_path(efi_load_option *opt, ssize_t limit) + __attribute__((__nonnull__ (1))); +-extern const unsigned char const * efi_loadopt_desc(efi_load_option *opt, +- ssize_t limit) ++extern const unsigned char * efi_loadopt_desc(efi_load_option *opt, ++ ssize_t limit) + __attribute__((__visibility__ ("default"))) + __attribute__((__nonnull__ (1))); + extern uint32_t efi_loadopt_attrs(efi_load_option *opt) +diff --git a/src/loadopt.c b/src/loadopt.c +index a63ca792d2dc..ce889867fd29 100644 +--- a/src/loadopt.c ++++ b/src/loadopt.c +@@ -357,7 +357,7 @@ teardown(void) + + __attribute__((__nonnull__ (1))) + __attribute__((__visibility__ ("default"))) +-const unsigned char const * ++const unsigned char * + efi_loadopt_desc(efi_load_option *opt, ssize_t limit) + { + if (last_desc) { +-- +2.13.2 + diff --git a/bsp/buildroot/package/expat/0001-configure.ac-Fix-mis-detection-of-getrandom-on-Debia.patch b/bsp/buildroot/package/expat/0001-configure.ac-Fix-mis-detection-of-getrandom-on-Debia.patch deleted file mode 100644 index 44f43e1c..00000000 --- a/bsp/buildroot/package/expat/0001-configure.ac-Fix-mis-detection-of-getrandom-on-Debia.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 602e6c78ca750c082b72f8cdf4a38839b312959f Mon Sep 17 00:00:00 2001 -From: Sebastian Pipping -Date: Sun, 18 Jun 2017 18:55:10 +0200 -Subject: [PATCH] configure.ac: Fix mis-detection of getrandom on Debian - GNU/kFreeBSD (#50) - -There is no such thing but we need to link (not just compile) to realize. - -Signed-off-by: Peter Korsgaard ---- - expat/configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index 1357c9a..444c002 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -130,7 +130,7 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([ - - - AC_MSG_CHECKING([for getrandom (Linux 3.17+, glibc 2.25+)]) --AC_COMPILE_IFELSE([AC_LANG_SOURCE([ -+AC_LINK_IFELSE([AC_LANG_SOURCE([ - #include /* for NULL */ - #include - int main() { --- -2.11.0 - diff --git a/bsp/buildroot/package/expat/expat.hash b/bsp/buildroot/package/expat/expat.hash index 595597b6..f1e19193 100644 --- a/bsp/buildroot/package/expat/expat.hash +++ b/bsp/buildroot/package/expat/expat.hash @@ -1,5 +1,5 @@ -# From https://sourceforge.net/projects/expat/files/expat/2.2.1/ -md5 d9c3baeab58774cefc2f04faf29f2cf8 expat-2.2.1.tar.bz2 -sha1 f45eb724f182776a9cacec9ed70d549e87198987 expat-2.2.1.tar.bz2 +# From https://sourceforge.net/projects/expat/files/expat/2.2.2/ +md5 1ede9a41223c78528b8c5d23e69a2667 expat-2.2.2.tar.bz2 +sha1 891cee988b38d5d66953f62f94c3150b8810a70a expat-2.2.2.tar.bz2 # Calculated based on the hashes above -sha256 1868cadae4c82a018e361e2b2091de103cd820aaacb0d6cfa49bd2cd83978885 expat-2.2.1.tar.bz2 +sha256 4376911fcf81a23ebd821bbabc26fd933f3ac74833f74924342c29aad2c86046 expat-2.2.2.tar.bz2 diff --git a/bsp/buildroot/package/expat/expat.mk b/bsp/buildroot/package/expat/expat.mk index bb6e627e..a78d326d 100644 --- a/bsp/buildroot/package/expat/expat.mk +++ b/bsp/buildroot/package/expat/expat.mk @@ -4,7 +4,7 @@ # ################################################################################ -EXPAT_VERSION = 2.2.1 +EXPAT_VERSION = 2.2.2 EXPAT_SITE = http://downloads.sourceforge.net/project/expat/expat/$(EXPAT_VERSION) EXPAT_SOURCE = expat-$(EXPAT_VERSION).tar.bz2 EXPAT_INSTALL_STAGING = YES @@ -14,8 +14,15 @@ EXPAT_DEPENDENCIES = host-pkgconf HOST_EXPAT_DEPENDENCIES = host-pkgconf EXPAT_LICENSE = MIT EXPAT_LICENSE_FILES = COPYING -# for 0001-configure.ac-Fix-mis-detection-of-getrandom-on-Debia.patch -EXPAT_AUTORECONF = YES + +# Kernel versions older than 3.17 do not support getrandom() +ifeq ($(BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17),) +EXPAT_CONF_ENV += CPPFLAGS="$(TARGET_CPPFLAGS) -DXML_POOR_ENTROPY" +endif + +# Make build succeed on host kernel older than 3.17. getrandom() will still +# be used on newer kernels. +HOST_EXPAT_CONF_ENV += CPPFLAGS="$(HOST_CPPFLAGS) -DXML_POOR_ENTROPY" $(eval $(autotools-package)) $(eval $(host-autotools-package)) diff --git a/bsp/buildroot/package/ffmpeg/ffmpeg.mk b/bsp/buildroot/package/ffmpeg/ffmpeg.mk index 6540d41c..9c30e8f4 100644 --- a/bsp/buildroot/package/ffmpeg/ffmpeg.mk +++ b/bsp/buildroot/package/ffmpeg/ffmpeg.mk @@ -44,6 +44,9 @@ FFMPEG_CONF_OPTS = \ --disable-mipsdspr2 \ --disable-msa \ --enable-hwaccels \ + --disable-cuda \ + --disable-cuvid \ + --disable-nvenc \ --disable-avisynth \ --disable-frei0r \ --disable-libopencore-amrnb \ @@ -159,12 +162,18 @@ endif ifeq ($(BR2_PACKAGE_FFMPEG_INDEVS),y) FFMPEG_CONF_OPTS += --enable-indevs +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +FFMPEG_DEPENDENCIES += alsa-lib +endif else FFMPEG_CONF_OPTS += --disable-indevs endif ifeq ($(BR2_PACKAGE_FFMPEG_OUTDEVS),y) FFMPEG_CONF_OPTS += --enable-outdevs +ifeq ($(BR2_PACKAGE_ALSA_LIB),y) +FFMPEG_DEPENDENCIES += alsa-lib +endif else FFMPEG_CONF_OPTS += --disable-outdevs endif diff --git a/bsp/buildroot/package/gcc/4.9.4/942-asan-fix-missing-include-signal-h.patch b/bsp/buildroot/package/gcc/4.9.4/942-asan-fix-missing-include-signal-h.patch new file mode 100644 index 00000000..5f00c04d --- /dev/null +++ b/bsp/buildroot/package/gcc/4.9.4/942-asan-fix-missing-include-signal-h.patch @@ -0,0 +1,36 @@ +From 205aa8e97bab553e5e6fe45896325e97962de704 Mon Sep 17 00:00:00 2001 +From: Rolf Eike Beer +Date: Wed, 8 Feb 2017 11:42:52 +0100 +Subject: [PATCH] asan: fix missing include of signal.h + +This breaks when building gcc 4.9.4 / 5.4.0 with +target_platform=powerpc-unknown-linux-gnu with glibc 2.25: + +../../../../gcc-host/libsanitizer/asan/asan_linux.cc: In function 'bool __asan::AsanInterceptsSignal(int)': +../../../../gcc-host/libsanitizer/asan/asan_linux.cc:222:20: error: 'SIGSEGV' was not declared in this scope + return signum == SIGSEGV && common_flags()->handle_segv; + +This has been verified to apply to at least 4.9.4 and up to 5.4, +the code has been reworked for gcc 6. + +Resolves (Buildroot) Bug: https://bugs.busybox.net/show_bug.cgi?id=10061 + +Upstream: https://patchwork.ozlabs.org/patch/725596/ + +Signed-off-by: Matthew Weber +--- + libsanitizer/asan/asan_linux.cc | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libsanitizer/asan/asan_linux.cc b/libsanitizer/asan/asan_linux.cc +index c504168..59087b9 100644 +--- a/libsanitizer/asan/asan_linux.cc ++++ b/libsanitizer/asan/asan_linux.cc +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include + #include + #include diff --git a/bsp/buildroot/package/gcc/5.4.0/942-asan-fix-missing-include-signal-h.patch b/bsp/buildroot/package/gcc/5.4.0/942-asan-fix-missing-include-signal-h.patch new file mode 100644 index 00000000..5f00c04d --- /dev/null +++ b/bsp/buildroot/package/gcc/5.4.0/942-asan-fix-missing-include-signal-h.patch @@ -0,0 +1,36 @@ +From 205aa8e97bab553e5e6fe45896325e97962de704 Mon Sep 17 00:00:00 2001 +From: Rolf Eike Beer +Date: Wed, 8 Feb 2017 11:42:52 +0100 +Subject: [PATCH] asan: fix missing include of signal.h + +This breaks when building gcc 4.9.4 / 5.4.0 with +target_platform=powerpc-unknown-linux-gnu with glibc 2.25: + +../../../../gcc-host/libsanitizer/asan/asan_linux.cc: In function 'bool __asan::AsanInterceptsSignal(int)': +../../../../gcc-host/libsanitizer/asan/asan_linux.cc:222:20: error: 'SIGSEGV' was not declared in this scope + return signum == SIGSEGV && common_flags()->handle_segv; + +This has been verified to apply to at least 4.9.4 and up to 5.4, +the code has been reworked for gcc 6. + +Resolves (Buildroot) Bug: https://bugs.busybox.net/show_bug.cgi?id=10061 + +Upstream: https://patchwork.ozlabs.org/patch/725596/ + +Signed-off-by: Matthew Weber +--- + libsanitizer/asan/asan_linux.cc | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/libsanitizer/asan/asan_linux.cc b/libsanitizer/asan/asan_linux.cc +index c504168..59087b9 100644 +--- a/libsanitizer/asan/asan_linux.cc ++++ b/libsanitizer/asan/asan_linux.cc +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include + #include + #include diff --git a/bsp/buildroot/package/heimdal/heimdal.hash b/bsp/buildroot/package/heimdal/heimdal.hash index 12770e17..a0e0f3f1 100644 --- a/bsp/buildroot/package/heimdal/heimdal.hash +++ b/bsp/buildroot/package/heimdal/heimdal.hash @@ -1,2 +1,2 @@ -# Locally calculated after checking pgp signature -sha256 cee58ab3a4ce79f243a3e73f465dac19fe2b93ef1c5ff244d6f1d689fedbde2d heimdal-7.1.0.tar.gz +# Locally calculated +sha256 3de14ecd36ad21c1694a13da347512b047f4010d176fe412820664cb5d1429ad heimdal-7.4.0.tar.gz diff --git a/bsp/buildroot/package/heimdal/heimdal.mk b/bsp/buildroot/package/heimdal/heimdal.mk index 5376a6c4..2d4b826a 100644 --- a/bsp/buildroot/package/heimdal/heimdal.mk +++ b/bsp/buildroot/package/heimdal/heimdal.mk @@ -4,8 +4,8 @@ # ################################################################################ -HEIMDAL_VERSION = 7.1.0 -HEIMDAL_SITE = http://www.h5l.org/dist/src +HEIMDAL_VERSION = 7.4.0 +HEIMDAL_SITE = https://github.com/heimdal/heimdal/releases/download/heimdal-$(HEIMDAL_VERSION) HOST_HEIMDAL_DEPENDENCIES = host-e2fsprogs host-ncurses host-pkgconf HEIMDAL_INSTALL_STAGING = YES HEIMDAL_MAKE = $(MAKE1) @@ -15,6 +15,7 @@ HOST_HEIMDAL_CONF_OPTS = \ --enable-static \ --without-openldap \ --without-capng \ + --with-db-type-preference= \ --without-sqlite3 \ --without-libintl \ --without-openssl \ diff --git a/bsp/buildroot/package/iproute2/iproute2.mk b/bsp/buildroot/package/iproute2/iproute2.mk index 5ea5299b..fefd0180 100644 --- a/bsp/buildroot/package/iproute2/iproute2.mk +++ b/bsp/buildroot/package/iproute2/iproute2.mk @@ -9,7 +9,7 @@ IPROUTE2_SOURCE = iproute2-$(IPROUTE2_VERSION).tar.xz IPROUTE2_SITE = $(BR2_KERNEL_MIRROR)/linux/utils/net/iproute2 IPROUTE2_DEPENDENCIES = host-bison host-flex host-pkgconf \ $(if $(BR2_PACKAGE_LIBMNL),libmnl) -IPROUTE2_LICENSE = GPLv2 +IPROUTE2_LICENSE = GPLv2+ IPROUTE2_LICENSE_FILES = COPYING # If both iproute2 and busybox are selected, make certain we win diff --git a/bsp/buildroot/package/irssi/irssi.hash b/bsp/buildroot/package/irssi/irssi.hash index abb42199..7b019025 100644 --- a/bsp/buildroot/package/irssi/irssi.hash +++ b/bsp/buildroot/package/irssi/irssi.hash @@ -1,2 +1,2 @@ # Locally calculated after checking pgp signature -sha256 838220297dcbe7c8c42d01005059779a82f5b7b7e7043db37ad13f5966aff581 irssi-1.0.3.tar.xz +sha256 b85c07dbafe178213eccdc69f5f8f0ac024dea01c67244668f91ec1c06b986ca irssi-1.0.4.tar.xz diff --git a/bsp/buildroot/package/irssi/irssi.mk b/bsp/buildroot/package/irssi/irssi.mk index 12ab57bb..4fef1125 100644 --- a/bsp/buildroot/package/irssi/irssi.mk +++ b/bsp/buildroot/package/irssi/irssi.mk @@ -4,7 +4,7 @@ # ################################################################################ -IRSSI_VERSION = 1.0.3 +IRSSI_VERSION = 1.0.4 IRSSI_SOURCE = irssi-$(IRSSI_VERSION).tar.xz # Do not use the github helper here. The generated tarball is *NOT* the # same as the one uploaded by upstream for the release. @@ -15,7 +15,6 @@ IRSSI_DEPENDENCIES = host-pkgconf libglib2 ncurses openssl IRSSI_CONF_OPTS = \ --disable-glibtest \ - --with-ncurses=$(STAGING_DIR)/usr \ --without-perl ifeq ($(BR2_PACKAGE_IRSSI_PROXY),y) diff --git a/bsp/buildroot/package/libglib2/libglib2.mk b/bsp/buildroot/package/libglib2/libglib2.mk index ddd1f396..e23c4a2d 100644 --- a/bsp/buildroot/package/libglib2/libglib2.mk +++ b/bsp/buildroot/package/libglib2/libglib2.mk @@ -113,7 +113,8 @@ HOST_LIBGLIB2_DEPENDENCIES = \ host-zlib LIBGLIB2_CONF_OPTS = \ - --with-pcre=system + --with-pcre=system \ + --disable-compile-warnings ifneq ($(BR2_ENABLE_LOCALE),y) LIBGLIB2_DEPENDENCIES += libiconv diff --git a/bsp/buildroot/package/libmemcached/0005-fix-pointer-comparaison.patch b/bsp/buildroot/package/libmemcached/0005-fix-pointer-comparaison.patch new file mode 100644 index 00000000..c9f8dd19 --- /dev/null +++ b/bsp/buildroot/package/libmemcached/0005-fix-pointer-comparaison.patch @@ -0,0 +1,30 @@ +Fix pointer comparaison + +opt_servers is a pointer, not a boolean, so testing against false to +know if the pointer is NULL no longer works with the more strict gcc +7.x checks. + +[Taken from http://pkgs.fedoraproject.org/cgit/rpms/libmemcached.git/plain/libmemcached-build.patch.] +Signed-off-by: Thomas Petazzoni + +diff -up ./clients/memflush.cc.old ./clients/memflush.cc +--- ./clients/memflush.cc.old 2017-02-12 10:12:59.615209225 +0100 ++++ ./clients/memflush.cc 2017-02-12 10:13:39.998382783 +0100 +@@ -39,7 +39,7 @@ int main(int argc, char *argv[]) + { + options_parse(argc, argv); + +- if (opt_servers == false) ++ if (!opt_servers) + { + char *temp; + +@@ -48,7 +48,7 @@ int main(int argc, char *argv[]) + opt_servers= strdup(temp); + } + +- if (opt_servers == false) ++ if (!opt_servers) + { + std::cerr << "No Servers provided" << std::endl; + exit(EXIT_FAILURE); diff --git a/bsp/buildroot/package/libosip2/0001-fix-bug-report-sr-109133-Heap-buffer-overflow-in-uti.patch b/bsp/buildroot/package/libosip2/0001-fix-bug-report-sr-109133-Heap-buffer-overflow-in-uti.patch new file mode 100644 index 00000000..7f2c2d46 --- /dev/null +++ b/bsp/buildroot/package/libosip2/0001-fix-bug-report-sr-109133-Heap-buffer-overflow-in-uti.patch @@ -0,0 +1,30 @@ +From 7e0793e15e21f68337e130c67b031ca38edf055f Mon Sep 17 00:00:00 2001 +From: Aymeric Moizard +Date: Mon, 5 Sep 2016 15:01:53 +0200 +Subject: [PATCH] * fix bug report: sr #109133: Heap buffer overflow in + utility function *osip_clrncpy* https://savannah.gnu.org/support/?109133 + +Signed-off-by: Peter Korsgaard +--- + src/osipparser2/osip_port.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/osipparser2/osip_port.c b/src/osipparser2/osip_port.c +index 0e64147..d8941b0 100644 +--- a/src/osipparser2/osip_port.c ++++ b/src/osipparser2/osip_port.c +@@ -1291,8 +1291,10 @@ osip_clrncpy (char *dst, const char *src, size_t len) + char *p; + size_t spaceless_length; + +- if (src == NULL) ++ if (src == NULL || len == 0) { ++ *dst = '\0'; + return NULL; ++ } + + /* find the start of relevant text */ + pbeg = src; +-- +2.11.0 + diff --git a/bsp/buildroot/package/libtirpc/0001-Disable-parts-of-TIRPC-requiring-NIS-support.patch b/bsp/buildroot/package/libtirpc/0001-Disable-parts-of-TIRPC-requiring-NIS-support.patch index e51c5a44..eb1bef3d 100644 --- a/bsp/buildroot/package/libtirpc/0001-Disable-parts-of-TIRPC-requiring-NIS-support.patch +++ b/bsp/buildroot/package/libtirpc/0001-Disable-parts-of-TIRPC-requiring-NIS-support.patch @@ -13,6 +13,8 @@ Signed-off-by: "Yann E. MORIN" Signed-off-by: Jörg Krause [peda@axentia.se: update for 1.0.1] Signed-off-by: Peter Rosin +[bernd.kuhls@t-online.de: update for 1.0.2] +Signed-off-by: Bernd Kuhls --- src/Makefile.am | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) @@ -25,8 +27,8 @@ index 6cc567a..9834f9a 100644 rpcb_st_xdr.c svc.c svc_auth.c svc_dg.c svc_auth_unix.c svc_auth_none.c \ svc_auth_des.c \ svc_generic.c svc_raw.c svc_run.c svc_simple.c svc_vc.c getpeereid.c \ -- auth_time.c auth_des.c authdes_prot.c debug.c -+ auth_des.c authdes_prot.c debug.c +- auth_time.c auth_des.c authdes_prot.c debug.c des_crypt.c des_impl.c ++ auth_des.c authdes_prot.c debug.c des_crypt.c des_impl.c ## XDR libtirpc_la_SOURCES += xdr.c xdr_rec.c xdr_array.c xdr_float.c xdr_mem.c xdr_reference.c xdr_stdio.c xdr_sizeof.c diff --git a/bsp/buildroot/package/libtirpc/0002-uClibc-without-RPC-support-and-musl-does-not-install-rpcent.h.patch b/bsp/buildroot/package/libtirpc/0002-uClibc-without-RPC-support-and-musl-does-not-install-rpcent.h.patch index 643a57ed..51229a02 100644 --- a/bsp/buildroot/package/libtirpc/0002-uClibc-without-RPC-support-and-musl-does-not-install-rpcent.h.patch +++ b/bsp/buildroot/package/libtirpc/0002-uClibc-without-RPC-support-and-musl-does-not-install-rpcent.h.patch @@ -8,6 +8,8 @@ Signed-off-by: Thomas Petazzoni Signed-off-by: "Yann E. MORIN" [joerg.krause@embedded.rocks: musl fix] Signed-off-by: Jörg Krause +[bernd.kuhls@t-online.de: update for 1.0.2] +Signed-off-by: Bernd Kuhls --- tirpc/rpc/rpcent.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) @@ -21,7 +23,7 @@ index 147f909..4a58180 100644 #endif -/* These are defined in /usr/include/rpc/netdb.h */ --#if !defined(__GLIBC__) +-#if !defined(__GLIBC__) || defined(__UCLIBC__) +/* These are defined in /usr/include/rpc/netdb.h, unless we are using + the C library without RPC support. */ +#if defined(__UCLIBC__) && !defined(__UCLIBC_HAS_RPC__) || !defined(__GLIBC__) diff --git a/bsp/buildroot/package/libtirpc/0006-Disable-DES-authentification-support.patch b/bsp/buildroot/package/libtirpc/0006-Disable-DES-authentification-support.patch index 59a77ffc..0c654724 100644 --- a/bsp/buildroot/package/libtirpc/0006-Disable-DES-authentification-support.patch +++ b/bsp/buildroot/package/libtirpc/0006-Disable-DES-authentification-support.patch @@ -11,6 +11,8 @@ uClibc and musl does not provide DES authentication. Signed-off-by: Jörg Krause [peda@axentia.se: update for 1.0.1] Signed-off-by: Peter Rosin +[bernd.kuhls@t-online.de: update for 1.0.2] +Signed-off-by: Bernd Kuhls --- src/Makefile.am | 2 +- src/rpc_soc.c | 32 -------------------------------- @@ -26,7 +28,7 @@ index 960a522..3a88e31 100644 rpcb_st_xdr.c svc.c svc_auth.c svc_dg.c svc_auth_unix.c svc_auth_none.c \ - svc_auth_des.c \ svc_generic.c svc_raw.c svc_run.c svc_simple.c svc_vc.c getpeereid.c \ -- auth_des.c authdes_prot.c debug.c +- auth_des.c authdes_prot.c debug.c des_crypt.c des_impl.c + debug.c ## XDR @@ -48,14 +50,6 @@ diff --git a/src/rpc_soc.c b/src/rpc_soc.c index e146ed4..161a1ec 100644 --- a/src/rpc_soc.c +++ b/src/rpc_soc.c -@@ -61,7 +61,6 @@ #ifdef PORTMAP - #include - #include - #include --#include - - #include "rpc_com.h" - @@ -522,86 +521,6 @@ clnt_broadcast(prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult) } diff --git a/bsp/buildroot/package/libtirpc/0007-Add-missing-rwlock_unlocks-in-xprt_register.patch b/bsp/buildroot/package/libtirpc/0007-Add-missing-rwlock_unlocks-in-xprt_register.patch deleted file mode 100644 index 56b5bf83..00000000 --- a/bsp/buildroot/package/libtirpc/0007-Add-missing-rwlock_unlocks-in-xprt_register.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 4f1503e84b2f7bd229a097335e52fb8203f5bb0b Mon Sep 17 00:00:00 2001 -From: Michael Forney -Date: Wed, 4 Nov 2015 13:58:06 -0500 -Subject: [PATCH] Add missing rwlock_unlocks in xprt_register - -It looks like in b2c9430f46c4ac848957fb8adaac176a3f6ac03f when svc_run -switched to poll, an early return was added, but the rwlock was not -unlocked. - -I observed that rpcbind built against libtirpc-1.0.1 would handle only -one request before hanging, and tracked it down to a missing -rwlock_unlock here. - -Fixes: b2c9430f46c4 ('Use poll() instead of select() in svc_run()') -Signed-off-by: Michael Forney -Signed-off-by: Steve Dickson -[peda@axentia.se: backport from upstream] -Signed-off-by: Peter Rosin ---- - src/svc.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/src/svc.c b/src/svc.c -index 9c41445..b59467b 100644 ---- a/src/svc.c -+++ b/src/svc.c -@@ -99,7 +99,7 @@ xprt_register (xprt) - { - __svc_xports = (SVCXPRT **) calloc (_rpc_dtablesize(), sizeof (SVCXPRT *)); - if (__svc_xports == NULL) -- return; -+ goto unlock; - } - if (sock < _rpc_dtablesize()) - { -@@ -120,14 +120,14 @@ xprt_register (xprt) - svc_pollfd[i].fd = sock; - svc_pollfd[i].events = (POLLIN | POLLPRI | - POLLRDNORM | POLLRDBAND); -- return; -+ goto unlock; - } - - new_svc_pollfd = (struct pollfd *) realloc (svc_pollfd, - sizeof (struct pollfd) - * (svc_max_pollfd + 1)); - if (new_svc_pollfd == NULL) /* Out of memory */ -- return; -+ goto unlock; - svc_pollfd = new_svc_pollfd; - ++svc_max_pollfd; - -@@ -135,6 +135,7 @@ xprt_register (xprt) - svc_pollfd[svc_max_pollfd - 1].events = (POLLIN | POLLPRI | - POLLRDNORM | POLLRDBAND); - } -+unlock: - rwlock_unlock (&svc_fd_lock); - } - --- -2.5.3 - diff --git a/bsp/buildroot/package/libtirpc/0007-include-stdint.h-for-uintptr_t.patch b/bsp/buildroot/package/libtirpc/0007-include-stdint.h-for-uintptr_t.patch new file mode 100644 index 00000000..62031613 --- /dev/null +++ b/bsp/buildroot/package/libtirpc/0007-include-stdint.h-for-uintptr_t.patch @@ -0,0 +1,31 @@ +From 18f8a605e176f0362da22fd1203eb7cedb136aaf Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Tue, 20 Jun 2017 22:06:35 +0200 +Subject: [PATCH] include stdint.h for uintptr_t + +Fixes +| ../../libtirpc-1.0.1/src/xdr_sizeof.c:93:13: error: 'uintptr_t' undeclared (first use in this function); did you mean '__intptr_t'? +| if (len < (uintptr_t)xdrs->x_base) { +| ^~~~~~~~~ + +Signed-off-by: Khem Raj +Signed-off-by: Dmitrii Kolesnichenko +--- + src/xdr_sizeof.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/xdr_sizeof.c b/src/xdr_sizeof.c +index d23fbd1..79d6707 100644 +--- a/src/xdr_sizeof.c ++++ b/src/xdr_sizeof.c +@@ -39,6 +39,7 @@ + #include + #include + #include ++#include + #include "un-namespace.h" + + /* ARGSUSED */ +-- +2.9.4 + diff --git a/bsp/buildroot/package/libtirpc/libtirpc.hash b/bsp/buildroot/package/libtirpc/libtirpc.hash index cd65164c..35ac6a22 100644 --- a/bsp/buildroot/package/libtirpc/libtirpc.hash +++ b/bsp/buildroot/package/libtirpc/libtirpc.hash @@ -1,4 +1,4 @@ # From sourceforge's info on download page: -sha1 8da1636f98b5909c0d587e7534bc1e91f5c1a970 libtirpc-1.0.1.tar.bz2 +sha1 2a8dc0e6eecc45be6597c8287b1d8e15cbee46e3 libtirpc-1.0.2.tar.bz2 # Locally computed -sha256 5156974f31be7ccbc8ab1de37c4739af6d9d42c87b1d5caf4835dda75fcbb89e libtirpc-1.0.1.tar.bz2 +sha256 723c5ce92706cbb601a8db09110df1b4b69391643158f20ff587e20e7c5f90f5 libtirpc-1.0.2.tar.bz2 diff --git a/bsp/buildroot/package/libtirpc/libtirpc.mk b/bsp/buildroot/package/libtirpc/libtirpc.mk index 70a31ac5..a11e49a1 100644 --- a/bsp/buildroot/package/libtirpc/libtirpc.mk +++ b/bsp/buildroot/package/libtirpc/libtirpc.mk @@ -4,7 +4,7 @@ # ################################################################################ -LIBTIRPC_VERSION = 1.0.1 +LIBTIRPC_VERSION = 1.0.2 LIBTIRPC_SOURCE = libtirpc-$(LIBTIRPC_VERSION).tar.bz2 LIBTIRPC_SITE = http://downloads.sourceforge.net/project/libtirpc/libtirpc/$(LIBTIRPC_VERSION) LIBTIRPC_LICENSE = BSD-3c diff --git a/bsp/buildroot/package/libxml-parser-perl/libxml-parser-perl.mk b/bsp/buildroot/package/libxml-parser-perl/libxml-parser-perl.mk index e512815e..1367a398 100644 --- a/bsp/buildroot/package/libxml-parser-perl/libxml-parser-perl.mk +++ b/bsp/buildroot/package/libxml-parser-perl/libxml-parser-perl.mk @@ -9,6 +9,7 @@ LIBXML_PARSER_PERL_SOURCE = XML-Parser-$(LIBXML_PARSER_PERL_VERSION).tar.gz LIBXML_PARSER_PERL_SITE = $(BR2_CPAN_MIRROR)/authors/id/T/TO/TODDR HOST_LIBXML_PARSER_PERL_DEPENDENCIES = host-expat LIBXML_PARSER_PERL_LICENSE = Artistic or GPLv1+ +LIBXML_PARSER_PERL_LICENSE_FILES = README LIBXML_PARSER_PERL_RUN_PERL = `which perl` define HOST_LIBXML_PARSER_PERL_CONFIGURE_CMDS diff --git a/bsp/buildroot/package/linux-fusion/0004-Port-one-one_udp.c-to-Linux-4.1.patch b/bsp/buildroot/package/linux-fusion/0004-Port-one-one_udp.c-to-Linux-4.1.patch index e1bff64f..3ee4dac4 100644 --- a/bsp/buildroot/package/linux-fusion/0004-Port-one-one_udp.c-to-Linux-4.1.patch +++ b/bsp/buildroot/package/linux-fusion/0004-Port-one-one_udp.c-to-Linux-4.1.patch @@ -24,12 +24,20 @@ one/one_udp.c: In function 'ksocket_send_iov': one/one_udp.c:192:13: error: too many arguments to function 'sock_sendmsg' Signed-off-by: Marc Gonzalez + +Kernel commit 2da62906b1e29 dropped the size parameter in sock_recvmsg +since 4.7 + +In function 'ksocket_receive' +one/one_udp.c:235:13: error: too many arguments to function 'sock_recvmsg' + +Signed-off-by: Matthew Shyu --- - one/one_udp.c | 30 +++++++++++++++--------------- - 1 file changed, 15 insertions(+), 15 deletions(-) + one/one_udp.c | 34 +++++++++++++++++++--------------- + 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/one/one_udp.c b/one/one_udp.c -index 26b9e6a1f729..b1daae164cdf 100644 +index 26b9e6a..9b59529 100644 --- a/one/one_udp.c +++ b/one/one_udp.c @@ -161,7 +161,7 @@ ksocket_send_iov( struct socket *sock, @@ -78,7 +86,7 @@ index 26b9e6a1f729..b1daae164cdf 100644 struct iovec iov; mm_segment_t oldfs; int size = 0; -@@ -213,14 +215,12 @@ ksocket_receive(struct socket* sock, struct sockaddr_in* addr, void *buf, int le +@@ -213,18 +215,20 @@ ksocket_receive(struct socket* sock, struct sockaddr_in* addr, void *buf, int le iov.iov_base = buf; iov.iov_len = len; @@ -97,3 +105,14 @@ index 26b9e6a1f729..b1daae164cdf 100644 oldfs = get_fs(); set_fs(KERNEL_DS); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0) // commit 2da62906b1e29 + size = sock_recvmsg(sock,&msg,len,msg.msg_flags); ++#else ++ size = sock_recvmsg(sock, &msg,msg.msg_flags); ++#endif + set_fs(oldfs); + + return size; +-- +2.11.0 + diff --git a/bsp/buildroot/package/linux-headers/Config.in.host b/bsp/buildroot/package/linux-headers/Config.in.host index 97e80675..99c8b2a4 100644 --- a/bsp/buildroot/package/linux-headers/Config.in.host +++ b/bsp/buildroot/package/linux-headers/Config.in.host @@ -214,15 +214,15 @@ endchoice config BR2_DEFAULT_KERNEL_HEADERS string - default "3.2.89" if BR2_KERNEL_HEADERS_3_2 + default "3.2.91" if BR2_KERNEL_HEADERS_3_2 default "3.4.113" if BR2_KERNEL_HEADERS_3_4 - default "3.10.106" if BR2_KERNEL_HEADERS_3_10 + default "3.10.107" if BR2_KERNEL_HEADERS_3_10 default "3.12.74" if BR2_KERNEL_HEADERS_3_12 - default "3.18.59" if BR2_KERNEL_HEADERS_3_18 + default "3.18.61" if BR2_KERNEL_HEADERS_3_18 default "3.19.8" if BR2_KERNEL_HEADERS_3_19 default "4.0.9" if BR2_KERNEL_HEADERS_4_0 default "4.1.42" if BR2_KERNEL_HEADERS_4_1 - default "4.4.75" if BR2_KERNEL_HEADERS_4_4 + default "4.4.78" if BR2_KERNEL_HEADERS_4_4 default "4.8.17" if BR2_KERNEL_HEADERS_4_8 - default "4.9.33" if BR2_KERNEL_HEADERS_4_9 + default "4.9.39" if BR2_KERNEL_HEADERS_4_9 default BR2_DEFAULT_KERNEL_VERSION if BR2_KERNEL_HEADERS_VERSION diff --git a/bsp/buildroot/package/linux-zigbee/linux-zigbee.mk b/bsp/buildroot/package/linux-zigbee/linux-zigbee.mk index 1f4197f0..e46b4ee4 100644 --- a/bsp/buildroot/package/linux-zigbee/linux-zigbee.mk +++ b/bsp/buildroot/package/linux-zigbee/linux-zigbee.mk @@ -15,6 +15,7 @@ LINUX_ZIGBEE_AUTORECONF = YES LINUX_ZIGBEE_CONF_OPTS = \ --disable-manpages \ + --disable-werror \ --with-leasefile="$(call qstrip,$(BR2_PACKAGE_LINUX_ZIGBEE_LEASEFILE))" ifeq ($(BR2_PACKAGE_LINUX_ZIGBEE_TESTS),y) diff --git a/bsp/buildroot/package/mpg123/mpg123.hash b/bsp/buildroot/package/mpg123/mpg123.hash index 69fbef36..cbab6f3e 100644 --- a/bsp/buildroot/package/mpg123/mpg123.hash +++ b/bsp/buildroot/package/mpg123/mpg123.hash @@ -1,2 +1,5 @@ # Locally calculated after checking pgp signature -sha256 0fe7270a4071367f97a7c1fb45fb2ef3cfef73509c205124e080ea569217b05f mpg123-1.25.1.tar.bz2 +sha256 5314b0fb8ad291bfc79ff4c5c321b971916819a65233ec065434358fcf8aee38 mpg123-1.25.2.tar.bz2 + +# License file +sha256 f40e0dd86b27b52e429b693a87b3ca63ae0a98a4d142e77207aa6bdf1db7a295 COPYING diff --git a/bsp/buildroot/package/mpg123/mpg123.mk b/bsp/buildroot/package/mpg123/mpg123.mk index 8eaaa627..44218eda 100644 --- a/bsp/buildroot/package/mpg123/mpg123.mk +++ b/bsp/buildroot/package/mpg123/mpg123.mk @@ -4,7 +4,7 @@ # ################################################################################ -MPG123_VERSION = 1.25.1 +MPG123_VERSION = 1.25.2 MPG123_SOURCE = mpg123-$(MPG123_VERSION).tar.bz2 MPG123_SITE = http://downloads.sourceforge.net/project/mpg123/mpg123/$(MPG123_VERSION) MPG123_CONF_OPTS = --disable-lfs-alias diff --git a/bsp/buildroot/package/nodejs/6.11.0/0001-gyp-force-link-command-to-use-CXX.patch b/bsp/buildroot/package/nodejs/6.11.1/0001-gyp-force-link-command-to-use-CXX.patch similarity index 100% rename from bsp/buildroot/package/nodejs/6.11.0/0001-gyp-force-link-command-to-use-CXX.patch rename to bsp/buildroot/package/nodejs/6.11.1/0001-gyp-force-link-command-to-use-CXX.patch diff --git a/bsp/buildroot/package/nodejs/6.11.0/0002-inspector-don-t-build-when-ssl-support-is-disabled.patch b/bsp/buildroot/package/nodejs/6.11.1/0002-inspector-don-t-build-when-ssl-support-is-disabled.patch similarity index 100% rename from bsp/buildroot/package/nodejs/6.11.0/0002-inspector-don-t-build-when-ssl-support-is-disabled.patch rename to bsp/buildroot/package/nodejs/6.11.1/0002-inspector-don-t-build-when-ssl-support-is-disabled.patch diff --git a/bsp/buildroot/package/nodejs/6.11.0/0003-src-add-HAVE_OPENSSL-directive-to-openssl_config.patch b/bsp/buildroot/package/nodejs/6.11.1/0003-src-add-HAVE_OPENSSL-directive-to-openssl_config.patch similarity index 100% rename from bsp/buildroot/package/nodejs/6.11.0/0003-src-add-HAVE_OPENSSL-directive-to-openssl_config.patch rename to bsp/buildroot/package/nodejs/6.11.1/0003-src-add-HAVE_OPENSSL-directive-to-openssl_config.patch diff --git a/bsp/buildroot/package/nodejs/Config.in b/bsp/buildroot/package/nodejs/Config.in index be20af56..31dcfb67 100644 --- a/bsp/buildroot/package/nodejs/Config.in +++ b/bsp/buildroot/package/nodejs/Config.in @@ -43,7 +43,7 @@ config BR2_PACKAGE_NODEJS_V8_ARCH_SUPPORTS config BR2_PACKAGE_NODEJS_VERSION_STRING string - default "6.11.0" if BR2_PACKAGE_NODEJS_V8_ARCH_SUPPORTS + default "6.11.1" if BR2_PACKAGE_NODEJS_V8_ARCH_SUPPORTS default "0.10.48" config BR2_PACKAGE_NODEJS_NPM diff --git a/bsp/buildroot/package/nodejs/nodejs.hash b/bsp/buildroot/package/nodejs/nodejs.hash index ac010ab6..2dbbdc7c 100644 --- a/bsp/buildroot/package/nodejs/nodejs.hash +++ b/bsp/buildroot/package/nodejs/nodejs.hash @@ -1,5 +1,5 @@ # From upstream URL: http://nodejs.org/dist/v0.10.48/SHASUMS256.txt sha256 365a93d9acc076a0d93f087d269f376abeebccad599a9dab72f2f6ed96c8ae6e node-v0.10.48.tar.xz -# From upstream URL: http://nodejs.org/dist/v6.11.0/SHASUMS256.txt -sha256 02ba35391edea2b294c736489af01954ce6e6c39d318f4423ae6617c69ef0a51 node-v6.11.0.tar.xz +# From upstream URL: http://nodejs.org/dist/v6.11.1/SHASUMS256.txt +sha256 6f6655b85919aa54cb045a6d69a226849802fcc26491d0db4ce59873e41cc2b8 node-v6.11.1.tar.xz diff --git a/bsp/buildroot/package/orc/Config.in b/bsp/buildroot/package/orc/Config.in index 2470d992..7943ecfb 100644 --- a/bsp/buildroot/package/orc/Config.in +++ b/bsp/buildroot/package/orc/Config.in @@ -6,7 +6,7 @@ config BR2_PACKAGE_ORC Orc is a library and set of tools for compiling and executing very simple programs that operate on arrays of data. - http://code.entropywave.com/projects/orc/ + https://gstreamer.freedesktop.org/projects/orc.html comment "orc needs a toolchain w/ threads" depends on !BR2_TOOLCHAIN_HAS_THREADS diff --git a/bsp/buildroot/package/pcre/0003-CVE-2017-6004.patch b/bsp/buildroot/package/pcre/0003-CVE-2017-6004.patch deleted file mode 100644 index d0b6d51b..00000000 --- a/bsp/buildroot/package/pcre/0003-CVE-2017-6004.patch +++ /dev/null @@ -1,21 +0,0 @@ -Description: CVE-2017-6004: crafted regular expression may cause denial of service -Origin: upstream, https://vcs.pcre.org/pcre/code/trunk/pcre_jit_compile.c?r1=1676&r2=1680&view=patch -Bug: https://bugs.exim.org/show_bug.cgi?id=2035 -Bug-Debian: https://bugs.debian.org/855405 -Forwarded: not-needed -Author: Salvatore Bonaccorso -Last-Update: 2017-02-17 - -Signed-off-by: Baruch Siach - ---- a/pcre_jit_compile.c -+++ b/pcre_jit_compile.c -@@ -8111,7 +8111,7 @@ if (opcode == OP_COND || opcode == OP_SC - - if (*matchingpath == OP_FAIL) - stacksize = 0; -- if (*matchingpath == OP_RREF) -+ else if (*matchingpath == OP_RREF) - { - stacksize = GET2(matchingpath, 1); - if (common->currententry == NULL) diff --git a/bsp/buildroot/package/pcre/0004-CVE-2017-7186.patch b/bsp/buildroot/package/pcre/0004-CVE-2017-7186.patch deleted file mode 100644 index 980923ae..00000000 --- a/bsp/buildroot/package/pcre/0004-CVE-2017-7186.patch +++ /dev/null @@ -1,60 +0,0 @@ -Description: Upstream fix for CVE-2017-7186 (Upstream rev 1688) - Fix Unicode property crash for 32-bit characters greater than 0x10ffff. -Author: Matthew Vernon -X-Dgit-Generated: 2:8.39-3 c4c2c7c4f74d53b263af2471d8e11db88096bd13 - -Signed-off-by: Baruch Siach ---- - ---- pcre3-8.39.orig/pcre_internal.h -+++ pcre3-8.39/pcre_internal.h -@@ -2772,6 +2772,9 @@ extern const pcre_uint8 PRIV(ucd_stage1 - extern const pcre_uint16 PRIV(ucd_stage2)[]; - extern const pcre_uint32 PRIV(ucp_gentype)[]; - extern const pcre_uint32 PRIV(ucp_gbtable)[]; -+#ifdef COMPILE_PCRE32 -+extern const ucd_record PRIV(dummy_ucd_record)[]; -+#endif - #ifdef SUPPORT_JIT - extern const int PRIV(ucp_typerange)[]; - #endif -@@ -2780,9 +2783,15 @@ extern const int PRIV(ucp_typera - /* UCD access macros */ - - #define UCD_BLOCK_SIZE 128 --#define GET_UCD(ch) (PRIV(ucd_records) + \ -+#define REAL_GET_UCD(ch) (PRIV(ucd_records) + \ - PRIV(ucd_stage2)[PRIV(ucd_stage1)[(int)(ch) / UCD_BLOCK_SIZE] * \ - UCD_BLOCK_SIZE + (int)(ch) % UCD_BLOCK_SIZE]) -+ -+#ifdef COMPILE_PCRE32 -+#define GET_UCD(ch) ((ch > 0x10ffff)? PRIV(dummy_ucd_record) : REAL_GET_UCD(ch)) -+#else -+#define GET_UCD(ch) REAL_GET_UCD(ch) -+#endif - - #define UCD_CHARTYPE(ch) GET_UCD(ch)->chartype - #define UCD_SCRIPT(ch) GET_UCD(ch)->script ---- pcre3-8.39.orig/pcre_ucd.c -+++ pcre3-8.39/pcre_ucd.c -@@ -38,6 +38,20 @@ const pcre_uint16 PRIV(ucd_stage2)[] = { - const pcre_uint32 PRIV(ucd_caseless_sets)[] = {0}; - #else - -+/* If the 32-bit library is run in non-32-bit mode, character values -+greater than 0x10ffff may be encountered. For these we set up a -+special record. */ -+ -+#ifdef COMPILE_PCRE32 -+const ucd_record PRIV(dummy_ucd_record)[] = {{ -+ ucp_Common, /* script */ -+ ucp_Cn, /* type unassigned */ -+ ucp_gbOther, /* grapheme break property */ -+ 0, /* case set */ -+ 0, /* other case */ -+ }}; -+#endif -+ - /* When recompiling tables with a new Unicode version, please check the - types in this structure definition from pcre_internal.h (the actual - field names will be different): diff --git a/bsp/buildroot/package/pcre/pcre.hash b/bsp/buildroot/package/pcre/pcre.hash index 4c3c6c32..b36e1301 100644 --- a/bsp/buildroot/package/pcre/pcre.hash +++ b/bsp/buildroot/package/pcre/pcre.hash @@ -1,2 +1,2 @@ # Locally calculated after checking pgp signature -sha256 00e27a29ead4267e3de8111fcaa59b132d0533cdfdbdddf4b0604279acbcf4f4 pcre-8.40.tar.bz2 +sha256 e62c7eac5ae7c0e7286db61ff82912e1c0b7a0c13706616e94a7dd729321b530 pcre-8.41.tar.bz2 diff --git a/bsp/buildroot/package/pcre/pcre.mk b/bsp/buildroot/package/pcre/pcre.mk index e302ed7d..5734fce2 100644 --- a/bsp/buildroot/package/pcre/pcre.mk +++ b/bsp/buildroot/package/pcre/pcre.mk @@ -4,7 +4,7 @@ # ################################################################################ -PCRE_VERSION = 8.40 +PCRE_VERSION = 8.41 PCRE_SITE = https://ftp.pcre.org/pub/pcre PCRE_SOURCE = pcre-$(PCRE_VERSION).tar.bz2 PCRE_LICENSE = BSD-3c diff --git a/bsp/buildroot/package/php/php.hash b/bsp/buildroot/package/php/php.hash index 9c94b9e4..c724f6d8 100644 --- a/bsp/buildroot/package/php/php.hash +++ b/bsp/buildroot/package/php/php.hash @@ -1,2 +1,5 @@ # From http://php.net/downloads.php -sha256 b3565b0c1441064eba204821608df1ec7367abff881286898d900c2c2a5ffe70 php-7.1.1.tar.xz +sha256 0d42089729be7b2bb0308cbe189c2782f9cb4b07078c8a235495be5874fff729 php-7.1.7.tar.xz + +# License file +sha256 a44951f93b10c87c3f7cd9f311d95999c57c95ed950eec32b14c1c7ea6baf25e LICENSE diff --git a/bsp/buildroot/package/php/php.mk b/bsp/buildroot/package/php/php.mk index 1379ad57..0733bc9a 100644 --- a/bsp/buildroot/package/php/php.mk +++ b/bsp/buildroot/package/php/php.mk @@ -4,14 +4,14 @@ # ################################################################################ -PHP_VERSION = 7.1.1 +PHP_VERSION = 7.1.7 PHP_SITE = http://www.php.net/distributions PHP_SOURCE = php-$(PHP_VERSION).tar.xz PHP_INSTALL_STAGING = YES PHP_INSTALL_STAGING_OPTS = INSTALL_ROOT=$(STAGING_DIR) install PHP_INSTALL_TARGET_OPTS = INSTALL_ROOT=$(TARGET_DIR) install PHP_DEPENDENCIES = host-pkgconf -PHP_LICENSE = PHP +PHP_LICENSE = PHP-3.01 PHP_LICENSE_FILES = LICENSE PHP_CONF_OPTS = \ --mandir=/usr/share/man \ diff --git a/bsp/buildroot/package/pulseaudio/pulseaudio.mk b/bsp/buildroot/package/pulseaudio/pulseaudio.mk index 74a028be..5960f8a5 100644 --- a/bsp/buildroot/package/pulseaudio/pulseaudio.mk +++ b/bsp/buildroot/package/pulseaudio/pulseaudio.mk @@ -32,6 +32,7 @@ PULSEAUDIO_DEPENDENCIES = \ $(if $(BR2_PACKAGE_AVAHI_DAEMON),avahi) \ $(if $(BR2_PACKAGE_DBUS),dbus) \ $(if $(BR2_PACKAGE_BLUEZ_UTILS),bluez_utils) \ + $(if $(BR2_PACKAGE_BLUEZ5_UTILS),bluez5_utils) \ $(if $(BR2_PACKAGE_OPENSSL),openssl) \ $(if $(BR2_PACKAGE_FFTW),fftw) \ $(if $(BR2_PACKAGE_SYSTEMD),systemd) @@ -121,8 +122,6 @@ ifneq ($(BR2_ENABLE_LOCALE),y) define PULSEAUDIO_FIXUP_DESKTOP_FILES cp $(@D)/src/daemon/pulseaudio.desktop.in \ $(@D)/src/daemon/pulseaudio.desktop - cp $(@D)/src/daemon/pulseaudio-kde.desktop.in \ - $(@D)/src/daemon/pulseaudio-kde.desktop endef PULSEAUDIO_POST_PATCH_HOOKS += PULSEAUDIO_FIXUP_DESKTOP_FILES endif diff --git a/bsp/buildroot/package/python-setproctitle/python-setproctitle.mk b/bsp/buildroot/package/python-setproctitle/python-setproctitle.mk index 36cfec32..c3c6386b 100644 --- a/bsp/buildroot/package/python-setproctitle/python-setproctitle.mk +++ b/bsp/buildroot/package/python-setproctitle/python-setproctitle.mk @@ -9,6 +9,6 @@ PYTHON_SETPROCTITLE_SOURCE = setproctitle-$(PYTHON_SETPROCTITLE_VERSION).tar.gz PYTHON_SETPROCTITLE_SITE = https://pypi.python.org/packages/5a/0d/dc0d2234aacba6cf1a729964383e3452c52096dc695581248b548786f2b3 PYTHON_SETPROCTITLE_LICENSE = BSD-3c PYTHON_SETPROCTITLE_LICENSE_FILES = COPYRIGHT -PYTHON_SETPROCTITLE_SETUP_TYPE = distutils +PYTHON_SETPROCTITLE_SETUP_TYPE = setuptools $(eval $(python-package)) diff --git a/bsp/buildroot/package/qt5/qt5base/5.8.0/0005-Fix-error-attribute-target-crc-is-unknown.patch b/bsp/buildroot/package/qt5/qt5base/5.8.0/0005-Fix-error-attribute-target-crc-is-unknown.patch new file mode 100644 index 00000000..92d93a80 --- /dev/null +++ b/bsp/buildroot/package/qt5/qt5base/5.8.0/0005-Fix-error-attribute-target-crc-is-unknown.patch @@ -0,0 +1,44 @@ +From f0c02fb22bc277e2015a18e562b551ec7b3eed9e Mon Sep 17 00:00:00 2001 +From: Peter Seiderer +Date: Sun, 16 Jul 2017 00:05:44 +0200 +Subject: [PATCH] Fix error attribute(target("+crc")) is unknown + +Task-number: QTBUG-61975 +Change-Id: I0b1b55c0737dad485b5ace8e6eb7cb842589453d +--- + src/corelib/tools/qhash.cpp | 2 ++ + src/corelib/tools/qsimd_p.h | 3 +++ + 2 files changed, 5 insertions(+) + +diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp +index 1f9c05c..bbf6efb 100644 +--- a/src/corelib/tools/qhash.cpp ++++ b/src/corelib/tools/qhash.cpp +@@ -144,7 +144,9 @@ static inline bool hasFastCrc32() + } + + template ++#if defined(__aarch64__) + QT_FUNCTION_TARGET(CRC32) ++#endif + static uint crc32(const Char *ptr, size_t len, uint h) + { + // The crc32[whbd] instructions on Aarch64/Aarch32 calculate a 32-bit CRC32 checksum +diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h +index 023a4b0..a85d572 100644 +--- a/src/corelib/tools/qsimd_p.h ++++ b/src/corelib/tools/qsimd_p.h +@@ -326,7 +326,10 @@ + #endif + // AArch64/ARM64 + #if defined(Q_PROCESSOR_ARM_V8) && defined(__ARM_FEATURE_CRC32) ++#if defined(__aarch64__) ++// only available on aarch64 + #define QT_FUNCTION_TARGET_STRING_CRC32 "+crc" ++#endif + # include + #endif + +-- +2.7.4 + diff --git a/bsp/buildroot/package/rpi-firmware/rpi-firmware.mk b/bsp/buildroot/package/rpi-firmware/rpi-firmware.mk index d2cd4819..8575e7f2 100644 --- a/bsp/buildroot/package/rpi-firmware/rpi-firmware.mk +++ b/bsp/buildroot/package/rpi-firmware/rpi-firmware.mk @@ -31,6 +31,8 @@ ifeq ($(BR2_PACKAGE_RPI_FIRMWARE_INSTALL_VCDBG),y) define RPI_FIRMWARE_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0700 $(@D)/$(if BR2_ARM_EABIHF,hardfp/)opt/vc/bin/vcdbg \ $(TARGET_DIR)/usr/sbin/vcdbg + $(INSTALL) -D -m 0644 $(@D)/$(if BR2_ARM_EABIHF,hardfp/)opt/vc/lib/libelftoolchain.so \ + $(TARGET_DIR)/usr/lib/libelftoolchain.so endef endif # INSTALL_VCDBG diff --git a/bsp/buildroot/package/samba4/samba4.hash b/bsp/buildroot/package/samba4/samba4.hash index a16d8347..0783b37d 100644 --- a/bsp/buildroot/package/samba4/samba4.hash +++ b/bsp/buildroot/package/samba4/samba4.hash @@ -1,2 +1,2 @@ # Locally calculated -sha256 7cb753f5f6d5527ef40d4c1f47dacafb7c876cb304b4906ccb390c6a18477714 samba-4.5.10.tar.gz +sha256 f4c17123e3cc852a5ecc7e38884b00deab57632b9519aebc243e2a94b9b5ace4 samba-4.5.12.tar.gz diff --git a/bsp/buildroot/package/samba4/samba4.mk b/bsp/buildroot/package/samba4/samba4.mk index 0ad4b64f..3ffe11e1 100644 --- a/bsp/buildroot/package/samba4/samba4.mk +++ b/bsp/buildroot/package/samba4/samba4.mk @@ -4,7 +4,7 @@ # ################################################################################ -SAMBA4_VERSION = 4.5.10 +SAMBA4_VERSION = 4.5.12 SAMBA4_SITE = https://download.samba.org/pub/samba/stable SAMBA4_SOURCE = samba-$(SAMBA4_VERSION).tar.gz SAMBA4_INSTALL_STAGING = YES diff --git a/bsp/buildroot/package/spice/0004-reds-Disconnect-when-receiving-overly-big-ClientMoni.patch b/bsp/buildroot/package/spice/0004-reds-Disconnect-when-receiving-overly-big-ClientMoni.patch new file mode 100644 index 00000000..070259f2 --- /dev/null +++ b/bsp/buildroot/package/spice/0004-reds-Disconnect-when-receiving-overly-big-ClientMoni.patch @@ -0,0 +1,75 @@ +From f1e7ec03e26ab6b8ca9b7ec060846a5b706a963d Mon Sep 17 00:00:00 2001 +From: Frediano Ziglio +Date: Mon, 15 May 2017 15:57:28 +0100 +Subject: [PATCH] reds: Disconnect when receiving overly big + ClientMonitorsConfig + +Total message size received from the client was unlimited. There is +a 2kiB size check on individual agent messages, but the MonitorsConfig +message can be split in multiple chunks, and the size of the +non-chunked MonitorsConfig message was never checked. This could easily +lead to memory exhaustion on the host. + +Signed-off-by: Frediano Ziglio +Signed-off-by: Peter Korsgaard +--- + server/reds.c | 25 +++++++++++++++++++++++-- + 1 file changed, 23 insertions(+), 2 deletions(-) + +diff --git a/server/reds.c b/server/reds.c +index f439a366..7be85fdf 100644 +--- a/server/reds.c ++++ b/server/reds.c +@@ -993,19 +993,34 @@ static void reds_client_monitors_config_cleanup(void) + static void reds_on_main_agent_monitors_config( + MainChannelClient *mcc, void *message, size_t size) + { ++ const unsigned int MAX_MONITORS = 256; ++ const unsigned int MAX_MONITOR_CONFIG_SIZE = ++ sizeof(VDAgentMonitorsConfig) + MAX_MONITORS * sizeof(VDAgentMonConfig); ++ + VDAgentMessage *msg_header; + VDAgentMonitorsConfig *monitors_config; + RedsClientMonitorsConfig *cmc = &reds->client_monitors_config; + ++ // limit size of message sent by the client as this can cause a DoS through ++ // memory exhaustion, or potentially some integer overflows ++ if (sizeof(VDAgentMessage) + MAX_MONITOR_CONFIG_SIZE - cmc->buffer_size < size) { ++ goto overflow; ++ } + cmc->buffer_size += size; + cmc->buffer = realloc(cmc->buffer, cmc->buffer_size); + spice_assert(cmc->buffer); + cmc->mcc = mcc; + memcpy(cmc->buffer + cmc->buffer_pos, message, size); + cmc->buffer_pos += size; ++ if (sizeof(VDAgentMessage) > cmc->buffer_size) { ++ spice_debug("not enough data yet. %d", cmc->buffer_size); ++ return; ++ } + msg_header = (VDAgentMessage *)cmc->buffer; +- if (sizeof(VDAgentMessage) > cmc->buffer_size || +- msg_header->size > cmc->buffer_size - sizeof(VDAgentMessage)) { ++ if (msg_header->size > MAX_MONITOR_CONFIG_SIZE) { ++ goto overflow; ++ } ++ if (msg_header->size > cmc->buffer_size - sizeof(VDAgentMessage)) { + spice_debug("not enough data yet. %d", cmc->buffer_size); + return; + } +@@ -1013,6 +1028,12 @@ static void reds_on_main_agent_monitors_config( + spice_debug("%s: %d", __func__, monitors_config->num_of_monitors); + red_dispatcher_client_monitors_config(monitors_config); + reds_client_monitors_config_cleanup(); ++ return; ++ ++overflow: ++ spice_warning("received invalid MonitorsConfig request from client, disconnecting"); ++ red_channel_client_disconnect(main_channel_client_get_base(mcc)); ++ reds_client_monitors_config_cleanup(); + } + + void reds_on_main_agent_data(MainChannelClient *mcc, void *message, size_t size) +-- +2.11.0 + diff --git a/bsp/buildroot/package/spice/0005-reds-Avoid-integer-overflows-handling-monitor-config.patch b/bsp/buildroot/package/spice/0005-reds-Avoid-integer-overflows-handling-monitor-config.patch new file mode 100644 index 00000000..98740520 --- /dev/null +++ b/bsp/buildroot/package/spice/0005-reds-Avoid-integer-overflows-handling-monitor-config.patch @@ -0,0 +1,31 @@ +From ec6229c79abe05d731953df5f7e9a05ec9f6df79 Mon Sep 17 00:00:00 2001 +From: Frediano Ziglio +Date: Mon, 15 May 2017 15:57:28 +0100 +Subject: [PATCH] reds: Avoid integer overflows handling monitor + configuration + +Avoid VDAgentMessage::size integer overflows. + +Signed-off-by: Frediano Ziglio +Signed-off-by: Peter Korsgaard +--- + server/reds.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/server/reds.c b/server/reds.c +index 7be85fdf..e1c8c108 100644 +--- a/server/reds.c ++++ b/server/reds.c +@@ -1024,6 +1024,9 @@ static void reds_on_main_agent_monitors_config( + spice_debug("not enough data yet. %d", cmc->buffer_size); + return; + } ++ if (msg_header->size < sizeof(VDAgentMonitorsConfig)) { ++ goto overflow; ++ } + monitors_config = (VDAgentMonitorsConfig *)(cmc->buffer + sizeof(*msg_header)); + spice_debug("%s: %d", __func__, monitors_config->num_of_monitors); + red_dispatcher_client_monitors_config(monitors_config); +-- +2.11.0 + diff --git a/bsp/buildroot/package/spice/0006-reds-Avoid-buffer-overflows-handling-monitor-configu.patch b/bsp/buildroot/package/spice/0006-reds-Avoid-buffer-overflows-handling-monitor-configu.patch new file mode 100644 index 00000000..212645b4 --- /dev/null +++ b/bsp/buildroot/package/spice/0006-reds-Avoid-buffer-overflows-handling-monitor-configu.patch @@ -0,0 +1,48 @@ +From a957a90baf2c62d31f3547e56bba7d0e812d2331 Mon Sep 17 00:00:00 2001 +From: Frediano Ziglio +Date: Mon, 15 May 2017 15:57:28 +0100 +Subject: [PATCH] reds: Avoid buffer overflows handling monitor + configuration + +It was also possible for a malicious client to set +VDAgentMonitorsConfig::num_of_monitors to a number larger +than the actual size of VDAgentMOnitorsConfig::monitors. +This would lead to buffer overflows, which could allow the guest to +read part of the host memory. This might cause write overflows in the +host as well, but controlling the content of such buffers seems +complicated. + +Signed-off-by: Frediano Ziglio +Signed-off-by: Peter Korsgaard +--- + server/reds.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/server/reds.c b/server/reds.c +index e1c8c108..3a42c375 100644 +--- a/server/reds.c ++++ b/server/reds.c +@@ -1000,6 +1000,7 @@ static void reds_on_main_agent_monitors_config( + VDAgentMessage *msg_header; + VDAgentMonitorsConfig *monitors_config; + RedsClientMonitorsConfig *cmc = &reds->client_monitors_config; ++ uint32_t max_monitors; + + // limit size of message sent by the client as this can cause a DoS through + // memory exhaustion, or potentially some integer overflows +@@ -1028,6 +1029,12 @@ static void reds_on_main_agent_monitors_config( + goto overflow; + } + monitors_config = (VDAgentMonitorsConfig *)(cmc->buffer + sizeof(*msg_header)); ++ // limit the monitor number to avoid buffer overflows ++ max_monitors = (msg_header->size - sizeof(VDAgentMonitorsConfig)) / ++ sizeof(VDAgentMonConfig); ++ if (monitors_config->num_of_monitors > max_monitors) { ++ goto overflow; ++ } + spice_debug("%s: %d", __func__, monitors_config->num_of_monitors); + red_dispatcher_client_monitors_config(monitors_config); + reds_client_monitors_config_cleanup(); +-- +2.11.0 + diff --git a/bsp/buildroot/package/systemd/0001-resolved-bugfix-of-null-pointer-p-question-dereferencing.patch b/bsp/buildroot/package/systemd/0001-resolved-bugfix-of-null-pointer-p-question-dereferencing.patch new file mode 100644 index 00000000..81cecefa --- /dev/null +++ b/bsp/buildroot/package/systemd/0001-resolved-bugfix-of-null-pointer-p-question-dereferencing.patch @@ -0,0 +1,28 @@ +From a924f43f30f9c4acaf70618dd2a055f8b0f166be Mon Sep 17 00:00:00 2001 +From: Evgeny Vereshchagin +Date: Wed, 24 May 2017 08:56:48 +0300 +Subject: [PATCH] resolved: bugfix of null pointer p->question dereferencing + (#6020) + +See https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1621396 + +[Upstream commit: https://github.com/systemd/systemd/commit/a924f43f30f9c4acaf70618dd2a055f8b0f166be] +Signed-off-by: Thomas Petazzoni +--- + src/resolve/resolved-dns-packet.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c +index 652970284e..240ee448f4 100644 +--- a/src/resolve/resolved-dns-packet.c ++++ b/src/resolve/resolved-dns-packet.c +@@ -2269,6 +2269,9 @@ int dns_packet_is_reply_for(DnsPacket *p, const DnsResourceKey *key) { + if (r < 0) + return r; + ++ if (!p->question) ++ return 0; ++ + if (p->question->n_keys != 1) + return 0; + diff --git a/bsp/buildroot/package/systemd/0002-resolved-simplify-alloc-size-calculation.patch b/bsp/buildroot/package/systemd/0002-resolved-simplify-alloc-size-calculation.patch new file mode 100644 index 00000000..5fab9056 --- /dev/null +++ b/bsp/buildroot/package/systemd/0002-resolved-simplify-alloc-size-calculation.patch @@ -0,0 +1,51 @@ +From db848813bae4d28c524b3b6a7dad135e426659ce Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 18 Jun 2017 16:07:57 -0400 +Subject: [PATCH] resolved: simplify alloc size calculation + +The allocation size was calculated in a complicated way, and for values +close to the page size we would actually allocate less than requested. + +Reported by Chris Coulson . + +CVE-2017-9445 + +[Upstream commit: https://github.com/systemd/systemd/commit/db848813bae4d28c524b3b6a7dad135e426659ce] +Signed-off-by: Thomas Petazzoni +--- + src/resolve/resolved-dns-packet.c | 8 +------- + src/resolve/resolved-dns-packet.h | 2 -- + 2 files changed, 1 insertion(+), 9 deletions(-) + +diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c +index 240ee448f4..821b66e266 100644 +--- a/src/resolve/resolved-dns-packet.c ++++ b/src/resolve/resolved-dns-packet.c +@@ -47,13 +47,7 @@ int dns_packet_new(DnsPacket **ret, DnsProtocol protocol, size_t mtu) { + + assert(ret); + +- if (mtu <= UDP_PACKET_HEADER_SIZE) +- a = DNS_PACKET_SIZE_START; +- else +- a = mtu - UDP_PACKET_HEADER_SIZE; +- +- if (a < DNS_PACKET_HEADER_SIZE) +- a = DNS_PACKET_HEADER_SIZE; ++ a = MAX(mtu, DNS_PACKET_HEADER_SIZE); + + /* round up to next page size */ + a = PAGE_ALIGN(ALIGN(sizeof(DnsPacket)) + a) - ALIGN(sizeof(DnsPacket)); +diff --git a/src/resolve/resolved-dns-packet.h b/src/resolve/resolved-dns-packet.h +index 2c92392e4d..3abcaf8cf3 100644 +--- a/src/resolve/resolved-dns-packet.h ++++ b/src/resolve/resolved-dns-packet.h +@@ -66,8 +66,6 @@ struct DnsPacketHeader { + /* With EDNS0 we can use larger packets, default to 4096, which is what is commonly used */ + #define DNS_PACKET_UNICAST_SIZE_LARGE_MAX 4096 + +-#define DNS_PACKET_SIZE_START 512 +- + struct DnsPacket { + int n_ref; + DnsProtocol protocol; diff --git a/bsp/buildroot/package/systemd/0003-resolved-do-not-allocate-packets-with-minimum-size.patch b/bsp/buildroot/package/systemd/0003-resolved-do-not-allocate-packets-with-minimum-size.patch new file mode 100644 index 00000000..75091138 --- /dev/null +++ b/bsp/buildroot/package/systemd/0003-resolved-do-not-allocate-packets-with-minimum-size.patch @@ -0,0 +1,48 @@ +From 88795538726a5bbfd9efc13d441cb05e1d7fc139 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 27 Jun 2017 14:20:00 -0400 +Subject: [PATCH] resolved: do not allocate packets with minimum size + +dns_packet_new() is sometimes called with mtu == 0, and in that case we should +allocate more than the absolute minimum (which is the dns packet header size), +otherwise we have to resize immediately again after appending the first data to +the packet. + +This partially reverts the previous commit. + +[Upstream commit: https://github.com/systemd/systemd/commit/88795538726a5bbfd9efc13d441cb05e1d7fc139] +Signed-off-by: Thomas Petazzoni +--- + src/resolve/resolved-dns-packet.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c +index 821b66e266..d1f0f760a4 100644 +--- a/src/resolve/resolved-dns-packet.c ++++ b/src/resolve/resolved-dns-packet.c +@@ -28,6 +28,9 @@ + + #define EDNS0_OPT_DO (1<<15) + ++#define DNS_PACKET_SIZE_START 512 ++assert_cc(DNS_PACKET_SIZE_START > UDP_PACKET_HEADER_SIZE) ++ + typedef struct DnsPacketRewinder { + DnsPacket *packet; + size_t saved_rindex; +@@ -47,7 +50,14 @@ int dns_packet_new(DnsPacket **ret, DnsProtocol protocol, size_t mtu) { + + assert(ret); + +- a = MAX(mtu, DNS_PACKET_HEADER_SIZE); ++ /* When dns_packet_new() is called with mtu == 0, allocate more than the ++ * absolute minimum (which is the dns packet header size), to avoid ++ * resizing immediately again after appending the first data to the packet. ++ */ ++ if (mtu < UDP_PACKET_HEADER_SIZE) ++ a = DNS_PACKET_SIZE_START; ++ else ++ a = MAX(mtu, DNS_PACKET_HEADER_SIZE); + + /* round up to next page size */ + a = PAGE_ALIGN(ALIGN(sizeof(DnsPacket)) + a) - ALIGN(sizeof(DnsPacket)); diff --git a/bsp/buildroot/package/systemd/0001-fix-getty-unit.patch b/bsp/buildroot/package/systemd/0004-fix-getty-unit.patch similarity index 100% rename from bsp/buildroot/package/systemd/0001-fix-getty-unit.patch rename to bsp/buildroot/package/systemd/0004-fix-getty-unit.patch diff --git a/bsp/buildroot/package/systemd/0002-build-sys-revert-use-of-ln-relative-option.patch b/bsp/buildroot/package/systemd/0005-build-sys-revert-use-of-ln-relative-option.patch similarity index 100% rename from bsp/buildroot/package/systemd/0002-build-sys-revert-use-of-ln-relative-option.patch rename to bsp/buildroot/package/systemd/0005-build-sys-revert-use-of-ln-relative-option.patch diff --git a/bsp/buildroot/package/systemd/0003-fix-am-path-libgcrypt-no-found.patch b/bsp/buildroot/package/systemd/0006-fix-am-path-libgcrypt-no-found.patch similarity index 100% rename from bsp/buildroot/package/systemd/0003-fix-am-path-libgcrypt-no-found.patch rename to bsp/buildroot/package/systemd/0006-fix-am-path-libgcrypt-no-found.patch diff --git a/bsp/buildroot/package/systemd/Config.in b/bsp/buildroot/package/systemd/Config.in index ac8175c3..47d47c6a 100644 --- a/bsp/buildroot/package/systemd/Config.in +++ b/bsp/buildroot/package/systemd/Config.in @@ -26,6 +26,7 @@ menuconfig BR2_PACKAGE_SYSTEMD select BR2_PACKAGE_KMOD select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # kmod-tools select BR2_PACKAGE_KMOD_TOOLS + select BR2_TARGET_TZ_INFO help systemd is a system and service manager for Linux, compatible with SysV and LSB init scripts. systemd provides aggressive parallelization diff --git a/bsp/buildroot/package/systemd/systemd.hash b/bsp/buildroot/package/systemd/systemd.hash index 4417fb3f..0acaa3cd 100644 --- a/bsp/buildroot/package/systemd/systemd.hash +++ b/bsp/buildroot/package/systemd/systemd.hash @@ -1,5 +1,2 @@ # sha256 locally computed sha256 1172c7c7d5d72fbded53186e7599d5272231f04cc8b72f9a0fb2c5c20dfc4880 systemd-232.tar.gz -sha256 eed8fef0045876e9efa0ba6725ed9ea93654bf24d67bb5aad467a341ad375883 a924f43f30f9c4acaf70618dd2a055f8b0f166be.patch -sha256 43c75bd161a8ef0de5db607aaceed77220f2ba4903cf44e7e9db544980420a5e db848813bae4d28c524b3b6a7dad135e426659ce.patch -sha256 451f7c09332479ebe4ac01612f5f034df4524e16b5bc5d1c8ddcda14e9f3cd69 88795538726a5bbfd9efc13d441cb05e1d7fc139.patch diff --git a/bsp/buildroot/package/systemd/systemd.mk b/bsp/buildroot/package/systemd/systemd.mk index 99827b6f..d5806741 100644 --- a/bsp/buildroot/package/systemd/systemd.mk +++ b/bsp/buildroot/package/systemd/systemd.mk @@ -19,11 +19,6 @@ SYSTEMD_DEPENDENCIES = \ SYSTEMD_PROVIDES = udev SYSTEMD_AUTORECONF = YES -SYSTEMD_PATCH = \ - https://github.com/systemd/systemd/commit/a924f43f30f9c4acaf70618dd2a055f8b0f166be.patch \ - https://github.com/systemd/systemd/commit/db848813bae4d28c524b3b6a7dad135e426659ce.patch \ - https://github.com/systemd/systemd/commit/88795538726a5bbfd9efc13d441cb05e1d7fc139.patch - # Make sure that systemd will always be built after busybox so that we have # a consistent init setup between two builds ifeq ($(BR2_PACKAGE_BUSYBOX),y) diff --git a/bsp/buildroot/package/tcpdump/tcpdump.hash b/bsp/buildroot/package/tcpdump/tcpdump.hash index 966db1f3..4eedc1c1 100644 --- a/bsp/buildroot/package/tcpdump/tcpdump.hash +++ b/bsp/buildroot/package/tcpdump/tcpdump.hash @@ -1,2 +1,2 @@ -# Locally calculated after checking pgp signature -sha256 eae98121cbb1c9adbedd9a777bf2eae9fa1c1c676424a54740311c8abcee5a5e tcpdump-4.9.0.tar.gz +# Locally calculated after checking pgp signature at http://www.tcpdump.org/release/tcpdump-4.9.1.tar.gz.sig +sha256 f9448cf4deb2049acf713655c736342662e652ef40dbe0a8f6f8d5b9ce5bd8f3 tcpdump-4.9.1.tar.gz diff --git a/bsp/buildroot/package/tcpdump/tcpdump.mk b/bsp/buildroot/package/tcpdump/tcpdump.mk index e71f9c11..ac710b8f 100644 --- a/bsp/buildroot/package/tcpdump/tcpdump.mk +++ b/bsp/buildroot/package/tcpdump/tcpdump.mk @@ -4,7 +4,7 @@ # ################################################################################ -TCPDUMP_VERSION = 4.9.0 +TCPDUMP_VERSION = 4.9.1 TCPDUMP_SITE = http://www.tcpdump.org/release TCPDUMP_LICENSE = BSD-3c TCPDUMP_LICENSE_FILES = LICENSE diff --git a/bsp/buildroot/package/tiff/0001-libtiff-tif_dirwrite.c-in-TIFFWriteDirectoryTagCheck.patch b/bsp/buildroot/package/tiff/0001-libtiff-tif_dirwrite.c-in-TIFFWriteDirectoryTagCheck.patch new file mode 100644 index 00000000..2be989b9 --- /dev/null +++ b/bsp/buildroot/package/tiff/0001-libtiff-tif_dirwrite.c-in-TIFFWriteDirectoryTagCheck.patch @@ -0,0 +1,70 @@ +From 6173a57d39e04d68b139f8c1aa499a24dbe74ba1 Mon Sep 17 00:00:00 2001 +From: Even Rouault +Date: Fri, 30 Jun 2017 17:29:44 +0000 +Subject: [PATCH] * libtiff/tif_dirwrite.c: in + TIFFWriteDirectoryTagCheckedXXXX() functions associated with LONG8/SLONG8 + data type, replace assertion that the file is BigTIFF, by a non-fatal error. + Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2712 Reported by team + OWL337 + +[Peter: drop ChangeLog modification] +Signed-off-by: Peter Korsgaard +--- + libtiff/tif_dirwrite.c | 20 ++++++++++++++++---- + 1 file changed, 23 insertions(+), 4 deletions(-) + +diff --git a/libtiff/tif_dirwrite.c b/libtiff/tif_dirwrite.c +index 2967da58..8d6686ba 100644 +--- a/libtiff/tif_dirwrite.c ++++ b/libtiff/tif_dirwrite.c +@@ -2111,7 +2111,10 @@ TIFFWriteDirectoryTagCheckedLong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, ui + { + uint64 m; + assert(sizeof(uint64)==8); +- assert(tif->tif_flags&TIFF_BIGTIFF); ++ if( !(tif->tif_flags&TIFF_BIGTIFF) ) { ++ TIFFErrorExt(tif->tif_clientdata,"TIFFWriteDirectoryTagCheckedLong8","LONG8 not allowed for ClassicTIFF"); ++ return(0); ++ } + m=value; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8(&m); +@@ -2124,7 +2127,10 @@ TIFFWriteDirectoryTagCheckedLong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* di + { + assert(count<0x20000000); + assert(sizeof(uint64)==8); +- assert(tif->tif_flags&TIFF_BIGTIFF); ++ if( !(tif->tif_flags&TIFF_BIGTIFF) ) { ++ TIFFErrorExt(tif->tif_clientdata,"TIFFWriteDirectoryTagCheckedLong8","LONG8 not allowed for ClassicTIFF"); ++ return(0); ++ } + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong8(value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_LONG8,count,count*8,value)); +@@ -2136,7 +2142,10 @@ TIFFWriteDirectoryTagCheckedSlong8(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, u + { + int64 m; + assert(sizeof(int64)==8); +- assert(tif->tif_flags&TIFF_BIGTIFF); ++ if( !(tif->tif_flags&TIFF_BIGTIFF) ) { ++ TIFFErrorExt(tif->tif_clientdata,"TIFFWriteDirectoryTagCheckedLong8","SLONG8 not allowed for ClassicTIFF"); ++ return(0); ++ } + m=value; + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabLong8((uint64*)(&m)); +@@ -2149,7 +2158,10 @@ TIFFWriteDirectoryTagCheckedSlong8Array(TIFF* tif, uint32* ndir, TIFFDirEntry* d + { + assert(count<0x20000000); + assert(sizeof(int64)==8); +- assert(tif->tif_flags&TIFF_BIGTIFF); ++ if( !(tif->tif_flags&TIFF_BIGTIFF) ) { ++ TIFFErrorExt(tif->tif_clientdata,"TIFFWriteDirectoryTagCheckedLong8","SLONG8 not allowed for ClassicTIFF"); ++ return(0); ++ } + if (tif->tif_flags&TIFF_SWAB) + TIFFSwabArrayOfLong8((uint64*)value,count); + return(TIFFWriteDirectoryTagData(tif,ndir,dir,tag,TIFF_SLONG8,count,count*8,value)); +-- +2.11.0 + diff --git a/bsp/buildroot/package/tiff/0001-libtiff-tif_read.c-libtiff-tiffiop.h-fix-uint32-over.patch b/bsp/buildroot/package/tiff/0001-libtiff-tif_read.c-libtiff-tiffiop.h-fix-uint32-over.patch deleted file mode 100644 index 9df4577e..00000000 --- a/bsp/buildroot/package/tiff/0001-libtiff-tif_read.c-libtiff-tiffiop.h-fix-uint32-over.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 438274f938e046d33cb0e1230b41da32ffe223e1 Mon Sep 17 00:00:00 2001 -From: erouault -Date: Fri, 2 Dec 2016 21:56:56 +0000 -Subject: [PATCH] * libtiff/tif_read.c, libtiff/tiffiop.h: fix uint32 overflow - in TIFFReadEncodedStrip() that caused an integer division by zero. Reported - by Agostino Sarubbo. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2596 - -Fixes CVE-2016-10266 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_read.c | 2 +- - libtiff/tiffiop.h | 4 ++++ - 2 files changed, 12 insertions(+), 1 deletion(-) - -diff --git a/libtiff/tif_read.c b/libtiff/tif_read.c -index c26c55f4..52bbf507 100644 ---- a/libtiff/tif_read.c -+++ b/libtiff/tif_read.c -@@ -346,7 +346,7 @@ TIFFReadEncodedStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size) - rowsperstrip=td->td_rowsperstrip; - if (rowsperstrip>td->td_imagelength) - rowsperstrip=td->td_imagelength; -- stripsperplane=((td->td_imagelength+rowsperstrip-1)/rowsperstrip); -+ stripsperplane= TIFFhowmany_32_maxuint_compat(td->td_imagelength, rowsperstrip); - stripinplane=(strip%stripsperplane); - plane=(uint16)(strip/stripsperplane); - rows=td->td_imagelength-stripinplane*rowsperstrip; -diff --git a/libtiff/tiffiop.h b/libtiff/tiffiop.h -index ffbb647b..cb59460a 100644 ---- a/libtiff/tiffiop.h -+++ b/libtiff/tiffiop.h -@@ -250,6 +250,10 @@ struct tiff { - #define TIFFhowmany_32(x, y) (((uint32)x < (0xffffffff - (uint32)(y-1))) ? \ - ((((uint32)(x))+(((uint32)(y))-1))/((uint32)(y))) : \ - 0U) -+/* Variant of TIFFhowmany_32() that doesn't return 0 if x close to MAXUINT. */ -+/* Caution: TIFFhowmany_32_maxuint_compat(x,y)*y might overflow */ -+#define TIFFhowmany_32_maxuint_compat(x, y) \ -+ (((uint32)(x) / (uint32)(y)) + ((((uint32)(x) % (uint32)(y)) != 0) ? 1 : 0)) - #define TIFFhowmany8_32(x) (((x)&0x07)?((uint32)(x)>>3)+1:(uint32)(x)>>3) - #define TIFFroundup_32(x, y) (TIFFhowmany_32(x,y)*(y)) - #define TIFFhowmany_64(x, y) ((((uint64)(x))+(((uint64)(y))-1))/((uint64)(y))) --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0002-libtiff-tif_ojpeg.c-make-OJPEGDecode-early-exit-in-c.patch b/bsp/buildroot/package/tiff/0002-libtiff-tif_ojpeg.c-make-OJPEGDecode-early-exit-in-c.patch deleted file mode 100644 index d99b9007..00000000 --- a/bsp/buildroot/package/tiff/0002-libtiff-tif_ojpeg.c-make-OJPEGDecode-early-exit-in-c.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 43bc256d8ae44b92d2734a3c5bc73957a4d7c1ec Mon Sep 17 00:00:00 2001 -From: erouault -Date: Sat, 3 Dec 2016 11:15:18 +0000 -Subject: [PATCH] * libtiff/tif_ojpeg.c: make OJPEGDecode() early exit in case - of failure in OJPEGPreDecode(). This will avoid a divide by zero, and - potential other issues. Reported by Agostino Sarubbo. Fixes - http://bugzilla.maptools.org/show_bug.cgi?id=2611 - -Fixes CVE-2016-10267 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_ojpeg.c | 8 ++++++++ - 1 files changed, 15 insertions(+) - -diff --git a/libtiff/tif_ojpeg.c b/libtiff/tif_ojpeg.c -index 1ccc3f9b..f19e8fd0 100644 ---- a/libtiff/tif_ojpeg.c -+++ b/libtiff/tif_ojpeg.c -@@ -244,6 +244,7 @@ typedef enum { - - typedef struct { - TIFF* tif; -+ int decoder_ok; - #ifndef LIBJPEG_ENCAP_EXTERNAL - JMP_BUF exit_jmpbuf; - #endif -@@ -722,6 +723,7 @@ OJPEGPreDecode(TIFF* tif, uint16 s) - } - sp->write_curstrile++; - } -+ sp->decoder_ok = 1; - return(1); - } - -@@ -784,8 +786,14 @@ OJPEGPreDecodeSkipScanlines(TIFF* tif) - static int - OJPEGDecode(TIFF* tif, uint8* buf, tmsize_t cc, uint16 s) - { -+ static const char module[]="OJPEGDecode"; - OJPEGState* sp=(OJPEGState*)tif->tif_data; - (void)s; -+ if( !sp->decoder_ok ) -+ { -+ TIFFErrorExt(tif->tif_clientdata,module,"Cannot decode: decoder not correctly initialized"); -+ return 0; -+ } - if (sp->libjpeg_jpeg_query_style==0) - { - if (OJPEGDecodeRaw(tif,buf,cc)==0) --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0003-libtiff-tif_pixarlog.c-libtiff-tif_luv.c-fix-heap-ba.patch b/bsp/buildroot/package/tiff/0003-libtiff-tif_pixarlog.c-libtiff-tif_luv.c-fix-heap-ba.patch deleted file mode 100644 index 290834ec..00000000 --- a/bsp/buildroot/package/tiff/0003-libtiff-tif_pixarlog.c-libtiff-tif_luv.c-fix-heap-ba.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 1044b43637fa7f70fb19b93593777b78bd20da86 Mon Sep 17 00:00:00 2001 -From: erouault -Date: Fri, 2 Dec 2016 23:05:51 +0000 -Subject: [PATCH] * libtiff/tif_pixarlog.c, libtiff/tif_luv.c: fix heap-based - buffer overflow on generation of PixarLog / LUV compressed files, with - ColorMap, TransferFunction attached and nasty plays with bitspersample. The - fix for LUV has not been tested, but suffers from the same kind of issue of - PixarLog. Reported by Agostino Sarubbo. Fixes - http://bugzilla.maptools.org/show_bug.cgi?id=2604 - -Fixes CVE-2016-10269 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_luv.c | 18 ++++++++++++++---- - libtiff/tif_pixarlog.c | 17 +++++++++++++++-- - 2 files changed, 39 insertions(+), 6 deletions(-) - -diff --git a/libtiff/tif_luv.c b/libtiff/tif_luv.c -index f68a9b13..e6783db5 100644 ---- a/libtiff/tif_luv.c -+++ b/libtiff/tif_luv.c -@@ -158,6 +158,7 @@ - typedef struct logLuvState LogLuvState; - - struct logLuvState { -+ int encoder_state; /* 1 if encoder correctly initialized */ - int user_datafmt; /* user data format */ - int encode_meth; /* encoding method */ - int pixel_size; /* bytes per pixel */ -@@ -1552,6 +1553,7 @@ LogLuvSetupEncode(TIFF* tif) - td->td_photometric, "must be either LogLUV or LogL"); - break; - } -+ sp->encoder_state = 1; - return (1); - notsupported: - TIFFErrorExt(tif->tif_clientdata, module, -@@ -1563,19 +1565,27 @@ notsupported: - static void - LogLuvClose(TIFF* tif) - { -+ LogLuvState* sp = (LogLuvState*) tif->tif_data; - TIFFDirectory *td = &tif->tif_dir; - -+ assert(sp != 0); - /* - * For consistency, we always want to write out the same - * bitspersample and sampleformat for our TIFF file, - * regardless of the data format being used by the application. - * Since this routine is called after tags have been set but - * before they have been recorded in the file, we reset them here. -+ * Note: this is really a nasty approach. See PixarLogClose - */ -- td->td_samplesperpixel = -- (td->td_photometric == PHOTOMETRIC_LOGL) ? 1 : 3; -- td->td_bitspersample = 16; -- td->td_sampleformat = SAMPLEFORMAT_INT; -+ if( sp->encoder_state ) -+ { -+ /* See PixarLogClose. Might avoid issues with tags whose size depends -+ * on those below, but not completely sure this is enough. */ -+ td->td_samplesperpixel = -+ (td->td_photometric == PHOTOMETRIC_LOGL) ? 1 : 3; -+ td->td_bitspersample = 16; -+ td->td_sampleformat = SAMPLEFORMAT_INT; -+ } - } - - static void -diff --git a/libtiff/tif_pixarlog.c b/libtiff/tif_pixarlog.c -index d1246c3d..aa99bc92 100644 ---- a/libtiff/tif_pixarlog.c -+++ b/libtiff/tif_pixarlog.c -@@ -1233,8 +1233,10 @@ PixarLogPostEncode(TIFF* tif) - static void - PixarLogClose(TIFF* tif) - { -+ PixarLogState* sp = (PixarLogState*) tif->tif_data; - TIFFDirectory *td = &tif->tif_dir; - -+ assert(sp != 0); - /* In a really sneaky (and really incorrect, and untruthful, and - * troublesome, and error-prone) maneuver that completely goes against - * the spirit of TIFF, and breaks TIFF, on close, we covertly -@@ -1243,8 +1245,19 @@ PixarLogClose(TIFF* tif) - * readers that don't know about PixarLog, or how to set - * the PIXARLOGDATFMT pseudo-tag. - */ -- td->td_bitspersample = 8; -- td->td_sampleformat = SAMPLEFORMAT_UINT; -+ -+ if (sp->state&PLSTATE_INIT) { -+ /* We test the state to avoid an issue such as in -+ * http://bugzilla.maptools.org/show_bug.cgi?id=2604 -+ * What appends in that case is that the bitspersample is 1 and -+ * a TransferFunction is set. The size of the TransferFunction -+ * depends on 1<td_bitspersample = 8; -+ td->td_sampleformat = SAMPLEFORMAT_UINT; -+ } - } - - static void --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0004-libtiff-tif_dirread.c-modify-ChopUpSingleUncompresse.patch b/bsp/buildroot/package/tiff/0004-libtiff-tif_dirread.c-modify-ChopUpSingleUncompresse.patch deleted file mode 100644 index a24d5d84..00000000 --- a/bsp/buildroot/package/tiff/0004-libtiff-tif_dirread.c-modify-ChopUpSingleUncompresse.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 9a72a69e035ee70ff5c41541c8c61cd97990d018 Mon Sep 17 00:00:00 2001 -From: erouault -Date: Sat, 3 Dec 2016 11:02:15 +0000 -Subject: [PATCH] * libtiff/tif_dirread.c: modify - ChopUpSingleUncompressedStrip() to instanciate compute ntrips as - TIFFhowmany_32(td->td_imagelength, rowsperstrip), instead of a logic based on - the total size of data. Which is faulty is the total size of data is not - sufficient to fill the whole image, and thus results in reading outside of - the StripByCounts/StripOffsets arrays when using TIFFReadScanline(). Reported - by Agostino Sarubbo. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2608. - -* libtiff/tif_strip.c: revert the change in TIFFNumberOfStrips() done -for http://bugzilla.maptools.org/show_bug.cgi?id=2587 / CVE-2016-9273 since -the above change is a better fix that makes it unnecessary. - -Fixes CVE-2016-10270 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_dirread.c | 22 ++++++++++------------ - libtiff/tif_strip.c | 9 --------- - 2 files changed, 25 insertions(+), 21 deletions(-) - -diff --git a/libtiff/tif_dirread.c b/libtiff/tif_dirread.c -index 3eec79c9..570d0c32 100644 ---- a/libtiff/tif_dirread.c -+++ b/libtiff/tif_dirread.c -@@ -5502,8 +5502,7 @@ ChopUpSingleUncompressedStrip(TIFF* tif) - uint64 rowblockbytes; - uint64 stripbytes; - uint32 strip; -- uint64 nstrips64; -- uint32 nstrips32; -+ uint32 nstrips; - uint32 rowsperstrip; - uint64* newcounts; - uint64* newoffsets; -@@ -5534,18 +5533,17 @@ ChopUpSingleUncompressedStrip(TIFF* tif) - return; - - /* -- * never increase the number of strips in an image -+ * never increase the number of rows per strip - */ - if (rowsperstrip >= td->td_rowsperstrip) - return; -- nstrips64 = TIFFhowmany_64(bytecount, stripbytes); -- if ((nstrips64==0)||(nstrips64>0xFFFFFFFF)) /* something is wonky, do nothing. */ -- return; -- nstrips32 = (uint32)nstrips64; -+ nstrips = TIFFhowmany_32(td->td_imagelength, rowsperstrip); -+ if( nstrips == 0 ) -+ return; - -- newcounts = (uint64*) _TIFFCheckMalloc(tif, nstrips32, sizeof (uint64), -+ newcounts = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64), - "for chopped \"StripByteCounts\" array"); -- newoffsets = (uint64*) _TIFFCheckMalloc(tif, nstrips32, sizeof (uint64), -+ newoffsets = (uint64*) _TIFFCheckMalloc(tif, nstrips, sizeof (uint64), - "for chopped \"StripOffsets\" array"); - if (newcounts == NULL || newoffsets == NULL) { - /* -@@ -5562,18 +5560,18 @@ ChopUpSingleUncompressedStrip(TIFF* tif) - * Fill the strip information arrays with new bytecounts and offsets - * that reflect the broken-up format. - */ -- for (strip = 0; strip < nstrips32; strip++) { -+ for (strip = 0; strip < nstrips; strip++) { - if (stripbytes > bytecount) - stripbytes = bytecount; - newcounts[strip] = stripbytes; -- newoffsets[strip] = offset; -+ newoffsets[strip] = stripbytes ? offset : 0; - offset += stripbytes; - bytecount -= stripbytes; - } - /* - * Replace old single strip info with multi-strip info. - */ -- td->td_stripsperimage = td->td_nstrips = nstrips32; -+ td->td_stripsperimage = td->td_nstrips = nstrips; - TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, rowsperstrip); - - _TIFFfree(td->td_stripbytecount); -diff --git a/libtiff/tif_strip.c b/libtiff/tif_strip.c -index 4c46ecf5..1676e47d 100644 ---- a/libtiff/tif_strip.c -+++ b/libtiff/tif_strip.c -@@ -63,15 +63,6 @@ TIFFNumberOfStrips(TIFF* tif) - TIFFDirectory *td = &tif->tif_dir; - uint32 nstrips; - -- /* If the value was already computed and store in td_nstrips, then return it, -- since ChopUpSingleUncompressedStrip might have altered and resized the -- since the td_stripbytecount and td_stripoffset arrays to the new value -- after the initial affectation of td_nstrips = TIFFNumberOfStrips() in -- tif_dirread.c ~line 3612. -- See http://bugzilla.maptools.org/show_bug.cgi?id=2587 */ -- if( td->td_nstrips ) -- return td->td_nstrips; -- - nstrips = (td->td_rowsperstrip == (uint32) -1 ? 1 : - TIFFhowmany_32(td->td_imagelength, td->td_rowsperstrip)); - if (td->td_planarconfig == PLANARCONFIG_SEPARATE) --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0005-tools-tiffcp.c-error-out-cleanly-in-cpContig2Separat.patch b/bsp/buildroot/package/tiff/0005-tools-tiffcp.c-error-out-cleanly-in-cpContig2Separat.patch deleted file mode 100644 index c93be89e..00000000 --- a/bsp/buildroot/package/tiff/0005-tools-tiffcp.c-error-out-cleanly-in-cpContig2Separat.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 5c080298d59efa53264d7248bbe3a04660db6ef7 Mon Sep 17 00:00:00 2001 -From: erouault -Date: Wed, 11 Jan 2017 19:25:44 +0000 -Subject: [PATCH] * tools/tiffcp.c: error out cleanly in cpContig2SeparateByRow - and cpSeparate2ContigByRow if BitsPerSample != 8 to avoid heap based - overflow. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2656 and - http://bugzilla.maptools.org/show_bug.cgi?id=2657 - -Fixes CVE-2017-5225 - -Signed-off-by: Peter Korsgaard ---- - tools/tiffcp.c | 24 ++++++++++++++++++++++-- - 1 file changed, 29 insertions(+), 2 deletions(-) - -diff --git a/tools/tiffcp.c b/tools/tiffcp.c -index bdf754c3..8bbcd52f 100644 ---- a/tools/tiffcp.c -+++ b/tools/tiffcp.c -@@ -591,7 +591,7 @@ static copyFunc pickCopyFunc(TIFF*, TIFF*, uint16, uint16); - static int - tiffcp(TIFF* in, TIFF* out) - { -- uint16 bitspersample, samplesperpixel = 1; -+ uint16 bitspersample = 1, samplesperpixel = 1; - uint16 input_compression, input_photometric = PHOTOMETRIC_MINISBLACK; - copyFunc cf; - uint32 width, length; -@@ -1067,6 +1067,16 @@ DECLAREcpFunc(cpContig2SeparateByRow) - register uint32 n; - uint32 row; - tsample_t s; -+ uint16 bps = 0; -+ -+ (void) TIFFGetField(in, TIFFTAG_BITSPERSAMPLE, &bps); -+ if( bps != 8 ) -+ { -+ TIFFError(TIFFFileName(in), -+ "Error, can only handle BitsPerSample=8 in %s", -+ "cpContig2SeparateByRow"); -+ return 0; -+ } - - inbuf = _TIFFmalloc(scanlinesizein); - outbuf = _TIFFmalloc(scanlinesizeout); -@@ -1120,6 +1130,16 @@ DECLAREcpFunc(cpSeparate2ContigByRow) - register uint32 n; - uint32 row; - tsample_t s; -+ uint16 bps = 0; -+ -+ (void) TIFFGetField(in, TIFFTAG_BITSPERSAMPLE, &bps); -+ if( bps != 8 ) -+ { -+ TIFFError(TIFFFileName(in), -+ "Error, can only handle BitsPerSample=8 in %s", -+ "cpSeparate2ContigByRow"); -+ return 0; -+ } - - inbuf = _TIFFmalloc(scanlinesizein); - outbuf = _TIFFmalloc(scanlinesizeout); -@@ -1784,7 +1804,7 @@ pickCopyFunc(TIFF* in, TIFF* out, uint16 bitspersample, uint16 samplesperpixel) - uint32 w, l, tw, tl; - int bychunk; - -- (void) TIFFGetField(in, TIFFTAG_PLANARCONFIG, &shortv); -+ (void) TIFFGetFieldDefaulted(in, TIFFTAG_PLANARCONFIG, &shortv); - if (shortv != config && bitspersample != 8 && samplesperpixel > 1) { - fprintf(stderr, - "%s: Cannot handle different planar configuration w/ bits/sample != 8\n", --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0006-libtiff-tif_getimage.c-add-explicit-uint32-cast-in-p.patch b/bsp/buildroot/package/tiff/0006-libtiff-tif_getimage.c-add-explicit-uint32-cast-in-p.patch deleted file mode 100644 index b3d8a40b..00000000 --- a/bsp/buildroot/package/tiff/0006-libtiff-tif_getimage.c-add-explicit-uint32-cast-in-p.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 48780b4fcc425cddc4ef8ffdf536f96a0d1b313b Mon Sep 17 00:00:00 2001 -From: erouault -Date: Wed, 11 Jan 2017 16:38:26 +0000 -Subject: [PATCH] libtiff/tif_getimage.c: add explicit uint32 cast in putagreytile to - avoid UndefinedBehaviorSanitizer warning. - Patch by Nicolás Peña. - Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2658 - -Fixes CVE-2017-7592 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_getimage.c | 2 +- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/libtiff/tif_getimage.c b/libtiff/tif_getimage.c -index fed31f1f..2fa1775c 100644 ---- a/libtiff/tif_getimage.c -+++ b/libtiff/tif_getimage.c -@@ -1302,7 +1302,7 @@ DECLAREContigPutFunc(putagreytile) - while (h-- > 0) { - for (x = w; x-- > 0;) - { -- *cp++ = BWmap[*pp][0] & (*(pp+1) << 24 | ~A1); -+ *cp++ = BWmap[*pp][0] & ((uint32)*(pp+1) << 24 | ~A1); - pp += samplesperpixel; - } - cp += toskew; --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0007-libtiff-tiffiop.h-tif_unix.c-tif_win32.c-tif_vms.c-a.patch b/bsp/buildroot/package/tiff/0007-libtiff-tiffiop.h-tif_unix.c-tif_win32.c-tif_vms.c-a.patch deleted file mode 100644 index ec45bbe1..00000000 --- a/bsp/buildroot/package/tiff/0007-libtiff-tiffiop.h-tif_unix.c-tif_win32.c-tif_vms.c-a.patch +++ /dev/null @@ -1,88 +0,0 @@ -From d60332057b9575ada4f264489582b13e30137be1 Mon Sep 17 00:00:00 2001 -From: erouault -Date: Wed, 11 Jan 2017 19:02:49 +0000 -Subject: [PATCH] * libtiff/tiffiop.h, tif_unix.c, tif_win32.c, tif_vms.c: add - _TIFFcalloc() - -* libtiff/tif_read.c: TIFFReadBufferSetup(): use _TIFFcalloc() to zero -initialize tif_rawdata. -Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2651 - -Fixes CVE-2017-7593 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_read.c | 4 +++- - libtiff/tif_unix.c | 8 ++++++++ - libtiff/tif_win32.c | 8 ++++++++ - libtiff/tiffio.h | 1 + - 4 files changed, 36 insertions(+), 1 deletion(-) - -diff --git a/libtiff/tif_read.c b/libtiff/tif_read.c -index 277fdd69..4535ccb3 100644 ---- a/libtiff/tif_read.c -+++ b/libtiff/tif_read.c -@@ -985,7 +985,9 @@ TIFFReadBufferSetup(TIFF* tif, void* bp, tmsize_t size) - "Invalid buffer size"); - return (0); - } -- tif->tif_rawdata = (uint8*) _TIFFmalloc(tif->tif_rawdatasize); -+ /* Initialize to zero to avoid uninitialized buffers in case of */ -+ /* short reads (http://bugzilla.maptools.org/show_bug.cgi?id=2651) */ -+ tif->tif_rawdata = (uint8*) _TIFFcalloc(1, tif->tif_rawdatasize); - tif->tif_flags |= TIFF_MYBUFFER; - } - if (tif->tif_rawdata == NULL) { -diff --git a/libtiff/tif_unix.c b/libtiff/tif_unix.c -index 7c7bc961..89dd32e8 100644 ---- a/libtiff/tif_unix.c -+++ b/libtiff/tif_unix.c -@@ -316,6 +316,14 @@ _TIFFmalloc(tmsize_t s) - return (malloc((size_t) s)); - } - -+void* _TIFFcalloc(tmsize_t nmemb, tmsize_t siz) -+{ -+ if( nmemb == 0 || siz == 0 ) -+ return ((void *) NULL); -+ -+ return calloc((size_t) nmemb, (size_t)siz); -+} -+ - void - _TIFFfree(void* p) - { -diff --git a/libtiff/tif_win32.c b/libtiff/tif_win32.c -index d730b3ab..3e9001b7 100644 ---- a/libtiff/tif_win32.c -+++ b/libtiff/tif_win32.c -@@ -360,6 +360,14 @@ _TIFFmalloc(tmsize_t s) - return (malloc((size_t) s)); - } - -+void* _TIFFcalloc(tmsize_t nmemb, tmsize_t siz) -+{ -+ if( nmemb == 0 || siz == 0 ) -+ return ((void *) NULL); -+ -+ return calloc((size_t) nmemb, (size_t)siz); -+} -+ - void - _TIFFfree(void* p) - { -diff --git a/libtiff/tiffio.h b/libtiff/tiffio.h -index 732da17f..fbd9171f 100644 ---- a/libtiff/tiffio.h -+++ b/libtiff/tiffio.h -@@ -293,6 +293,7 @@ extern TIFFCodec* TIFFGetConfiguredCODECs(void); - */ - - extern void* _TIFFmalloc(tmsize_t s); -+extern void* _TIFFcalloc(tmsize_t nmemb, tmsize_t siz); - extern void* _TIFFrealloc(void* p, tmsize_t s); - extern void _TIFFmemset(void* p, int v, tmsize_t c); - extern void _TIFFmemcpy(void* d, const void* s, tmsize_t c); --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0008-libtiff-tif_ojpeg.c-fix-leak-in-OJPEGReadHeaderInfoS.patch b/bsp/buildroot/package/tiff/0008-libtiff-tif_ojpeg.c-fix-leak-in-OJPEGReadHeaderInfoS.patch deleted file mode 100644 index 418a3d69..00000000 --- a/bsp/buildroot/package/tiff/0008-libtiff-tif_ojpeg.c-fix-leak-in-OJPEGReadHeaderInfoS.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 2ea32f7372b65c24b2816f11c04bf59b5090d05b Mon Sep 17 00:00:00 2001 -From: erouault -Date: Thu, 12 Jan 2017 19:23:20 +0000 -Subject: [PATCH] * libtiff/tif_ojpeg.c: fix leak in - OJPEGReadHeaderInfoSecTablesQTable, OJPEGReadHeaderInfoSecTablesDcTable and - OJPEGReadHeaderInfoSecTablesAcTable - -Fixes CVE-2017-7594 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_ojpeg.c | 6 ++++++ - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/libtiff/tif_ojpeg.c b/libtiff/tif_ojpeg.c -index b92f0ebd..5f6c684c 100644 ---- a/libtiff/tif_ojpeg.c -+++ b/libtiff/tif_ojpeg.c -@@ -1790,7 +1790,10 @@ OJPEGReadHeaderInfoSecTablesQTable(TIFF* tif) - TIFFSeekFile(tif,sp->qtable_offset[m],SEEK_SET); - p=(uint32)TIFFReadFile(tif,&ob[sizeof(uint32)+5],64); - if (p!=64) -+ { -+ _TIFFfree(ob); - return(0); -+ } - sp->qtable[m]=ob; - sp->sof_tq[m]=m; - } -@@ -1854,7 +1857,10 @@ OJPEGReadHeaderInfoSecTablesDcTable(TIFF* tif) - rb[sizeof(uint32)+5+n]=o[n]; - p=(uint32)TIFFReadFile(tif,&(rb[sizeof(uint32)+21]),q); - if (p!=q) -+ { -+ _TIFFfree(rb); - return(0); -+ } - sp->dctable[m]=rb; - sp->sos_tda[m]=(m<<4); - } --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0009-libtiff-tif_ojpeg.c-fix-leak-in-OJPEGReadHeaderInfoS.patch b/bsp/buildroot/package/tiff/0009-libtiff-tif_ojpeg.c-fix-leak-in-OJPEGReadHeaderInfoS.patch deleted file mode 100644 index a1aae2dc..00000000 --- a/bsp/buildroot/package/tiff/0009-libtiff-tif_ojpeg.c-fix-leak-in-OJPEGReadHeaderInfoS.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 8283e4d1b7e53340684d12932880cbcbaf23a8c1 Mon Sep 17 00:00:00 2001 -From: erouault -Date: Thu, 12 Jan 2017 17:43:25 +0000 -Subject: [PATCH] libtiff/tif_ojpeg.c: fix leak in - OJPEGReadHeaderInfoSecTablesAcTable when read fails. - Patch by Nicolás Peña. - Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2659 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Fixes CVE-2017-7594 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_ojpeg.c | 3 +++ - 1 file changed, 10 insertions(+) - -diff --git a/libtiff/tif_ojpeg.c b/libtiff/tif_ojpeg.c -index f19e8fd0..b92f0ebd 100644 ---- a/libtiff/tif_ojpeg.c -+++ b/libtiff/tif_ojpeg.c -@@ -1918,7 +1918,10 @@ OJPEGReadHeaderInfoSecTablesAcTable(TIFF* tif) - rb[sizeof(uint32)+5+n]=o[n]; - p=(uint32)TIFFReadFile(tif,&(rb[sizeof(uint32)+21]),q); - if (p!=q) -+ { -+ _TIFFfree(rb); - return(0); -+ } - sp->actable[m]=rb; - sp->sos_tda[m]=(sp->sos_tda[m]|m); - } --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0010-libtiff-tif_jpeg.c-avoid-integer-division-by-zero-in.patch b/bsp/buildroot/package/tiff/0010-libtiff-tif_jpeg.c-avoid-integer-division-by-zero-in.patch deleted file mode 100644 index 862aae2a..00000000 --- a/bsp/buildroot/package/tiff/0010-libtiff-tif_jpeg.c-avoid-integer-division-by-zero-in.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 47f2fb61a3a64667bce1a8398a8fcb1b348ff122 Mon Sep 17 00:00:00 2001 -From: erouault -Date: Wed, 11 Jan 2017 12:15:01 +0000 -Subject: [PATCH] * libtiff/tif_jpeg.c: avoid integer division by zero in - JPEGSetupEncode() when horizontal or vertical sampling is set to 0. Fixes - http://bugzilla.maptools.org/show_bug.cgi?id=2653 - -Fixes CVE-2017-7595 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_jpeg.c | 7 +++++++ - 1 file changed, 13 insertions(+) - -diff --git a/libtiff/tif_jpeg.c b/libtiff/tif_jpeg.c -index 38595f98..6c17c388 100644 ---- a/libtiff/tif_jpeg.c -+++ b/libtiff/tif_jpeg.c -@@ -1626,6 +1626,13 @@ JPEGSetupEncode(TIFF* tif) - case PHOTOMETRIC_YCBCR: - sp->h_sampling = td->td_ycbcrsubsampling[0]; - sp->v_sampling = td->td_ycbcrsubsampling[1]; -+ if( sp->h_sampling == 0 || sp->v_sampling == 0 ) -+ { -+ TIFFErrorExt(tif->tif_clientdata, module, -+ "Invalig horizontal/vertical sampling value"); -+ return (0); -+ } -+ - /* - * A ReferenceBlackWhite field *must* be present since the - * default value is inappropriate for YCbCr. Fill in the --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0011-libtiff-tif_dirread.c-avoid-division-by-floating-poi.patch b/bsp/buildroot/package/tiff/0011-libtiff-tif_dirread.c-avoid-division-by-floating-poi.patch deleted file mode 100644 index c0c94291..00000000 --- a/bsp/buildroot/package/tiff/0011-libtiff-tif_dirread.c-avoid-division-by-floating-poi.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 3cfd62d77c2a7e147a05bd678524c345fa9c2bb8 Mon Sep 17 00:00:00 2001 -From: erouault -Date: Wed, 11 Jan 2017 13:28:01 +0000 -Subject: [PATCH] * libtiff/tif_dirread.c: avoid division by floating point 0 - in TIFFReadDirEntryCheckedRational() and TIFFReadDirEntryCheckedSrational(), - and return 0 in that case (instead of infinity as before presumably) - Apparently some sanitizers do not like those divisions by zero. Fixes - http://bugzilla.maptools.org/show_bug.cgi?id=2644 - -Fixes CVE-2017-7598 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_dirread.c | 10 ++++++++-- - 1 file changed, 16 insertions(+), 2 deletions(-) - -diff --git a/libtiff/tif_dirread.c b/libtiff/tif_dirread.c -index 570d0c32..8a1e42aa 100644 ---- a/libtiff/tif_dirread.c -+++ b/libtiff/tif_dirread.c -@@ -2872,7 +2872,10 @@ static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedRational(TIFF* tif, TIFFD - m.l = direntry->tdir_offset.toff_long8; - if (tif->tif_flags&TIFF_SWAB) - TIFFSwabArrayOfLong(m.i,2); -- if (m.i[0]==0) -+ /* Not completely sure what we should do when m.i[1]==0, but some */ -+ /* sanitizers do not like division by 0.0: */ -+ /* http://bugzilla.maptools.org/show_bug.cgi?id=2644 */ -+ if (m.i[0]==0 || m.i[1]==0) - *value=0.0; - else - *value=(double)m.i[0]/(double)m.i[1]; -@@ -2900,7 +2903,10 @@ static enum TIFFReadDirEntryErr TIFFReadDirEntryCheckedSrational(TIFF* tif, TIFF - m.l=direntry->tdir_offset.toff_long8; - if (tif->tif_flags&TIFF_SWAB) - TIFFSwabArrayOfLong(m.i,2); -- if ((int32)m.i[0]==0) -+ /* Not completely sure what we should do when m.i[1]==0, but some */ -+ /* sanitizers do not like division by 0.0: */ -+ /* http://bugzilla.maptools.org/show_bug.cgi?id=2644 */ -+ if ((int32)m.i[0]==0 || m.i[1]==0) - *value=0.0; - else - *value=(double)((int32)m.i[0])/(double)m.i[1]; --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0012-libtiff-tif_jpeg.c-validate-BitsPerSample-in-JPEGSet.patch b/bsp/buildroot/package/tiff/0012-libtiff-tif_jpeg.c-validate-BitsPerSample-in-JPEGSet.patch deleted file mode 100644 index 4f46d9bb..00000000 --- a/bsp/buildroot/package/tiff/0012-libtiff-tif_jpeg.c-validate-BitsPerSample-in-JPEGSet.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 0a76a8c765c7b8327c59646284fa78c3c27e5490 Mon Sep 17 00:00:00 2001 -From: erouault -Date: Wed, 11 Jan 2017 16:13:50 +0000 -Subject: [PATCH] * libtiff/tif_jpeg.c: validate BitsPerSample in - JPEGSetupEncode() to avoid undefined behaviour caused by invalid shift - exponent. Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2648 - -Fixes CVE-2017-7601 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_jpeg.c | 7 +++++++ - 1 file changed, 13 insertions(+) - -diff --git a/libtiff/tif_jpeg.c b/libtiff/tif_jpeg.c -index 6c17c388..192989a9 100644 ---- a/libtiff/tif_jpeg.c -+++ b/libtiff/tif_jpeg.c -@@ -1632,6 +1632,13 @@ JPEGSetupEncode(TIFF* tif) - "Invalig horizontal/vertical sampling value"); - return (0); - } -+ if( td->td_bitspersample > 16 ) -+ { -+ TIFFErrorExt(tif->tif_clientdata, module, -+ "BitsPerSample %d not allowed for JPEG", -+ td->td_bitspersample); -+ return (0); -+ } - - /* - * A ReferenceBlackWhite field *must* be present since the --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/0013-libtiff-tif_read.c-avoid-potential-undefined-behavio.patch b/bsp/buildroot/package/tiff/0013-libtiff-tif_read.c-avoid-potential-undefined-behavio.patch deleted file mode 100644 index d049b130..00000000 --- a/bsp/buildroot/package/tiff/0013-libtiff-tif_read.c-avoid-potential-undefined-behavio.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 66e7bd59520996740e4df5495a830b42fae48bc4 Mon Sep 17 00:00:00 2001 -From: erouault -Date: Wed, 11 Jan 2017 16:33:34 +0000 -Subject: [PATCH] * libtiff/tif_read.c: avoid potential undefined behaviour on - signed integer addition in TIFFReadRawStrip1() in isMapped() case. Fixes - http://bugzilla.maptools.org/show_bug.cgi?id=2650 - -Fixes CVE-2017-7602 - -Signed-off-by: Peter Korsgaard ---- - libtiff/tif_read.c | 27 ++++++++++++++++++--------- - 1 file changed, 24 insertions(+), 9 deletions(-) - -diff --git a/libtiff/tif_read.c b/libtiff/tif_read.c -index 52bbf507..b7aacbda 100644 ---- a/libtiff/tif_read.c -+++ b/libtiff/tif_read.c -@@ -420,16 +420,25 @@ TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size, - return ((tmsize_t)(-1)); - } - } else { -- tmsize_t ma,mb; -+ tmsize_t ma; - tmsize_t n; -- ma=(tmsize_t)td->td_stripoffset[strip]; -- mb=ma+size; -- if ((td->td_stripoffset[strip] > (uint64)TIFF_TMSIZE_T_MAX)||(ma>tif->tif_size)) -- n=0; -- else if ((mbtif->tif_size)) -- n=tif->tif_size-ma; -- else -- n=size; -+ if ((td->td_stripoffset[strip] > (uint64)TIFF_TMSIZE_T_MAX)|| -+ ((ma=(tmsize_t)td->td_stripoffset[strip])>tif->tif_size)) -+ { -+ n=0; -+ } -+ else if( ma > TIFF_TMSIZE_T_MAX - size ) -+ { -+ n=0; -+ } -+ else -+ { -+ tmsize_t mb=ma+size; -+ if (mb>tif->tif_size) -+ n=tif->tif_size-ma; -+ else -+ n=size; -+ } - if (n!=size) { - #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) - TIFFErrorExt(tif->tif_clientdata, module, --- -2.11.0 - diff --git a/bsp/buildroot/package/tiff/tiff.hash b/bsp/buildroot/package/tiff/tiff.hash index 4439a35f..516cb062 100644 --- a/bsp/buildroot/package/tiff/tiff.hash +++ b/bsp/buildroot/package/tiff/tiff.hash @@ -1,2 +1,2 @@ # Locally computed -sha256 9f43a2cfb9589e5cecaa66e16bf87f814c945f22df7ba600d63aac4632c4f019 tiff-4.0.7.tar.gz +sha256 59d7a5a8ccd92059913f246877db95a2918e6c04fb9d43fd74e5c3390dac2910 tiff-4.0.8.tar.gz diff --git a/bsp/buildroot/package/tiff/tiff.mk b/bsp/buildroot/package/tiff/tiff.mk index ffb1a425..ad85a47a 100644 --- a/bsp/buildroot/package/tiff/tiff.mk +++ b/bsp/buildroot/package/tiff/tiff.mk @@ -4,7 +4,7 @@ # ################################################################################ -TIFF_VERSION = 4.0.7 +TIFF_VERSION = 4.0.8 TIFF_SITE = http://download.osgeo.org/libtiff TIFF_LICENSE = tiff license TIFF_LICENSE_FILES = COPYRIGHT diff --git a/bsp/buildroot/package/webkitgtk/0001-fix-gcc6-builds.patch b/bsp/buildroot/package/webkitgtk/0001-fix-gcc6-builds.patch deleted file mode 100644 index 35487ad5..00000000 --- a/bsp/buildroot/package/webkitgtk/0001-fix-gcc6-builds.patch +++ /dev/null @@ -1,53 +0,0 @@ -[CMake] Build failure with GCC 6 (fatal error: stdlib.h: No such file or directory) - -https://bugs.webkit.org/show_bug.cgi?id=161697 - -Reviewed by Michael Catanzaro. - -Get the list of system includes from GCC and add it to the CMake -list of implicit includes. This way, CMake will filter any of this -directories from the list of includes when calling the compiler. - -This avoids an issue with GCC 6 that causes build failures when -including the default include path as a system include (-isystem). - -Upstream, from: https://trac.webkit.org/changeset/205672 - -Signed-off-by: Gustavo Zacarias - -Index: trunk/Source/cmake/OptionsCommon.cmake -=================================================================== ---- trunk/Source/cmake/OptionsCommon.cmake (revision 204084) -+++ trunk/Source/cmake/OptionsCommon.cmake (revision 205672) -@@ -36,4 +36,31 @@ - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fcolor-diagnostics") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcolor-diagnostics") -+endif () -+ -+# Ensure that the default include system directories are added to the list of CMake implicit includes. -+# This workarounds an issue that happens when using GCC 6 and using system includes (-isystem). -+# For more details check: https://bugs.webkit.org/show_bug.cgi?id=161697 -+macro(DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang _compiler _flags _result) -+ file(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy" "\n") -+ separate_arguments(_buildFlags UNIX_COMMAND "${_flags}") -+ execute_process(COMMAND ${_compiler} ${_buildFlags} -v -E -x ${_lang} -dD dummy -+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles OUTPUT_QUIET -+ ERROR_VARIABLE _gccOutput) -+ file(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy") -+ if ("${_gccOutput}" MATCHES "> search starts here[^\n]+\n *(.+) *\n *End of (search) list") -+ set(${_result} ${CMAKE_MATCH_1}) -+ string(REPLACE "\n" " " ${_result} "${${_result}}") -+ separate_arguments(${_result}) -+ endif () -+endmacro() -+ -+if (CMAKE_COMPILER_IS_GNUCC) -+ DETERMINE_GCC_SYSTEM_INCLUDE_DIRS("c" "${CMAKE_C_COMPILER}" "${CMAKE_C_FLAGS}" SYSTEM_INCLUDE_DIRS) -+ set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES} ${SYSTEM_INCLUDE_DIRS}) -+endif () -+ -+if (CMAKE_COMPILER_IS_GNUCXX) -+ DETERMINE_GCC_SYSTEM_INCLUDE_DIRS("c++" "${CMAKE_CXX_COMPILER}" "${CMAKE_CXX_FLAGS}" SYSTEM_INCLUDE_DIRS) -+ set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES} ${SYSTEM_INCLUDE_DIRS}) - endif () - diff --git a/bsp/buildroot/package/webkitgtk/Config.in b/bsp/buildroot/package/webkitgtk/Config.in index 25f6fad4..7b50a13a 100644 --- a/bsp/buildroot/package/webkitgtk/Config.in +++ b/bsp/buildroot/package/webkitgtk/Config.in @@ -9,6 +9,7 @@ config BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS # Disabled on SuperH because of segfault depends on BR2_USE_MMU # libglib2 depends on BR2_TOOLCHAIN_HAS_SYNC_4 + depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt comment "webkitgtk needs libgtk3 and a glibc toolchain w/ C++, gcc >= 4.9" depends on BR2_PACKAGE_WEBKITGTK_ARCH_SUPPORTS @@ -30,6 +31,7 @@ config BR2_PACKAGE_WEBKITGTK select BR2_PACKAGE_HARFBUZZ select BR2_PACKAGE_ICU select BR2_PACKAGE_JPEG + select BR2_PACKAGE_LIBGCRYPT select BR2_PACKAGE_LIBSECRET select BR2_PACKAGE_LIBSOUP select BR2_PACKAGE_LIBXML2 diff --git a/bsp/buildroot/package/webkitgtk/webkitgtk.hash b/bsp/buildroot/package/webkitgtk/webkitgtk.hash index f01c7f0c..2c0fc506 100644 --- a/bsp/buildroot/package/webkitgtk/webkitgtk.hash +++ b/bsp/buildroot/package/webkitgtk/webkitgtk.hash @@ -1,4 +1,4 @@ -# From http://www.webkitgtk.org/releases/webkitgtk-2.12.5.tar.xz.sha1 -sha1 2d73fd5b47c68c73aea8b3d7b88acc8e62bdb99c webkitgtk-2.12.5.tar.xz -# Calculated based on the hash above -sha256 6b147854b864a5f115fadb97b2b6200b2f696db015216a34e7298d11c88b1c40 webkitgtk-2.12.5.tar.xz +# From https://webkitgtk.org/releases/webkitgtk-2.16.6.tar.xz.sums +md5 0e2d142a586e4ff79cf0324f4fdbf20c webkitgtk-2.16.6.tar.xz +sha1 f7fca3fbac3dc99e39f353a6df250635e684c922 webkitgtk-2.16.6.tar.xz +sha256 fc23650df953123c59b9c0edf3855e7bd55bd107820997fc72375811e1ea4b21 webkitgtk-2.16.6.tar.xz diff --git a/bsp/buildroot/package/webkitgtk/webkitgtk.mk b/bsp/buildroot/package/webkitgtk/webkitgtk.mk index 78433739..8329d52f 100644 --- a/bsp/buildroot/package/webkitgtk/webkitgtk.mk +++ b/bsp/buildroot/package/webkitgtk/webkitgtk.mk @@ -4,7 +4,7 @@ # ################################################################################ -WEBKITGTK_VERSION = 2.12.5 +WEBKITGTK_VERSION = 2.16.6 WEBKITGTK_SITE = http://www.webkitgtk.org/releases WEBKITGTK_SOURCE = webkitgtk-$(WEBKITGTK_VERSION).tar.xz WEBKITGTK_INSTALL_STAGING = YES @@ -13,7 +13,7 @@ WEBKITGTK_LICENSE_FILES = \ Source/WebCore/LICENSE-APPLE \ Source/WebCore/LICENSE-LGPL-2.1 WEBKITGTK_DEPENDENCIES = host-ruby host-flex host-bison host-gperf \ - enchant harfbuzz icu jpeg libgtk3 libsecret libsoup \ + enchant harfbuzz icu jpeg libgcrypt libgtk3 libsecret libsoup \ libxml2 libxslt sqlite webp WEBKITGTK_CONF_OPTS = \ -DENABLE_API_TESTS=OFF \ diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0002-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0002-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch new file mode 100644 index 00000000..c15dc9f5 --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0002-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch @@ -0,0 +1,39 @@ +From 05442de962d3dc624f79fc1a00eca3ffc5489ced Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:39 +0300 +Subject: [PATCH] Xi: Zero target buffer in SProcXSendExtensionEvent. + +Make sure that the xEvent eventT is initialized with zeros, the same way as +in SProcSendEvent. + +Some event swapping functions do not overwrite all 32 bytes of xEvent +structure, for example XSecurityAuthorizationRevoked. Two cooperating +clients, one swapped and the other not, can send +XSecurityAuthorizationRevoked event to each other to retrieve old stack data +from X server. This can be potentialy misused to go around ASLR or +stack-protector. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + Xi/sendexev.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Xi/sendexev.c b/Xi/sendexev.c +index 11d82029f..1cf118ab6 100644 +--- a/Xi/sendexev.c ++++ b/Xi/sendexev.c +@@ -78,7 +78,7 @@ SProcXSendExtensionEvent(ClientPtr client) + { + CARD32 *p; + int i; +- xEvent eventT; ++ xEvent eventT = { .u.u.type = 0 }; + xEvent *eventP; + EventSwapPtr proc; + +-- +2.11.0 + diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0003-dix-Disallow-GenericEvent-in-SendEvent-request.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0003-dix-Disallow-GenericEvent-in-SendEvent-request.patch new file mode 100644 index 00000000..12da5f5c --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0003-dix-Disallow-GenericEvent-in-SendEvent-request.patch @@ -0,0 +1,71 @@ +From 215f894965df5fb0bb45b107d84524e700d2073c Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:40 +0300 +Subject: [PATCH] dix: Disallow GenericEvent in SendEvent request. + +The SendEvent request holds xEvent which is exactly 32 bytes long, no more, +no less. Both ProcSendEvent and SProcSendEvent verify that the received data +exactly match the request size. However nothing stops the client from passing +in event with xEvent::type = GenericEvent and any value of +xGenericEvent::length. + +In the case of ProcSendEvent, the event will be eventually passed to +WriteEventsToClient which will see that it is Generic event and copy the +arbitrary length from the receive buffer (and possibly past it) and send it to +the other client. This allows clients to copy unitialized heap memory out of X +server or to crash it. + +In case of SProcSendEvent, it will attempt to swap the incoming event by +calling a swapping function from the EventSwapVector array. The swapped event +is written to target buffer, which in this case is local xEvent variable. The +xEvent variable is 32 bytes long, but the swapping functions for GenericEvents +expect that the target buffer has size matching the size of the source +GenericEvent. This allows clients to cause stack buffer overflows. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + dix/events.c | 6 ++++++ + dix/swapreq.c | 7 +++++++ + 2 files changed, 13 insertions(+) + +diff --git a/dix/events.c b/dix/events.c +index 3e3a01ef9..d3a33ea3f 100644 +--- a/dix/events.c ++++ b/dix/events.c +@@ -5366,6 +5366,12 @@ ProcSendEvent(ClientPtr client) + client->errorValue = stuff->event.u.u.type; + return BadValue; + } ++ /* Generic events can have variable size, but SendEvent request holds ++ exactly 32B of event data. */ ++ if (stuff->event.u.u.type == GenericEvent) { ++ client->errorValue = stuff->event.u.u.type; ++ return BadValue; ++ } + if (stuff->event.u.u.type == ClientMessage && + stuff->event.u.u.detail != 8 && + stuff->event.u.u.detail != 16 && stuff->event.u.u.detail != 32) { +diff --git a/dix/swapreq.c b/dix/swapreq.c +index 719e9b81c..67850593b 100644 +--- a/dix/swapreq.c ++++ b/dix/swapreq.c +@@ -292,6 +292,13 @@ SProcSendEvent(ClientPtr client) + swapl(&stuff->destination); + swapl(&stuff->eventMask); + ++ /* Generic events can have variable size, but SendEvent request holds ++ exactly 32B of event data. */ ++ if (stuff->event.u.u.type == GenericEvent) { ++ client->errorValue = stuff->event.u.u.type; ++ return BadValue; ++ } ++ + /* Swap event */ + proc = EventSwapVector[stuff->event.u.u.type & 0177]; + if (!proc || proc == NotImplemented) /* no swapping proc; invalid event type? */ +-- +2.11.0 + diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0004-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0004-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch new file mode 100644 index 00000000..2e651006 --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0004-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch @@ -0,0 +1,50 @@ +From 8caed4df36b1f802b4992edcfd282cbeeec35d9d Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:41 +0300 +Subject: [PATCH] Xi: Verify all events in ProcXSendExtensionEvent. + +The requirement is that events have type in range +EXTENSION_EVENT_BASE..lastEvent, but it was tested +only for first event of all. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + Xi/sendexev.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/Xi/sendexev.c b/Xi/sendexev.c +index 1cf118ab6..5e63bfcca 100644 +--- a/Xi/sendexev.c ++++ b/Xi/sendexev.c +@@ -117,7 +117,7 @@ SProcXSendExtensionEvent(ClientPtr client) + int + ProcXSendExtensionEvent(ClientPtr client) + { +- int ret; ++ int ret, i; + DeviceIntPtr dev; + xEvent *first; + XEventClass *list; +@@ -141,10 +141,12 @@ ProcXSendExtensionEvent(ClientPtr client) + /* The client's event type must be one defined by an extension. */ + + first = ((xEvent *) &stuff[1]); +- if (!((EXTENSION_EVENT_BASE <= first->u.u.type) && +- (first->u.u.type < lastEvent))) { +- client->errorValue = first->u.u.type; +- return BadValue; ++ for (i = 0; i < stuff->num_events; i++) { ++ if (!((EXTENSION_EVENT_BASE <= first[i].u.u.type) && ++ (first[i].u.u.type < lastEvent))) { ++ client->errorValue = first[i].u.u.type; ++ return BadValue; ++ } + } + + list = (XEventClass *) (first + stuff->num_events); +-- +2.11.0 + diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0005-Xi-Do-not-try-to-swap-GenericEvent.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0005-Xi-Do-not-try-to-swap-GenericEvent.patch new file mode 100644 index 00000000..871e7621 --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.14.7/0005-Xi-Do-not-try-to-swap-GenericEvent.patch @@ -0,0 +1,45 @@ +From ba336b24052122b136486961c82deac76bbde455 Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:42 +0300 +Subject: [PATCH] Xi: Do not try to swap GenericEvent. + +The SProcXSendExtensionEvent must not attempt to swap GenericEvent because +it is assuming that the event has fixed size and gives the swapping function +xEvent-sized buffer. + +A GenericEvent would be later rejected by ProcXSendExtensionEvent anyway. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + Xi/sendexev.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/Xi/sendexev.c b/Xi/sendexev.c +index 5e63bfcca..5c2e0fc56 100644 +--- a/Xi/sendexev.c ++++ b/Xi/sendexev.c +@@ -95,9 +95,17 @@ SProcXSendExtensionEvent(ClientPtr client) + + eventP = (xEvent *) &stuff[1]; + for (i = 0; i < stuff->num_events; i++, eventP++) { ++ if (eventP->u.u.type == GenericEvent) { ++ client->errorValue = eventP->u.u.type; ++ return BadValue; ++ } ++ + proc = EventSwapVector[eventP->u.u.type & 0177]; +- if (proc == NotImplemented) /* no swapping proc; invalid event type? */ ++ /* no swapping proc; invalid event type? */ ++ if (proc == NotImplemented) { ++ client->errorValue = eventP->u.u.type; + return BadValue; ++ } + (*proc) (eventP, &eventT); + *eventP = eventT; + } +-- +2.11.0 + diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0002-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0002-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch new file mode 100644 index 00000000..c15dc9f5 --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0002-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch @@ -0,0 +1,39 @@ +From 05442de962d3dc624f79fc1a00eca3ffc5489ced Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:39 +0300 +Subject: [PATCH] Xi: Zero target buffer in SProcXSendExtensionEvent. + +Make sure that the xEvent eventT is initialized with zeros, the same way as +in SProcSendEvent. + +Some event swapping functions do not overwrite all 32 bytes of xEvent +structure, for example XSecurityAuthorizationRevoked. Two cooperating +clients, one swapped and the other not, can send +XSecurityAuthorizationRevoked event to each other to retrieve old stack data +from X server. This can be potentialy misused to go around ASLR or +stack-protector. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + Xi/sendexev.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Xi/sendexev.c b/Xi/sendexev.c +index 11d82029f..1cf118ab6 100644 +--- a/Xi/sendexev.c ++++ b/Xi/sendexev.c +@@ -78,7 +78,7 @@ SProcXSendExtensionEvent(ClientPtr client) + { + CARD32 *p; + int i; +- xEvent eventT; ++ xEvent eventT = { .u.u.type = 0 }; + xEvent *eventP; + EventSwapPtr proc; + +-- +2.11.0 + diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0003-dix-Disallow-GenericEvent-in-SendEvent-request.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0003-dix-Disallow-GenericEvent-in-SendEvent-request.patch new file mode 100644 index 00000000..12da5f5c --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0003-dix-Disallow-GenericEvent-in-SendEvent-request.patch @@ -0,0 +1,71 @@ +From 215f894965df5fb0bb45b107d84524e700d2073c Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:40 +0300 +Subject: [PATCH] dix: Disallow GenericEvent in SendEvent request. + +The SendEvent request holds xEvent which is exactly 32 bytes long, no more, +no less. Both ProcSendEvent and SProcSendEvent verify that the received data +exactly match the request size. However nothing stops the client from passing +in event with xEvent::type = GenericEvent and any value of +xGenericEvent::length. + +In the case of ProcSendEvent, the event will be eventually passed to +WriteEventsToClient which will see that it is Generic event and copy the +arbitrary length from the receive buffer (and possibly past it) and send it to +the other client. This allows clients to copy unitialized heap memory out of X +server or to crash it. + +In case of SProcSendEvent, it will attempt to swap the incoming event by +calling a swapping function from the EventSwapVector array. The swapped event +is written to target buffer, which in this case is local xEvent variable. The +xEvent variable is 32 bytes long, but the swapping functions for GenericEvents +expect that the target buffer has size matching the size of the source +GenericEvent. This allows clients to cause stack buffer overflows. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + dix/events.c | 6 ++++++ + dix/swapreq.c | 7 +++++++ + 2 files changed, 13 insertions(+) + +diff --git a/dix/events.c b/dix/events.c +index 3e3a01ef9..d3a33ea3f 100644 +--- a/dix/events.c ++++ b/dix/events.c +@@ -5366,6 +5366,12 @@ ProcSendEvent(ClientPtr client) + client->errorValue = stuff->event.u.u.type; + return BadValue; + } ++ /* Generic events can have variable size, but SendEvent request holds ++ exactly 32B of event data. */ ++ if (stuff->event.u.u.type == GenericEvent) { ++ client->errorValue = stuff->event.u.u.type; ++ return BadValue; ++ } + if (stuff->event.u.u.type == ClientMessage && + stuff->event.u.u.detail != 8 && + stuff->event.u.u.detail != 16 && stuff->event.u.u.detail != 32) { +diff --git a/dix/swapreq.c b/dix/swapreq.c +index 719e9b81c..67850593b 100644 +--- a/dix/swapreq.c ++++ b/dix/swapreq.c +@@ -292,6 +292,13 @@ SProcSendEvent(ClientPtr client) + swapl(&stuff->destination); + swapl(&stuff->eventMask); + ++ /* Generic events can have variable size, but SendEvent request holds ++ exactly 32B of event data. */ ++ if (stuff->event.u.u.type == GenericEvent) { ++ client->errorValue = stuff->event.u.u.type; ++ return BadValue; ++ } ++ + /* Swap event */ + proc = EventSwapVector[stuff->event.u.u.type & 0177]; + if (!proc || proc == NotImplemented) /* no swapping proc; invalid event type? */ +-- +2.11.0 + diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0004-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0004-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch new file mode 100644 index 00000000..2e651006 --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0004-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch @@ -0,0 +1,50 @@ +From 8caed4df36b1f802b4992edcfd282cbeeec35d9d Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:41 +0300 +Subject: [PATCH] Xi: Verify all events in ProcXSendExtensionEvent. + +The requirement is that events have type in range +EXTENSION_EVENT_BASE..lastEvent, but it was tested +only for first event of all. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + Xi/sendexev.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/Xi/sendexev.c b/Xi/sendexev.c +index 1cf118ab6..5e63bfcca 100644 +--- a/Xi/sendexev.c ++++ b/Xi/sendexev.c +@@ -117,7 +117,7 @@ SProcXSendExtensionEvent(ClientPtr client) + int + ProcXSendExtensionEvent(ClientPtr client) + { +- int ret; ++ int ret, i; + DeviceIntPtr dev; + xEvent *first; + XEventClass *list; +@@ -141,10 +141,12 @@ ProcXSendExtensionEvent(ClientPtr client) + /* The client's event type must be one defined by an extension. */ + + first = ((xEvent *) &stuff[1]); +- if (!((EXTENSION_EVENT_BASE <= first->u.u.type) && +- (first->u.u.type < lastEvent))) { +- client->errorValue = first->u.u.type; +- return BadValue; ++ for (i = 0; i < stuff->num_events; i++) { ++ if (!((EXTENSION_EVENT_BASE <= first[i].u.u.type) && ++ (first[i].u.u.type < lastEvent))) { ++ client->errorValue = first[i].u.u.type; ++ return BadValue; ++ } + } + + list = (XEventClass *) (first + stuff->num_events); +-- +2.11.0 + diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0005-Xi-Do-not-try-to-swap-GenericEvent.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0005-Xi-Do-not-try-to-swap-GenericEvent.patch new file mode 100644 index 00000000..871e7621 --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.17.4/0005-Xi-Do-not-try-to-swap-GenericEvent.patch @@ -0,0 +1,45 @@ +From ba336b24052122b136486961c82deac76bbde455 Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:42 +0300 +Subject: [PATCH] Xi: Do not try to swap GenericEvent. + +The SProcXSendExtensionEvent must not attempt to swap GenericEvent because +it is assuming that the event has fixed size and gives the swapping function +xEvent-sized buffer. + +A GenericEvent would be later rejected by ProcXSendExtensionEvent anyway. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + Xi/sendexev.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/Xi/sendexev.c b/Xi/sendexev.c +index 5e63bfcca..5c2e0fc56 100644 +--- a/Xi/sendexev.c ++++ b/Xi/sendexev.c +@@ -95,9 +95,17 @@ SProcXSendExtensionEvent(ClientPtr client) + + eventP = (xEvent *) &stuff[1]; + for (i = 0; i < stuff->num_events; i++, eventP++) { ++ if (eventP->u.u.type == GenericEvent) { ++ client->errorValue = eventP->u.u.type; ++ return BadValue; ++ } ++ + proc = EventSwapVector[eventP->u.u.type & 0177]; +- if (proc == NotImplemented) /* no swapping proc; invalid event type? */ ++ /* no swapping proc; invalid event type? */ ++ if (proc == NotImplemented) { ++ client->errorValue = eventP->u.u.type; + return BadValue; ++ } + (*proc) (eventP, &eventT); + *eventP = eventT; + } +-- +2.11.0 + diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0004-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0004-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch new file mode 100644 index 00000000..c15dc9f5 --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0004-Xi-Zero-target-buffer-in-SProcXSendExtensionEvent.patch @@ -0,0 +1,39 @@ +From 05442de962d3dc624f79fc1a00eca3ffc5489ced Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:39 +0300 +Subject: [PATCH] Xi: Zero target buffer in SProcXSendExtensionEvent. + +Make sure that the xEvent eventT is initialized with zeros, the same way as +in SProcSendEvent. + +Some event swapping functions do not overwrite all 32 bytes of xEvent +structure, for example XSecurityAuthorizationRevoked. Two cooperating +clients, one swapped and the other not, can send +XSecurityAuthorizationRevoked event to each other to retrieve old stack data +from X server. This can be potentialy misused to go around ASLR or +stack-protector. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + Xi/sendexev.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Xi/sendexev.c b/Xi/sendexev.c +index 11d82029f..1cf118ab6 100644 +--- a/Xi/sendexev.c ++++ b/Xi/sendexev.c +@@ -78,7 +78,7 @@ SProcXSendExtensionEvent(ClientPtr client) + { + CARD32 *p; + int i; +- xEvent eventT; ++ xEvent eventT = { .u.u.type = 0 }; + xEvent *eventP; + EventSwapPtr proc; + +-- +2.11.0 + diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0005-dix-Disallow-GenericEvent-in-SendEvent-request.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0005-dix-Disallow-GenericEvent-in-SendEvent-request.patch new file mode 100644 index 00000000..12da5f5c --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0005-dix-Disallow-GenericEvent-in-SendEvent-request.patch @@ -0,0 +1,71 @@ +From 215f894965df5fb0bb45b107d84524e700d2073c Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:40 +0300 +Subject: [PATCH] dix: Disallow GenericEvent in SendEvent request. + +The SendEvent request holds xEvent which is exactly 32 bytes long, no more, +no less. Both ProcSendEvent and SProcSendEvent verify that the received data +exactly match the request size. However nothing stops the client from passing +in event with xEvent::type = GenericEvent and any value of +xGenericEvent::length. + +In the case of ProcSendEvent, the event will be eventually passed to +WriteEventsToClient which will see that it is Generic event and copy the +arbitrary length from the receive buffer (and possibly past it) and send it to +the other client. This allows clients to copy unitialized heap memory out of X +server or to crash it. + +In case of SProcSendEvent, it will attempt to swap the incoming event by +calling a swapping function from the EventSwapVector array. The swapped event +is written to target buffer, which in this case is local xEvent variable. The +xEvent variable is 32 bytes long, but the swapping functions for GenericEvents +expect that the target buffer has size matching the size of the source +GenericEvent. This allows clients to cause stack buffer overflows. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + dix/events.c | 6 ++++++ + dix/swapreq.c | 7 +++++++ + 2 files changed, 13 insertions(+) + +diff --git a/dix/events.c b/dix/events.c +index 3e3a01ef9..d3a33ea3f 100644 +--- a/dix/events.c ++++ b/dix/events.c +@@ -5366,6 +5366,12 @@ ProcSendEvent(ClientPtr client) + client->errorValue = stuff->event.u.u.type; + return BadValue; + } ++ /* Generic events can have variable size, but SendEvent request holds ++ exactly 32B of event data. */ ++ if (stuff->event.u.u.type == GenericEvent) { ++ client->errorValue = stuff->event.u.u.type; ++ return BadValue; ++ } + if (stuff->event.u.u.type == ClientMessage && + stuff->event.u.u.detail != 8 && + stuff->event.u.u.detail != 16 && stuff->event.u.u.detail != 32) { +diff --git a/dix/swapreq.c b/dix/swapreq.c +index 719e9b81c..67850593b 100644 +--- a/dix/swapreq.c ++++ b/dix/swapreq.c +@@ -292,6 +292,13 @@ SProcSendEvent(ClientPtr client) + swapl(&stuff->destination); + swapl(&stuff->eventMask); + ++ /* Generic events can have variable size, but SendEvent request holds ++ exactly 32B of event data. */ ++ if (stuff->event.u.u.type == GenericEvent) { ++ client->errorValue = stuff->event.u.u.type; ++ return BadValue; ++ } ++ + /* Swap event */ + proc = EventSwapVector[stuff->event.u.u.type & 0177]; + if (!proc || proc == NotImplemented) /* no swapping proc; invalid event type? */ +-- +2.11.0 + diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0006-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0006-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch new file mode 100644 index 00000000..2e651006 --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0006-Xi-Verify-all-events-in-ProcXSendExtensionEvent.patch @@ -0,0 +1,50 @@ +From 8caed4df36b1f802b4992edcfd282cbeeec35d9d Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:41 +0300 +Subject: [PATCH] Xi: Verify all events in ProcXSendExtensionEvent. + +The requirement is that events have type in range +EXTENSION_EVENT_BASE..lastEvent, but it was tested +only for first event of all. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + Xi/sendexev.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/Xi/sendexev.c b/Xi/sendexev.c +index 1cf118ab6..5e63bfcca 100644 +--- a/Xi/sendexev.c ++++ b/Xi/sendexev.c +@@ -117,7 +117,7 @@ SProcXSendExtensionEvent(ClientPtr client) + int + ProcXSendExtensionEvent(ClientPtr client) + { +- int ret; ++ int ret, i; + DeviceIntPtr dev; + xEvent *first; + XEventClass *list; +@@ -141,10 +141,12 @@ ProcXSendExtensionEvent(ClientPtr client) + /* The client's event type must be one defined by an extension. */ + + first = ((xEvent *) &stuff[1]); +- if (!((EXTENSION_EVENT_BASE <= first->u.u.type) && +- (first->u.u.type < lastEvent))) { +- client->errorValue = first->u.u.type; +- return BadValue; ++ for (i = 0; i < stuff->num_events; i++) { ++ if (!((EXTENSION_EVENT_BASE <= first[i].u.u.type) && ++ (first[i].u.u.type < lastEvent))) { ++ client->errorValue = first[i].u.u.type; ++ return BadValue; ++ } + } + + list = (XEventClass *) (first + stuff->num_events); +-- +2.11.0 + diff --git a/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0007-Xi-Do-not-try-to-swap-GenericEvent.patch b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0007-Xi-Do-not-try-to-swap-GenericEvent.patch new file mode 100644 index 00000000..871e7621 --- /dev/null +++ b/bsp/buildroot/package/x11r7/xserver_xorg-server/1.19.1/0007-Xi-Do-not-try-to-swap-GenericEvent.patch @@ -0,0 +1,45 @@ +From ba336b24052122b136486961c82deac76bbde455 Mon Sep 17 00:00:00 2001 +From: Michal Srb +Date: Wed, 24 May 2017 15:54:42 +0300 +Subject: [PATCH] Xi: Do not try to swap GenericEvent. + +The SProcXSendExtensionEvent must not attempt to swap GenericEvent because +it is assuming that the event has fixed size and gives the swapping function +xEvent-sized buffer. + +A GenericEvent would be later rejected by ProcXSendExtensionEvent anyway. + +Signed-off-by: Michal Srb +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +Signed-off-by: Peter Korsgaard +--- + Xi/sendexev.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/Xi/sendexev.c b/Xi/sendexev.c +index 5e63bfcca..5c2e0fc56 100644 +--- a/Xi/sendexev.c ++++ b/Xi/sendexev.c +@@ -95,9 +95,17 @@ SProcXSendExtensionEvent(ClientPtr client) + + eventP = (xEvent *) &stuff[1]; + for (i = 0; i < stuff->num_events; i++, eventP++) { ++ if (eventP->u.u.type == GenericEvent) { ++ client->errorValue = eventP->u.u.type; ++ return BadValue; ++ } ++ + proc = EventSwapVector[eventP->u.u.type & 0177]; +- if (proc == NotImplemented) /* no swapping proc; invalid event type? */ ++ /* no swapping proc; invalid event type? */ ++ if (proc == NotImplemented) { ++ client->errorValue = eventP->u.u.type; + return BadValue; ++ } + (*proc) (eventP, &eventT); + *eventP = eventT; + } +-- +2.11.0 + diff --git a/bsp/buildroot/package/x265/x265.mk b/bsp/buildroot/package/x265/x265.mk index 0fbdb010..8ffec80a 100644 --- a/bsp/buildroot/package/x265/x265.mk +++ b/bsp/buildroot/package/x265/x265.mk @@ -16,6 +16,12 @@ ifeq ($(BR2_i386)$(BR2_x86_64),y) X265_DEPENDENCIES += host-yasm endif +# disable altivec, it has build issues +# https://bitbucket.org/multicoreware/x265/issues/320/ +ifeq ($(BR2_powerpc64)$(BR2_powerpc64le),y) +X265_CONF_OPTS += -DENABLE_ALTIVEC=OFF +endif + ifeq ($(BR2_SHARED_LIBS)$(BR2_SHARED_STATIC_LIBS),y) X265_CONF_OPTS += -DENABLE_SHARED=ON -DENABLE_PIC=ON else diff --git a/bsp/buildroot/package/xen/xen.hash b/bsp/buildroot/package/xen/xen.hash index 2143f466..0b14e296 100644 --- a/bsp/buildroot/package/xen/xen.hash +++ b/bsp/buildroot/package/xen/xen.hash @@ -1,2 +1,2 @@ # Locally computed -sha256 61494a56d9251e2108080f95b0dc8e3d175f1ba4da34603fc07b91cfebf358d5 xen-4.7.2.tar.gz +sha256 5b5385b476e59e4cf31ecc6dd605df38814b83432b8e8d917f18c8edfdfb708f xen-4.7.3.tar.gz diff --git a/bsp/buildroot/package/xen/xen.mk b/bsp/buildroot/package/xen/xen.mk index 9ff1b402..a973b408 100644 --- a/bsp/buildroot/package/xen/xen.mk +++ b/bsp/buildroot/package/xen/xen.mk @@ -4,8 +4,8 @@ # ################################################################################ -XEN_VERSION = 4.7.2 -XEN_SITE = http://bits.xensource.com/oss-xen/release/$(XEN_VERSION) +XEN_VERSION = 4.7.3 +XEN_SITE = https://downloads.xenproject.org/release/xen/$(XEN_VERSION) XEN_LICENSE = GPLv2 XEN_LICENSE_FILES = COPYING XEN_DEPENDENCIES = host-python diff --git a/bsp/buildroot/package/xvisor/Config.in b/bsp/buildroot/package/xvisor/Config.in index 996d37af..44bd461c 100644 --- a/bsp/buildroot/package/xvisor/Config.in +++ b/bsp/buildroot/package/xvisor/Config.in @@ -36,7 +36,7 @@ config BR2_PACKAGE_XVISOR_DEFCONFIG default "generic-v5" if BR2_ARM_CPU_ARMV5 default "generic-v6" if BR2_ARM_CPU_ARMV6 default "generic-v7" if BR2_ARM_CPU_ARMV7A - default "generic-v8" if BR2_AARCH64 + default "generic-v8" if BR2_aarch64 default "x86_64_generic" if BR2_x86_64 help Name of the Xvisor defconfig file to use, without the diff --git a/bsp/buildroot/package/xvisor/xvisor.mk b/bsp/buildroot/package/xvisor/xvisor.mk index a9a5dbfa..c7afb71f 100644 --- a/bsp/buildroot/package/xvisor/xvisor.mk +++ b/bsp/buildroot/package/xvisor/xvisor.mk @@ -26,8 +26,20 @@ XVISOR_KCONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_XVISOR_CUSTOM_CONFIG_FILE)) endif XVISOR_KCONFIG_EDITORS = menuconfig +ifeq ($(BR2_x86_64),y) +XVISOR_ARCH = x86 +else ifeq ($(BR2_arm)$(BR2_aarch64),y) +XVISOR_ARCH = arm +endif + +ifeq ($(BR2_PACKAGE_XVISOR)$(BR_BUILDING),yy) +ifeq ($(XVISOR_ARCH),) +$(error "Architecture not supported by XVisor") +endif +endif + XVISOR_MAKE_ENV = \ - ARCH=$(if $(BR2_x86_64),x86,$(BR2_ARCH)) \ + ARCH=$(XVISOR_ARCH) \ CROSS_COMPILE=$(TARGET_CROSS) XVISOR_MAKE_OPTS = $(if $(VERBOSE),VERBOSE=1) diff --git a/bsp/buildroot/toolchain/toolchain-common.in b/bsp/buildroot/toolchain/toolchain-common.in index 96d57097..38baaa92 100644 --- a/bsp/buildroot/toolchain/toolchain-common.in +++ b/bsp/buildroot/toolchain/toolchain-common.in @@ -7,6 +7,11 @@ source "package/gdb/Config.in.host" comment "Toolchain Generic Options" +# https://sourceware.org/bugzilla/show_bug.cgi?id=19615 +# Affect toolchains built with binutils 2.26 (fixed in binutils 2.26.1). +config BR2_TOOLCHAIN_HAS_BINUTILS_BUG_19615 + bool + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64735 # exception_ptr, nested_exception, and future from libstdc++ are not # available for architectures not supporting always lock-free atomic diff --git a/bsp/buildroot/toolchain/toolchain-external/toolchain-external-codesourcery-amd64/Config.in b/bsp/buildroot/toolchain/toolchain-external/toolchain-external-codesourcery-amd64/Config.in index 32d79eba..101e227a 100644 --- a/bsp/buildroot/toolchain/toolchain-external/toolchain-external-codesourcery-amd64/Config.in +++ b/bsp/buildroot/toolchain/toolchain-external/toolchain-external-codesourcery-amd64/Config.in @@ -11,6 +11,7 @@ config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AMD64 select BR2_HOSTARCH_NEEDS_IA32_LIBS select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7 select BR2_TOOLCHAIN_GCC_AT_LEAST_6 + select BR2_TOOLCHAIN_HAS_BINUTILS_BUG_19615 # based-on binutils-2.26 help Sourcery CodeBench toolchain for the amd64 (x86_64) architectures, from Mentor Graphics. It uses gcc 6.2,