1#include <sys/types.h> 2#include <sys/exec_elf.h> 3 4#include <assert.h> 5#include <dlfcn.h> 6#include <link.h> 7#include <stddef.h> 8#include <string.h> 9 10static int 11nonzero(char *s, size_t n) 12{ 13 size_t i; 14 15 for (i = 0; i < n; i++) 16 if (s[i] != 0) 17 return (1); 18 19 return (0); 20} 21 22static int foundldso = 0; 23 24static int 25callback(struct dl_phdr_info *info, size_t size, void *cookie) 26{ 27 int i; 28 int foundrandomize = 0; 29 30 assert(size >= sizeof(struct dl_phdr_info)); 31 32 if (strcmp(info->dlpi_name, "/usr/libexec/ld.so") != 0) 33 return (0); 34 foundldso = 1; 35 36 for (i = 0; i < info->dlpi_phnum; i++) 37 if (info->dlpi_phdr[i].p_type == PT_OPENBSD_RANDOMIZE) { 38 foundrandomize = 1; 39 assert(nonzero((char *)(info->dlpi_phdr[i].p_vaddr + 40 info->dlpi_addr), info->dlpi_phdr[i].p_memsz)); 41 } 42 43 assert(foundrandomize); 44 return (0); 45} 46 47int 48main() 49{ 50 dl_iterate_phdr(callback, NULL); 51 assert(foundldso); 52 return (0); 53} 54