Commit Graph

4557 Commits

Author SHA1 Message Date
Szabolcs Nagy
f035c7b1e6 netinet/if_ether.h: add ETH_P_MRP from linux v5.8
Ethernet protocol number for media redundancy protocol, see

  linux commit 4714d13791f831d253852c8b5d657270becb8b2a
  bridge: uapi: mrp: Add mrp attributes.
2020-09-09 17:22:04 -04:00
Szabolcs Nagy
6b1741aaf5 elf.h: add .note.gnu.property related definitions
On x86 and aarch64 GNU properties may be used to mark ELF objects.
2020-09-09 17:22:02 -04:00
Szabolcs Nagy
9b7ed9702c bits/syscall.h: add __NR_faccessat2 from linux v5.8
the linux faccessat syscall lacks a flag argument that is necessary
to implement the posix api, see

  linux commit c8ffd8bcdd28296a198f237cc595148a8d4adfbe
  vfs: add faccessat2 syscall
2020-09-09 17:21:03 -04:00
Szabolcs Nagy
616a8bf660 netinet/tcp.h: update to linux v5.7
add TCP_NLA_BYTES_NOTSENT and new tcp_zerocopy_receive fields, see

  linux commit c8856c051454909e5059df4e81c77b9c366c5515
  tcp-zerocopy: Return inq along with tcp receive zerocopy.

  linux commit 33946518d493cdf10aedb4a483f1aa41948a3dab
  tcp-zerocopy: Return sk_err (if set) along with tcp receive zerocopy.

  linux commit e08ab0b377a1489760533424437c5f4be7f484a4
  tcp: add bytes not sent to SCM_TIMESTAMPING_OPT_STATS
2020-09-09 17:20:57 -04:00
Szabolcs Nagy
a6c302bec1 sys/mman.h: add MREMAP_DONTUNMAP from linux v5.7
it remaps anon mappings without unmapping the original. chromeos plans
to use it with userfaultfd, see:

  linux commit e346b3813067d4b17383f975f197a9aa28a3b077
  mm/mremap: add MREMAP_DONTUNMAP to mremap()
2020-09-09 17:20:54 -04:00
Szabolcs Nagy
8adf42f7c1 sys/fanotify.h: update to linux v5.7
see

  linux commit 9e2ba2c34f1922ca1e0c7d31b30ace5842c2e7d1
  fanotify: send FAN_DIR_MODIFY event flavor with dir inode and name

  linux commit 44d705b0370b1d581f46ff23e5d33e8b5ff8ec58
  fanotify: report name info for FAN_DIR_MODIFY event
2020-09-09 17:20:49 -04:00
Szabolcs Nagy
94ab68c24c aarch64: add new HWCAP2_ macros from linux v5.6
added in

  linux commit 1a50ec0b3b2e9a83f1b1245ea37a853aac2f741c
  arm64: Implement archrandom.h for ARMv8.5-RNG

  linux commit d4209d8b717311d114b5d47ba7f8249fd44e97c2
  arm64: cpufeature: Export matrix and other features to userspace
2020-09-09 17:20:43 -04:00
Szabolcs Nagy
0296baff0e aarch64: add HWCAP2_ macros from linux v5.3
these were missed before, added in

  linux commit 1201937491822b61641c1878ebcd16a93aed4540
  arm64: Expose ARMv8.5 CondM capability to userspace

  linux commit ca9503fc9e9812aa6258e55d44edb03eb30fc46f
  arm64: Expose FRINT capabilities to userspace
2020-09-09 17:20:40 -04:00
Szabolcs Nagy
43b640c2ff sched.h: add CLONE_NEWTIME from linux v5.6
reuses a bit from CSIGNAL so it can only be used with unshare
and clone3, added in

  linux commit 769071ac9f20b6a447410c7eaa55d1a5233ef40c
  ns: Introduce Time Namespace
2020-09-09 17:20:34 -04:00
Szabolcs Nagy
3da18e6951 sys/random.h: add GRND_INSECURE from linux v5.6
added in

  linux commit 75551dbf112c992bc6c99a972990b3f272247e23
  random: add GRND_INSECURE to return best-effort non-cryptographic bytes
