[PATCH] libebl: recognize FDO Packaging Metadata ELF note

Mark Wielaard mark@klomp.org
Sun Nov 21 16:33:12 GMT 2021


Hi Luca,

On Fri, Nov 19, 2021 at 12:31:27AM +0000, luca.boccassi--- via Elfutils-devel wrote:
> From: Luca Boccassi <bluca@debian.org>
> 
> As defined on: https://systemd.io/COREDUMP_PACKAGE_METADATA/
> this note will be used starting from Fedora 36. Allow
> readelf --notes to pretty print it:
> 
> Note section [ 3] '.note.package' of 76 bytes at offset 0x2e8:
>   Owner          Data size  Type
>   FDO                   57  FDO_PACKAGING_METADATA
>     Packaging Metadata: {"type":"deb","name":"fsverity-utils","version":"1.3-1"}

Very nice. Thanks,

> diff --git a/libebl/eblobjnote.c b/libebl/eblobjnote.c
> index 36efe275..1f8bcccf 100644
> --- a/libebl/eblobjnote.c
> +++ b/libebl/eblobjnote.c
> @@ -288,6 +288,9 @@ ebl_object_note (Ebl *ebl, uint32_t namesz, const char *name, uint32_t type,
>        if (descsz == 0 && type == NT_VERSION)
>  	return;
>  
> +      if (strcmp ("FDO", name) == 0 && type == FDO_PACKAGING_METADATA && descsz > 0)
> +	printf("    Packaging Metadata: %.*s\n", (int) descsz, desc);
> +

We might want to check that the desc is '\0' terminated (although I
see we also don't do that in other cases, like
NT_GNU_GOLD_VERSION. But it might be good as a robustness check.

> diff --git a/libelf/elf.h b/libelf/elf.h
> index 8e3e618f..633f9f67 100644
> --- a/libelf/elf.h
> +++ b/libelf/elf.h
> @@ -1297,6 +1297,9 @@ typedef struct
>  /* Program property.  */
>  #define NT_GNU_PROPERTY_TYPE_0 5
>  
> +/* Packaging metadata as defined on https://systemd.io/COREDUMP_PACKAGE_METADATA/ */
> +#define FDO_PACKAGING_METADATA 0xcafe1a7e
> +
>  /* Note section name of program property.   */
>  #define NOTE_GNU_PROPERTY_SECTION_NAME ".note.gnu.property"

Would you mind posting the elf.h patch to glibc-alpha@sourceware.org.
We normally sync elf.h with the glibc one. It will also make sure
other users of elf.h also get the new constants.

As a followup I wouldn't mind a minimal testcase.
Especially if it contains a debuginfod url.

We would have to think how to integrate that with libdw
dwfl_build_id_find_elf and dwfl_standard_find_debuginfo which use
debuginfod_find from the debuginfod-client library.

Since the payload of the FDO_PACKAGING_METADATA note are not simply
key/values, but encoded in json, so we will need to add or depend on a
json parser. Any recommendations? It seems a simple enough format to
just write our own (especially if we can simply skip everything except
top-level key/value strings to find the debuginfod-url).

Thanks,

Mark



More information about the Elfutils-devel mailing list