summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-08-25 08:04:48 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-08-25 08:04:48 +0000
commit0d1f55e0407651162b2da8955896c05fbd7a2675 (patch)
treec0d89772846cdbf7f465a89cd6cd6d569af37ac2
parent5f0cb5063e82302b65ebcd70ab0114cfb79b6edd (diff)
parent28a735510a333adb84ca828a737524802568034c (diff)
downloadbpf-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.cpp58
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;
}
}