about summary refs log tree commit diff
Commit message (Collapse)AuthorAgeFilesLines
* fix malloc state corruption when ldso rejects loading a second libcRich Felker2017-11-131-3/+4
| | | | | | | | | | | | | | | | | | | | | | | commit c49d3c8adadfa24235fcf4779bb722b1aa6f480b added logic to detect attempts to load libc.so via another name and instead redirect to the existing libc, rather than loading two and producing dangerously inconsistent state. however, the check for and unmapping of the duplicate libc happened after reclaim_gaps was already called, donating the slack space around the writable segment to malloc. subsequent unmapping of the library then invalidated malloc's free lists. fix the issue by moving the call to reclaim_gaps out of map_library into load_library, after the duplicate libc check but before the first call to calloc, so that the gaps can still be used to satisfy the allocation of struct dso. this change also eliminates the need for an ugly hack (temporarily setting runtime=1) to avoid reclaim_gaps when loading the main program via map_library, which happens when ldso is invoked as a command. only programs/libraries erroneously containing a DT_NEEDED reference to libc.so via an absolute pathname or symlink were affected by this issue.
* reformat cjk iconv tables to be diff-friendly, match tool outputRich Felker2017-11-113-2755/+2808
| | | | | | | | | | | | the new version of the code used to generate these tables forces a newline every 256 entries, whereas at the time these files were originally generated and committed, it only wrapped them at 80 columns. the new behavior ensures that localized changes to the tables, if they are ever needed, will produce localized diffs. other tables including hkscs were already committed in the new format. binary comparison of the generated object files was performed to confirm that no spurious changes slipped in.
* prevent fork's errno from being clobbered by atfork handlersBobby Bingham2017-11-101-3/+3
| | | | | | | If the syscall fails, errno must be set correctly for the caller. There's no guarantee that the handlers registered with pthread_atfork won't clobber errno, so we need to ensure it gets set after they are called.
* add iso-2022-jp support (decoding only) to iconvRich Felker2017-11-101-2/+45
| | | | | | | | | | this implementation aims to match the baseline defined by rfc1468 (the original mime charset definition) plus the halfwidth katakana extension included in the whatwg definition of the charset. rejection of si/so controls and newlines in doublebyte state are not currently enforced. the jis x 0201 mode is currently interpreted as having the yen sign and overline character in place of backslash and tilde; ascii mode has the standard ascii characters in those slots.
* add iconv framework for decoding stateful encodingsRich Felker2017-11-102-3/+24
| | | | | | | assuming pointers obtained from malloc have some nonzero alignment, repurpose the low bit of iconv_t as an indicator that the descriptor is a stateless value representing the source and destination character encodings.
* simplify/optimize iconv utf-8 caseRich Felker2017-11-101-4/+3
| | | | | | the special case where mbrtowc returns 0 but consumed 1 byte of input does not need to be considered, because the short-circuit for low bytes already covered that case.
* handle ascii range individually in each iconv caseRich Felker2017-11-101-2/+10
| | | | | | | short-circuiting low bytes before the switch precluded support for character encodings that don't coincide with ascii in this range. this limitation affected iso-2022 encodings, which use the esc byte to introduce a shift sequence, and things like ebcdic.
* move iconv_close to its own translation unitRich Felker2017-11-102-5/+6
| | | | | | | this is in preparation to support stateful conversion descriptors, which are necessarily allocated and thus must be freed in iconv_close. putting it in a separate TU will avoid pulling in free if iconv_close is not referenced.
* refactor iconv conversion descriptor encoding/decodingRich Felker2017-11-101-6/+20
| | | | | | | | | | this change is made to avoid having assumptions about the encoding spread out across the file, and to facilitate future change to a form that can accommodate allocted, stateful descriptors when needed. this commit should not produce any functional changes; with the compiler tested the only change to code generation was minor reordering of local variables on stack.
* fix getaddrinfo error code for non-numeric service with AI_NUMERICSERVA. Wilcox2017-11-091-1/+1
| | | | | | If AI_NUMERICSERV is specified and a numeric service was not provided, POSIX mandates getaddrinfo return EAI_NONAME. EAI_SERVICE is only for services that cannot be used on the specified socket type.
* fix mismatched type of __pthread_tsd_run_dtors weak definitionRich Felker2017-11-091-2/+2
| | | | | | | | commit a6054e3c94aa0491d7366e4b05ae0d73f661bfe2 changed this function not to take an argument, but the weak definition used by timer_create was not updated to match. reported by Pascal Cuoq.
* s390x: use generic ioctl.hSzabolcs Nagy2017-11-052-196/+2
| | | | | | | | s390 can use the generic ioctls definitions other than FIOQSIZE (like arm). this fixes some missing ioctls and two incorrect ones: TIOCTTYGSTRUCT and TIOCM_MODEM_BITS seem to be defined on frv target only in linux.
* microblaze: add statx syscall from linux v4.13Szabolcs Nagy2017-11-051-0/+1
| | | | | statx number is allocated for microblaze in linux commit f5ef419630e85e80284cd0256cb5a13a66bbd6c5
* aarch64: add extra_context struct from linux v4.13Szabolcs Nagy2017-11-051-0/+7
| | | | | allows expanding the signal frame beyond the 4k reserved space. new in linux commit 33f082614c3443d937f50fe936f284f62bbb4a1b
* add new tcp.h socket options from linux v4.13Szabolcs Nagy2017-11-051-2/+7
| | | | | TCP_ULP is new in linux commit 734942cc4ea6478eed125af258da1bdbb4afe578 TCP_MD5SIG_EXT is new in 8917a777be3ba566377be05117f71b93a5fd909d
* add new fcntl.h macros from linux v4.13Szabolcs Nagy2017-11-051-0/+12
| | | | | | | | for getting/setting write lifetime hints fcntl commands were added in linux commit c75b1d9421f80f4143e389d2d50ddfc8a28c8c35 added under _GNU_SOURCE || _BSD_SOURCE, since RWH_* life time hints are not in the POSIX reserved namespace.
* ioctl TIOCGPTPEER from linux v4.13Szabolcs Nagy2017-11-057-0/+7
| | | | | added for safe opening of peer end of pty in a mount namespace. new in linux commit c6325179238f1d4683edbec53d8322575d76d7e2
* add SO_ getsockopt options from linux v4.13Szabolcs Nagy2017-11-051-0/+2
| | | | | SCM_TIMESTAMPING_PKTINFO is new in aad9c8c470f2a8321a99eb053630ce0e199558d6 SO_PEERGROUPS is new in 28b5ba2aa0f55d80adb2624564ed2b170c19519e
* s390x: add syscall number for s390_guarded_storage from linux v4.12Szabolcs Nagy2017-11-051-0/+1
| | | | new syscall in linux commit 916cda1aa1b412d7cf2991c3af7479544942d121
* i386: add arch_prctl syscall number from linux v4.12Szabolcs Nagy2017-11-051-0/+1
| | | | | syscall for i386 compat mode on x86_64 for non-x86_64 prctls. new in linux commit 79170fda313ed5be2394f87aa2a00d597f8ed4a1
* aarch64: add new HWCAP_* flags from linux v4.12Szabolcs Nagy2017-11-051-0/+3
| | | | | | | hwcap bits for armv8.3 extensions, added in linux commits c8c3798d2369e4285da44b244638eafe446a8f8a cb567e79fa504575cb97fb2f866d2040ed1c92e7 c651aae5a7732287c1c9bc974ece4ed798780544
* add ARPHDR_VSOCKMON from linux v4.12Szabolcs Nagy2017-11-051-0/+1
| | | | new in linux commit 531b374834c891ae2abf800693074df35a7d1a36
* add new SO_ socket options from linux v4.12Szabolcs Nagy2017-11-051-0/+3
| | | | | | SO_MEMINFO added in linux commit a2d133b1d465016d0d97560b11f54ba0ace56d3e SO_INCOMING_NAPI_ID added in 6d4339028b350efbf87c61e6d9e113e5373545c9 SO_COOKIE added in 5daab9db7b65df87da26fd8cfa695fb9546a1ddb
* add statx syscall numbers from linux v4.11Szabolcs Nagy2017-11-0512-0/+12
| | | | | statx was added in linux commit a528d35e8bfcc521d7cb70aaf03e1bd296c8493f (there is no libc wrapper yet and microblaze and sh misses the number).
* add TCP_NLA_* enums from linux v4.11Szabolcs Nagy2017-11-051-0/+2
| | | | | two new stats for SCM_TIMESTAMPING_OPT_STATS, added in linux commit 7e98102f489775d8c000884fca8a0d995ea688a9
* add TCP_FASTOPEN_CONNECT tcp socket option from linux v4.11Szabolcs Nagy2017-11-051-0/+1
| | | | new in linux commit 19f6d3f3c8422d65b5e3d2162e30ef07c6e21ea2
* add ETH_P_IBOE from linux v4.11Szabolcs Nagy2017-11-051-0/+1
| | | | new in linux commit 69ae543969abeba48e04dd93277684c8c0895f3b
* update aarch64 hwcap.h for linux v4.11Szabolcs Nagy2017-11-051-0/+2
| | | | | | new hwcap bits were added in kernel commits 77c97b4ee21290f5f083173d957843b615abbff2 f92f5ce01ee6a6a86cbfc4e3b0d18529c302b1ea
* add kexec_file_load syscall number on powerpc from linux v4.10Szabolcs Nagy2017-11-052-0/+2
| | | | added in linux commit 80f60e509a03ff9ff2bdbf9cd1e935c6360b8bd9
* add microblaze syscall numbers from linux v4.10Szabolcs Nagy2017-11-051-0/+6
| | | | missing syscalls got allocated on microblaze.
* add TFD_TIMER_CANCEL_ON_SET that timerfd.h was missingSzabolcs Nagy2017-11-051-0/+1
| | | | | linux commit 575b1967e10a1f3038266244d2c7a3ca6b99fed8 moved timerfd apis to a new uapi header which showed musl was missing this flag.
* add ETH_MIN_MTU and ETH_MAX_MTU from linux v4.10Szabolcs Nagy2017-11-051-0/+2
| | | | | | min max mtu size definitions mostly for drivers. new in linux commits a52ad514fdf3b8a57ca4322c92d2d8d5c6182485 and d894be57ca92c8a8819ab544d550809e8731137b
* add IP_RECVFRAGSIZE and IPV6_RECVFRAGSIZE from linux v4.10Szabolcs Nagy2017-11-051-0/+2
| | | | added in linux commit 70ecc24841326396a827deb55c3fefac582a729d
* add SCM_TIMESTAMPING_OPT_STATS and related TCP_ enums from linux v4.10Szabolcs Nagy2017-11-052-0/+11
| | | | | | | for tcp timestamp control messages, new in linux commit 1c885808e45601b2b6f68b30ac1d999e10b6f606 and export time measurements via tcp_info, added in linux commit efd90174167530c67a54273fd5d8369c87f9bd32
* adjust posix_spawn dup2 action behavior to match future requirementsRich Felker2017-11-051-8/+12
| | | | | | | | | | | | | the resolution to Austin Group issue #411 defined new semantics for the posix_spawn dup2 file action in the (previously useless) case where src and dest fd are equal. future issues will require the dup2 file action to remove the close-on-exec flag. without this change, passing fds to a child with posix_spawn while avoiding fd-leak races in a multithreaded parent required a complex dance with temporary fds. based on patch by Petr Skocik. changes were made to preserve the 80-column formatting of the function and to remove code that became unreachable as a result of the new functionality.
* release 1.1.18 v1.1.18Rich Felker2017-10-312-1/+11
|
* fix build regression on ARM for ISA levels less than v5Rich Felker2017-10-251-0/+4
| | | | | | | | | | | commit 06fbefd10046a0fae7e588b7c6d25fb51811b931 (first included in release 1.1.17) introduced this regression. patch by Adrian Bunk. it fixes the regression in all cases, but spuriously prevents use of the clz instruction on very old compiler versions that don't define __ARM_ARCH. this may be fixed in a more general way at some point in the future. it also omits thumb1 logic since building as thumb1 code is currently not supported.
* fix regression in glob with literal . or .. path componentRich Felker2017-10-211-3/+5
| | | | | | | | | | | | | | | | commit 8c4be3e2209d2a1d3874b8bc2b474668fcbbbac6 was written to preclude the GLOB_PERIOD extension from matching these directory entries, but also precluded literal matches. adjust the check that excludes . and .. to check whether the GLOB_PERIOD flag is in effect, so that it cannot alter behavior in cases governed by the standard, and also don't exclude . or .. in any case where normal glob behavior (fnmatch's FNM_PERIOD flag) would have included one or both of them (patterns such as ".*"). it's still not clear whether this is the preferred behavior for GLOB_PERIOD, but at least it's clear that it can no longer break applications which are not relying on quirks of a nonstandard feature.
* posix_spawn: use larger stack to cover worst-case in execvpeWill Dietz2017-10-191-1/+1
| | | | | | | | | | | execvpe stack-allocates a buffer used to hold the full path (combination of a PATH entry and the program name) while searching through $PATH, so at least NAME_MAX+PATH_MAX is needed. The stack size can be made conditionally smaller (the current 1024 appears appropriate) should this larger size be burdensome in those situations.
* release 1.1.17 v1.1.17Rich Felker2017-10-192-1/+77
|
* in dns parsing callback, enforce MAXADDRS to preclude overflowRich Felker2017-10-181-0/+1
| | | | | | | | | | | MAXADDRS was chosen not to need enforcement, but the logic used to compute it assumes the answers received match the RR types of the queries. specifically, it assumes that only one replu contains A record answers. if the replies to both the A and the AAAA query have their answer sections filled with A records, MAXADDRS can be exceeded and clobber the stack of the calling function. this bug was found and reported by Felix Wilhelm.
* fix incorrect base name offset from nftw when pathname ends in slash(es)Rich Felker2017-10-131-3/+9
| | | | | | | | | | | | | | | the rightmost '/' character is not necessarily the delimiter before the basename; it could be a spurious trailing character on the directory name. this change does not introduce any normalization of pathnames or stripping of trailing slashes, contrary to at least glibc and perhaps other implementations; it jusst prevents their presence from breaking things. whether further changes should be made is an open question that may depend on conformance and/or application compatibility considerations. based loosely on patch by Joakim Sindholt.
* fix read-after-free type error in pthread_detachRich Felker2017-10-131-1/+2
| | | | | | | | | | | calling __unlock on t->exitlock is not valid because __unlock reads the waiters count after making the atomic store that could allow pthread_exit to continue and unmap the thread's stack and the object t points to. for now, inline the __unlock logic with an unconditional futex wake operation so that the waiters count is not needed. once __lock/__unlock have been made safe for self-synchronized destruction, we could switch back to using them.
* math: rewrite fma with mostly int arithmeticsSzabolcs Nagy2017-10-131-431/+154
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | the freebsd fma code failed to raise underflow exception in some cases in nearest rounding mode (affects fmal too) e.g. fma(-0x1p-1000, 0x1.000001p-74, 0x1p-1022) and the inexact exception may be raised spuriously since the fenv is not saved/restored around the exact multiplication algorithm (affects x86 fma too). another issue is that the underflow behaviour when the rounded result is the minimal normal number is target dependent, ieee754 allows two ways to raise underflow for inexact results: raise if the result before rounding is in the subnormal range (e.g. aarch64, arm, powerpc) or if the result after rounding with infinite exponent range is in the subnormal range (e.g. x86, mips, sh). to avoid all these issues the algorithm was rewritten with mostly int arithmetics and float arithmetics is only used to get correct rounding and raise exceptions according to the behaviour of the target without any fenv.h dependency. it also unifies x86 and non-x86 fma. fmaf is not affected, fmal need to be fixed too. this algorithm depends on a_clz_64 and it required a few spurious instructions to make sure underflow exception is raised in a particular corner case. (normally FORCE_EVAL(tiny*tiny) would be used for this, but on i386 gcc is broken if the expression is constant https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57245 and there is no easy portable fix for the macro.)
* for executing init array functions, use function type with prototypeRich Felker2017-10-131-1/+1
| | | | | | | | | | this is for consistency with the way it's done in in the dynamic linker, avoiding a deprecated C feature (non-prototype function types), and improving code generation. GCC unnecessarily uses the variadic calling convention (e.g. clearing rax on x86_64) when making a call where the argument types are not known for compatibility with wrong code which calls variadic functions this way. (C on the other hand is clear that such calls have undefined behavior.)
* fix access by setjmp and longjmp to __hwcap on arm built as thumb2Rich Felker2017-10-132-0/+2
| | | | | | | | | | | | | | | | this is a subtle issue with how the assembler/linker work. for the adr pseudo-instruction used to find __hwcap, the assembler in thumb mode generates a 16-bit thumb add instruction which can only represent word-aligned addresses, despite not knowing the alignment of the label. if the setjmp function is assigned a non-multiple-of-4 address at link time, the load then loads from the wrong address (the last instruction rather than the data containing the offset) and ends up reading nonsense instead of the value of __hwcap. this in turn causes the checks for floating-point/vector register sets (e.g. IWMMX) to evaluate incorrectly, crashing when setjmp/longjmp try to save/restore those registers. fix based on bug report by Felix Hädicke.
* fix use of memset without declaration in sched.h cpu set macrosRich Felker2017-09-281-0/+1
| | | | patch by Jörg Krause.
* powerpc{64}: fix MAP_NORESERVE and MAP_LOCKED in mman.hSzabolcs Nagy2017-09-112-1/+11
| | | | MAP_{NORESERVE,LOCKED} have different values on powerpc than in generic.
* work around incorrect EPERM from mmap syscallRich Felker2017-09-061-2/+7
| | | | | | | | | | | | | under some conditions, the mmap syscall wrongly fails with EPERM instead of ENOMEM when memory is exhausted; this is probably the result of the kernel trying to fit the allocation somewhere that crosses into the kernel range or below mmap_min_addr. in any case it's a conformance bug, so work around it. for now, only handle the case of anonymous mappings with no requested address; in other cases EPERM may be a legitimate error. this indirectly fixes the possibility of malloc failing with the wrong errno value.
* fix glob descent into . and .. with GLOB_PERIODRich Felker2017-09-061-0/+4
| | | | | | | | | GLOB_PERIOD is a gnu extension, and GNU glob does not seem to honor it except in the last path component. it's not clear whether this a bug or intentional, but it seems reasonable that it should exclude the special entries . and .. when walking. changes based on report and analysis by Julien Ramseier.