summaryrefslogtreecommitdiff
path: root/init/init.cpp
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2022-01-16 17:13:50 -0800
committerLinux Build Service Account <lnxbuild@localhost>2022-01-16 17:13:50 -0800
commit4021851b95b6d6561cdd4f7ff54abd93a12ebcac (patch)
tree893505a763a8280b4627ce8132d7039a911e6304 /init/init.cpp
parent63d215bddb5d75119083237f0fe094e31a494a4d (diff)
parent07137ed68826e5d41d23e5cf083885bc919ce11d (diff)
Merge 07137ed68826e5d41d23e5cf083885bc919ce11d on remote branch
Change-Id: I984645d8be4cd5302d802729feee8fba8a937037
Diffstat (limited to 'init/init.cpp')
-rw-r--r--init/init.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/init/init.cpp b/init/init.cpp
index 28e100486..6dcf4a30b 100644
--- a/init/init.cpp
+++ b/init/init.cpp
@@ -27,6 +27,7 @@
#include <sys/mount.h>
#include <sys/signalfd.h>
#include <sys/types.h>
+#include <sys/utsname.h>
#include <unistd.h>
#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
@@ -569,6 +570,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.
@@ -854,6 +868,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);