Commit graph

42778 commits

Author SHA1 Message Date
Treehugger Robot
4981a83859 Merge "Remove historical cruft." into main 2024-05-02 18:13:47 +00:00
Kalesh Singh
5134762efa bionic: loader: Drop readahead padding pages
These are padding pages are only needed to layout the ELF to be
compatible with max-page-size. They are zero-filled (holes) and
can be dropped from the page cache.

The madvise() here is a special case that also serves to hint to the
kernel what part of the segment is padding.

For example the kernel then shows these padding regions as PROT_NONE
VMAs (labeled [page size compat]) in /proc/*/maps.

Note: This doesn't use backing vm_area_structs, so doesn't consume
additional slab memory.

Before:

❯ cf-adb shell cat /proc/1/maps | grep -A1 'libbase.so$'
7f8d13600000-7f8d13614000 r--p 00000000 fe:09 21909460    /system/lib64/libbase.so
7f8d13614000-7f8d13638000 r-xp 00014000 fe:09 21909460    /system/lib64/libbase.so
7f8d13638000-7f8d1363c000 r--p 00038000 fe:09 21909460    /system/lib64/libbase.so
7f8d1363c000-7f8d1363d000 rw-p 0003c000 fe:09 21909460    /system/lib64/libbase.so

Segments appear extended in /proc/<pid>/maps

After:

❯ cf-adb shell cat /proc/1/maps | grep -A1 'libbase.so$'
7f3650043000-7f3650054000 r--p 00000000 fe:09 21906900    /system/lib64/libbase.so
7f3650054000-7f3650057000 ---p 00000000 00:00 0           [page size compat]
7f3650057000-7f3650079000 r-xp 00014000 fe:09 21906900    /system/lib64/libbase.so
7f3650079000-7f365007b000 ---p 00000000 00:00 0           [page size compat]
7f365007b000-7f365007c000 r--p 00038000 fe:09 21906900    /system/lib64/libbase.so
7f365007c000-7f365007f000 ---p 00000000 00:00 0           [page size compat]
7f365007f000-7f3650080000 rw-p 0003c000 fe:09 21906900    /system/lib64/libbase.so

Segments maintain PROT_NONE gaps ("[page size compat]") for app
compatiblity but these are not backed by actual slab VMA memory.

Bug: 330117029
Bug: 327600007
Bug: 330767927
Bug: 328266487
Bug: 329803029
Test: Manual - Launch Free Fire Chaos app
Change-Id: Ic50540e247b4294eb08f8cf70e74bd2bf6606684
Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
2024-05-02 11:06:53 -07:00
Kalesh Singh
c5c1d19ebb loader: Only extend segments if kernel supports page size migration
It has been found that some existing apps have implicit dependencies on
the address ranges in /proc/*/maps. Since segment extension changes the
range of the LOAD segment VMAs some of these apps crash, either by
SIGBUS or in yet unidentified ways.

Only perform the segment extension optimization if the kernel has the
necessary mitigations to ensure app compatibility.

Bug: 330117029
Bug: 327600007
Bug: 330767927
Bug: 328266487
Bug: 329803029
Test: Manual - Launch Free Fire Chaos app
Change-Id: I5b03b22c4a468f6646750a00942cc2d57f43d0de
Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
2024-05-02 11:06:51 -07:00
Treehugger Robot
728980c691 Merge "__system_property_add: log specifics about failures." into main 2024-05-02 18:03:48 +00:00
Kalesh Singh
e1e747984f bionic: loader: Don't extend LOAD segments for p_aligns > 64KiB
Loader segment extension was introduced to fix kernel slab memory
regressions in page-agnostic Android. This reression was due to required
VMAs for the gap VMAs that exist when the elf-max-page-size >
runtime-page-size.

This issue already existed for some libraries like libart.so and
libhwui.so which use 2mB alignment to make use of THPs (transparent huge
pages).

