Commit 85c894a8 authored by Thomas Falcon's avatar Thomas Falcon Committed by Arnaldo Carvalho de Melo
Browse files

perf header: Write bpf_prog (infos|btfs)_cnt to data file



With commit f0d0f978 ("perf header: Don't write empty BPF/BTF
info"), the write_bpf_( prog_info() | btf() ) functions exit without
writing anything if env->bpf_prog.(infos| btfs)_cnt is zero.

process_bpf_( prog_info() | btf() ), however, still expect a "count"
value to exist in the data file. If btf information is empty, for
example, process_bpf_btf will read garbage or some other data as the
number of btf nodes in the data file. As a result, the data file will
not be processed correctly.

Instead, write the count to the data file and exit if it is zero.

Fixes: f0d0f978 ("perf header: Don't write empty BPF/BTF info")
Reviewed-by: default avatarIan Rogers <irogers@google.com>
Signed-off-by: default avatarThomas Falcon <thomas.falcon@intel.com>
Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 9b9e4370
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -1022,12 +1022,9 @@ static int write_bpf_prog_info(struct feat_fd *ff,

	down_read(&env->bpf_progs.lock);

	if (env->bpf_progs.infos_cnt == 0)
		goto out;

	ret = do_write(ff, &env->bpf_progs.infos_cnt,
		       sizeof(env->bpf_progs.infos_cnt));
	if (ret < 0)
	if (ret < 0 || env->bpf_progs.infos_cnt == 0)
		goto out;

	root = &env->bpf_progs.infos;
@@ -1067,13 +1064,10 @@ static int write_bpf_btf(struct feat_fd *ff,

	down_read(&env->bpf_progs.lock);

	if (env->bpf_progs.btfs_cnt == 0)
		goto out;

	ret = do_write(ff, &env->bpf_progs.btfs_cnt,
		       sizeof(env->bpf_progs.btfs_cnt));

	if (ret < 0)
	if (ret < 0 || env->bpf_progs.btfs_cnt == 0)
		goto out;

	root = &env->bpf_progs.btfs;