summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Dariz <luca@orpolo.org>2023-02-16 22:33:18 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2023-02-16 23:28:09 +0100
commit1b8d96d72b6978b6d2b0f734f1307d6c054e1a0d (patch)
tree92c295b4c88f7d4dc659b8ea7630b701fcba3fdd
parent68945d0b2b858dedf5481b1df2b0ce44ce92e0b6 (diff)
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>
-rw-r--r--i386/i386/ldt.c10
1 files 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