Re: [REGRESSION] x86/cpu fsgsbase breaks TLS in 32 bit rr tracees on a 64 bit system

From: H. Peter Anvin
Date: Mon Aug 24 2020 - 19:53:13 EST


On 2020-08-24 14:10, Andy Lutomirski wrote:
>
> PTRACE_READ_SEGMENT_DESCRIPTOR to read a segment descriptor.
>
> PTRACE_SET_FS / PTRACE_SET_GS: Sets FS or GS and updates the base accordingly.
>
> PTRACE_READ_SEGMENT_BASE: pass in a segment selector, get a base out.
> You would use this to populate the base fields.
>
> or perhaps a ptrace SETREGS variant that tries to preserve the old
> base semantics and magically sets the bases to match the selectors if
> the selectors are nonzero.
>
> Do any of these choices sound preferable to any of you?
>

My suggestion would be to export the GDT and LDT as a (readonly or mostly
readonly) regset(s) rather than adding entirely new operations. We could allow
the LDT and the per-thread GDT entries to be written, subject to the same
limitations as the corresponding system calls.

-hpa