+/* noexec32=opt{,opt}
+
+Control the no exec default for 32bit processes. Can be also overwritten
+per executable using ELF header flags (e.g. needed for the X server)
+Requires noexec=on or noexec=noforce to be effective.
+
+Valid options:
+ all,on Heap,stack,data is non executable.
+ off (default) Heap,stack,data is executable
+ stack Stack is non executable, heap/data is.
+ force Don't imply PROT_EXEC for PROT_READ
+ compat (default) Imply PROT_EXEC for PROT_READ
+
+*/
+ static int __init nonx32_setup(char *s)
+ {
+ while (*s) {
+ if (!strncmp(s, "all", 3) || !strncmp(s,"on",2)) {
+ vm_data_default_flags32 &= ~VM_EXEC;
+ vm_stack_flags32 &= ~VM_EXEC;
+ } else if (!strncmp(s, "off",3)) {
+ vm_data_default_flags32 |= VM_EXEC;
+ vm_stack_flags32 |= VM_EXEC;
+ } else if (!strncmp(s, "stack", 5)) {
+ vm_data_default_flags32 |= VM_EXEC;
+ vm_stack_flags32 &= ~VM_EXEC;
+ } else if (!strncmp(s, "force",5)) {
+ vm_force_exec32 = 0;
+ } else if (!strncmp(s, "compat",5)) {
+ vm_force_exec32 = PROT_EXEC;
+ }
+ s += strcspn(s, ",");
+ if (*s == ',')
+ ++s;
+ }
+ return 1;
+}
+
+__setup("noexec32=", nonx32_setup);
+