lkml.org 
[lkml]   [2019]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v5 perf,bpf 07/15] perf, bpf: save bpf_prog_info information as headers to perf.data
On Wed, Feb 27, 2019 at 09:06:35PM -0800, Song Liu wrote:

SNIP

> +static int process_bpf_prog_info(struct feat_fd *ff,
> + void *data __maybe_unused)
> +{
> + struct bpf_prog_info_linear *info_linear;
> + struct bpf_prog_info_node *info_node;
> + struct perf_env *env = &ff->ph->env;
> + u32 count, i;
> + int err = -1;
> +
> + if (do_read_u32(ff, &count))
> + return -1;
> +
> + down_write(&env->bpf_progs.lock);
> +
> + for (i = 0; i < count; ++i) {
> + u32 info_len, data_len;
> +
> + info_linear = NULL;
> + info_node = NULL;
> + if (do_read_u32(ff, &info_len))
> + goto out;
> + if (do_read_u32(ff, &data_len))
> + goto out;
> +
> + if (info_len > sizeof(struct bpf_prog_info)) {
> + pr_warning("detected invalid bpf_prog_info\n");
> + goto out;
> + }
> +
> + info_linear = malloc(sizeof(struct bpf_prog_info_linear) +
> + data_len);
> + if (!info_linear)
> + goto out;
> + info_linear->info_len = sizeof(struct bpf_prog_info);
> + info_linear->data_len = data_len;
> + if (do_read_u64(ff, (u64 *)(&info_linear->arrays)))
> + goto out;
> + if (__do_read(ff, &info_linear->info, info_len))
> + goto out;
> + if (info_len < sizeof(struct bpf_prog_info))
> + memset(((void *)(&info_linear->info)) + info_len, 0,
> + sizeof(struct bpf_prog_info) - info_len);
> +
> + if (__do_read(ff, info_linear->data, data_len))
> + goto out;
> +
> + /* endian mismatch, drop the info, continue */
> + if (ff->ph->needs_swap) {
> + free(info_linear);
> + continue;
> + }

so in this case we can check for needs_swap in the begining
of the function and bail out without reading all the data

also please display soem error message saying we don't support
ebpf progs data report over the different endianity

jirka

\
 
 \ /
  Last update: 2019-03-04 14:52    [W:0.295 / U:0.144 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site