Commit Graph
3431 Commits
Author SHA1 Message Date
Natanael CopaandRich Felker 05973dc3bb use dynamic buffer for getmntent
overlayfs may have fairly long lines so we use getline to allocate a
buffer dynamically. The buffer will be allocated on first use, expand as
needed, but will never be free'ed.

Downstream bug: http://bugs.alpinelinux.org/issues/5703

Signed-off-by: Natanael Copa <[email protected]>
2016-10-20 01:20:27 -04:00
Rich Felker 167dfe9672 fix integer overflows and uncaught EOVERFLOW in printf core
this patch fixes a large number of missed internal signed-overflow
checks and errors in determining when the return value (output length)
would exceed INT_MAX, which should result in EOVERFLOW. some of the
issues fixed were reported by Alexander Cherepanov; others were found
in subsequent review of the code.

aside from the signed overflows being undefined behavior, the
following specific bugs were found to exist in practice:

- overflows computing length of floating point formats with huge
  explicit precisions, integer formats with prefix characters and huge
  explicit precisions, or string arguments or format strings longer
  than INT_MAX, resulted in wrong return value and wrong %n results.

- literal width and precision values outside the range of int were
  misinterpreted, yielding wrong behavior in at least one well-defined
  case: string formats with precision greater than INT_MAX were
  sometimes truncated.

- in cases where EOVERFLOW is produced, incorrect values could be
  written for %n specifiers past the point of exceeding INT_MAX.

in addition to fixing these bugs, we now stop producing output
immediately when output length would exceed INT_MAX, rather than
continuing and returning an error only at the end.
2016-10-20 00:22:09 -04:00
Rich Felker 70d2687d85 fix integer overflow in float printf needed-precision computation
if the requested precision is close to INT_MAX, adding
LDBL_MANT_DIG/3+8 overflows. in practice the resulting undefined
behavior manifests as a large negative result, which is then used to
compute the new end pointer (z) with a wildly out-of-bounds value
(more overflow, more undefined behavior). the end result is at least
incorrect output and character count (return value); worse things do
not seem to happen, but detailed analysis has not been done.

this patch fixes the overflow by performing the intermediate
computation as unsigned; after division by 9, the final result
necessarily fits in int.
2016-10-19 20:17:16 -04:00
Rich Felker aee6abb240 fix regexec with haystack strings longer than INT_MAX
we inherited from TRE regexec code that's utterly wrong with respect
to the integer types it's using. while it doesn't appear that
compilers are producing unsafe output, signed integer overflows seem
to happen, and regexec fails to find matches past offset INT_MAX.

this patch fixes the type of all variables/fields used to store
offsets in the string from int to regoff_t. after the changes, basic
testing showed that regexec can now find matches past 2GB (INT_MAX)
and past 4GB on x86_64, and code generation is unchanged on i386.
2016-10-06 18:47:57 -04:00
Rich Felker c3edc06d1e fix missing integer overflow checks in regexec buffer size computations
most of the possible overflows were already ruled out in practice by
regcomp having already succeeded performing larger allocations.
however at least the num_states*num_tags multiplication can clearly
overflow in practice. for safety, check them all, and use the proper
type, size_t, rather than int.

also improve comments, use calloc in place of malloc+memset, and
remove bogus casts.
2016-10-06 18:47:53 -04:00
Szabolcs NagyandRich Felker 583ea83541 fix strftime %y for negative tm_year 2016-10-06 18:41:45 -04:00
Daniel SabogalandRich Felker 8d7a3f40c8 fix getservby*_r result pointer value on error
this is a clone of the fix to the gethostby*_r functions in
commit fe82bb9b92. the man pages
document that the getservby*_r functions set this pointer to
NULL if there was an error or if no record was found.
2016-09-24 01:10:23 -04:00
Daniel SabogalandRich Felker d917ef0b84 remove dead case in gethostbyname2_r
this case statement was accidently left behind when this function
was refactored in commit e8f39ca489.
2016-09-24 01:09:31 -04:00
Rich Felker 66570ec9c4 fix undefined behavior in sched.h cpu_set_t usage
since cpu sets can be dynamically allocated and have variable size,
accessing their contents via ->__bits is not valid; performing pointer
arithmetic outside the range of the size of the declared __bits array
results in undefined beahavior. instead, only use cpu_set_t for
fixed-size cpu set objects (instantiated by the caller) and as an
abstract pointer type for dynamically allocated ones. perform all
accesses simply by casting the abstract pointer type cpuset_t * back
to unsigned long *.
2016-09-19 11:15:51 -04:00
Rich Felker c002668eb0 simplify/refactor fflush and make fflush_unlocked an alias for fflush
previously, fflush_unlocked was an alias for an internal backend that
was called by fflush, either for its argument or in a loop for each
file if a null pointer was passed. since the logic for the latter was
in the main fflush function, fflush_unlocked crashed when passed a
null pointer, rather than flushing all open files. since
fflush_unlocked is not a standard function and has no specification,
it's not clear whether it should be expected to accept null pointers
like fflush does, but a reasonable argument could be made that it
should.

