Mercurial > hg > nginx
view auto/os/conf @ 9278:f53146df9a47
Fixed Valgrind complaints about uninitialized values.
In ngx_http_source_charset(), name->data was left uninitialized, and
only name->len was set. Since it is used in debug logging, this resulted
in the following complaints from Valgrind on systems with musl libc:
==42== Conditional jump or move depends on uninitialised value(s)
==42== at 0x12BC66: memcpy (string.h:51)
==42== by 0x12BC66: ngx_sprintf_str (ngx_string.c:586)
==42== by 0x12C03C: ngx_vslprintf (ngx_string.c:255)
==42== by 0x127694: ngx_log_error_core (ngx_log.c:135)
==42== by 0x1B8795: ngx_http_charset_header_filter (ngx_http_charset_filter_module.c:252)
Similarly, ngx_http_split_args() returned uninitialized arg->data, which
was then copied to r->args, and also used in debug logging:
==42== Conditional jump or move depends on uninitialised value(s)
==42== at 0x12BC10: memcpy (string.h:50)
==42== by 0x12BC10: ngx_sprintf_str (ngx_string.c:586)
==42== by 0x12C03C: ngx_vslprintf (ngx_string.c:255)
==42== by 0x127694: ngx_log_error_core (ngx_log.c:135)
==42== by 0x184EFB: ngx_http_internal_redirect (ngx_http_core_module.c:2526)
==42== by 0x1D8CCC: ngx_http_try_files_handler (ngx_http_try_files_module.c:209)
Fix is to initialize data to NULL. Note that, while memcpy(p, NULL, 0)
is also formally undefined now, it is used in multiple places in the code,
and expected to be allowed in C2y (see WG14 proposals N3177, N3261,
"Allow zero length operations on null pointers").
Prodded by Valgrind.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 31 May 2024 04:38:09 +0300 |
parents | 35afae4b3dff |
children |
line wrap: on
line source
# Copyright (C) Igor Sysoev # Copyright (C) Nginx, Inc. echo "checking for $NGX_SYSTEM specific features" case "$NGX_PLATFORM" in FreeBSD:*) . auto/os/freebsd ;; Linux:*) . auto/os/linux ;; SunOS:*) . auto/os/solaris ;; Darwin:*) . auto/os/darwin ;; win32) . auto/os/win32 ;; DragonFly:*) have=NGX_FREEBSD . auto/have_headers CORE_INCS="$UNIX_INCS" CORE_DEPS="$UNIX_DEPS $FREEBSD_DEPS" CORE_SRCS="$UNIX_SRCS $FREEBSD_SRCS" echo " + sendfile() found" have=NGX_HAVE_SENDFILE . auto/have CORE_SRCS="$CORE_SRCS $FREEBSD_SENDFILE_SRCS" ngx_spacer=' ' ;; NetBSD:*) CORE_INCS="$UNIX_INCS" CORE_DEPS="$UNIX_DEPS $POSIX_DEPS" CORE_SRCS="$UNIX_SRCS" NGX_RPATH=YES ;; HP-UX:*) # HP/UX have=NGX_HPUX . auto/have_headers CORE_INCS="$UNIX_INCS" CORE_DEPS="$UNIX_DEPS $POSIX_DEPS" CORE_SRCS="$UNIX_SRCS" CC_AUX_FLAGS="$CC_AUX_FLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1" CC_AUX_FLAGS="$CC_AUX_FLAGS -D_HPUX_ALT_XOPEN_SOCKET_API" ;; OSF1:*) # Tru64 UNIX have=NGX_TRU64 . auto/have_headers have=NGX_HAVE_STRERROR_R . auto/nohave CORE_INCS="$UNIX_INCS" CORE_DEPS="$UNIX_DEPS $POSIX_DEPS" CORE_SRCS="$UNIX_SRCS" ;; GNU:*) # GNU Hurd have=NGX_GNU_HURD . auto/have_headers CORE_INCS="$UNIX_INCS" CORE_DEPS="$UNIX_DEPS $POSIX_DEPS" CORE_SRCS="$UNIX_SRCS" CC_AUX_FLAGS="$CC_AUX_FLAGS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64" ;; *) CORE_INCS="$UNIX_INCS" CORE_DEPS="$UNIX_DEPS $POSIX_DEPS" CORE_SRCS="$UNIX_SRCS" ;; esac case "$NGX_MACHINE" in i386 | i686 | i86pc) have=NGX_HAVE_NONALIGNED . auto/have NGX_MACH_CACHE_LINE=32 ;; amd64 | x86_64) have=NGX_HAVE_NONALIGNED . auto/have NGX_MACH_CACHE_LINE=64 ;; sun4u | sun4v | sparc | sparc64) have=NGX_ALIGNMENT value=16 . auto/define # TODO NGX_MACH_CACHE_LINE=64 ;; ia64 ) have=NGX_ALIGNMENT value=16 . auto/define # TODO NGX_MACH_CACHE_LINE=64 ;; aarch64 | arm64) have=NGX_ALIGNMENT value=16 . auto/define NGX_MACH_CACHE_LINE=64 ;; *) have=NGX_ALIGNMENT value=16 . auto/define NGX_MACH_CACHE_LINE=32 ;; esac if test -z "$NGX_CPU_CACHE_LINE"; then NGX_CPU_CACHE_LINE=$NGX_MACH_CACHE_LINE fi have=NGX_CPU_CACHE_LINE value=$NGX_CPU_CACHE_LINE . auto/define