On Tue, Jun 18, 2024 at 03:45:22PM -0700, Andrii Nakryiko wrote: > The need to get ELF build ID reliably is an important aspect when > dealing with profiling and stack trace symbolization, and > /proc/<pid>/maps textual representation doesn't help with this. > @@ -539,6 +543,21 @@ static int do_procmap_query(struct proc_maps_private *priv, void __user *uarg) > } > } > > + if (karg.build_id_size) { > + __u32 build_id_sz; > + > + err = build_id_parse(vma, build_id_buf, &build_id_sz); This is not your bug but build_id_parse() assumes program headers immediately follow ELF header which is not guaranteed. > + * If this field is set to non-zero value, build_id_addr should point > + * to valid user space memory buffer of at least build_id_size bytes. > + * If set to zero, build_id_addr should be set to zero as well > + */ > + __u32 build_id_size; /* in/out */ > /* > * User-supplied address of a buffer of at least vma_name_size bytes > * for kernel to fill with matched VMA's name (see vma_name_size field > @@ -519,6 +539,14 @@ struct procmap_query { > * Should be set to zero if VMA name should not be returned. > */ > __u64 vma_name_addr; /* in */ > + /* > + * User-supplied address of a buffer of at least build_id_size bytes > + * for kernel to fill with matched VMA's ELF build ID, if available > + * (see build_id_size field description above for details). > + * > + * Should be set to zero if build ID should not be returned. > + */ > + __u64 build_id_addr; /* in */ Can this be simplified to 512-bit buffer in ioctl structure? BUILD_ID_SIZE_MAX is 20 which is sha1.