|
@@ -23,6 +23,7 @@
|
|
#include "mem_user.h"
|
|
#include "mem_user.h"
|
|
#include "ptrace_user.h"
|
|
#include "ptrace_user.h"
|
|
#include "registers.h"
|
|
#include "registers.h"
|
|
|
|
+#include "skas.h"
|
|
#include "skas_ptrace.h"
|
|
#include "skas_ptrace.h"
|
|
|
|
|
|
static void ptrace_child(void)
|
|
static void ptrace_child(void)
|
|
@@ -140,14 +141,27 @@ static int stop_ptraced_child(int pid, int exitcode, int mustexit)
|
|
}
|
|
}
|
|
|
|
|
|
/* Changed only during early boot */
|
|
/* Changed only during early boot */
|
|
-int ptrace_faultinfo = 1;
|
|
|
|
-int ptrace_ldt = 1;
|
|
|
|
-int proc_mm = 1;
|
|
|
|
-int skas_needs_stub = 0;
|
|
|
|
|
|
+int ptrace_faultinfo;
|
|
|
|
+static int disable_ptrace_faultinfo;
|
|
|
|
+
|
|
|
|
+int ptrace_ldt;
|
|
|
|
+static int disable_ptrace_ldt;
|
|
|
|
+
|
|
|
|
+int proc_mm;
|
|
|
|
+static int disable_proc_mm;
|
|
|
|
+
|
|
|
|
+int have_switch_mm;
|
|
|
|
+static int disable_switch_mm;
|
|
|
|
+
|
|
|
|
+int skas_needs_stub;
|
|
|
|
|
|
static int __init skas0_cmd_param(char *str, int* add)
|
|
static int __init skas0_cmd_param(char *str, int* add)
|
|
{
|
|
{
|
|
- ptrace_faultinfo = proc_mm = 0;
|
|
|
|
|
|
+ disable_ptrace_faultinfo = 1;
|
|
|
|
+ disable_ptrace_ldt = 1;
|
|
|
|
+ disable_proc_mm = 1;
|
|
|
|
+ disable_switch_mm = 1;
|
|
|
|
+
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -157,15 +171,12 @@ static int __init mode_skas0_cmd_param(char *str, int* add)
|
|
__attribute__((alias("skas0_cmd_param")));
|
|
__attribute__((alias("skas0_cmd_param")));
|
|
|
|
|
|
__uml_setup("skas0", skas0_cmd_param,
|
|
__uml_setup("skas0", skas0_cmd_param,
|
|
- "skas0\n"
|
|
|
|
- " Disables SKAS3 usage, so that SKAS0 is used, unless \n"
|
|
|
|
- " you specify mode=tt.\n\n");
|
|
|
|
|
|
+"skas0\n"
|
|
|
|
+" Disables SKAS3 and SKAS4 usage, so that SKAS0 is used\n\n");
|
|
|
|
|
|
__uml_setup("mode=skas0", mode_skas0_cmd_param,
|
|
__uml_setup("mode=skas0", mode_skas0_cmd_param,
|
|
- "mode=skas0\n"
|
|
|
|
- " Disables SKAS3 usage, so that SKAS0 is used, unless you \n"
|
|
|
|
- " specify mode=tt. Note that this was recently added - on \n"
|
|
|
|
- " older kernels you must use simply \"skas0\".\n\n");
|
|
|
|
|
|
+"mode=skas0\n"
|
|
|
|
+" Disables SKAS3 and SKAS4 usage, so that SKAS0 is used.\n\n");
|
|
|
|
|
|
/* Changed only during early boot */
|
|
/* Changed only during early boot */
|
|
static int force_sysemu_disabled = 0;
|
|
static int force_sysemu_disabled = 0;
|
|
@@ -360,7 +371,7 @@ void __init os_early_checks(void)
|
|
|
|
|
|
static int __init noprocmm_cmd_param(char *str, int* add)
|
|
static int __init noprocmm_cmd_param(char *str, int* add)
|
|
{
|
|
{
|
|
- proc_mm = 0;
|
|
|
|
|
|
+ disable_proc_mm = 1;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -372,7 +383,7 @@ __uml_setup("noprocmm", noprocmm_cmd_param,
|
|
|
|
|
|
static int __init noptracefaultinfo_cmd_param(char *str, int* add)
|
|
static int __init noptracefaultinfo_cmd_param(char *str, int* add)
|
|
{
|
|
{
|
|
- ptrace_faultinfo = 0;
|
|
|
|
|
|
+ disable_ptrace_faultinfo = 1;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -384,7 +395,7 @@ __uml_setup("noptracefaultinfo", noptracefaultinfo_cmd_param,
|
|
|
|
|
|
static int __init noptraceldt_cmd_param(char *str, int* add)
|
|
static int __init noptraceldt_cmd_param(char *str, int* add)
|
|
{
|
|
{
|
|
- ptrace_ldt = 0;
|
|
|
|
|
|
+ disable_ptrace_ldt = 1;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -404,17 +415,15 @@ static inline void check_skas3_ptrace_faultinfo(void)
|
|
|
|
|
|
n = ptrace(PTRACE_FAULTINFO, pid, 0, &fi);
|
|
n = ptrace(PTRACE_FAULTINFO, pid, 0, &fi);
|
|
if (n < 0) {
|
|
if (n < 0) {
|
|
- ptrace_faultinfo = 0;
|
|
|
|
if (errno == EIO)
|
|
if (errno == EIO)
|
|
non_fatal("not found\n");
|
|
non_fatal("not found\n");
|
|
else
|
|
else
|
|
perror("not found");
|
|
perror("not found");
|
|
- }
|
|
|
|
|
|
+ } else if (disable_ptrace_faultinfo)
|
|
|
|
+ non_fatal("found but disabled on command line\n");
|
|
else {
|
|
else {
|
|
- if (!ptrace_faultinfo)
|
|
|
|
- non_fatal("found but disabled on command line\n");
|
|
|
|
- else
|
|
|
|
- non_fatal("found\n");
|
|
|
|
|
|
+ ptrace_faultinfo = 1;
|
|
|
|
+ non_fatal("found\n");
|
|
}
|
|
}
|
|
|
|
|
|
stop_ptraced_child(pid, 1, 1);
|
|
stop_ptraced_child(pid, 1, 1);
|
|
@@ -437,38 +446,30 @@ static inline void check_skas3_ptrace_ldt(void)
|
|
if (n < 0) {
|
|
if (n < 0) {
|
|
if (errno == EIO)
|
|
if (errno == EIO)
|
|
non_fatal("not found\n");
|
|
non_fatal("not found\n");
|
|
- else {
|
|
|
|
|
|
+ else
|
|
perror("not found");
|
|
perror("not found");
|
|
- }
|
|
|
|
- ptrace_ldt = 0;
|
|
|
|
- }
|
|
|
|
|
|
+ } else if (disable_ptrace_ldt)
|
|
|
|
+ non_fatal("found, but use is disabled\n");
|
|
else {
|
|
else {
|
|
- if (ptrace_ldt)
|
|
|
|
- non_fatal("found\n");
|
|
|
|
- else
|
|
|
|
- non_fatal("found, but use is disabled\n");
|
|
|
|
|
|
+ ptrace_ldt = 1;
|
|
|
|
+ non_fatal("found\n");
|
|
}
|
|
}
|
|
|
|
|
|
stop_ptraced_child(pid, 1, 1);
|
|
stop_ptraced_child(pid, 1, 1);
|
|
-#else
|
|
|
|
- /* PTRACE_LDT might be disabled via cmdline option.
|
|
|
|
- * We want to override this, else we might use the stub
|
|
|
|
- * without real need
|
|
|
|
- */
|
|
|
|
- ptrace_ldt = 1;
|
|
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
static inline void check_skas3_proc_mm(void)
|
|
static inline void check_skas3_proc_mm(void)
|
|
{
|
|
{
|
|
non_fatal(" - /proc/mm...");
|
|
non_fatal(" - /proc/mm...");
|
|
- if (access("/proc/mm", W_OK) < 0) {
|
|
|
|
- proc_mm = 0;
|
|
|
|
|
|
+ if (access("/proc/mm", W_OK) < 0)
|
|
perror("not found");
|
|
perror("not found");
|
|
- }
|
|
|
|
- else if (!proc_mm)
|
|
|
|
|
|
+ else if (disable_proc_mm)
|
|
non_fatal("found but disabled on command line\n");
|
|
non_fatal("found but disabled on command line\n");
|
|
- else non_fatal("found\n");
|
|
|
|
|
|
+ else {
|
|
|
|
+ proc_mm = 1;
|
|
|
|
+ non_fatal("found\n");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void can_do_skas(void)
|
|
void can_do_skas(void)
|