this patch eliminates the helper function, simplifying fflush, and
makes fflush_unlocked an alias for fflush, which is valid because the
two functions agree in their behavior in all cases where their
behavior is defined (the unlocked version has undefined behavior if
another thread could hold locks).
2016-09-18 21:45:47 -04:00
Daniel SabogalandRich Felker 5505f6afae add missing *_unlocked and wcsftime_l prototypes to wchar.h
these functions had been implemented, but prototypes were not made available
2016-09-16 18:18:34 -04:00
Daniel SabogalandRich Felker 32055d52ca fix if_indextoname error case
posix requires errno to be set to ENXIO if the interface does not exist.
linux returns ENODEV instead so we handle this.
2016-09-16 18:03:06 -04:00
Daniel SabogalandRich Felker 3848a99f65 fix ifru_data and ifcu_buf types in net/if.h
glibc, freebsd, and openbsd use character pointers (caddr_t) for
these fields. only linux uses void pointer for the ifru_data type.
2016-09-16 17:59:54 -04:00
Rich Felker 78897b0dc0 fix printf regression with alt-form octal, zero flag, and field width
commit b91cdbe2bc, in fixing another
issue, changed the logic for how alt-form octal adds the leading zero
to adjust the precision rather than using a prefix character. this
wrongly suppressed the zero flag by mimicing an explicit precision
given by the format string. switch back to using a prefix character.

based on bug report and patch by Dmitry V. Levin, but simplified.
2016-09-16 17:40:08 -04:00
Rich Felker e738b8cbe6 restore _Noreturn to __assert_fail
this reverts commit 2c1f8fd5da. without
the _Noreturn attribute, the compiler cannot use asserts to perform
reachability/range analysis. this leads to missed optimizations and
spurious warnings.

the original backtrace problem that prompted the removal of _Noreturn
was not clearly documented at the time, but it seems to happen only
when libc was built without -g, which also breaks many other
backtracing cases.
2016-08-30 16:39:54 -04:00
Olivier BrunelandRich Felker 397586625e getdtablesize: fix returning hard instead of soft rlimit
This makes the result consistent with sysconf(_SC_OPEN_MAX).
2016-08-30 16:15:22 -04:00
Duncan OverbruckandRich Felker c1f4ed1501 fix FFSYNC by changing it to O_SYNC
O_FSYNC was never defined and is legacy/wrong, nothing seems to use it.
2016-08-30 16:01:47 -04:00
Szabolcs NagyandRich Felker fff880185b configure: handle mipsisa64* triplet as a mips64 target
the gnu config.sub script recognizes several mipsisa64* cpu types
that musl supports as mips64 targets.
2016-08-30 16:00:47 -04:00
Szabolcs NagyandRich Felker 5b5db97f7e math: fix 128bit long double inverse trigonometric functions
there was a copy paste error that could cause large ulp errors
in atan2l, atanl, asinl and acosl on aarch64, mips64 and mipsn32.

