syscall: Only fake uname on very first call of netbpfload
* The bpf programs actually still support older kernels,
we just need to bypass the very first check for kernel version
Change-Id: I4264782ee63efb26b95abd94774938d5456200a3
diff --git a/kernel/sys.c b/kernel/sys.c
index 9e728ed..6bc02c0 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -1182,15 +1182,17 @@
return ret;
}
+
+static uint64_t netbpfload_pid = 0;
SYSCALL_DEFINE1(newuname, struct new_utsname __user *, name)
{
struct new_utsname tmp;
down_read(&uts_sem);
memcpy(&tmp, utsname(), sizeof(tmp));
- if (!strncmp(current->comm, "bpfloader", 9) ||
- !strncmp(current->comm, "netbpfload", 10) ||
- !strncmp(current->comm, "netd", 4)) {
+ if (!strncmp(current->comm, "netbpfload", 10) &&
+ current->pid != netbpfload_pid) {
+ netbpfload_pid = current->pid;
strcpy(tmp.release, "5.4.186");
pr_debug("fake uname: %s/%d release=%s\n",
current->comm, current->pid, tmp.release);