[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] x86/traps: Drop incorrect BUILD_BUG_ON() and comment in load_system_tables()


  • To: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Mon, 17 Mar 2025 15:00:52 +0100
  • Autocrypt: addr=jbeulich@xxxxxxxx; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL
  • Cc: Roger Pau Monné <roger.pau@xxxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Mon, 17 Mar 2025 14:01:00 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 17.03.2025 13:29, Andrew Cooper wrote:
> On 17/03/2025 9:03 am, Jan Beulich wrote:
>> On 14.03.2025 19:33, Andrew Cooper wrote:
>>> It is only the hardware task switching mechanism which cares about a TSS 
>>> being
>>> at least 0x67 bytes long.
>> I/O bitmap accesses are where this particular limit comes into play. For
>> 32-bit task switching a slightly shorter one would still do, I think?
> 
> Even by x86 standards its a terrible hack.  32-bit task switching
> mandates 0x67, even though the IO bitmap is not accessed for the
> outgoing or incoming task.
> 
> For IO accesses in general, a limit shorter than the IO bitmap pointer
> means no IO bitmap, and IO accesses in Ring3 take #GP.
> 
>>
>>>  Furthermore, since this check was added, the limit is now 0x6b if CET-SS is
>>> active.
>> Which isn't reflected at all in struct tss64: Aiui that's an addition to the
>> 32-bit TSS only.
> 
> 0x67 isn't relevant to tss64 either.  It's strictly for hardware task
> switching, which is strictly for 32bit.
> 
> 
>>> --- a/xen/arch/x86/cpu/common.c
>>> +++ b/xen/arch/x86/cpu/common.c
>>> @@ -900,8 +900,6 @@ void load_system_tables(void)
>>>             wrmsrl(MSR_INTERRUPT_SSP_TABLE, (unsigned long)ist_ssp);
>>>     }
>>>  
>>> -   BUILD_BUG_ON(sizeof(*tss) <= 0x67); /* Mandated by the architecture. */
>>> -
>>>     _set_tssldt_desc(gdt + TSS_ENTRY, (unsigned long)tss,
>>>                      sizeof(*tss) - 1, SYS_DESC_tss_avail);
>> All of the above said, the removal worries me primarily with the sizeof()
>> still in use here.
> 
> Xen uses IST4 but not IST5.
> 
> Xen could set the limit to 67 (== 0x43) and everything would continue to
> be fine.  In fact, this is quite possibly a better option than poisoning
> IST[5..7].
> 
> I'm deleting the BUILD_BUG_ON() because everything about it, even the
> comment, is incorrect for Xen.

Okay, yet then there's still that sizeof() use, and iirc that's the sole reason
why the BUILD_BUG_ON() was originally put there. Now we can of course promise
to ourselves that we won't ever edit struct tss64 in an undue way. On that
basis dropping one but not the other is perhaps okay-ish. Irrespective I think
that the better route would be to replace the other sizeof() as well. Perhaps,
as you say, to even lower the limit. (Provided that doesn't run into bugs on,
say, qemu. Given how well all of this is documented, finding bugs in emulation
code wouldn't be entirely unexpected.)

Jan



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.