You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/sys-apps/modutils/files/modutils-2.4.27-no-nested-f...

44 lines
1.4 KiB

Patch by the PaX team to get rid of executable stacks.
--- modutils/insmod/insmod.c
+++ modutils/insmod/insmod.c
@@ -366,18 +366,21 @@ static void hide_special_symbols(struct
sym->info = ELFW(ST_INFO) (STB_LOCAL, ELFW(ST_TYPE) (sym->info));
}
+static struct obj_file *load_map_file;
+
+static int load_map_cmp(const void *a, const void *b) {
+ struct obj_symbol **as = (struct obj_symbol **) a;
+ struct obj_symbol **bs = (struct obj_symbol **) b;
+ unsigned long aa = obj_symbol_final_value(load_map_file, *as);
+ unsigned long ba = obj_symbol_final_value(load_map_file, *bs);
+ return aa < ba ? -1 : aa > ba ? 1 : 0;
+}
+
static void print_load_map(struct obj_file *f)
{
struct obj_symbol *sym;
struct obj_symbol **all, **p;
struct obj_section *sec;
- int load_map_cmp(const void *a, const void *b) {
- struct obj_symbol **as = (struct obj_symbol **) a;
- struct obj_symbol **bs = (struct obj_symbol **) b;
- unsigned long aa = obj_symbol_final_value(f, *as);
- unsigned long ba = obj_symbol_final_value(f, *bs);
- return aa < ba ? -1 : aa > ba ? 1 : 0;
- }
int i, nsyms, *loaded;
/* Report on the section layout. */
@@ -425,7 +428,9 @@ static void print_load_map(struct obj_fi
*p++ = sym;
/* Sort them by final value. */
+ load_map_file = f;
qsort(all, nsyms, sizeof(struct obj_file *), load_map_cmp);
+ load_map_file = NULL;
/* And list them. */
lprintf("\nSymbols:");