2020-09-09 17:20:27 -04:00
Szabolcs Nagy
8f4aa78a0c sys/prctl.h: add PR_{SET,GET}_IO_FLUSHER from linux v5.6
needed for storage drivers with userspace component that may
run in the IO path, see

  linux commit 8d19f1c8e1937baf74e1962aae9f90fa3aeab463
  prctl: PR_{G,S}ET_IO_FLUSHER to support controlling memory reclaim
2020-09-09 17:20:22 -04:00
Szabolcs Nagy
1ab341e89b netinet/udp.h: add TCP_ENCAP_ESPINTCP from linux v5.6
The use of TCP_ in udp.h is not known, fortunately udp.h is not
specified by posix so there are no strict namespace rules, added in

  linux commit e27cca96cd68fa2c6814c90f9a1cfd36bb68c593
  xfrm: add espintcp (RFC 8229)
2020-09-09 17:20:19 -04:00
Szabolcs Nagy
c6321616b8 netinet/tcp.h: update for linux v5.6
TCP_NLA_TIMEOUT_REHASH queries timeout-triggered rehash attempts,
tcpm_ifindex limits the scope of TCP_MD5SIG* sockopt to a device.

see

  linux commit 32efcc06d2a15fa87585614d12d6c2308cc2d3f3
  tcp: export count for rehash attempts

  linux commit 6b102db50cdde3ba2f78631ed21222edf3a5fb51
  net: Add device index to tcp_md5sig
2020-09-09 17:20:18 -04:00
Szabolcs Nagy
8fca0ea4e9 netinet/in.h: add IPPROTO_ macros from linux v5.6
add IPPROTO_ETHERNET and IPPROTO_MPTCP, see

  linux commit 2677625387056136e256c743e3285b4fe3da87bb
  seg6: fix SRv6 L2 tunnels to use IANA-assigned protocol number

  linux commit faf391c3826cd29feae02078ca2022d2f912f7cc
  tcp: Define IPPROTO_MPTCP
2020-09-09 17:20:15 -04:00
Szabolcs Nagy
d990090384 add pidfd_getfd and openat2 syscall numbers from linux v5.6
also added clone3 on sh and m68k, on sh it's still missing (not
yet wired up), but reserved so safe to add.

see

  linux commit fddb5d430ad9fa91b49b1d34d0202ffe2fa0e179
  open: introduce openat2(2) syscall

  linux commit 9a2cef09c801de54feecd912303ace5c27237f12
  arch: wire up pidfd_getfd syscall

  linux commit 8649c322f75c96e7ced2fec201e123b2b073bf09
  pid: Implement pidfd_getfd syscall

  linux commit e8bb2a2a1d51511e6b3f7e08125d52ec73c11139
  m68k: Wire up clone3() syscall
2020-09-09 17:19:55 -04:00
Szabolcs Nagy
d4f298149c netinet/tcp.h: update tcp_info for linux v5.5
see

  linux commit 480274787d7e3458bc5a7cfbbbe07033984ad711
  tcp: add TCP_INFO status for failed client TFO
2020-09-09 17:19:50 -04:00
Rich Felker
ffac0c2299 use generic bits/fcntl.h for x86_64 and riscv64
these were only using a custom version because they needed the
"non-64" variants of the file locking command macros.
2020-09-03 18:02:55 -04:00
Rich Felker
76f42fdf34 make generic bits/fcntl.h shareable with 64-bit archs
the fcntl file locking command macro values in the existing generic
bits/fcntl.h were the "64" variants, requiring 64-bit archs that use
the "plain" variants to have their own bits/fcntl.h, even if they
otherwise use the common definitions for everything.

since commit 7cc79d10af exposed
__LONG_MAX to all bits headers, we can now make the generic one common
between 32- and 64-bit archs.
2020-09-03 17:58:17 -04:00
Rich Felker
b8b729bd22 fix missing O_LARGEFILE values on x86_64, x32, and mips64
prior to commit 685e40bb09, x86_64 was
correctly passing O_LARGEFILE to SYS_open; it was removed (defined to
0 in the public header, and changed to use the public definition) as
part of that change, probably out of a mistaken belief that it's not
needed.

however, on a mixed system with 32-bit and 64-bit binaries, it's
important that all files be opened with O_LARGEFILE, even if the
opening process is 64-bit, in case a descriptor is passed to a 32-bit
process. otherwise, attempts to access past 2GB in the 32-bit process
could produce EOVERFLOW.

