Commit ed37ddd5 authored by topjohnwu's avatar topjohnwu Committed by John Wu

Stricter validation

parent cd5384f1
...@@ -313,6 +313,9 @@ ZygiskModule::ZygiskModule(int id, void *handle, void *entry) ...@@ -313,6 +313,9 @@ ZygiskModule::ZygiskModule(int id, void *handle, void *entry)
} }
bool ZygiskModule::RegisterModuleImpl(ApiTable *api, long *module) { bool ZygiskModule::RegisterModuleImpl(ApiTable *api, long *module) {
if (api == nullptr || module == nullptr)
return false;
long api_version = *module; long api_version = *module;
// Unsupported version // Unsupported version
if (api_version > ZYGISK_API_VERSION) if (api_version > ZYGISK_API_VERSION)
...@@ -355,6 +358,24 @@ bool ZygiskModule::RegisterModuleImpl(ApiTable *api, long *module) { ...@@ -355,6 +358,24 @@ bool ZygiskModule::RegisterModuleImpl(ApiTable *api, long *module) {
return true; return true;
} }
bool ZygiskModule::valid() const {
if (mod.api_version == nullptr)
return false;
switch (*mod.api_version) {
case 4:
// fallthrough
case 3:
// fallthrough
case 2:
// fallthrough
case 1:
return mod.v1->impl && mod.v1->preAppSpecialize && mod.v1->postAppSpecialize &&
mod.v1->preServerSpecialize && mod.v1->postServerSpecialize;
default:
return false;
}
}
int ZygiskModule::connectCompanion() const { int ZygiskModule::connectCompanion() const {
if (int fd = zygisk_request(ZygiskRequest::CONNECT_COMPANION); fd >= 0) { if (int fd = zygisk_request(ZygiskRequest::CONNECT_COMPANION); fd >= 0) {
write_int(fd, id); write_int(fd, id);
......
...@@ -180,10 +180,8 @@ struct ZygiskModule { ...@@ -180,10 +180,8 @@ struct ZygiskModule {
void postServerSpecialize(const ServerSpecializeArgs_v1 *args) const { void postServerSpecialize(const ServerSpecializeArgs_v1 *args) const {
mod.v1->postServerSpecialize(mod.v1->impl, args); mod.v1->postServerSpecialize(mod.v1->impl, args);
} }
bool valid() const {
return entry.fn && mod.api_version;
}
bool valid() const;
int connectCompanion() const; int connectCompanion() const;
int getModuleDir() const; int getModuleDir() const;
void setOption(zygisk::Option opt); void setOption(zygisk::Option opt);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment