On Tue, 2024-08-27 at 13:37 -0700, Andrii Nakryiko wrote: > We do an ugly copying of options in bpf_object__open_skeleton() just to > be able to set object name from skeleton's recorded name (while still > allowing user to override it through opts->object_name). > > This is not just ugly, but it also is broken due to memcpy() that > doesn't take into account potential skel_opts' and user-provided opts' > sizes differences due to backward and forward compatibility. This leads > to copying over extra bytes and then failing to validate options > properly. It could, technically, lead also to SIGSEGV, if we are unlucky. > > So just get rid of that memory copy completely and instead pass > default object name into bpf_object_open() directly, simplifying all > this significantly. The rule now is that obj_name should be non-NULL for > bpf_object_open() when called with in-memory buffer, so validate that > explicitly as well. > > We adopt bpf_object__open_mem() to this as well and generate default > name (based on buffer memory address and size) outside of bpf_object_open(). > > Fixes: d66562fba1ce ("libbpf: Add BPF object skeleton support") > Reported-by: Daniel Müller <deso@xxxxxxxxxx> > Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > --- Acked-by: Eduard Zingerman <eddyz87@xxxxxxxxx> [...]