Later it was found that this optimization could break in-field apps due
to dependencies and the address ranges in /proc/*/[s]maps.

To avoid breaking the in-field apps, the kernel can work around the
compatibility issues if made aware of where the padding regions exist.
However, the kernel can only represent padding for p_align up to 64KiB.
This is because the kernel uses 4 available bits in the vm_area_struct
to represent padding extent; and so cannot enable mitigations to avoid
breaking app compatibility for p_aligns > 64KiB.

For ELFs with p_align > 64KiB, don't do segment extension, to avoid issues
with app compatibility -- these ELFs already exist with gap mappings
and are not part of the page size transition VMA slab regression.

Bug: 330117029
Bug: 327600007
Bug: 330767927
Bug: 328266487
Bug: 329803029
Test: Manual - Launch Free Fire Chaos app
Change-Id: Id4dcced4632dce67adab6348816f85847ce1de58
Signed-off-by: Kalesh Singh <kaleshsingh@google.com>
2024-05-02 09:26:10 -07:00
Elliott Hughes
622b6aeeef __system_property_add: log specifics about failures.
Failure to add a property should be rare, so log the specific
failure to aid in debugging.

Bug: http://b/322714325
Change-Id: I9461428f16d7d04d5aceb910a5cf1c928cfe9da2
2024-05-01 23:46:45 +00:00
Elliott Hughes
a8cd731c2b Remove historical cruft.
We're definitely on a new enough clang now...

Change-Id: I7ec4ad0e78872edbde05a31574dd78f219bb115c
2024-05-01 22:43:31 +00:00
Christopher Ferris
b54250572d Change malloc_not_svelte to malloc_low_memory.
The malloc_not_svelte product variable has been removed and is
replaced by malloc_low_memory. This switches the sense of the

Test: Verified scudo config is used by default.
Test: Verified Android GO config uses the jemalloc low memory config.
Test: Verified that the default config on oriole produces the exact same
Test: libc.so with and without this change.
Change-Id: I48085fa6c2dcf5c61f847ef1f15c38653d1f7214
2024-05-01 15:33:45 -07:00
Treehugger Robot
4d9af810fd Merge "16k: bionic: Replace hardcoded page size with getpagesize()" into main 2024-05-01 16:14:52 +00:00
Vilas Bhat
297e7dd30f 16k: bionic: Replace hardcoded page size with getpagesize()
The optional block size for the /proc filesystem is set to page size.
The tests must reflect the same.

Bug: 315510913
Change-Id: Ifccf833829b4ea4ff9c7d375208124cdc43af04a
2024-05-01 01:14:56 +00:00
Florian Mayer
fb48ddc964 Merge "Make "remapping stacks as PROT_MTE" debug log" into main 2024-04-30 19:18:36 +00:00
Florian Mayer
05c16e7f54 Make "remapping stacks as PROT_MTE" debug log
This was spamming logcat

Change-Id: I3255b583d594a91faae8680aaef94d793c3c26a9
2024-04-30 18:13:14 +00:00
Elliott Hughes
f390fbca3e Merge "Upstream sync." into main 2024-04-30 15:29:31 +00:00
Elliott Hughes
81c54c72b3 Upstream sync.
Also clean up some obsolete cruft from openbsd-compat.h...

Test: treehugger
Change-Id: I9eae0f8304e701d032045617427289002d234cd8
2024-04-29 23:41:39 +00:00
Treehugger Robot
cdbc7c75f5 Merge "[scudo] -1 is also valid for M_DECAY_TIME" into main 2024-04-29 20:07:46 +00:00
Chia-hung Duan
6abb406e0a [scudo] -1 is also valid for M_DECAY_TIME
Test: Run tests
Change-Id: I044ef84bf0ec97c0f8cb8d3a2340b82218d85efc
2024-04-26 15:24:24 -07:00
Aditya Kumar
e7efd77d2c Merge "[RISC-V] Add misaligned load store tests" into main 2024-04-26 16:56:06 +00:00
Elliott Hughes
f789ddab1e Merge "get_executable_info: minor clarification." into main 2024-04-26 15:04:19 +00:00
Ryan Prichard
fc306b951b Merge "Revert "Switch the loader to a noexcept version of libc++"" into main 2024-04-26 01:52:16 +00:00
Ryan Prichard
698ca39c9e Revert "Switch the loader to a noexcept version of libc++"
Revert submission 2675705-use-prebuilt-libcxx

Reason for revert: breaks some Android tests (b/337120479, b/337121737, b/337122511)

Reverted changes: /q/submissionid:2675705-use-prebuilt-libcxx

Bug: 337120479
Bug: 337121737
Bug: 337122511
Change-Id: Ic5256fb1b4f09967ec29f36d8bdf96a16649ca05
2024-04-26 01:00:13 +00:00
AdityaK
24705dbdb5 [RISC-V] Add misaligned load store tests
hwprobe test may be insufficient to guarantee fast (or even supported) unaligned access.
Test case based on: https://github.com/llvm/llvm-project/issues/88029

Previous commit got reverted due to compiler errors(b/336800888).
Not sure why the errors were not detected in pre-submit builds.

Bug: https://github.com/google/android-riscv64/issues/142

Change-Id: If1c4150701298c0f351baa9ce1870509a00c250a
2024-04-25 16:15:00 -07:00
Ryan Prichard
686803d2a9 Merge "Switch the loader to a noexcept version of libc++" into main 2024-04-25 19:18:08 +00:00
Elliott Hughes
33de2737d9 get_executable_info: minor clarification.
Change the comment to explain _why_ we're resolving the path, get
rid of unnecessarily explicit strlen() calls, and make it clearer
that result.path is unconditionally initialized; it's just the
specific content that varies.

Change-Id: Iffbd5efc2eafd56e3efa3c0aaf7c191e6bb66a04
2024-04-25 16:44:48 +00:00
Treehugger Robot
c5be8dfe7c Merge "linker: use realpath instead of readlink when getting the symlink path" into main 2024-04-25 16:14:15 +00:00
Treehugger Robot
9c7892202f Merge "Only try to initialize appcompat properties if the folder is present" into main 2024-04-24 22:35:37 +00:00
Prashanth Swaminathan
f31e93c6e6 Merge "Revert "[RISC-V] Add misaligned load store tests"" into main 2024-04-24 18:12:54 +00:00
Prashanth Swaminathan
1cb919c07c Revert "[RISC-V] Add misaligned load store tests"
This reverts commit 4250342124.

Reason for revert: b/336800888, broke RISC-V build.

Change-Id: I8102bb0c20f80153b97853e5c988add31d4693fc
2024-04-24 16:43:44 +00:00
Aditya Kumar
cf02614a4b Merge "[RISC-V] Add misaligned load store tests" into main 2024-04-24 15:01:16 +00:00
AdityaK
4250342124 [RISC-V] Add misaligned load store tests
hwprobe test may be insufficient to guarantee fast (or even supported) unaligned access.

Bug: https://github.com/google/android-riscv64/issues/142
Bug: https://github.com/llvm/llvm-project/issues/88029

Change-Id: Ib673c5b752da8630296926e5ec7f59f41b686016
2024-04-23 13:17:04 -07:00
Elliott Hughes
5063d26249 Merge "Always use __foo__ for attribute names." into main 2024-04-23 00:12:32 +00:00
Treehugger Robot
ae038dcdea Merge "Replace commented-out deprecated attribute with doc comment." into main 2024-04-22 22:34:41 +00:00
Elliott Hughes
899d809bca Merge "__system_property_set: add string names for init's error codes." into main 2024-04-22 22:18:15 +00:00
Elliott Hughes
a933582f3e __system_property_set: add string names for init's error codes.
https://issuetracker.google.com/336223505 is not the first
hard-to-read bug here.

Change-Id: I520aeb2cb87423f8db394bf4709d659e3eb3a309
2024-04-22 22:18:06 +00:00
Elliott Hughes
9b9371bd0e Replace commented-out deprecated attribute with doc comment.
This attribute had been commented out since it was first
committed a decade ago. No-one's going to chase down arm32-only
trivia like that before arm32 and x86 are removed as obsolete...

Change-Id: I8e29d16657b3f4ce379e65732d747f969ea31dae
2024-04-22 20:17:22 +00:00
Elliott Hughes
a1b5ca2fe0 Always use __foo__ for attribute names.
To avoid collisions with other macros.

Change-Id: I015639043deaceccaf5f11365f8bdc45ca703da5
2024-04-22 20:10:53 +00:00
chenxinyuanchen
8d7c0f4f09 linker: use realpath instead of readlink when getting the symlink path
Fix the issue if link for an symlink that point to an relative path
cause the linker can not find the right absolute path.

For example:
lrwxr-xr-x 1 root shell 13 2009-01-01 08:00 /system/bin/app_process -> app_process64

the '/system/bin/app_process' is symlinked to 'app_process64' and will be failed.

if the 'exe_to_load' is null and also failed when stat '/proc/self/exe'
will entered this path.

Without Patch:
  [ Linking executable "app_process64" ]
  linker: CANNOT LINK EXECUTABLE "/system/bin/app_process": library "libnativeloader.so" not found: needed by main executable

With Patch:
  [ Linking executable "/system/bin/app_process64" ]
  [ Using config section "system" ]
  [ Jumping to _start (0x75593c3000)... ]

Test: Manual - Run app_process (symlinked to app_process64)

Change-Id: Iacd0a810a679e8d55d68d7e4c84f0e5e4f276b14
Signed-off-by: chenxinyuanchen <chenxinyuanchen@xiaomi.com>
Signed-off-by: chenxinyuanchen <chenxinyuanchen@xiaomi.corp-partner.google.com>
2024-04-22 06:44:29 +00:00
Elliott Hughes
ed21ffc70a Merge "Document pthread_key_create(3), pthread_key_delete(3), and PTHREAD_KEYS_MAX." into main 2024-04-20 15:18:56 +00:00
Nate Myren
9437444cf5 Only try to initialize appcompat properties if the folder is present
If the Init process doesn't write the appcompat system properties
folder, do not attempt to initialize it

Bug: 331307495
Test: manual
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:d071e949a6153e76eb7c67e5947d4d387a8afe2d)
Merged-In: I21716ea87e55a63a1b79127887c451d0fcf006f3
Change-Id: I21716ea87e55a63a1b79127887c451d0fcf006f3
2024-04-19 19:07:34 +00:00
Elliott Hughes
7d3c6cd25c Document pthread_key_create(3), pthread_key_delete(3), and PTHREAD_KEYS_MAX.
In particular "how to work around the PTHREAD_KEYS_MAX limit".

Change-Id: I330936d598ddddfa0903f0505fd00f8fcbf02543
2024-04-18 22:02:38 +00:00
Christopher Ferris
785e161dd8 Merge "Update to v6.8 kernel headers." into main 2024-04-18 16:35:43 +00:00
Nick Desaulniers
5716586cf5 Merge "libc: remove __size_mul_overflow" into main 2024-04-18 16:09:05 +00:00
Nick Desaulniers
ceed466d60 libc: remove __size_mul_overflow
We should just be able to use __builtin_umull_overflow now, which expects
unsigned long parameters. We don't need __builtin_umul_overflow (which expects
unsigned ints) because Bionic is LP64 or ILP32, so for ILP32
sizeof(size_t) == sizeof(unsigned long),
so __builtin_umull_overflow will work for either ILP32 or LP64.

Test: mm
Change-Id: I872491731bca05e561767f8bfeda4c6704e10ccb
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
2024-04-17 14:54:57 -07:00
Nick Desaulniers
0be8f184c2 Merge "Use inline keyword without underscores consistently" into main 2024-04-17 21:19:27 +00:00
Treehugger Robot
0b1161d9b5 Merge "Clean up __always_inline" into main 2024-04-17 20:19:14 +00:00
Nick Desaulniers
58f06e1112 Use inline keyword without underscores consistently
s/__inline__/inline
s/__inline/inline

Change-Id: I5d8d930a7a41d678a0795e7a608dacbb9eb8cb37
2024-04-17 10:51:09 -07:00
Nick Desaulniers
c574f79afa Clean up __always_inline
While studying the implementation of POSIX pthread_rwlock* functions, I noticed
that two functions were marked __always_inline twice. "They must really mean it
this time."

Also add back `inline` keyword to one other usage of __always_inline to be
consistent with other uses of __always_inline throughout the codebase.

Change-Id: Ibf9eaed5fc9fd03afcdd969cff82dec71a8ce30f
2024-04-17 10:50:41 -07:00
Florian Mayer
08b1404cc2 Merge "Fix incorrect links" into main 2024-04-16 23:03:22 +00:00
Florian Mayer
7d098bbee7 Fix incorrect links
Change-Id: Iee24c6b2e1a63d01359dadd5af7499fa3b4abaa5
2024-04-16 21:12:40 +00:00
Treehugger Robot
6b776d9db2 Merge "tlsdesc_resolver.S: use L() macro for local labels." into main 2024-04-16 17:01:35 +00:00
Christopher Ferris
b830ddf90e Update to v6.8 kernel headers.
Kernel headers coming from:

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

Test: Builds and bionic unit tests pass on raven.
Test: Able to log in to an Android GO 32 bit device.
Change-Id: I0022cdb20c19726f526acaab2866f1e25794b77e
2024-04-16 09:49:56 -07:00