From 1ccb3415cf39d9839aaffab3c5cfbc38dc3994c8 Mon Sep 17 00:00:00 2001 From: Alexander Potapenko Date: Wed, 29 Sep 2021 12:14:35 +0000 Subject: init: introduce ro.kernel.version property This property will hold the major.minor part of the kernel version (e.g. "5.4"), allowing init scripts to act depending on that version, enabling and disabling certain features. Bug: 194156700 Test: manual on a Pixel device Signed-off-by: Alexander Potapenko Merged-In: Icec640b8a7150b344d9aa3bc0bdbcdae050c7c45 Change-Id: I5af411e39da600e5e0f6703f3a2a4930d509e29d (cherry picked from commit 1c496e94e0b7fb4425d05b6b9764700842723dfd) Merged-In:I5af411e39da600e5e0f6703f3a2a4930d509e29d --- init/init.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/init/init.cpp b/init/init.cpp index a7325cad9..942feb939 100644 --- a/init/init.cpp +++ b/init/init.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ @@ -554,6 +555,19 @@ static void SetUsbController() { } } +/// Set ro.kernel.version property to contain the major.minor pair as returned +/// by uname(2). +static void SetKernelVersion() { + struct utsname uts; + unsigned int major, minor; + + if ((uname(&uts) != 0) || (sscanf(uts.release, "%u.%u", &major, &minor) != 2)) { + LOG(ERROR) << "Could not parse the kernel version from uname"; + return; + } + SetProperty("ro.kernel.version", android::base::StringPrintf("%u.%u", major, minor)); +} + static void HandleSigtermSignal(const signalfd_siginfo& siginfo) { if (siginfo.ssi_pid != 0) { // Drop any userspace SIGTERM requests. @@ -824,6 +838,7 @@ int SecondStageMain(int argc, char** argv) { export_oem_lock_status(); MountHandler mount_handler(&epoll); SetUsbController(); + SetKernelVersion(); const BuiltinFunctionMap& function_map = GetBuiltinFunctionMap(); Action::set_function_map(&function_map); -- cgit v1.2.3 From 2adc0240e2792e22c6e1067aac7b52e25d61b941 Mon Sep 17 00:00:00 2001 From: Alexander Potapenko Date: Tue, 3 Aug 2021 07:47:40 +0000 Subject: Restrict creation of bootreceiver tracing instance to 64-bit systems. The main users of this instance are KFENCE and MTE-aided KASAN, which are only supported on arm64. Skip creation of this tracing instance on 32-bit systems to save ~6Mb memory on low-end devices. Bug: 195089948 Bug: 194719088 Bug: 194156700 Test: manual on Pixel device Merged-In: Icaf762715fed7a282b1ad738c10bcb45dc848f4d Change-Id: I61694ce174fa745ef9fd50ca7464b5a9e1d1e011 (cherry picked from commit c81fec7d8eda91bdbbed87606bd3c844b5605214) Merged-In:I61694ce174fa745ef9fd50ca7464b5a9e1d1e011 --- rootdir/init.rc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rootdir/init.rc b/rootdir/init.rc index 376a678a8..d10689a01 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -590,9 +590,10 @@ on late-fs # Load trusted keys from dm-verity protected partitions exec -- /system/bin/fsverity_init --load-verified-keys +on late-fs && property:ro.product.cpu.abilist64=* # Set up a tracing instance for system_server to monitor error_report_end events. # These are sent by kernel tools like KASAN and KFENCE when a memory corruption - # is detected. + # is detected. This is only needed for 64-bit systems. mkdir /sys/kernel/tracing/instances/bootreceiver 0700 system system restorecon_recursive /sys/kernel/tracing/instances/bootreceiver write /sys/kernel/tracing/instances/bootreceiver/buffer_size_kb 1 -- cgit v1.2.3 From da8ec2cca9fd193d91572f0ac88b631da22c9b74 Mon Sep 17 00:00:00 2001 From: Alexander Potapenko Date: Wed, 29 Sep 2021 13:30:02 +0000 Subject: init.rc: disable creation of bootreceiver tracing instance for kernels >=4.9 and <= 5.4 The tracing instance takes extra RAM and is not needed on devices running older kernels. Bug: 194156700 Test: manual on a Pixel device Signed-off-by: Alexander Potapenko Merged-In: I794062741688ebea0e4bc500723a966f8f646ee1 Change-Id: Ie8614e67a89cea67bed88427820fefdf110713c9 (cherry picked from commit 17b1c428d493da1bfc4beffd90b0ac2d0401fc06) Merged-In:Ie8614e67a89cea67bed88427820fefdf110713c9 --- rootdir/init.rc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/rootdir/init.rc b/rootdir/init.rc index d10689a01..451595092 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -590,7 +590,20 @@ on late-fs # Load trusted keys from dm-verity protected partitions exec -- /system/bin/fsverity_init --load-verified-keys -on late-fs && property:ro.product.cpu.abilist64=* +# Only enable the bootreceiver tracing instance for kernels 5.10 and above. +on late-fs && property:ro.kernel.version=4.9 + setprop bootreceiver.enable 0 +on late-fs && property:ro.kernel.version=4.14 + setprop bootreceiver.enable 0 +on late-fs && property:ro.kernel.version=4.19 + setprop bootreceiver.enable 0 +on late-fs && property:ro.kernel.version=5.4 + setprop bootreceiver.enable 0 +on late-fs + # Bootreceiver tracing instance is enabled by default. + setprop bootreceiver.enable ${bootreceiver.enable:-1} + +on property:ro.product.cpu.abilist64=* && property:bootreceiver.enable=1 # Set up a tracing instance for system_server to monitor error_report_end events. # These are sent by kernel tools like KASAN and KFENCE when a memory corruption # is detected. This is only needed for 64-bit systems. -- cgit v1.2.3