Restore back the behavior of isValid(): It is legal to have non-working BpfMap. Dont abort a whole process (system_server...) just because we cant access bpf map. Also add isOk to include the additional checks for newer kernel versions
Change-Id: Ie7815c186400614f0c6b483c04aa8971af348380
Signed-off-by: Dmitrii <bankersenator@gmail.com>
Signed-off-by: Jis G Jacob <studiokeys@blissroms.org>
diff --git a/staticlibs/native/bpf_headers/include/bpf/BpfMap.h b/staticlibs/native/bpf_headers/include/bpf/BpfMap.h
index 3fede3c..8e6a2ed 100644
--- a/staticlibs/native/bpf_headers/include/bpf/BpfMap.h
+++ b/staticlibs/native/bpf_headers/include/bpf/BpfMap.h
@@ -58,21 +58,24 @@
protected:
void abortOnMismatch(bool writable) const {
- if (!mMapFd.ok()) abort();
- if (isAtLeastKernelVersion(4, 14, 0)) {
- int flags = bpfGetFdMapFlags(mMapFd);
- if (flags < 0) abort();
- if (flags & BPF_F_WRONLY) abort();
- if (writable && (flags & BPF_F_RDONLY)) abort();
- if (bpfGetFdKeySize(mMapFd) != sizeof(Key)) abort();
- if (bpfGetFdValueSize(mMapFd) != sizeof(Value)) abort();
- }
+ if (!isOk(writable)) abort();
}
public:
+ bool isOk(bool writable = false) const {
+ if (!mMapFd.ok()) return false;
+ if (isAtLeastKernelVersion(4, 14, 0)) {
+ int flags = bpfGetFdMapFlags(mMapFd);
+ if (flags < 0) return false;
+ if (flags & BPF_F_WRONLY) return false;
+ if (writable && (flags & BPF_F_RDONLY)) return false;
+ if (bpfGetFdKeySize(mMapFd) != sizeof(Key)) return false;
+ if (bpfGetFdValueSize(mMapFd) != sizeof(Value)) return false;
+ }
+ return true;
+ }
explicit BpfMapRO<Key, Value>(const char* pathname) {
mMapFd.reset(mapRetrieveRO(pathname));
- abortOnMismatch(/* writable */ false);
}
Result<Key> getFirstKey() const {