diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-08-25 08:04:48 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-08-25 08:04:48 +0000 |
commit | 0d1f55e0407651162b2da8955896c05fbd7a2675 (patch) | |
tree | c0d89772846cdbf7f465a89cd6cd6d569af37ac2 | |
parent | 5f0cb5063e82302b65ebcd70ab0114cfb79b6edd (diff) | |
parent | 28a735510a333adb84ca828a737524802568034c (diff) | |
download | bpf-gki13-boot-release.tar.gz |
Snap for 8992082 from 28a735510a333adb84ca828a737524802568034c to gki13-boot-releasegki13-boot-release
Change-Id: I8b30addc778438769098bcfa072466902a937900
-rw-r--r-- | libbpf_android/Loader.cpp | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/libbpf_android/Loader.cpp b/libbpf_android/Loader.cpp index d987f2e..4c0f5c7 100644 --- a/libbpf_android/Loader.cpp +++ b/libbpf_android/Loader.cpp @@ -995,33 +995,35 @@ static int loadCodeSections(const char* elfPath, vector<codeSection>& cs, const unsigned kvers = kernelVersion(); int ret, fd; - if (!kvers) return -1; + if (!kvers) { + ALOGE("unable to get kernel version"); + return -EINVAL; + } string objName = pathToObjName(string(elfPath)); for (int i = 0; i < (int)cs.size(); i++) { string name = cs[i].name; - unsigned bpfMinVer = DEFAULT_BPFLOADER_MIN_VER; // v0.0 - unsigned bpfMaxVer = DEFAULT_BPFLOADER_MAX_VER; // v1.0 - domain selinux_context = domain::unspecified; - domain pin_subdir = domain::unspecified; - - if (cs[i].prog_def.has_value()) { - unsigned min_kver = cs[i].prog_def->min_kver; - unsigned max_kver = cs[i].prog_def->max_kver; - ALOGD("cs[%d].name:%s min_kver:%x .max_kver:%x (kvers:%x)", i, name.c_str(), min_kver, - max_kver, kvers); - if (kvers < min_kver) continue; - if (kvers >= max_kver) continue; - - bpfMinVer = cs[i].prog_def->bpfloader_min_ver; - bpfMaxVer = cs[i].prog_def->bpfloader_max_ver; - selinux_context = getDomainFromSelinuxContext(cs[i].prog_def->selinux_context); - pin_subdir = getDomainFromPinSubdir(cs[i].prog_def->pin_subdir); - // Note: make sure to only check for unrecognized *after* verifying bpfloader - // version limits include this bpfloader's version. + + if (!cs[i].prog_def.has_value()) { + ALOGE("[%d] '%s' missing program definition! bad bpf.o build?", i, name.c_str()); + return -EINVAL; } + unsigned min_kver = cs[i].prog_def->min_kver; + unsigned max_kver = cs[i].prog_def->max_kver; + ALOGD("cs[%d].name:%s min_kver:%x .max_kver:%x (kvers:%x)", i, name.c_str(), min_kver, + max_kver, kvers); + if (kvers < min_kver) continue; + if (kvers >= max_kver) continue; + + unsigned bpfMinVer = cs[i].prog_def->bpfloader_min_ver; + unsigned bpfMaxVer = cs[i].prog_def->bpfloader_max_ver; + domain selinux_context = getDomainFromSelinuxContext(cs[i].prog_def->selinux_context); + domain pin_subdir = getDomainFromPinSubdir(cs[i].prog_def->pin_subdir); + // Note: make sure to only check for unrecognized *after* verifying bpfloader + // version limits include this bpfloader's version. + ALOGD("cs[%d].name:%s requires bpfloader version [0x%05x,0x%05x)", i, name.c_str(), bpfMinVer, bpfMaxVer); if (BPFLOADER_VERSION < bpfMinVer) continue; @@ -1089,7 +1091,7 @@ static int loadCodeSections(const char* elfPath, vector<codeSection>& cs, const for (const auto& line : lines) ALOGW("%s", line.c_str()); ALOGW("bpf_prog_load - END log_buf contents."); - if (cs[i].prog_def.has_value() && cs[i].prog_def->optional) { + if (cs[i].prog_def->optional) { ALOGW("failed program is marked optional - continuing..."); continue; } @@ -1130,14 +1132,12 @@ static int loadCodeSections(const char* elfPath, vector<codeSection>& cs, const ALOGE("chmod %s 0440 -> [%d:%s]", progPinLoc.c_str(), err, strerror(err)); return -err; } - if (cs[i].prog_def.has_value()) { - if (chown(progPinLoc.c_str(), (uid_t)cs[i].prog_def->uid, - (gid_t)cs[i].prog_def->gid)) { - int err = errno; - ALOGE("chown %s %d %d -> [%d:%s]", progPinLoc.c_str(), cs[i].prog_def->uid, - cs[i].prog_def->gid, err, strerror(err)); - return -err; - } + if (chown(progPinLoc.c_str(), (uid_t)cs[i].prog_def->uid, + (gid_t)cs[i].prog_def->gid)) { + int err = errno; + ALOGE("chown %s %d %d -> [%d:%s]", progPinLoc.c_str(), cs[i].prog_def->uid, + cs[i].prog_def->gid, err, strerror(err)); + return -err; } } |