summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-apps/modutils/files/modutils-2.4.27-no-nested-function.patch')
-rw-r--r--sys-apps/modutils/files/modutils-2.4.27-no-nested-function.patch43
1 files changed, 43 insertions, 0 deletions
diff --git a/sys-apps/modutils/files/modutils-2.4.27-no-nested-function.patch b/sys-apps/modutils/files/modutils-2.4.27-no-nested-function.patch
new file mode 100644
index 000000000000..7af4599c7154
--- /dev/null
+++ b/sys-apps/modutils/files/modutils-2.4.27-no-nested-function.patch
@@ -0,0 +1,43 @@
+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:");