Commit cb66504d authored by Paolo 'Blaisorblade' Giarrusso's avatar Paolo 'Blaisorblade' Giarrusso Committed by Linus Torvalds
Browse files

[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: default avatarPaolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: default avatarJeff Dike <jdike@addtoit.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent b6b038a2
Loading
Loading
Loading
Loading
+25 −10
Original line number Diff line number Diff line
@@ -212,12 +212,26 @@ static int stop_ptraced_child(int pid, int exitcode, int mustexit)

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_support(void)

	n = ptrace(PTRACE_FAULTINFO, pid, 0, &fi);
	if (n < 0) {
		ptrace_faultinfo = 0;
		if(errno == EIO)
			printf("not found\n");
		else {
@@ -382,7 +395,9 @@ static inline void check_skas3_ptrace_support(void)
		}
	}
	else {
		ptrace_faultinfo = 1;
		if (!ptrace_faultinfo)
			printf("found but disabled on command line\n");
		else
			printf("found\n");
	}

@@ -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 {
	} else {
		if (!proc_mm)
			printf("found but disabled on command line\n");
		else
			printf("found\n");
	}

out:
	check_skas3_ptrace_support();
	return 1;
}
+19 −0
Original line number Diff line number Diff line
@@ -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);