Messages in this thread | | | From | Thomas Gleixner <> | Subject | Re: [PATCH v3 5/5] x86/entry: Make IA32 syscalls' availability depend on ia32_enabled() | Date | Mon, 19 Jun 2023 10:40:46 +0200 |
| |
On Mon, Jun 19 2023 at 09:28, Nikolay Borisov wrote: > On 19.06.23 г. 0:17 ч., Thomas Gleixner wrote: >> On Fri, Jun 16 2023 at 15:57, Nikolay Borisov wrote: >>> Another major aspect of supporting running of 32bit processes is the >>> ability to access 32bit syscalls. Such syscalls are invoked either by >>> using the legacy int 0x80 call gate interface or via the newer sysenter >>> instruction. >>> >>> Ensure that if ia32 emulation is disabled (either at compile time or >>> runtime) then those 2 syscall mechanisms are also disabled. >> >> AFAICT there are _three_ mechanisms for 32bit syscalls, no? > > int 0x80 and sysenter make it 2? Which one is the 3rd one - the "native > 64bit syscall" used in for X32 ABI ? This patch specifically deals with > the first 2?
int 80, sysenter, syscall = 3
They obviously depend on the vendor preference when the CPU has enabled long mode:
AMD Intel compat_int 80 y y compat_sysenter #UD y compat_syscall y #UD
On Intel SYSENTER is trivial to disable by setting MSR_IA32_SYSENTER_CS to 0 which makes sysenter raise #GP.
The nasty one is SYSCALL on AMD. If MSR_EFER.SCE=1 then MSR_CSTAR must contain a valid kernel text address because otherwise compat SYSCALL faults with CPL0 and user GSBASE. That's the whole reason for the stub function which just sets EAX to -ENOSYS and returns via SYSRET.
And your patch deals with all _three_:
compat=ON compat=OFF compat_int 80: Set system interrupt gate ---
compat_sysenter: Set up SYSENTER MSRs for Invalidate SYSENTER entry_SYSENTER_compat() MSRs
compat_syscall: Set MSR_CSTAR to Set MSR_CSTAR to entry_SYSCALL_compat() stub function (AMD only) (AMD only)
No?
Changelogs have to be precise. Otherwise they are useless and in the worst case actively misleading.
Thanks,
tglx
| |