diff options
author | Andy Lutomirski <luto@kernel.org> | 2015-03-23 16:08:53 -0700 |
---|---|---|
committer | Andy Lutomirski <luto@kernel.org> | 2015-03-23 16:09:45 -0700 |
commit | 5f8fcc3d10bcecbe92eeef6f4d7ef5064fa0789b (patch) | |
tree | 4d2dcc2343ac309ec3a83fab444e6f634b47d176 | |
parent | f00f9e0df47ddde1c86b81aad444febab4c254af (diff) | |
download | misc-tests-5f8fcc3d10bcecbe92eeef6f4d7ef5064fa0789b.tar.gz |
sigreturn: Offset LDT entries by 6 for Solaris LX zone compatibility
Signed-off-by: Andy Lutomirski <luto@kernel.org>
-rw-r--r-- | sigreturn.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sigreturn.c b/sigreturn.c index a205494..5c8cace 100644 --- a/sigreturn.c +++ b/sigreturn.c @@ -19,6 +19,8 @@ #include <sys/ptrace.h> #include <sys/user.h> +#define LDT_OFFSET 6 /* Solaris reserves LDT entries 0-5 for internal use. */ + struct selectors { unsigned short cs, gs, fs, ss; }; @@ -86,10 +88,10 @@ static void setup_ldt(void) if ((unsigned long)int3 > (1ULL << 32) - sizeof(int3)) errx(1, "int3 is too high\n"); - ldt_nonexistent_sel = LDT3(2); + ldt_nonexistent_sel = LDT3(LDT_OFFSET + 2); const struct user_desc code16_desc = { - .entry_number = 0, + .entry_number = LDT_OFFSET + 0, .base_addr = (unsigned long)int3, .limit = 4095, .seg_32bit = 0, @@ -102,7 +104,7 @@ static void setup_ldt(void) add_ldt(&code16_desc, &code16_sel, "code16"); const struct user_desc data16_desc = { - .entry_number = 1, + .entry_number = LDT_OFFSET + 1, .base_addr = (unsigned long)stack16, .limit = 0xffff, .seg_32bit = 0, @@ -115,7 +117,7 @@ static void setup_ldt(void) add_ldt(&data16_desc, &data16_sel, "data16"); const struct user_desc npcode32_desc = { - .entry_number = 3, + .entry_number = LDT_OFFSET + 3, .base_addr = (unsigned long)int3, .limit = 4095, .seg_32bit = 1, @@ -128,7 +130,7 @@ static void setup_ldt(void) add_ldt(&npcode32_desc, &npcode32_sel, "npcode32"); const struct user_desc npdata32_desc = { - .entry_number = 4, + .entry_number = LDT_OFFSET + 4, .base_addr = (unsigned long)stack16, .limit = 0xffff, .seg_32bit = 1, |