From 1b8d96d72b6978b6d2b0f734f1307d6c054e1a0d Mon Sep 17 00:00:00 2001 From: Luca Dariz Date: Thu, 16 Feb 2023 22:33:18 +0100 Subject: x86_64: set user segments as 64-bit if ! USER32 * i386/i386/ldt.c: set the L bit if user-space is 64-bit Message-Id: <20230216213318.2048699-4-luca@orpolo.org> --- i386/i386/ldt.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/i386/i386/ldt.c b/i386/i386/ldt.c index 70fa24e2..b86a0e3c 100644 --- a/i386/i386/ldt.c +++ b/i386/i386/ldt.c @@ -45,6 +45,12 @@ extern #endif /* MACH_PV_DESCRIPTORS */ struct real_descriptor ldt[LDTSZ]; +#if defined(__x86_64__) && ! defined(USER32) +#define USER_SEGMENT_SIZEBITS SZ_64 +#else +#define USER_SEGMENT_SIZEBITS SZ_32 +#endif + void ldt_fill(struct real_descriptor *myldt, struct real_descriptor *mygdt) { @@ -67,11 +73,11 @@ ldt_fill(struct real_descriptor *myldt, struct real_descriptor *mygdt) VM_MIN_USER_ADDRESS, VM_MAX_USER_ADDRESS-VM_MIN_USER_ADDRESS-4096, /* XXX LINEAR_... */ - ACC_PL_U|ACC_CODE_R, SZ_32); + ACC_PL_U|ACC_CODE_R, USER_SEGMENT_SIZEBITS); fill_ldt_descriptor(myldt, USER_DS, VM_MIN_USER_ADDRESS, VM_MAX_USER_ADDRESS-VM_MIN_USER_ADDRESS-4096, - ACC_PL_U|ACC_DATA_W, SZ_32); + ACC_PL_U|ACC_DATA_W, USER_SEGMENT_SIZEBITS); /* Activate the LDT. */ #ifdef MACH_PV_DESCRIPTORS -- cgit v1.2.3