From: Chris Wright <chrisw@sous-sol.org>
To: linux-kernel@vger.kernel.org
Cc: virtualization@lists.osdl.org, xen-devel@lists.xensource.com,
Jeremy Fitzhardinge <jeremy@goop.org>, Andi Kleen <ak@suse.de>,
Andrew Morton <akpm@osdl.org>,
Rusty Russell <rusty@rustcorp.com.au>,
Zachary Amsden <zach@vmware.com>,
Ian Pratt <ian.pratt@xensource.com>,
Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
Subject: [RFC PATCH 15/33] move segment checks to subarch
Date: Tue, 18 Jul 2006 00:00:15 -0700 [thread overview]
Message-ID: <20060718091952.263186000@sous-sol.org> (raw)
In-Reply-To: 20060718091807.467468000@sous-sol.org
[-- Attachment #1: i386-segments --]
[-- Type: text/plain, Size: 5092 bytes --]
We allow for the fact that the guest kernel may not run in ring 0.
This requires some abstraction in a few places when setting %cs or
checking privilege level (user vs kernel).
Signed-off-by: Ian Pratt <ian.pratt@xensource.com>
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
---
arch/i386/kernel/process.c | 2 +-
arch/i386/mm/fault.c | 8 +++++---
include/asm-i386/mach-default/mach_segment.h | 8 ++++++++
include/asm-i386/mach-xen/mach_segment.h | 9 +++++++++
include/asm-i386/mach-xen/mach_system.h | 1 +
include/asm-i386/ptrace.h | 6 ++++--
include/asm-i386/segment.h | 2 ++
include/asm-i386/system.h | 1 +
8 files changed, 31 insertions(+), 6 deletions(-)
diff -r 0bc9790d1ce3 arch/i386/kernel/process.c
--- a/arch/i386/kernel/process.c Tue Jul 18 04:04:39 2006 -0400
+++ b/arch/i386/kernel/process.c Tue Jul 18 04:33:57 2006 -0400
@@ -346,7 +346,7 @@ int kernel_thread(int (*fn)(void *), voi
regs.xes = __USER_DS;
regs.orig_eax = -1;
regs.eip = (unsigned long) kernel_thread_helper;
- regs.xcs = __KERNEL_CS;
+ regs.xcs = get_kernel_cs();
regs.eflags = X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2;
/* Ok, create the new process.. */
diff -r 0bc9790d1ce3 arch/i386/mm/fault.c
--- a/arch/i386/mm/fault.c Tue Jul 18 04:04:39 2006 -0400
+++ b/arch/i386/mm/fault.c Tue Jul 18 04:33:57 2006 -0400
@@ -28,6 +28,8 @@
#include <asm/desc.h>
#include <asm/kdebug.h>
+#include <mach_segment.h>
+
extern void die(const char *,struct pt_regs *,long);
#ifdef CONFIG_KPROBES
@@ -119,10 +121,10 @@ static inline unsigned long get_segment_
}
/* The standard kernel/user address space limit. */
- *eip_limit = (seg & 3) ? USER_DS.seg : KERNEL_DS.seg;
+ *eip_limit = (seg & USER_MODE_MASK) ? USER_DS.seg : KERNEL_DS.seg;
/* By far the most common cases. */
- if (likely(seg == __USER_CS || seg == __KERNEL_CS))
+ if (likely(seg == __USER_CS || seg == get_kernel_cs()))
return eip;
/* Check the segment exists, is within the current LDT/GDT size,
@@ -437,7 +439,7 @@ good_area:
switch (error_code & 3) {
default: /* 3: write, present */
#ifdef TEST_VERIFY_AREA
- if (regs->cs == KERNEL_CS)
+ if (regs->cs == get_kernel_cs())
printk("WP fault at %08lx\n", regs->eip);
#endif
/* fall through */
diff -r 0bc9790d1ce3 include/asm-i386/ptrace.h
--- a/include/asm-i386/ptrace.h Tue Jul 18 04:04:39 2006 -0400
+++ b/include/asm-i386/ptrace.h Tue Jul 18 04:33:57 2006 -0400
@@ -1,5 +1,7 @@
#ifndef _I386_PTRACE_H
#define _I386_PTRACE_H
+
+#include <mach_segment.h>
#define EBX 0
#define ECX 1
@@ -73,11 +75,11 @@ extern void send_sigtrap(struct task_str
*/
static inline int user_mode(struct pt_regs *regs)
{
- return (regs->xcs & 3) != 0;
+ return (regs->xcs & USER_MODE_MASK) != 0;
}
static inline int user_mode_vm(struct pt_regs *regs)
{
- return ((regs->xcs & 3) | (regs->eflags & VM_MASK)) != 0;
+ return ((regs->xcs & USER_MODE_MASK) | (regs->eflags & VM_MASK)) != 0;
}
#define instruction_pointer(regs) ((regs)->eip)
#if defined(CONFIG_SMP) && defined(CONFIG_FRAME_POINTER)
diff -r 0bc9790d1ce3 include/asm-i386/segment.h
--- a/include/asm-i386/segment.h Tue Jul 18 04:04:39 2006 -0400
+++ b/include/asm-i386/segment.h Tue Jul 18 04:33:57 2006 -0400
@@ -1,5 +1,7 @@
#ifndef _ASM_SEGMENT_H
#define _ASM_SEGMENT_H
+
+#include <mach_segment.h>
/*
* The layout of the per-CPU GDT under Linux:
diff -r 0bc9790d1ce3 include/asm-i386/system.h
--- a/include/asm-i386/system.h Tue Jul 18 04:04:39 2006 -0400
+++ b/include/asm-i386/system.h Tue Jul 18 04:33:57 2006 -0400
@@ -487,6 +487,7 @@ static inline unsigned long long __cmpxc
#endif
#include <linux/irqflags.h>
+#include <mach_system.h>
/*
* disable hlt during certain critical i/o operations
diff -r 0bc9790d1ce3 include/asm-i386/mach-xen/mach_system.h
--- a/include/asm-i386/mach-xen/mach_system.h Tue Jul 18 04:04:39 2006 -0400
+++ b/include/asm-i386/mach-xen/mach_system.h Tue Jul 18 04:33:57 2006 -0400
@@ -1,5 +1,6 @@
#ifndef __ASM_MACH_SYSTEM_H
#define __ASM_MACH_SYSTEM_H
+#include <asm/hypervisor.h>
#endif /* __ASM_MACH_SYSTEM_H */
diff -r 0bc9790d1ce3 include/asm-i386/mach-default/mach_segment.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/asm-i386/mach-default/mach_segment.h Tue Jul 18 04:33:57 2006 -0400
@@ -0,0 +1,8 @@
+#ifndef __ASM_MACH_SEGMENT_H
+#define __ASM_MACH_SEGMENT_H
+
+#define USER_MODE_MASK 3
+
+#define get_kernel_cs() __KERNEL_CS
+
+#endif /* __ASM_MACH_SEGMENT_H */
diff -r 0bc9790d1ce3 include/asm-i386/mach-xen/mach_segment.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/include/asm-i386/mach-xen/mach_segment.h Tue Jul 18 04:33:57 2006 -0400
@@ -0,0 +1,9 @@
+#ifndef __ASM_MACH_SEGMENT_H
+#define __ASM_MACH_SEGMENT_H
+
+#define USER_MODE_MASK 2
+
+#define get_kernel_cs() \
+ (__KERNEL_CS + (xen_feature(XENFEAT_supervisor_mode_kernel) ? 0 : 1))
+
+#endif /* __ASM_MACH_SEGMENT_H */
--
next prev parent reply other threads:[~2006-07-18 9:30 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-07-18 9:18 [RFC PATCH 00/33] Xen i386 paravirtualization support Chris Wright
2006-07-18 7:00 ` [RFC PATCH 01/33] Add apply_to_page_range() function Chris Wright
2006-07-18 10:38 ` Adrian Bunk
2006-07-18 19:29 ` Chris Wright
2006-07-20 6:17 ` Adrian Bunk
2006-07-18 7:00 ` [RFC PATCH 02/33] Add sync bitops Chris Wright
2006-07-18 9:56 ` Arjan van de Ven
2006-07-18 10:18 ` Keir Fraser
2006-07-19 12:54 ` Andi Kleen
2006-07-18 10:34 ` Adrian Bunk
2006-07-18 7:00 ` [RFC PATCH 03/33] Add nosegneg capability to the vsyscall page notes Chris Wright
2006-07-18 7:00 ` [RFC PATCH 04/33] Add XEN config options and disable unsupported config options Chris Wright
2006-07-18 9:59 ` Arjan van de Ven
2006-07-18 10:21 ` Keir Fraser
2006-07-18 7:00 ` [RFC PATCH 05/33] Makefile support to build Xen subarch Chris Wright
2006-07-18 10:00 ` Arjan van de Ven
2006-07-18 11:40 ` Andrew Morton
2006-07-18 20:41 ` Jeremy Fitzhardinge
2006-07-18 20:15 ` Jeremy Fitzhardinge
2006-07-18 7:00 ` [RFC PATCH 06/33] Add Xen interface header files Chris Wright
2006-07-18 7:00 ` [RFC PATCH 07/33] Hypervisor " Chris Wright
2006-07-18 7:00 ` [RFC PATCH 08/33] Add vmlinuz build target Chris Wright
2006-07-18 7:00 ` [RFC PATCH 09/33] Add start-of-day setup hooks to subarch Chris Wright
2006-07-18 10:03 ` Arjan van de Ven
2006-07-18 20:49 ` Jeremy Fitzhardinge
2006-07-20 6:07 ` Adrian Bunk
2006-07-20 12:10 ` Keir Fraser
2006-07-20 13:27 ` Jeremy Fitzhardinge
2006-07-18 7:00 ` [RFC PATCH 10/33] add support for Xen feature queries Chris Wright
2006-07-18 7:00 ` [RFC PATCH 11/33] Add Xen-specific memory management definitions Chris Wright
2006-07-18 7:00 ` [RFC PATCH 12/33] Change __FIXADDR_TOP to leave room for the hypervisor Chris Wright
2006-07-18 7:00 ` [RFC PATCH 13/33] Add a new head.S start-of-day file for booting on Xen Chris Wright
2006-07-18 10:06 ` Arjan van de Ven
2006-07-18 20:13 ` Jeremy Fitzhardinge
2006-07-18 7:00 ` [RFC PATCH 14/33] subarch support for controlling interrupt delivery Chris Wright
2006-07-18 7:00 ` Chris Wright [this message]
2006-07-18 10:09 ` [RFC PATCH 15/33] move segment checks to subarch Arjan van de Ven
2006-07-18 11:28 ` Zachary Amsden
2006-07-18 19:06 ` Rusty Russell
2006-07-18 19:25 ` Chris Wright
2006-07-18 20:00 ` [Xen-devel] " Rusty Russell
2006-07-18 7:00 ` [RFC PATCH 16/33] Add support for Xen to entry.S Chris Wright
2006-07-18 10:11 ` Arjan van de Ven
2006-07-18 20:04 ` Jeremy Fitzhardinge
2006-07-18 19:17 ` Rusty Russell
2006-07-18 20:43 ` Chris Wright
2006-07-18 23:03 ` Jeremy Fitzhardinge
2006-07-19 5:30 ` Chris Wright
2006-07-18 7:00 ` [RFC PATCH 17/33] Support loading an initrd when running on Xen Chris Wright
2006-07-18 7:00 ` [RFC PATCH 18/33] Subarch support for CPUID instruction Chris Wright
2006-07-18 10:14 ` Arjan van de Ven
2006-07-18 10:26 ` Keir Fraser
2006-07-18 10:38 ` Arjan van de Ven
2006-07-18 11:33 ` Zachary Amsden
2006-07-18 20:46 ` David Miller
2006-07-18 21:00 ` Chris Wright
2006-07-18 7:00 ` [RFC PATCH 19/33] Support gdt/idt/ldt handling on Xen Chris Wright
2006-07-18 7:00 ` [RFC PATCH 20/33] subarch support for interrupt and exception gates Chris Wright
2006-07-18 7:00 ` [RFC PATCH 21/33] subarch support for control register accesses Chris Wright
2006-07-18 7:00 ` [RFC PATCH 22/33] subarch stack pointer update Chris Wright
2006-07-18 7:00 ` [RFC PATCH 23/33] subarch TLB support Chris Wright
2006-07-18 20:39 ` David Miller
2006-07-18 21:00 ` Chris Wright
2006-07-18 7:00 ` [RFC PATCH 24/33] Add support for Xen event channels Chris Wright
2006-07-18 7:00 ` [RFC PATCH 25/33] Implement timekeeping for Xen Chris Wright
2006-07-25 2:49 ` john stultz
2006-07-25 20:05 ` Jeremy Fitzhardinge
2006-07-18 7:00 ` [RFC PATCH 26/33] subarch suport for idle loop (NO_IDLE_HZ for Xen) Chris Wright
2006-07-18 7:00 ` [RFC PATCH 27/33] Add the Xen virtual console driver Chris Wright
2006-07-18 10:24 ` Arjan van de Ven
2006-07-18 10:31 ` Keir Fraser
2006-07-27 15:05 ` Hollis Blanchard
2006-07-18 7:00 ` [RFC PATCH 28/33] Add Xen grant table support Chris Wright
2006-07-19 10:04 ` [Xen-devel] " Harry Butterworth
2006-07-25 18:30 ` Hollis Blanchard
2006-07-25 18:45 ` Keir Fraser
2006-07-25 19:06 ` Segher Boessenkool
2006-07-18 7:00 ` [RFC PATCH 29/33] Add Xen driver utility functions Chris Wright
2006-07-18 7:00 ` [RFC PATCH 30/33] Add the Xenbus sysfs and virtual device hotplug driver Chris Wright
2006-07-18 7:00 ` [RFC PATCH 31/33] Add Xen subarch reboot support Chris Wright
2006-07-20 6:16 ` Adrian Bunk
2006-07-18 7:00 ` [RFC PATCH 32/33] Add the Xen virtual network device driver Chris Wright
2006-07-18 10:27 ` Arjan van de Ven
2006-07-18 10:35 ` Keir Fraser
2006-07-18 10:42 ` Arjan van de Ven
2006-07-18 12:18 ` Dave Boutcher
2006-07-18 12:39 ` jamal
2006-07-18 13:08 ` Herbert Xu
2006-07-18 13:25 ` John Haller
2006-07-18 15:22 ` Herbert Xu
2006-07-18 15:44 ` Stephen Hemminger
2006-07-19 3:55 ` Herbert Xu
2006-07-18 20:42 ` David Miller
2006-07-18 21:09 ` Chris Wright
2006-07-18 7:00 ` [RFC PATCH 33/33] Add Xen virtual block " Chris Wright
2006-07-18 10:34 ` Arjan van de Ven
2006-07-18 20:57 ` Jeremy Fitzhardinge
2006-07-18 13:01 ` Dave Boutcher
2006-07-18 16:25 ` Jeff Garzik
2006-07-18 19:28 ` Chris Wright
2006-07-18 21:22 ` Jeremy Fitzhardinge
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060718091952.263186000@sous-sol.org \
--to=chrisw@sous-sol.org \
--cc=Christian.Limpach@cl.cam.ac.uk \
--cc=ak@suse.de \
--cc=akpm@osdl.org \
--cc=ian.pratt@xensource.com \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rusty@rustcorp.com.au \
--cc=virtualization@lists.osdl.org \
--cc=xen-devel@lists.xensource.com \
--cc=zach@vmware.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox