goto ERROR;
}
- // Position-independent Executable
- if (file->issues & PAKFIRE_FILE_MISSING_PIE) {
- r = asprintf(&buffer, "%s [MISSING-PIE]", buffer);
- if (r < 0)
- goto ERROR;
- }
-
// Executable Stack
if (file->issues & PAKFIRE_FILE_EXECSTACK) {
r = asprintf(&buffer, "%s [EXECSTACK]", buffer);
return pakfire_file_open_elf(file, __pakfire_file_check_ssp, NULL);
}
-static int pakfire_file_check_pie(struct pakfire_file* file) {
- switch (pakfire_file_get_elf_type(file)) {
- // Shared Object files are good
- case ET_DYN:
- break;
-
- // Everything else is bad
- default:
- file->issues |= PAKFIRE_FILE_MISSING_PIE;
- break;
- }
-
- return 0;
-}
-
static int __pakfire_file_check_execstack(
struct pakfire_file* file, Elf* elf, void* data) {
GElf_Phdr phdr;
if (r)
return r;
- // Check for PIE
- r = pakfire_file_check_pie(file);
- if (r)
- return r;
-
// Check for executable stacks
r = pakfire_file_check_execstack(file);
if (r)
PAKFIRE_FILE_FHS_ERROR = (1 << 0),
PAKFIRE_FILE_MISSING_DEBUGINFO = (1 << 1),
PAKFIRE_FILE_MISSING_SSP = (1 << 2),
- PAKFIRE_FILE_MISSING_PIE = (1 << 3),
PAKFIRE_FILE_EXECSTACK = (1 << 4),
PAKFIRE_FILE_NO_RELRO = (1 << 5),
PAKFIRE_FILE_HAS_RUNPATH = (1 << 6),