On Fri, May 12, 2023 at 12:31:34PM +0100, Alan Maguire wrote: > On aarch64, "bpftool feature" reports an incorrect BPF JIT limit: > > $ sudo /sbin/bpftool feature > Scanning system configuration... > bpf() syscall restricted to privileged users > JIT compiler is enabled > JIT compiler hardening is disabled > JIT compiler kallsyms exports are enabled for root > skipping kernel config, can't open file: No such file or directory > Global memory limit for JIT compiler for unprivileged users is -201326592 bytes > > This is because /proc/sys/net/core/bpf_jit_limit reports > > $ sudo cat /proc/sys/net/core/bpf_jit_limit > 68169519595520 > > ...and an int is assumed in read_procfs(). Change read_procfs() > to return a long to avoid negative value reporting. > > Fixes: 7a4522bbef0c ("tools: bpftool: add probes for /proc/ eBPF parameters") > Reported-by: Nicky Veitch <nicky.veitch@xxxxxxxxxx> > Signed-off-by: Alan Maguire <alan.maguire@xxxxxxxxxx> Acked-by: Jiri Olsa <jolsa@xxxxxxxxxx> jirka > --- > tools/bpf/bpftool/feature.c | 24 ++++++++++++------------ > 1 file changed, 12 insertions(+), 12 deletions(-) > > diff --git a/tools/bpf/bpftool/feature.c b/tools/bpf/bpftool/feature.c > index da16e6a27ccc..0675d6a46413 100644 > --- a/tools/bpf/bpftool/feature.c > +++ b/tools/bpf/bpftool/feature.c > @@ -167,12 +167,12 @@ static int get_vendor_id(int ifindex) > return strtol(buf, NULL, 0); > } > > -static int read_procfs(const char *path) > +static long read_procfs(const char *path) > { > char *endptr, *line = NULL; > size_t len = 0; > FILE *fd; > - int res; > + long res; > > fd = fopen(path, "r"); > if (!fd) > @@ -194,7 +194,7 @@ static int read_procfs(const char *path) > > static void probe_unprivileged_disabled(void) > { > - int res; > + long res; > > /* No support for C-style ouptut */ > > @@ -216,14 +216,14 @@ static void probe_unprivileged_disabled(void) > printf("Unable to retrieve required privileges for bpf() syscall\n"); > break; > default: > - printf("bpf() syscall restriction has unknown value %d\n", res); > + printf("bpf() syscall restriction has unknown value %ld\n", res); > } > } > } > > static void probe_jit_enable(void) > { > - int res; > + long res; > > /* No support for C-style ouptut */ > > @@ -245,7 +245,7 @@ static void probe_jit_enable(void) > printf("Unable to retrieve JIT-compiler status\n"); > break; > default: > - printf("JIT-compiler status has unknown value %d\n", > + printf("JIT-compiler status has unknown value %ld\n", > res); > } > } > @@ -253,7 +253,7 @@ static void probe_jit_enable(void) > > static void probe_jit_harden(void) > { > - int res; > + long res; > > /* No support for C-style ouptut */ > > @@ -275,7 +275,7 @@ static void probe_jit_harden(void) > printf("Unable to retrieve JIT hardening status\n"); > break; > default: > - printf("JIT hardening status has unknown value %d\n", > + printf("JIT hardening status has unknown value %ld\n", > res); > } > } > @@ -283,7 +283,7 @@ static void probe_jit_harden(void) > > static void probe_jit_kallsyms(void) > { > - int res; > + long res; > > /* No support for C-style ouptut */ > > @@ -302,14 +302,14 @@ static void probe_jit_kallsyms(void) > printf("Unable to retrieve JIT kallsyms export status\n"); > break; > default: > - printf("JIT kallsyms exports status has unknown value %d\n", res); > + printf("JIT kallsyms exports status has unknown value %ld\n", res); > } > } > } > > static void probe_jit_limit(void) > { > - int res; > + long res; > > /* No support for C-style ouptut */ > > @@ -322,7 +322,7 @@ static void probe_jit_limit(void) > printf("Unable to retrieve global memory limit for JIT compiler for unprivileged users\n"); > break; > default: > - printf("Global memory limit for JIT compiler for unprivileged users is %d bytes\n", res); > + printf("Global memory limit for JIT compiler for unprivileged users is %ld bytes\n", res); > } > } > } > -- > 2.31.1 >