tree 0d292ced5cce778bc16387b1d928117aead52996
parent b6b038a24a826fe22d9823722cfbbbd3ad7a3021
author Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]> Thu, 28 Jul 2005 
01:43:31 -0700
committer Linus Torvalds <[EMAIL PROTECTED]> Thu, 28 Jul 2005 06:25:48 -0700

[PATCH] uml: add skas0 command-line option

This adds the "skas0" parameter to force skas0 operation on SKAS3 host and
shows which operating mode has been selected.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>
Signed-off-by: Jeff Dike <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>

 arch/um/kernel/process.c |   35 +++++++++++++++++++++++++----------
 arch/um/kernel/um_arch.c |   19 +++++++++++++++++++
 2 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
--- a/arch/um/kernel/process.c
+++ b/arch/um/kernel/process.c
@@ -212,12 +212,26 @@ static int stop_ptraced_child(int pid, i
 
 static int force_sysemu_disabled = 0;
 
+int ptrace_faultinfo = 1;
+int proc_mm = 1;
+
+static int __init skas0_cmd_param(char *str, int* add)
+{
+       ptrace_faultinfo = proc_mm = 0;
+       return 0;
+}
+
 static int __init nosysemu_cmd_param(char *str, int* add)
 {
        force_sysemu_disabled = 1;
        return 0;
 }
 
+__uml_setup("skas0", skas0_cmd_param,
+               "skas0\n"
+               "    Disables SKAS3 usage, so that SKAS0 is used, unless you \n"
+               "    specify mode=tt.\n\n");
+
 __uml_setup("nosysemu", nosysemu_cmd_param,
                "nosysemu\n"
                "    Turns off syscall emulation patch for ptrace (SYSEMU) 
on.\n"
@@ -359,12 +373,10 @@ void forward_pending_sigio(int target)
                kill(target, SIGIO);
 }
 
-int ptrace_faultinfo = 0;
-int proc_mm = 1;
-
 extern void *__syscall_stub_start, __syscall_stub_end;
 
 #ifdef UML_CONFIG_MODE_SKAS
+
 static inline void check_skas3_ptrace_support(void)
 {
        struct ptrace_faultinfo fi;
@@ -375,6 +387,7 @@ static inline void check_skas3_ptrace_su
 
        n = ptrace(PTRACE_FAULTINFO, pid, 0, &fi);
        if (n < 0) {
+               ptrace_faultinfo = 0;
                if(errno == EIO)
                        printf("not found\n");
                else {
@@ -382,8 +395,10 @@ static inline void check_skas3_ptrace_su
                }
        }
        else {
-               ptrace_faultinfo = 1;
-               printf("found\n");
+               if (!ptrace_faultinfo)
+                       printf("found but disabled on command line\n");
+               else
+                       printf("found\n");
        }
 
        init_registers(pid);
@@ -396,13 +411,13 @@ int can_do_skas(void)
        if (os_access("/proc/mm", OS_ACC_W_OK) < 0) {
                proc_mm = 0;
                printf("not found\n");
-               goto out;
-       }
-       else {
-               printf("found\n");
+       } else {
+               if (!proc_mm)
+                       printf("found but disabled on command line\n");
+               else
+                       printf("found\n");
        }
 
-out:
        check_skas3_ptrace_support();
        return 1;
 }
diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c
--- a/arch/um/kernel/um_arch.c
+++ b/arch/um/kernel/um_arch.c
@@ -38,6 +38,9 @@
 #include "choose-mode.h"
 #include "mode_kern.h"
 #include "mode.h"
+#ifdef UML_CONFIG_MODE_SKAS
+#include "skas.h"
+#endif
 
 #define DEFAULT_COMMAND_LINE "root=98:0"
 
@@ -318,6 +321,7 @@ int linux_main(int argc, char **argv)
        unsigned long avail, diff;
        unsigned long virtmem_size, max_physmem;
        unsigned int i, add;
+       char * mode;
 
        for (i = 1; i < argc; i++){
                if((i == 1) && (argv[i][0] == ' ')) continue;
@@ -338,6 +342,21 @@ int linux_main(int argc, char **argv)
                exit(1);
        }
 #endif
+
+#ifndef CONFIG_MODE_SKAS
+       mode = "TT";
+#else
+       /* Show to the user the result of selection */
+       if (mode_tt)
+               mode = "TT";
+       else if (proc_mm && ptrace_faultinfo)
+               mode = "SKAS3";
+       else
+               mode = "SKAS0";
+#endif
+
+       printf("UML running in %s mode\n", mode);
+
        uml_start = CHOOSE_MODE_PROC(set_task_sizes_tt, set_task_sizes_skas, 0,
                                     &host_task_size, &task_size);
 
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to