Commit graph

12044 commits

Author SHA1 Message Date
Elliott Hughes
5eb5f26e92 Merge "Add a missing riscv64 psabi constant." into main 2024-06-11 19:04:36 +00:00
Florian Mayer
eff0fada9d Merge "[HWASan] [16k] do not instrument getauxval" into main 2024-06-11 15:16:52 +00:00
Elliott Hughes
c221beccc1 Add a missing riscv64 psabi constant.
Also group all the RELR/arm64/riscv64 bits together rather than mixing them up slightly as we'd done so far.

Change-Id: Iff1ea2cfca9ff702b88aa2e7d09db46e2f34f965
2024-06-11 12:59:38 +00:00
Florian Mayer
d8328a931b [HWASan] [16k] do not instrument getauxval
To support page agnostic systems, we call getauxval before HWASan is
fully set up.

Bug: 315511637
Change-Id: I0b760943a23bd3a4d83bcc2182696a827dcbd446
2024-06-10 17:35:25 -07:00
Treehugger Robot
7619ddbc4e Merge "[riscv][bionic] Prototype TLS Descriptor support" into main 2024-06-10 11:45:26 +00:00
Paul Kirth
4d4377881d [riscv][bionic] Prototype TLS Descriptor support
Add basic assembly stubs for TLS Descriptor support in the dynamic
linker, and enable several code paths related to TLSDESC for RISC-V.

Note: This patch requires an updated toolchain that supports TLSDESC
for RISC-V, and the `-mtls-dialect=` compiler option specifically.

Test: adb shell /data/nativetest64/bionic-unit-tests/bionic-unit-tests --gtest_filter=*tls*
Bug: 322984914
Change-Id: I74bd0fa216b44b4ca2c5a5a6aec37b3fc47b00d9
2024-06-07 14:30:22 -07:00
Elliott Hughes
4358d53cd9 Move the ILP32 mmap() hackery into legacy_32_bit_support.cpp.
Every time I look at mmap.cpp, I fail to realize it's only built for ILP32.

Also improve some of the commentary in SYSCALLS.TXT and legacy_32_bit_support.cpp.

Change-Id: Ieedfe800b437e30c060c3e8663b6d96d517dbf6f
2024-06-06 21:08:17 +00:00
Elliott Hughes
3e8dd2b88c Merge "new.cpp: add sized operator delete." into main 2024-06-05 17:37:10 +00:00
Elliott Hughes
988c807ff8 Merge "<malloc.h>: warn on unused results for malloc_usable_size()." into main 2024-06-05 15:48:45 +00:00
Elliott Hughes
ad44152c38 new.cpp: add sized operator delete.
clang-19 and later default to C++14 sized deallocation. Currently we don't have C23's C equivalent of free_sized(), so we just implement these in terms of free() for now.

Bug: http://b/344993254
Change-Id: I708710aee3f7a684bfe494a96f7baed014acbe57
2024-06-05 12:26:56 +00:00
Christopher Ferris
b9279b62c2 Merge "Update to v6.9 kernel headers." into main 2024-06-04 18:22:22 +00:00
Elliott Hughes
5b57093ecc Merge "<stdio.h>: warn on some unused results." into main 2024-06-04 18:20:48 +00:00
Elliott Hughes
69ddb74135 <malloc.h>: warn on unused results for malloc_usable_size().
Not a security problem, but definitely a bug if you're calling this and ignoring the result, since it has no side-effects.

(All of the more important functions -- realloc() especially -- are already annotated.)

Change-Id: I217463518b4716befcc0ed9426648eafbfbbdde4
2024-06-04 15:32:45 +00:00
Elliott Hughes
be241d1d6b Merge "<unistd.h>: explain why getpagesize() is better than getauxval() as well as sysconf()." into main 2024-06-04 11:03:05 +00:00
Christopher Ferris
7f4c837186 Update to v6.9 kernel headers.
Kernel headers coming from:

Git: https://android.googlesource.com/kernel/common/
Branch: android-mainline
Tag: android-mainline-6.9

Test: Builds and bionic unit tests pass on raven.
Test: Able to log in to an Android GO 32 bit device.
Change-Id: If53a38bbb65c3c653ce790fe5c6e51597901a14e
2024-06-03 14:22:19 -07:00
Elliott Hughes
4e63125ce1 getpagesize(): remove "portability" claim.
This is just POSIX nonsense. Android, iOS/macOS, the BSDs, and glibc all have getpagesize(). Window doesn't, but Windows doesn't have sysconf(3) either, so there's not a strong "portability" argument to be had there!

Change-Id: Ieacfbb61c3612045f27c20c3fa4fa12694db2243
2024-06-03 19:21:46 +00:00
Elliott Hughes
b631ec7409 <unistd.h>: explain why getpagesize() is better than getauxval() as well as sysconf().
I thought we'd already done this, but apparently not.