most 64-bit archs added later got this right alread, except for
mips64. x32 was also affected. there are now fixed.
2020-09-03 17:37:11 -04:00
Rich Felker
262003ad9d fix missing newline in herror output 2020-09-03 17:30:22 -04:00
Rich Felker
0b06402193 fix i386 __set_thread_area fallback
this code is only needed for pre-2.6 kernels, which are not actually
supported anyway, and was never tested. the fallback path using
SYS_modify_ldt failed to clear the upper bits of %eax (all ones due to
SYS_set_thread_area's return value being an error) before modifying
%al to attempt a new syscall.
2020-08-30 21:37:12 -04:00
Rich Felker
cf27184d00 restore h_errno ABI compatibility with ancient binaries
prior to commit e68c51ac46, h_errno was
actually an external data object not a macro. bring back the symbol,
and use it as the storage for the main thread's h_errno.

technically this still doesn't provide full compatibility if the
application was multithreaded, but at the time there were no res_*
functions (and they did not set h_errno anyway), so any use of h_errno
would have been via thread-unsafe functions. thus a solution that just
fixes single-threaded applications seems acceptable.
2020-08-30 21:30:37 -04:00
Rich Felker
cab0a8fb8d clean up overinclusion in files using TIOCGWINSZ
now that struct winsize is available via sys/ioctl.h once again,
including termios.h is not needed.
2020-08-30 16:49:48 -04:00
Rich Felker
1ccc804e13 fix regression with applications that expect struct winsize in ioctl.h
putting the (simple) definition in alltypes.h seems like the best
solution here. making sys/ioctl.h implicitly include termios.h is
probably excess namespace pollution.
2020-08-30 16:47:40 -04:00
Rich Felker
86ac0f7947 configure: enable warnings by default
now that -Wall is not used and we control which warnings are enabled,
it makes sense to have the wanted ones on by default. hopefully this
will also discourage manually adding -Wall to CFLAGS and making
incorrect changes or bug reports based on the compiler's output.
2020-08-27 20:43:47 -04:00
Rich Felker
0a312d34b9 configure: use additive warnings instead of subtracting from -Wall
-Wall varies too much by compiler and version. rather than trying to
track all the unwanted style warnings that need to be subtracted, just
enable wanted warnings.

also, move -Wno-pointer-to-int-cast outside --enable-warnings
conditional so that it always applies, since it's turning off a
nuisance warning that's on-by-default with most compilers.
2020-08-27 20:39:41 -04:00
Rich Felker
e7f808e359 configure: add further -Werror=... options to detected CFLAGS
these four warning options were overlooked previously, likely because
they're not part of GCC's -Wall. they all detect constraint violations
(invalid C at the source level) and should always be on in -Werror
form.
2020-08-27 18:50:02 -04:00
Rich Felker
57f6e85c9d remove redundant pthread struct members repeated for layout purposes
dtv_copy, canary2, and canary_at_end existed solely to match multiple
ABI and asm-accessed layouts simultaneously. now that pthread_arch.h
can be included before struct __pthread is defined, the struct layout
can depend on macros defined by pthread_arch.h.
2020-08-27 18:36:45 -04:00
Rich Felker
3a5b9ae7cf deduplicate __pthread_self thread pointer adjustment out of each arch
the adjustment made is entirely a function of TLS_ABOVE_TP and
TP_OFFSET. aside from avoiding repetition of the TP_OFFSET value and
arithmetic, this change makes pthread_arch.h independent of the
definition of struct __pthread from pthread_impl.h. this in turn will
allow inclusion of pthread_arch.h to be moved to the top of
pthread_impl.h so that it can influence the definition of the
structure.

previously, arch files were very inconsistent about the type used for
the thread pointer. this change unifies the new __get_tp interface to
always use uintptr_t, which is the most correct when performing
arithmetic that may involve addresses outside the actual pointed-to
object (due to TP_OFFSET).
2020-08-27 18:36:45 -04:00
Rich Felker
ea71a9004e deduplicate TP_ADJ logic out of each arch, replace with TP_OFFSET
the only part of TP_ADJ that was not uniquely determined by
TLS_ABOVE_TP was the 0x7000 adjustment used mainly on mips and powerpc
variants.
2020-08-24 22:04:52 -04:00
Rich Felker
19f8642494 report res_query failures, including nxdomain/nodata, via h_errno
while it's not clearly documented anywhere, this is the historical
behavior which some applications expect. applications which need to
see the response packet in these cases, for example to distinguish
between nonexistence in a secure vs insecure zone, must already use
res_mkquery with res_send in order to be portable, since most if not
all other implementations of res_query don't provide it.
2020-08-24 22:02:14 -04:00
Rich Felker
9d0b8b92a5 make h_errno thread-local
the framework to do this always existed but it was deemed unnecessary
because the only [ex-]standard functions using h_errno were not
thread-safe anyway. however, some of the nonstandard res_* functions
are also supposed to set h_errno to indicate the cause of error, and
were unable to do so because it was not thread-safe. this change is a
prerequisite for fixing them.
2020-08-24 21:38:49 -04:00
Rich Felker
4d5786544b add tcgetwinsize and tcsetwinsize functions, move struct winsize
these have been adopted for future issue of POSIX as the outcome of
Austin Group issue 1151, and are simply functions performing the roles
of the historical ioctls. since struct winsize is being standardized
along with them, its definition is moved to the appropriate header.

there is some chance this will break source files that expect struct
winsize to be defined by sys/ioctl.h without including termios.h. if
this happens, further changes will be needed to have sys/ioctl.h
expose it too.
2020-08-24 21:31:18 -04:00
Rich Felker
9d4b25b473 fix MUSL_LOCPATH search
all path elements but the last had the final byte truncated.
2020-08-22 13:51:32 -04:00
Rich Felker
d49cf07541 add gettid function
this is a prerequisite for addition of other interfaces that use
kernel tids, including futex and SIGEV_THREAD_ID.

there is some ambiguity as to whether the semantic return type should
be int or pid_t. either way, futex API imposes a contract that the
values fit in int (excluding some upper reserved bits). glibc used
pid_t, so in the interest of not having gratuitous mismatch (the
underlying types are the same anyway), pid_t is used here as well.

while conceptually this is a syscall, the copy stored in the thread
structure is always valid in all contexts where it's valid to call
libc functions, so it's used to avoid the syscall.
2020-08-17 20:12:53 -04:00
Szabolcs Nagy
22359b54ab aarch64: fix setjmp return value
longjmp should set the return value of setjmp, but 64bit
registers were used for the 0 check while the type is int.

use the code that gcc generates for return val ? val : 1;
2020-08-12 21:53:25 -04:00
Alexander Monakov
4554f155dd setjmp: optimize longjmp prologues
Use a branchless sequence that is one byte shorter on 64-bit, same size
on 32-bit. Thanks to Pete Cawley for suggesting this variant.
2020-08-12 21:52:56 -04:00
Alexander Monakov
59b64ff686 setjmp: optimize x86 longjmp epilogues 2020-08-11 14:43:20 -04:00
Alexander Monakov
c6a6fe4ccd setjmp: avoid useless REX-prefix on xor %eax, %eax 2020-08-11 14:43:12 -04:00
Alexander Monakov
21431a0e43 setjmp: fix x86-64 longjmp argument adjustment
longjmp 'val' argument is an int, but the assembly is referencing 64-bit
registers as if the argument was a long, or the caller was responsible
for extending the argument. Though the psABI is not clear on this, the
interpretation in GCC is that high bits may be arbitrary and the callee
is responsible for sign/zero-extending the value as needed (likewise for
return values: callers must anticipate that high bits may be garbage).

Therefore testing %rax is a functional bug: setjmp would wrongly return
zero if longjmp was called with val==0, but high bits of %rsi happened
to be non-zero.

Rewrite the prologue to refer to 32-bit registers. In passing, change
'test' to use %rsi, as there's no advantage to using %rax and the new
form is cheaper on processors that do not perform move elimination.
2020-08-11 14:42:54 -04:00
Rich Felker
c2feda4e2e prefer new socket syscalls, fallback to SYS_socketcall only if needed
a number of users performing seccomp filtering have requested use of
the new individual syscall numbers for socket syscalls, rather than
the legacy multiplexed socketcall, since the latter has the arguments
all in memory where they can't participate in filter decisions.

previously, some archs used the multiplexed socketcall if it was
historically all that was available, while other archs used the
separate syscalls. the intent was that the latter set only include
archs that have "always" had separate socket syscalls, at least going
back to linux 2.6.0. however, at least powerpc, powerpc64, and sh were
wrongly included in this set, and thus socket operations completely
failed on old kernels for these archs.

with the changes made here, the separate syscalls are always
preferred, but fallback code is compiled for archs that also define
SYS_socketcall. two such archs, mips (plain o32) and microblaze,
define SYS_socketcall despite never having needed it, so it's now
undefined by their versions of syscall_arch.h to prevent inclusion of
useless fallback code.

some archs, where the separate syscalls were only added after the
addition of SYS_accept4, lack SYS_accept. because socket calls are
always made with zeros in the unused argument positions, it suffices
to just use SYS_accept4 to provide a definition of SYS_accept, and
this is done to make happy the macro machinery that concatenates the
socket call name onto __SC_ and SYS_.
2020-08-08 20:59:26 -04:00
Szabolcs Nagy
933f8e72eb math: new software sqrtl
same approach as in sqrt.

sqrtl was broken on aarch64, riscv64 and s390x targets because
of missing quad precision support and on m68k-sf because of
missing ld80 sqrtl.

this implementation is written for quad precision and then
edited to make it work for both m68k and x86 style ld80 formats
too, but it is not expected to be optimal for them.

note: using fp instructions for the initial estimate when such
instructions are available (e.g. double prec sqrt or rsqrt) is
avoided because of fenv correctness.
2020-08-05 23:06:01 -04:00
Szabolcs Nagy
4f893997e4 math: add __math_invalidl
for targets where long double is different from double.
2020-08-05 23:05:57 -04:00
Szabolcs Nagy
b1756ec884 math: new software sqrtf
same method as in sqrt, this was tested on all inputs against
an sqrtf instruction. (the only difference found was that x86
sqrtf does not signal the x86 specific input-denormal exception
on negative subnormal inputs while the software sqrtf does,
this is fine as it was designed for ieee754 exceptions only.)

there is known faster method:
"Computing Floating-Point Square Roots via Bivariate Polynomial Evaluation"
that computes sqrtf directly via pipelined polynomial evaluation
which allows more parallelism, but the design does not generalize
easily to higher precisions.
2020-08-05 23:05:36 -04:00
Szabolcs Nagy
97e9b73d59 math: new software sqrt
approximate 1/sqrt(x) and sqrt(x) with goldschmidt iterations.
this is known to be a fast method for computing sqrt, but it is
tricky to get right, so added detailed comments.

use a lookup table for the initial estimate, this adds 256bytes
rodata but it can be shared between sqrt, sqrtf and sqrtl.
this saves one iteration compared to a linear estimate.

this is for soft float targets, but it supports fenv by using a
floating-point operation to get the final result.  the result
is correctly rounded in all rounding modes.  if fenv support is
turned off then the nearest rounded result is computed and
inexact exception is not signaled.

assumes fast 32bit integer arithmetics and 32 to 64bit mul.
2020-08-05 23:05:33 -04:00
Rich Felker
f1198ea3cf in hosts file lookups, honor first canonical name regardless of family
prior to this change, the canonical name came from the first hosts
file line matching the requested family, so the canonical name for a
given hostname could differ depending on whether it was requested with
AF_UNSPEC or a particular family (AF_INET or AF_INET6). now, the
canonical name is deterministically the first one to appear with the
requested name as an alias.
2020-08-05 21:35:00 -04:00
Rich Felker
20c6d83f55 in hosts file lookups, use only first match for canonical name
the existing code clobbered the canonical name already discovered
every time another matching line was found, which will necessarily be
the case when a hostname has both IPv4 and v6 definitions.

patch by Wolf.
2020-08-04 14:20:40 -04:00
Rich Felker
73cc775bee release 1.2.1 2020-08-04 00:21:09 -04:00
Rich Felker
845e4f6692 add m68k sqrtl using native instruction
this is actually a functional fix at present, since the C sqrtl does
not support ld80 and just wraps double sqrt. once that's fixed it will
just be an optimization.
2020-08-02 23:31:51 -04:00
Bartosz Brachaczek
ddf1750e42 getentropy: fix UB if len==0
if len==0, an uninitalized variable would be returned
2020-07-24 14:54:40 -04:00