mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-10-26 14:02:00 +01:00
117 lines
3.4 KiB
Diff
117 lines
3.4 KiB
Diff
Fix the EXEC_STACK in ocaml compiled binaries (#153382)
|
|
|
|
Index: ocaml-4.02.2/asmrun/sparc.S
|
|
===================================================================
|
|
--- ocaml-4.02.2.orig/asmrun/sparc.S
|
|
+++ ocaml-4.02.2/asmrun/sparc.S
|
|
@@ -356,3 +356,8 @@ caml_system__frametable:
|
|
.type caml_raise_exception, #function
|
|
.type caml_system__frametable, #object
|
|
#endif
|
|
+
|
|
+#ifdef __ELF__
|
|
+.section .note.GNU-stack,"",%progbits
|
|
+#endif
|
|
+
|
|
Index: ocaml-4.02.2/asmcomp/arm/emit.mlp
|
|
===================================================================
|
|
--- ocaml-4.02.2.orig/asmcomp/arm/emit.mlp
|
|
+++ ocaml-4.02.2/asmcomp/arm/emit.mlp
|
|
@@ -888,6 +888,13 @@ let data l =
|
|
` .data\n`;
|
|
List.iter emit_item l
|
|
|
|
+(* Mark stack as non executable *)
|
|
+let nx_stack() =
|
|
+ if Config.system = "linux" then
|
|
+ ` .section .note.GNU-stack,\"\",%progbits\n`
|
|
+
|
|
+
|
|
+
|
|
(* Beginning / end of an assembly file *)
|
|
|
|
let begin_assembly() =
|
|
@@ -920,6 +927,7 @@ let begin_assembly() =
|
|
`{emit_symbol lbl_begin}:\n`
|
|
|
|
let end_assembly () =
|
|
+ nx_stack();
|
|
let lbl_end = Compilenv.make_symbol (Some "code_end") in
|
|
` .text\n`;
|
|
` .globl {emit_symbol lbl_end}\n`;
|
|
Index: ocaml-4.02.2/asmcomp/power/emit.mlp
|
|
===================================================================
|
|
--- ocaml-4.02.2.orig/asmcomp/power/emit.mlp
|
|
+++ ocaml-4.02.2/asmcomp/power/emit.mlp
|
|
@@ -882,6 +882,12 @@ let data l =
|
|
emit_string data_space;
|
|
List.iter emit_item l
|
|
|
|
+(* Mark stack as non executable *)
|
|
+let nx_stack() =
|
|
+ if Config.system = "elf" then
|
|
+ ` .section .note.GNU-stack,\"\",%progbits\n`
|
|
+
|
|
+
|
|
(* Beginning / end of an assembly file *)
|
|
|
|
let begin_assembly() =
|
|
@@ -898,6 +904,7 @@ let begin_assembly() =
|
|
`{emit_symbol lbl_begin}:\n`
|
|
|
|
let end_assembly() =
|
|
+ nx_stack();
|
|
if pic_externals then
|
|
(* Emit the pointers to external functions *)
|
|
StringSet.iter emit_external !external_functions;
|
|
Index: ocaml-4.02.2/asmcomp/sparc/emit.mlp
|
|
===================================================================
|
|
--- ocaml-4.02.2.orig/asmcomp/sparc/emit.mlp
|
|
+++ ocaml-4.02.2/asmcomp/sparc/emit.mlp
|
|
@@ -724,6 +724,12 @@ let data l =
|
|
` .data\n`;
|
|
List.iter emit_item l
|
|
|
|
+(* Mark stack as non executable *)
|
|
+let nx_stack() =
|
|
+ if Config.system = "linux" then
|
|
+ ` .section .note.GNU-stack,\"\",%progbits\n`
|
|
+
|
|
+
|
|
(* Beginning / end of an assembly file *)
|
|
|
|
let begin_assembly() =
|
|
@@ -737,6 +743,7 @@ let begin_assembly() =
|
|
`{emit_symbol lbl_begin}:\n`
|
|
|
|
let end_assembly() =
|
|
+ nx_stack();
|
|
` .text\n`;
|
|
let lbl_end = Compilenv.make_symbol (Some "code_end") in
|
|
` .global {emit_symbol lbl_end}\n`;
|
|
Index: ocaml-4.02.2/asmrun/power-elf.S
|
|
===================================================================
|
|
--- ocaml-4.02.2.orig/asmrun/power-elf.S
|
|
+++ ocaml-4.02.2/asmrun/power-elf.S
|
|
@@ -478,3 +478,8 @@ caml_system__frametable:
|
|
.long .L105 + 4 /* return address into callback */
|
|
.short -1 /* negative size count => use callback link */
|
|
.short 0 /* no roots here */
|
|
+
|
|
+#ifdef __ELF__
|
|
+.section .note.GNU-stack,"",%progbits
|
|
+#endif
|
|
+
|
|
Index: ocaml-4.02.2/asmrun/arm.S
|
|
===================================================================
|
|
--- ocaml-4.02.2.orig/asmrun/arm.S
|
|
+++ ocaml-4.02.2/asmrun/arm.S
|
|
@@ -498,3 +498,7 @@ caml_system__frametable:
|
|
.align 2
|
|
.type caml_system__frametable, %object
|
|
.size caml_system__frametable, .-caml_system__frametable
|
|
+
|
|
+#ifdef __ELF__
|
|
+.section .note.GNU-stack,"",%progbits
|
|
+#endif
|