mirror of
https://github.com/InstanceBrick/nightcap.git
synced 2026-10-26 20:02:51 +01:00
mog chimera
This commit is contained in:
1 parent
aa31cdf395
commit
bc108106db
7 files changed
+47
-2
No files matched your search
@@ -90,6 +90,7 @@ int mocktail_bionic_cxa_thread_atexit_impl(
|
|||||||
mocktail::compat::BionicThreadDestructor destructor, void* argument,
|
mocktail::compat::BionicThreadDestructor destructor, void* argument,
|
||||||
void* dso_handle);
|
void* dso_handle);
|
||||||
void mocktail_bionic_arc4random_buf(void* buffer, size_t size);
|
void mocktail_bionic_arc4random_buf(void* buffer, size_t size);
|
||||||
|
int mocktail_bionic_atoi(const char* text);
|
||||||
mocktail::compat::BionicMallinfoSnapshot mocktail_bionic_mallinfo();
|
mocktail::compat::BionicMallinfoSnapshot mocktail_bionic_mallinfo();
|
||||||
int mocktail_bionic_sysinfo(struct sysinfo* info);
|
int mocktail_bionic_sysinfo(struct sysinfo* info);
|
||||||
int mocktail_bionic_uname(struct utsname* name);
|
int mocktail_bionic_uname(struct utsname* name);
|
||||||
|
|||||||
@@ -378,6 +378,10 @@ extern "C" void mocktail_bionic_arc4random_buf(void* buffer, size_t size) {
|
|||||||
mocktail::compat::BionicArc4RandomBuffer(buffer, size);
|
mocktail::compat::BionicArc4RandomBuffer(buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" int mocktail_bionic_atoi(const char* text) {
|
||||||
|
return static_cast<int>(std::strtol(text, nullptr, 10));
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" mocktail::compat::BionicMallinfoSnapshot mocktail_bionic_mallinfo() {
|
extern "C" mocktail::compat::BionicMallinfoSnapshot mocktail_bionic_mallinfo() {
|
||||||
return mocktail::compat::BionicMallinfo();
|
return mocktail::compat::BionicMallinfo();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ bool IsBionicLibcOnlySymbol(std::string_view symbol) {
|
|||||||
}
|
}
|
||||||
return symbol == "__cmsg_nxthdr" || symbol == "__cxa_thread_atexit_impl" ||
|
return symbol == "__cmsg_nxthdr" || symbol == "__cxa_thread_atexit_impl" ||
|
||||||
symbol == "__readlink_chk" || symbol == "__register_atfork" ||
|
symbol == "__readlink_chk" || symbol == "__register_atfork" ||
|
||||||
symbol == "arc4random_buf" || symbol == "geteuid" ||
|
symbol == "arc4random_buf" || symbol == "atoi" || symbol == "geteuid" ||
|
||||||
symbol == "getuid" || symbol == "lseek64" ||
|
symbol == "getuid" || symbol == "lseek64" ||
|
||||||
symbol == "mallinfo" || symbol == "pread64" || symbol == "pwrite64" ||
|
symbol == "mallinfo" || symbol == "pread64" || symbol == "pwrite64" ||
|
||||||
symbol == "sigaction" || symbol == "strerror_r" ||
|
symbol == "sigaction" || symbol == "strerror_r" ||
|
||||||
@@ -384,6 +384,8 @@ void RegisterBionicHostLibcRuntimeForLibc() {
|
|||||||
RegisterSyntheticSymbol("libc.so", "arc4random_buf",
|
RegisterSyntheticSymbol("libc.so", "arc4random_buf",
|
||||||
reinterpret_cast<void*>(
|
reinterpret_cast<void*>(
|
||||||
mocktail_bionic_arc4random_buf));
|
mocktail_bionic_arc4random_buf));
|
||||||
|
RegisterSyntheticSymbol("libc.so", "atoi",
|
||||||
|
reinterpret_cast<void*>(mocktail_bionic_atoi));
|
||||||
RegisterSyntheticSymbol("libc.so", "mallinfo",
|
RegisterSyntheticSymbol("libc.so", "mallinfo",
|
||||||
reinterpret_cast<void*>(mocktail_bionic_mallinfo));
|
reinterpret_cast<void*>(mocktail_bionic_mallinfo));
|
||||||
RegisterSyntheticSymbol("libc.so", "sysinfo",
|
RegisterSyntheticSymbol("libc.so", "sysinfo",
|
||||||
|
|||||||
@@ -468,7 +468,9 @@ CanaryResult RunReadinessCanary(const CanaryOptions& options) {
|
|||||||
}
|
}
|
||||||
std::filesystem::remove_all(isolated, filesystem_error);
|
std::filesystem::remove_all(isolated, filesystem_error);
|
||||||
if (!result.error.empty()) return result;
|
if (!result.error.empty()) return result;
|
||||||
result.exit_code = WIFEXITED(status) ? WEXITSTATUS(status) : 128;
|
result.exit_code = WIFEXITED(status)
|
||||||
|
? WEXITSTATUS(status)
|
||||||
|
: 128 + (WIFSIGNALED(status) ? WTERMSIG(status) : 0);
|
||||||
if (result.exit_code != 0) {
|
if (result.exit_code != 0) {
|
||||||
result.error =
|
result.error =
|
||||||
"graphics canary exited with status " +
|
"graphics canary exited with status " +
|
||||||
|
|||||||
@@ -206,6 +206,21 @@ TEST(BionicHostLibcRuntimeTest, HidesPrivilegedHostIdentityFromAndroidGuest) {
|
|||||||
mocktail::compat::NormalizeBionicApplicationUid(::geteuid()));
|
mocktail::compat::NormalizeBionicApplicationUid(::geteuid()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(BionicHostLibcRuntimeTest, ParsesAtoiWithBionicOverflowBehavior) {
|
||||||
|
EXPECT_EQ(mocktail_bionic_atoi(""), 0);
|
||||||
|
EXPECT_EQ(mocktail_bionic_atoi("invalid"), 0);
|
||||||
|
EXPECT_EQ(mocktail_bionic_atoi(" -42suffix"), -42);
|
||||||
|
EXPECT_EQ(mocktail_bionic_atoi("2147483647"), INT_MAX);
|
||||||
|
EXPECT_EQ(mocktail_bionic_atoi("-2147483648"), INT_MIN);
|
||||||
|
EXPECT_EQ(mocktail_bionic_atoi("2147483648"), INT_MIN);
|
||||||
|
EXPECT_EQ(mocktail_bionic_atoi("4294967295"), -1);
|
||||||
|
EXPECT_EQ(mocktail_bionic_atoi("9999999999"), 1410065407);
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
EXPECT_EQ(mocktail_bionic_atoi("9223372036854775808"), -1);
|
||||||
|
EXPECT_EQ(errno, ERANGE);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(BionicHostLibcRuntimeTest, UsesBionicPosixStrErrorContract) {
|
TEST(BionicHostLibcRuntimeTest, UsesBionicPosixStrErrorContract) {
|
||||||
std::array<char, 128> buffer{};
|
std::array<char, 128> buffer{};
|
||||||
|
|
||||||
|
|||||||
@@ -130,6 +130,8 @@ TEST(LinkerRegistryTest, KeepsHostIndependentBionicAbiOwnedByLibc) {
|
|||||||
reinterpret_cast<void *>(mocktail___readlink_chk));
|
reinterpret_cast<void *>(mocktail___readlink_chk));
|
||||||
EXPECT_EQ(symbols.at("arc4random_buf"),
|
EXPECT_EQ(symbols.at("arc4random_buf"),
|
||||||
reinterpret_cast<void *>(mocktail_bionic_arc4random_buf));
|
reinterpret_cast<void *>(mocktail_bionic_arc4random_buf));
|
||||||
|
EXPECT_EQ(symbols.at("atoi"),
|
||||||
|
reinterpret_cast<void *>(mocktail_bionic_atoi));
|
||||||
EXPECT_EQ(symbols.at("mallinfo"),
|
EXPECT_EQ(symbols.at("mallinfo"),
|
||||||
reinterpret_cast<void *>(mocktail_bionic_mallinfo));
|
reinterpret_cast<void *>(mocktail_bionic_mallinfo));
|
||||||
EXPECT_EQ(symbols.at("sysinfo"),
|
EXPECT_EQ(symbols.at("sysinfo"),
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <csignal>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@@ -266,6 +267,24 @@ TEST(ReadinessCanaryTest, PreservesEtc2DriverOverride) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(ReadinessCanaryTest, ReportsTerminatingSignal) {
|
||||||
|
TemporaryDirectory temporary;
|
||||||
|
CanaryOptions options;
|
||||||
|
options.runtime_binary = temporary.root() / "runtime";
|
||||||
|
options.cache_root = temporary.root() / "cache";
|
||||||
|
options.state_root = temporary.root() / "state";
|
||||||
|
options.payload_directory = temporary.root() / "payload";
|
||||||
|
options.timeout_seconds = 5;
|
||||||
|
Write(options.runtime_binary, "#!/bin/sh\nkill -TERM $$\n");
|
||||||
|
ASSERT_EQ(chmod(options.runtime_binary.c_str(), 0700), 0);
|
||||||
|
|
||||||
|
const auto result = RunReadinessCanary(options);
|
||||||
|
EXPECT_FALSE(result);
|
||||||
|
EXPECT_EQ(result.exit_code, 128 + SIGTERM);
|
||||||
|
EXPECT_EQ(result.error, "graphics canary exited with status " +
|
||||||
|
std::to_string(128 + SIGTERM));
|
||||||
|
}
|
||||||
|
|
||||||
TEST(ReadinessCanaryTest, AcceptsRealPresentWithoutShaderPackSummary) {
|
TEST(ReadinessCanaryTest, AcceptsRealPresentWithoutShaderPackSummary) {
|
||||||
const std::string valid =
|
const std::string valid =
|
||||||
"[compat] legacy binary patches: disabled\n"
|
"[compat] legacy binary patches: disabled\n"
|
||||||
|
|||||||
Reference in new issue
Block a user