From: Michael Tremer Date: Tue, 31 Dec 2024 12:03:55 +0000 (+0000) Subject: linter: Check that files in /usr/lib/debug are ELF and not stripped X-Git-Tag: 0.9.30~641 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=30e1b78755d52f2979b8cf3050fae2365d003a51;p=pakfire.git linter: Check that files in /usr/lib/debug are ELF and not stripped Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/linter-file.c b/src/libpakfire/linter-file.c index 9cfa27c36..553cdcc5e 100644 --- a/src/libpakfire/linter-file.c +++ b/src/libpakfire/linter-file.c @@ -962,6 +962,36 @@ static int pakfire_linter_file_has_buildid(struct pakfire_linter_file* lfile) { return 0; } +// Checks if files in /usr/lib/debug are correct +static int pakfire_linter_file_check_debug(struct pakfire_linter_file* lfile) { + Elf_Scn* symtab = NULL; + int r; + + // Fail if this file is not an ELF file + if (!pakfire_linter_file_is_elf(lfile)) + return pakfire_linter_file_error(lfile, "File is not in ELF format"); + + switch (pakfire_linter_file_get_elf_type(lfile)) { + // Do not check Relocatable Objects + case ET_REL: + return 0; + + // Check everything else + default: + break; + } + + // Fetch the symbol table + r = pakfire_linter_file_get_elf_section(lfile, SHT_SYMTAB, &symtab, NULL, NULL); + if (r < 0) + return r; + + else if (r > 0) + pakfire_linter_file_error(lfile, "Is Stripped"); + + return 0; +} + int pakfire_linter_file_lint(struct pakfire_linter_file* lfile) { int r = 0; @@ -987,6 +1017,10 @@ int pakfire_linter_file_lint(struct pakfire_linter_file* lfile) { else if (pakfire_file_matches(lfile->file, "/usr/lib/valgrind/*")) return 0; + // Check debug files + else if (pakfire_file_matches(lfile->file, "/usr/lib/debug/**")) + return pakfire_linter_file_check_debug(lfile); + // ELF Checks if (pakfire_linter_file_is_elf(lfile)) { // Check if stripped