/* * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #define LOG_TAG "pkvm_enabler" #include #include #include #include #include #include #define MISC_WRITER "/vendor/bin/misc_writer" int main() { char *newargv[] = { MISC_WRITER, "--set-enable-pkvm", NULL }; char *newenvp[] = { NULL }; pid_t pid; int ret, wstatus; /* Run misc_writer and return FAILURE to force a reboot. */ pid = fork(); if (pid == -1) { ALOGE("Could not fork: %d", errno); exit(EXIT_FAILURE); } if (pid == 0) { execve(MISC_WRITER, newargv, newenvp); ALOGE("Could not execute " MISC_WRITER ": %d", errno); _exit(EXIT_FAILURE); } waitpid(pid, &wstatus, 0); if (WIFEXITED(wstatus)) { ret = WEXITSTATUS(wstatus); if (ret) { ALOGE(MISC_WRITER " exit status: %d", ret); } } else { ALOGE(MISC_WRITER " terminated unexpectedly: %d", wstatus); } exit(EXIT_FAILURE); }