(the implementation is from freebsd fdlibm, but the tail end
of the polynomial was wrong. 128 bit long double functions
are not yet tested so this went undetected.)
2016-08-30 16:00:38 -04:00
Szabolcs NagyandRich Felker 0a950dcf15 verify that ttyname refers to the same file as the fd
linux containers use separate mount namespace so the /proc
symlink might not point to the right device if the fd was
opened in the parent namespace, in this case return ENOENT.
2016-08-30 15:59:50 -04:00
Szabolcs NagyandRich Felker 2b41959b59 microblaze: add syscall numbers from linux v4.7
userfaultfd, membarrier and mlock2 syscalls got wired up in linux
commit fbce3befd60d40639bf3c6b60f7477b2f988f92d
2016-08-30 15:58:28 -04:00
Szabolcs NagyandRich Felker 9680e1d03a add SS_AUTODISARM sigaltstack ss_flags from linux v4.7 to signal.h
only matters if swapcontext is used in a signal handler running on an
altstack, new in linux commit 2a74213838104a41588d86fd5e8d344972891ace
2016-08-30 15:58:25 -04:00
Szabolcs NagyandRich Felker c6519d4a71 add UDP_ENCAP_GTP0, UDP_ENCAP_GTP1U from linux v4.7 to netinet/udp.h
for GPRS tunneling protocol, new in linux commit
459aa660eb1d8ce67080da1983bb81d716aa5a69
2016-08-30 15:58:23 -04:00
Szabolcs NagyandRich Felker 0f8ad40be0 add PF_QIPCRTR, AF_QIPCRTR from linux v4.7 to sys/socket.h
macros for qualcom ip router protocol, new in linux commit
bdabad3e363d825ddf9679dd431cca0b2c30f881
2016-08-30 15:58:20 -04:00
Rich Felker 7cc3a28eed fix pread/pwrite syscall calling convention on sh
despite sh not generally using register-pair alignment for 64-bit
syscall arguments, there are arch-specific versions of the syscall
entry points for pread and pwrite which include a dummy argument for
alignment before the 64-bit offset argument.
2016-08-11 18:36:46 -04:00
Rich Felker 39494a273e revert unrelated change that slipped into last commit 2016-07-13 15:23:01 -04:00
Rich Felker cff5747c74 fix regression in tcsetattr on all mips archs
revert commit 8c316e9e49. it was wrong
and does not match how the kernel API works.
2016-07-13 15:04:30 -04:00
Rich Felker 6399fa9d29 fix asctime day/month names not to vary by locale
the FIXME comment here was overlooked at the time locale support was
added.
2016-07-07 16:51:37 -04:00
Rich Felker 7c82870d45 remove obsolete and unused gethostbyaddr implementation
this code was already under #if 0, but could be confusing if a reader
didn't notice that, and it's almost surely full of bugs and/or
inconsistencies with the current code that uses the gethostbyname2_r
backend.
2016-07-06 21:15:00 -04:00
Bobby BinghamandRich Felker 5ab0b20ea6 remove obsolete gitignore rules
Since commit 2f853dd6b9, all generated
headers are generated under the obj directory, which is already ignored.
2016-07-06 00:21:25 -04:00
Bobby BinghamandRich Felker e1679ef1a1 remove or1k version of sem.h
It's identical to the generic version, after evaluating the endian
preprocessor checks in the generic version.
2016-07-06 00:21:19 -04:00
Rich Felker faf69b9a73 release 1.1.15 2016-07-05 17:58:46 -04:00
Rich Felker 0f47367751 add stdc-predef.h for library-level predefined macros
modern compilers (for gcc, versions 4.8 and later) automatically
pre-include <stdc-predef.h> to obtain the values of certain predefined
macros specified by ISO C but which reflect properties of the library
implementation, not just the compiler. provide values indicating that
wchar_t is Unicode-encoded and that Annex F (IEEE floating point) is
supported unless the compiler indicates otherwise.

based on patch by Masanori Ogino.
2016-07-03 20:03:30 -04:00
Rich Felker 0c8bc102f2 improve abort fallback behavior when raising SIGABRT fails to terminate
these changes still do not yield a fully-conforming abort, but they
fix two known issues:

- per POSIX, termination via SIGKILL is not "abnormal", but both ISO C
  and POSIX require abort to yield abnormal termination.

- raising SIGKILL fails to do anything to pid 1 in some containers.

now, the trapping instruction produced by a_crash() is expected to
produce abnormal termination, without the risk of invoking a signal
handler since SIGILL and SIGSEGV are blocked, and _Exit, which
contains an infinite loop analogous to the one being removed from
abort itself, is used as a last resort.