Bug: http://b/315511637
Change-Id: I0581438a6f551be9750b6679a9f3ad06c83f1e9b
2024-06-03 19:19:22 +00:00
Elliott Hughes
78706d25d0 <stdio.h>: warn on some unused results.
This is fairly conservative, touching only those functions (such as feof()) where it's clearly an error to not use the return value.

Also fix a test that was ignoring the return value of feof() (because it was just checking whether the function could take the lock, and genuinely didn't care about the result).

Change-Id: If2ade10ae87df45a8b9bfcb24828e460201fa9a1
2024-05-31 22:55:22 +00:00
Elliott Hughes
d4c54b4448 Warn about unused results with bsearch().
This function has no side-effects, and the return value is the whole point.

Change-Id: Ibb9143c6a3c4089bfd6402c1c580ef76ce0f5d27
2024-05-31 17:33:33 +00:00
Elliott Hughes
aec1f25248 Merge "pthread_exit(): reduce duplication." into main 2024-05-30 19:47:04 +00:00
Elliott Hughes
a1e51dc4b8 Merge "Spell "calling convention" out in full." into main 2024-05-30 12:26:07 +00:00
Elliott Hughes
793ce9c90a Merge "bionic_allocator: more detailed and consistent error reporting." into main 2024-05-30 11:41:59 +00:00
Elliott Hughes
f4a27aee8d Merge "Fix some wcwidth() special cases." into main 2024-05-30 11:41:24 +00:00
Elliott Hughes
8f653f8ad9 bionic_allocator: more detailed and consistent error reporting.
I only came to improve the signature mismatch error, but I was then annoyed by the copy & paste of the other checks.

get_chunk_size() seems to be deliberately avoiding any checks, though I think that might be a bug, and there should be a get_chunk_size() that _does_ check for most callers, and a get_chunk_size_unchecked() for the <sys/thread_properties.h> stuff that seems to want to only be "best effort" (but does still have _some_ possibility of aborting, in addition to the possibility of segfaulting).

Also a bit of "include what you use" after cider complained about all the unused includes in bionic_allocator.h.

Bug: https://issuetracker.google.com/341850283
Change-Id: I278b495601353733af516a2d60ed10feb9cef36b
2024-05-29 22:25:37 +00:00
Elliott Hughes
20a9f99b3b Fix some wcwidth() special cases.
Detailed explanation in the code comments.

Test: treehugger
Change-Id: I2aef2510724c1c622b83e226b51d4c8429b88272
2024-05-29 21:45:51 +00:00
Elliott Hughes
13090d0bbf Spell "calling convention" out in full.
We only use this in one other place anyway.

Also be explicit about how `__tls_get_addr` and `___tls_get_addr` differ, since I missed that at first!

Change-Id: Ica214886c5346f118f063bca26e6dd8d74ee21f4
2024-05-29 12:34:18 +00:00
Treehugger Robot
1395fa865f Merge "<sys/thread_properties.h>: remove stray semicolon in the implementation." into main 2024-05-29 12:02:00 +00:00
Elliott Hughes
c8ea872a2f Fix gettid() in functions that call fork() or equivalent.
Bug: https://github.com/android/ndk/issues/2024
Change-Id: Ia264ce219fac99e8823e60c4a2e0607af8518056
2024-05-28 15:23:52 +00:00
Elliott Hughes
118d5da898 pthread_exit(): reduce duplication.
Strictly, this is more of "swap one form of duplication for another", but
I found the existing code non-obvious in part because people have added new
code under existing comments (which don't apply), in two places. At this
point, duplicating the _condition_ (which is much less likely to change at
all, let alone grow more complex) clarifies the code and makes the comments
match the code they're adjacent to again.

Test: treehugger
Change-Id: Ic8f01dc5b4fd14e942bf8dd7c72cab7df06d99d5
2024-05-24 14:47:40 -04:00
Elliott Hughes
87589723cc <sys/thread_properties.h>: remove stray semicolon in the implementation.
Test: treehugger
Change-Id: I5f9d9d5b45ca74de2eb837c881582a6a87fdf0f6
2024-05-24 14:46:45 -04:00
Steven Moreland
5dd8ce7284 Merge "bionic: max_android_page_size to 16384" into main 2024-05-22 21:41:54 +00:00
Christopher Ferris
dc82bd1aae Merge "Read maps data before using and do safe reads." into main 2024-05-22 20:46:34 +00:00
Steven Moreland
8401230be6 bionic: max_android_page_size to 16384
The maximum page size Android supports
now is 16384, and Art only supports 16kB,
so we can save a bit of space.

Bug: 332556665
Test: N/A
Change-Id: I23df607bcc5cf9e96d7b6a66169413cd1a883f7e
2024-05-22 18:29:04 +00:00
Elliott Hughes
7c22b4c372 Merge "Don't leak a thread when timer_create() fails." into main 2024-05-22 11:40:39 +00:00
Christopher Ferris
65e349d6c8 Read maps data before using and do safe reads.
Rather than only updating the maps when a pc can't be found, always update
the maps before using them. This avoids issues where the maps change
and it could cause a crash reading from a map that has been modified.

This assumes that executed code never gets unloaded, or that the
code is unloaded so infrequently that it doesn't matter. This happens
because the pcs for the backtraces are gathered as the program runs
and those pcs are symbolized and made into relative pcs at a later time.

Also, add safe reading of the elf data when necessary to avoid any
crashes if maps are changing while this is running.

Since the MapEntry objects can be deleted, copy the values for
the current map in the backtrace code to detect when in our own code
instead of keeping a pointer.

Bug: 340988785

Test: malloc_debug unit/system tests pass.
Test: libmemunreachable tests pass.
Change-Id: Ica2ba50a5bcf9e19c7e4033e29a5a67a1847d1a6
2024-05-21 17:41:22 -07:00
Elliott Hughes
c793bc00f5 Don't leak a thread when timer_create() fails.
We do the same thing in pthread_create().

This has the nice side-effect of letting us move part of the child setup that we were doing in the parent into the child where it belongs.

Bug: https://issuetracker.google.com/340125671
Change-Id: Ibe646d5ca9066f487d08fd40f004550349e8a02e
2024-05-21 21:35:49 +00:00
Elliott Hughes
ccc4dbf135 execinfo.cpp: Add a __riscv case.
This makes this TraceFunction() more like trace_function() in malloc_debug. I'll leave whether we can collapse these into one implementation as an open question for now...

Change-Id: I3981e4114244d49f8dbae1d3b776a7e9c32be688
2024-05-21 15:11:15 +00:00
Elliott Hughes
a13b3b32e0 Merge "Tidy and document the inline/__inline/__inline__ situation." into main 2024-05-21 11:49:20 +00:00
Elliott Hughes
09c660bf75 Add riscv64 implementation of __get_bionic_tcb_for_thread().
Bug: http://b/339287219
Change-Id: I2b6f2603cd34e1575d575565c369663bfcdf9be1
2024-05-17 17:18:57 +00:00
Elliott Hughes
88908db595 Merge "Minor <android/dlext.h> documentation improvements." into main 2024-05-16 21:21:24 +00:00
Treehugger Robot
bdba54d9c5 Merge "Update <android/api-level.h>." into main 2024-05-16 20:35:55 +00:00
Treehugger Robot
923b48c1c5 Merge "Update <system_properties.h> documentation." into main 2024-05-16 19:57:13 +00:00
Elliott Hughes
c2622a5d4c Minor <android/dlext.h> documentation improvements.
Change-Id: I7ba1228c938e2fce858beb126e1e81620bba0459
2024-05-16 19:02:36 +00:00
Elliott Hughes
3772ae4f96 Update <system_properties.h> documentation.
Change-Id: I70de8dee963d00c480e0cb2faa9988d1d6c76d05
2024-05-16 18:45:03 +00:00
Elliott Hughes
d6c3a078bc Update <android/api-level.h>.
Change-Id: Id1522fdaf3041dcd3f296a716e8a2a1936c389e8
2024-05-16 18:31:47 +00:00
Elliott Hughes
72b10fc254 Document <link.h>.
I was only here to stop saying "Android R", which doesn't mean much to most app developers, but while I'm here...

Change-Id: I0ffd5d679747491d338064e36efc80b2b82e9e06
2024-05-16 18:10:23 +00:00
Treehugger Robot
03a4448dcf Merge "[MTE] cleanup: factor out BIONIC_MEMTAG_UPGRADE_SECS handling" into main 2024-05-15 19:40:01 +00:00
Florian Mayer
f3326581c0 [MTE] cleanup: factor out BIONIC_MEMTAG_UPGRADE_SECS handling
This makes __libc_init_mte easier to read.

Change-Id: I2826f62e53895093d1631d4e6c7e3ff844cf9def
2024-05-15 16:39:36 +00:00
Elliott Hughes
3469e7df9b Tidy and document the inline/__inline/__inline__ situation.
We can (and should) use `inline` in C++ but not in C headers that
need to support ANSI/C89/C90. `__inline__` works everywhere, but
traditionally we've used the BSD `__inline` in public headers.

Change-Id: I920e0a1f5fcd01cf8ddd89240ef66b25c50378d7
2024-05-15 16:06:07 +00:00
Dan Albert
2237fcf1fa Revert "Use inline keyword without underscores consistently"
This reverts commit 58f06e1112.

Bare `inline` is not ANSI C compatible, and NDK users may be using
that.

Test: treehugger
Change-Id: I82c5424522142001cd59da63ef3fd440014451ad
2024-05-14 17:55:54 +00:00