Skip to content

Commit

Permalink
uml: redo host capability detection and disabling
Browse files Browse the repository at this point in the history
Redo how host capabilities are recorded at startup and disabled on the
command line.

There are now explicit variables saying what's been disabled by the
command line rather than the implicitness of the have_* variable being
zero.  The capability variables now start at zero and are set to one
as their capabilities are found to be present on the host.

Signed-off-by: Jeff Dike <[email protected]>
Cc: WANG Cong <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
cfd-36 authored and torvalds committed May 13, 2008
1 parent c714a53 commit 53c2587
Showing 1 changed file with 41 additions and 40 deletions.
81 changes: 41 additions & 40 deletions arch/um/os-Linux/start_up.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "mem_user.h"
#include "ptrace_user.h"
#include "registers.h"
#include "skas.h"
#include "skas_ptrace.h"

static void ptrace_child(void)
Expand Down Expand Up @@ -140,14 +141,27 @@ static int stop_ptraced_child(int pid, int exitcode, int mustexit)
}

/* 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)
{
ptrace_faultinfo = proc_mm = 0;
disable_ptrace_faultinfo = 1;
disable_ptrace_ldt = 1;
disable_proc_mm = 1;
disable_switch_mm = 1;

return 0;
}

Expand All @@ -157,15 +171,12 @@ static int __init mode_skas0_cmd_param(char *str, int* add)
__attribute__((alias("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,
"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 */
static int force_sysemu_disabled = 0;
Expand Down Expand Up @@ -360,7 +371,7 @@ void __init os_early_checks(void)

static int __init noprocmm_cmd_param(char *str, int* add)
{
proc_mm = 0;
disable_proc_mm = 1;
return 0;
}

Expand All @@ -372,7 +383,7 @@ __uml_setup("noprocmm", noprocmm_cmd_param,

static int __init noptracefaultinfo_cmd_param(char *str, int* add)
{
ptrace_faultinfo = 0;
disable_ptrace_faultinfo = 1;
return 0;
}

Expand All @@ -384,7 +395,7 @@ __uml_setup("noptracefaultinfo", noptracefaultinfo_cmd_param,

static int __init noptraceldt_cmd_param(char *str, int* add)
{
ptrace_ldt = 0;
disable_ptrace_ldt = 1;
return 0;
}

Expand All @@ -404,17 +415,15 @@ static inline void check_skas3_ptrace_faultinfo(void)

n = ptrace(PTRACE_FAULTINFO, pid, 0, &fi);
if (n < 0) {
ptrace_faultinfo = 0;
if (errno == EIO)
non_fatal("not found\n");
else
perror("not found");
}
} else if (disable_ptrace_faultinfo)
non_fatal("found but disabled on command line\n");
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);
Expand All @@ -437,38 +446,30 @@ static inline void check_skas3_ptrace_ldt(void)
if (n < 0) {
if (errno == EIO)
non_fatal("not found\n");
else {
else
perror("not found");
}
ptrace_ldt = 0;
}
} else if (disable_ptrace_ldt)
non_fatal("found, but use is disabled\n");
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);
#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
}

static inline void check_skas3_proc_mm(void)
{
non_fatal(" - /proc/mm...");
if (access("/proc/mm", W_OK) < 0) {
proc_mm = 0;
if (access("/proc/mm", W_OK) < 0)
perror("not found");
}
else if (!proc_mm)
else if (disable_proc_mm)
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)
Expand Down

0 comments on commit 53c2587

Please sign in to comment.