Messages in this thread Patch in this message | | | Date | Wed, 3 Jun 2015 18:52:40 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [RFC PATCH v5 07/30] bpf tools: Check endianess and make libbpf fail early |
| |
Em Mon, Jun 01, 2015 at 07:37:53AM +0000, Wang Nan escreveu: > Check endianess according to EHDR. Code is taken from > tools/perf/util/symbol-elf.c. > > Libbpf doesn't magically convert missmatched endianess. See discussion > on https://lkml.org/lkml/2015/5/18/650 that, even if we swap
Please don't use URLs like this, I tried accessing this link and it seems lkml.org is not accessible now :-\
Simply avoid having URLs like this, but if you insist, then follow the Link: standard and use:
http://lkml.kernel.org/r/MESSAGE-ID
This way I can click on it to redirect me to some archive and if it still doesn't work, then I can google for that message-id, but the way you did I can't even google for the subject of that message :-\
BTW: this is what I get for lkml.org now:
504 Gateway Time-out nginx/1.4.6 (Ubuntu)
- Arnaldo
> eBPF instructions to correct byte order, we are unable to deal with > endianess in code logical generated by LLVM. > > Therefore, libbpf should simply reject missmatched ELF object, and let > LLVM to create good code. > > Signed-off-by: Wang Nan <wangnan0@huawei.com> > Acked-by: Alexei Starovoitov <ast@plumgrid.com> > --- > tools/lib/bpf/libbpf.c | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index 0824822..5d56c40 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -166,6 +166,34 @@ errout: > return err; > } > > +static int > +bpf_object__check_endianess(struct bpf_object *obj) > +{ > + static unsigned int const endian = 1; > + > + switch (obj->efile.ehdr.e_ident[EI_DATA]) { > + case ELFDATA2LSB: > + /* We are big endian, BPF obj is little endian. */ > + if (*(unsigned char const *)&endian != 1) > + goto mismatch; > + break; > + > + case ELFDATA2MSB: > + /* We are little endian, BPF obj is big endian. */ > + if (*(unsigned char const *)&endian != 0) > + goto mismatch; > + break; > + default: > + return -EINVAL; > + } > + > + return 0; > + > +mismatch: > + pr_warning("Error: endianess mismatch.\n"); > + return -EINVAL; > +} > + > struct bpf_object *bpf_object__open(const char *path) > { > struct bpf_object *obj; > @@ -187,6 +215,8 @@ struct bpf_object *bpf_object__open(const char *path) > > if (bpf_object__elf_init(obj)) > goto out; > + if (bpf_object__check_endianess(obj)) > + goto out; > > bpf_object__elf_finish(obj); > return obj; > -- > 1.8.3.4
| |