Stephane Chazelas discovered a bug in the environment handling in Perl.
Perl provides a Perl-space hash variable, %ENV, in which environment
variables can be looked up. If a variable appears twice in envp, only
the last value would appear in %ENV, but getenv would return the first.
Perl's taint security mechanism would be applied to the value in %ENV,
but not to the other rest of the environment. This could result in an
ambiguous environment causing environment variables to be propagated to
subprocesses, despite the protections supposedly offered by taint
checking.
With this update Perl changes the behavior to match the following:
a) %ENV is populated with the first environment variable, as getenv
would return.
b) Duplicate environment entries are removed.
References:
* http://perl5.git.perl.org/perl.git/commit/ae37b791a73a9e78dedb89fb2429d2628cf58076
* https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2381
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Beginning in PathTools 3.47 and/or perl 5.20.0, the File::Spec::canonpath()
routine returned untained strings even if passed tainted input. This defect
undermines the guarantee of taint propagation, which is sometimes used to
ensure that unvalidated user input does not reach sensitive code.
This defect was found and reported by David Golden of MongoDB, and a patch
was provided by Tony Cook.
References:
* https://rt.perl.org/Public/Bug/Display.html?id=126862
* https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-8607
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Whenever we ship fixed libopenssl binaries in DD, the Freeradius daemon fails
at startup because it detects a mismatch of the build time and runtime OpenSSL
version.
Since our OpenSSL updates for DD are ABI compatible we do not need or even want
this superflous check. Removing it saves us the effort to rebuild Freeradius
after every OpenSSL version bump.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Build depends must refer to the source package name, not the binary one,
therefore we need to use `bzip2` in order to enforce a build of libbz2.so.
Also make the host python build depend on the bzip2 host build in order to
ensure that host python is built with bzip2 support. We don't need a build
dependency for the target python as this already depends on +libbz2 through
python-light. That package dependency in turn implies a build dependency.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
During startup, motion calls pthread_getspecific() through motion_log()
before pthread_key_create() has been called yet. This works on glibc and
uclibc but segfaults on musl because motion is relying on undefined
behaviour here.
Move the pthread initialization before motion_startup() so that
tls_key_threadnr is initialized when motion_log() is called.
Also enforce the use of strerror_r() on musl by defining XSI_STRERROR_R
on all non-glibc systems because the supposed replacement code is broken
and crashes on musl.
References:
http://www.lavrsen.dk/foswiki/bin/view/Motion/BugReport2015x09x30x203633
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
The current mtr does not build if IPv6 is disabled globally, add a patch to
fix the build in this case.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
- Add header tests for `error.h`, `sys/types.h` and `sys/select.h`
- Add function tests for `canonicalize_file_name()` and `fopencookie()`
- Add `compat.h` header to provide replacements for `error()`,
`error_at_line()` and `canonicalize_file_name()` as well as the
`_PATH_MOUNTED` and `_PATH_MNTTAB` defines
- Add missing includes for `sys/select.h` and `sys/types.h`
- Disable libneon debugging if no `fopencookie()` implementation is
available
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Add missing `sys/types.h` include to `strnstr()` replacement code in
`compat.c` in order to declare `ssize_t` type under musl.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Add missing `sys/types.h` include to `strnstr()` replacement code in
`compat.c` in order to declare `ssize_t` type under musl.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Let `./configure` assume C99 compliant `snprintf()` and `vsnprintf()` functions
by passing the required cache variables via `CONFIGURE_VARS`.
Fixes fortify-source related undeclared function errors when compiling the
`tests/` directory.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Compile with `-std=gnu99` instead of `-std=c99` to avoid redefining
`__attribute__` in `src/system.h`.
Fixes the following error spotted by the buildbot:
In file included from ../lib/stdio.h:43:0,
from cmp.c:22:
.../staging_dir/toolchain-arm_cortex-a9+vfpv3_gcc-4.8-linaro_musl-1.1.10_eabi/include/fortify/stdio.h: In function 'snprintf':
.../staging_dir/toolchain-arm_cortex-a9+vfpv3_gcc-4.8-linaro_musl-1.1.10_eabi/include/fortify/stdio.h:99:2: error: invalid use of '__builtin_va_arg_pack ()'
return __orig_snprintf(__s, __n, __f, __builtin_va_arg_pack());
^
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
The configure script shipped by screen uses the presence of `elf.h` and `-lelf`
as indicator for an SVR4 system which implies a `#define BUGGYGETLOGIN`.
The SVR4 `getlogin()` replacement function does not compile with a musl
toolchain and we do not want it anyway, so patch configure to remove the broken
SVR4 detection logic.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
The ntpd package ships autoconf macros which attempt to test for the C99
compliance of `snprintf()` and `vsnprintf()`.
Those macros unconditionally consider the functions not compliant in a cross
compile setting and therfore break all subsequent configure tests because
the `snprintf` and `vsnprintf` symbols are shadowed with `#define` directives
redirecting them to their respectiv gnulib replacements.
The fortify source headers in turn will `#undef` those defines when wrapping
the associated functions and therfore cause all `conftest` programs to emit
a failure.
Pass the required magic autoconf cache variables via `CONFIGURE_VARS` to let
`./configure` assume C99 compliance of the affected functions, thus fixing
the build.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Add missing `sys/select.h` include to `ntripclient.c` to provide
declarations for `struct timeval` and `fd_set` under musl.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
- Include `poll.h` at the top of `ether/readpacket.c` to avoid nested
declaration errors caused by fortify source headers
- Add missing `sys/select.h` include to `serial/serial.c`
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
- Add `fcntl.h` to `nrhp/opennhrp.c` for `open()`, `O_WRONLY` etc.
- Add missing `sys/types.h` include to `nrhp/nrhp_common.h` to provide
required `u_int*_t` types under musl
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
The current package patches `makedefs` to probe for the existance
of the `nsl` and `resolv` libraries but uses the wrong variables
for the prefix, leading to `makedefs` probing the host directories,
not the staging dir ones.
Replace `$PKG_BUILD_DIR` with `$STAGING_DIR` to perform the library
tests in the correct directory.
Fixes the following error spotted by doing test builds against musl
which does not provide a `libnsl`:
.../mips-openwrt-linux-musl/bin/ld: cannot find -lnsl
collect2: error: ld returned 1 exit status
make: *** [master] Error 1
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
This commit addresses two issues encountered while building pthsem for
x86_64/musl:
1) Autoconf incorrectly assumes a broken Glibc and thus falls back
to Linux compatibility code which runs into an unsupported
platform error with musl libc. Since musl provides a proper
implementation of `sigaltstack(2)`, force configure to use the
POSIX compliant code when musl libc is used.
2) The `pth_syscall.c` file undefines various libc function names
which breaks the indirection set up by fortify-source headers,
therefore forcibly disable fortify source in the OpenWrt Makefile.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
The shadowsocks source uses the name `encrypt` which is already reserved by
the `unistd.h` header. Rename the local `encrypt` and `decrypt` functions to
`crypto_encrypt` and `crypto_decrypt` in order to prevent clashes with the
standard headers.
Fixes the following build error oberserved on the buildbot:
In file included from client.c:19:0:
crypto.h:18:5: error: conflicting types for 'encrypt'
int encrypt(int sockfd, struct link *ln);
^
In file included from .../staging_dir/toolchain-mipsel_mips32_gcc-4.8-linaro_musl-1.1.10/include/fortify/unistd.h:20:0,
from client.c:12:
.../staging_dir/toolchain-mipsel_mips32_gcc-4.8-linaro_musl-1.1.10/include/unistd.h:145:6: note: previous declaration of 'encrypt' was here
void encrypt(char *, int);
^
make[3]: *** [sslocal] Error 1
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
The configure script incorrectly mangles `CFLAGS` by attempting to remove
`-Werror` from it, thus turning `-Werror=format-security` into just
`=format-security` which will cause subsequent autoconf tests to fail.
Patch out the custom `CFLAGS` mangling to fix the build.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Change `sys/signal.h` include to just `signal.h`. The build otherwise fails
due to `-Werror` with the following message:
In file included from rfcnb-io.c:43:0:
.../staging_dir/toolchain-mipsel_mips32_gcc-4.8-linaro_musl-1.1.10/include/sys/signal.h:1:2: error: #warning redirecting incorrect #include <sys/signal.h> to <signal.h> [-Werror=cpp]
#warning redirecting incorrect #include <sys/signal.h> to <signal.h>
^
cc1: all warnings being treated as errors
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
- Ship a `net/ppp_defs.h` replacement header since musl does not provide one
but `pppd/pppd.h` provided by pppd is needing it.
- Add missing `sys/types.h` includes
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Replace the nonstandard `SIGCLD` signal name with the proper `SIGCHLD` spelling
as the `SIGCLD` alias is not provided by musl.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
When fortify source is enabled, the c-ares configure script will abort with:
configure: CFLAGS error: CFLAGS may only be used to specify C compiler flags, not macro definitions. Use CPPFLAGS for: -D_FORTIFY_SOURCE=1
Change the OpenWrt Makefile to move any -D flags from TARGET_CFLAGS to
TARGET_CPPFLAGS in order to satisfy `configure`.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
- Include `sys/user.h` if `__WORDSIZE` is undefined
- Add `fcntl.h` to `libscc.c` in order to declare `loff_t`
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Let configure include `sys/if_tun.h` when testing for `netinet/if_ether.h`
to detect the Kernel/libc header conflict on musl.
After this patch, configure will correctly detect `netinet/if_ether.h` as
unusable and the subsequent compilation will not attempt to use it.
Fixes the following compatibility error:
In file included from .../staging_dir/toolchain-mips_mips32_gcc-4.8-linaro_musl-1.1.9/include/linux/if_tun.h:20:0,
from linux/device.c:24:
.../staging_dir/toolchain-mips_mips32_gcc-4.8-linaro_musl-1.1.9/include/linux/if_ether.h:137:8: error: redefinition of 'struct ethhdr'
struct ethhdr {
^
In file included from .../staging_dir/toolchain-mips_mips32_gcc-4.8-linaro_musl-1.1.9/include/net/ethernet.h:10:0,
from linux/../have.h:180,
from linux/../system.h:26,
from linux/device.c:21:
.../staging_dir/toolchain-mips_mips32_gcc-4.8-linaro_musl-1.1.9/include/netinet/if_ether.h:96:8: note: originally defined here
struct ethhdr {
^
make[5]: *** [linux/device.o] Error 1
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Switch the mtr package to the upstream `newdns` git branch.
This will fix compilation on Glibc, uClibc and musl without requiring
further patches.
Note that the base version of this branch is 0.85, not 0.86 so the
lower version number is intentional.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
- Avoid non-pointer use of `FILE` type since its just a forward declaration
- Build with -D_GNU_SOURCE to expose required `struct tcphdr` members
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
- Add missing `sys/ttydefaults.h` include to `config.c`
- Restrict usage of `error.h` to glibc and uclibc only
- Avoid including `linux/if_tun.h` on non-glibc/uclibc to prevent
musl kernel/libc header conflicts
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Change occurences of `sys/unistd.h` to the standard `unistd.h` include.
Fixes build against musl.
Also refresh existing patch since it applied with fuzz.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
The correct includes for musl are protected by an __GLIBC__ check in the
upstream sources.
Since musl does not provide own defines to identify itself, simply invert
the condition to !__UCLIBC__ in order to fix the build on all libc flavors
supported by OpenWrt.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Pass HAVE_RLIM_T via TARGET_CPPFLAGS since configure uses that define
but never actually declares it.
Without doing that, `config.h` tries to declare `rlim_t` itself which
leads to `config.h:126:16: error: 'long long long' is too long for GCC`
with musl on at least x86_64.
Also refresh patches while we're at it.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Under musl a compilation unit cannot include both linux/kernel.h
and sys/sysinfo.h at the same time since that leads to a redefinition
of `struct sysinfo`.
Change the autoconf template to include linux/kernel.h while testing
for sys/sysinfo.h to test for that conflict.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
- Add patch to inhibit the libm IEEE math switch on musl
- Add postprocessing for config.sh to the Makefile to fixup
defines for musl, idea taken
from http://patchwork.openembedded.org/patch/91707/
This is the least invasive approach I could come up to fix the build
failure asap. Another possibility is maintaining yet another set of
musl specific architecture config files, but I think that this introduces
a lot of maintenance overhead.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
- Ship a net/ppp_defs.h replacement header since musl does not provide one
but pppd/pppd.h provided by pppd is needing it.
- Replace deprecated MSG_TRYHARD flag with the proper MSG_DONTROUTE one
- Unconditionally include string.h in bcrelay to avoid undeclared memset()
and strcpy() warnings.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Add missing includes to libbridge.h to define struct timeval and the
required u_int*_t types under musl.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
- Build with -D_GNU_SOURCE to expose "loff_t" required for libelf.h
- Include sys/types.h before usb.h to provide missing u_int*_t types
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
- Fix redefinition of struct ethhdr
- Restrict the use of res_ninit() and res_nquery() to glibc
- Fix a warning in dn_skipname.c by declaring ns_name_skip() static
- Refresh patches
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Do not include netinet/if_ether.h for musl to prevent struct ethhdr
redeclarations.
Also define NETDB_INTERNAL if needed to fix compilation of the network
backends.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Building nfs-kernel-server with --enable-ipv6 requires not yet packaged
libtirpc, therfore unconditionally disable IPv6 support again for now.
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>