]> git.ipfire.org Git - pakfire.git/commitdiff
linter: Check that files in /usr/lib/debug are ELF and not stripped
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 31 Dec 2024 12:03:55 +0000 (12:03 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 31 Dec 2024 12:03:55 +0000 (12:03 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/linter-file.c

index 9cfa27c3672156f11864dbd9a25faacfac7f0c1b..553cdcc5e1e1d877b782e01b6258f6c930ef6885 100644 (file)
@@ -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