bpf: Allow overriding kernel version
This allows devices pretend they are on a different kernel version in
order to support different bpf features in case kernel backports are in
place.
Test: set ro.bpf.kver_override=5.4.186 in product.prop on sm8150 device
based on 4.14 kernel with 5.4 bpf backported, boot
Change-Id: I50357ee832b01b11e499278244f77244c904e3e9
diff --git a/bpf/headers/include/bpf/KernelUtils.h b/bpf/headers/include/bpf/KernelUtils.h
index a36085a..360af0f 100644
--- a/bpf/headers/include/bpf/KernelUtils.h
+++ b/bpf/headers/include/bpf/KernelUtils.h
@@ -19,6 +19,7 @@
#include <stdio.h>
#include <string.h>
#include <sys/personality.h>
+#include <sys/system_properties.h>
#include <sys/utsname.h>
namespace android {
@@ -33,7 +34,13 @@
unsigned kver_major = 0;
unsigned kver_minor = 0;
unsigned kver_sub = 0;
- (void)sscanf(buf.release, "%u.%u.%u", &kver_major, &kver_minor, &kver_sub);
+ char kver_override[PROP_VALUE_MAX];
+ int kver_override_len = __system_property_get("ro.bpf.kver_override", kver_override);
+ if (kver_override_len > 0) {
+ (void)sscanf(kver_override, "%u.%u.%u", &kver_major, &kver_minor, &kver_sub);
+ } else {
+ (void)sscanf(buf.release, "%u.%u.%u", &kver_major, &kver_minor, &kver_sub);
+ }
return KVER(kver_major, kver_minor, kver_sub);
}