this implementation still fails to produce an exit status as if the
process terminated via SIGABRT in cases where SIGABRT is blocked or
ignored, but fixing that is not easy; the obvious pseudo-solutions all
have subtle race conditions where a concurrent fork or exec can expose
incorrect signal state.
2016-07-03 18:01:07 -04:00
Rich Felker ee3f0c5516 make brace placement in public header typedef'd structs consistent
commit befa5866ee performed this change
for struct definitions that did not also involve typedef, but omitted
the latter.
2016-07-03 16:19:28 -04:00
Szabolcs NagyandRich Felker 3c3b09980d add EF_SH_ sh specific macros to elf.h
last time elf.h was thoroughly updated sh was not yet supported
so these processor specific e_flags were missing.
2016-07-03 16:15:13 -04:00
Szabolcs NagyandRich Felker 84fd4e4ffd add NT_ARM_SYSTEM_CALL to elf.h
new regset in linux v3.18 for ptrace.
2016-07-03 16:15:12 -04:00
Szabolcs NagyandRich Felker c3be411df7 add missing x86 relocs to elf.h
see
https://sourceware.org/ml/libc-alpha/2016-01/msg00822.html
2016-07-03 16:15:12 -04:00
Szabolcs NagyandRich Felker 7c3b67234c add DT_MIPS_RLD_MAP_REL to elf.h
marks different RLD_MAP for debugging PIE binaries.
2016-07-03 16:15:12 -04:00
Szabolcs NagyandRich Felker af17dc40dd add SHF_COMPRESSED section flag to elf.h
following
http://www.sco.com/developers/gabi/latest/ch4.sheader.html
2016-07-03 16:15:12 -04:00
Szabolcs NagyandRich Felker 29a96c1980 add powerpc tls optimization related definitions to elf.h
see
https://sourceware.org/ml/libc-alpha/2015-03/msg00580.html
2016-07-03 16:15:11 -04:00
Szabolcs NagyandRich Felker 347d0617d1 add nios2 definitions to elf.h 2016-07-03 16:15:11 -04:00
Szabolcs NagyandRich Felker abbdf0f51d update elf.h with mips abi flags support
following
https://sourceware.org/ml/libc-alpha/2014-05/msg00332.html
2016-07-03 16:15:11 -04:00
Szabolcs NagyandRich Felker 49eb322425 update elf.h with new aarch64 relocs
add ilp32 related relocs and alternative names for a few macros following
https://sourceware.org/ml/libc-alpha/2014-11/msg00455.html
2016-07-03 16:15:10 -04:00
Szabolcs NagyandRich Felker b921e0fd1f update elf.h with powerpc64 elfv2 abi related macros
see
https://sourceware.org/ml/libc-alpha/2013-11/msg00315.html
https://sourceware.org/ml/libc-alpha/2013-11/msg00314.html
2016-07-03 16:12:12 -04:00
Szabolcs NagyandRich Felker 35b58194dc add new powerpc64 relocations to elf.h
following the corresponding binutils and glibc changes
https://sourceware.org/ml/binutils/2013-10/msg00372.html
2016-07-03 16:11:12 -04:00
Szabolcs NagyandRich Felker 308e4bc618 add EM_OPENRISC again to elf.h
it was changed to EM_OR1K in 200d15479c
as that was meant to be the official name, but glibc and the latest
gabi spec still uses the EM_OPENRISC name:
http://www.sco.com/developers/gabi/latest/ch4.eheader.html
binutils defines both macros so we should do the same for backward
compatibility.
2016-07-03 16:11:05 -04:00
Rich Felker befa5866ee make brace placement in public header struct definitions consistent
placing the opening brace on the same line as the struct keyword/tag
is the style I prefer and seems to be the prevailing practice in more
recent additions.

these changes were generated by the command:

find include/ arch/*/bits -name '*.h' \
-exec sed -i '/^struct [^;{]*$/{N;s/\n/ /;}' {} +

and subsequently checked by hand to ensure that the regex did not pick
up any false positives.
2016-07-03 15:02:25 -04:00
Rich Felker 093288dcb3 fix misplaced indention in sys/procfs.h 2016-07-03 15:02:24 -04:00
Rich Felker 45ba07fded format mips bits/termios.h consistently mips64 and n32 versions
with this change, all three files are identical.
2016-07-03 15:02:24 -04:00