From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.ispras.ru (mail.ispras.ru [83.149.199.84]) by mx.groups.io with SMTP id smtpd.web08.10561.1636141059359837515 for ; Fri, 05 Nov 2021 12:37:40 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: ispras.ru, ip: 83.149.199.84, mailfrom: cheptsov@ispras.ru) Received: from smtpclient.apple (unknown [77.232.9.83]) by mail.ispras.ru (Postfix) with ESMTPSA id BB76240D3BFF; Fri, 5 Nov 2021 19:37:24 +0000 (UTC) Mime-Version: 1.0 (Mac OS X Mail 15.0 \(3693.20.0.1.32\)) Subject: Re: [edk2-devel] [PATCH] UefiCpuPkg: Fix CPU stack guard support by aligning GDT buffer From: "Vitaly Cheptsov" In-Reply-To: <20211105192821.s2itdxh5t6azp4z6@leviathan> Date: Fri, 5 Nov 2021 22:37:23 +0300 Cc: devel@edk2.groups.io, Jiewen Yao , Eric Dong , Michael Kinney , Jian J Wang , Jeff Fan , Mikhail Krichanov , =?utf-8?Q?Marvin_H=C3=A4user?= Message-Id: <081FC9DB-3E1C-4FAB-8F4F-CD48F85F1EC4@ispras.ru> References: <20210920141347.25161-1-cheptsov@ispras.ru> <20211105192821.s2itdxh5t6azp4z6@leviathan> To: Leif Lindholm X-Mailer: Apple Mail (2.3693.20.0.1.32) X-Groupsio-MsgNum: 83406 Content-Type: multipart/signed; boundary="Apple-Mail=_5E446B0B-5553-40D4-AF09-93753C7F5229"; protocol="application/pgp-signature"; micalg=pgp-sha256 Content-Transfer-Encoding: quoted-printable --Apple-Mail=_5E446B0B-5553-40D4-AF09-93753C7F5229 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi Leif, I assume you mean the commit description, because the commit message is in = the topic. I believe something like that would do: CpuExceptionHandlerLib supplies misaligned GDT to the outer world (e.g. ArchSetupExceptionStack) when PcdCpuStackGuard is enabled. This happens because it uses an array of UINT8 for the mNewGdt variable, which alignment is 1 byte versus required 8 bytes. As a result ArchSetupExceptionStack always returns EFI_INVALID_PARAMETER in OVMF Ia32 with XCODE5 and CLANGPDB at least. Fix this by allocating extra space in mNewGdt and then aligning the pointer upwards. Best wishes, Vitaly > On 5 Nov 2021, at 22:28, Leif Lindholm wrote: >=20 > UefiCpuPkg maintainers - please respond. >=20 > Meanwhile, Vitaly, could you please provide a commit message? > The BZ link is needed, but it's not a substitute. >=20 > / > Leif >=20 > On Mon, Sep 20, 2021 at 17:13:47 +0300, Vitaly Cheptsov wrote: >> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3639 >>=20 >>=20 >>=20 >> Cc: Jiewen Yao >>=20 >> Cc: Eric Dong >>=20 >> Cc: Michael Kinney >>=20 >> Cc: Jian J Wang >>=20 >> Cc: Jeff Fan >>=20 >> Cc: Mikhail Krichanov >>=20 >> Cc: Marvin H=C3=A4user >>=20 >> Signed-off-by: Vitaly Cheptsov >>=20 >> --- >>=20 >> .../Library/CpuExceptionHandlerLib/DxeException.c | 12 +++++++----- >>=20 >> 1 file changed, 7 insertions(+), 5 deletions(-) >>=20 >>=20 >>=20 >> diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c b/= UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c >>=20 >> index fd59f09ecd..12874811e1 100644 >>=20 >> --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c >>=20 >> +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c >>=20 >> @@ -22,7 +22,7 @@ EXCEPTION_HANDLER_DATA mExceptionHandlerData; >>=20 >>=20 >>=20 >> UINT8 mNewStack[CPU_STACK_SWITCH_EXCEPTION_NUMBER = * >>=20 >> CPU_KNOWN_GOOD_STACK_SIZE]; >>=20 >> -UINT8 mNewGdt[CPU_TSS_GDT_SIZE]; >>=20 >> +UINT8 mNewGdt[CPU_TSS_GDT_SIZE + IA32_GDT_ALIGNME= NT]; >>=20 >>=20 >>=20 >> /** >>=20 >> Common exception handler. >>=20 >> @@ -238,6 +238,7 @@ InitializeCpuExceptionHandlersEx ( >>=20 >> CPU_EXCEPTION_INIT_DATA EssData; >>=20 >> IA32_DESCRIPTOR Idtr; >>=20 >> IA32_DESCRIPTOR Gdtr; >>=20 >> + UINT8 *Gdt; >>=20 >>=20 >>=20 >> // >>=20 >> // To avoid repeat initialization of default handlers, the caller shou= ld pass >>=20 >> @@ -259,6 +260,7 @@ InitializeCpuExceptionHandlersEx ( >>=20 >> if (PcdGetBool (PcdCpuStackGuard)) { >>=20 >> if (InitData =3D=3D NULL) { >>=20 >> SetMem (mNewGdt, sizeof (mNewGdt), 0); >>=20 >> + Gdt =3D ALIGN_POINTER (mNewGdt, IA32_GDT_ALIGNMENT); >>=20 >>=20 >>=20 >> AsmReadIdtr (&Idtr); >>=20 >> AsmReadGdtr (&Gdtr); >>=20 >> @@ -270,11 +272,11 @@ InitializeCpuExceptionHandlersEx ( >>=20 >> EssData.X64.StackSwitchExceptionNumber =3D CPU_STACK_SWITCH_EXCE= PTION_NUMBER; >>=20 >> EssData.X64.IdtTable =3D (VOID *)Idtr.Base; >>=20 >> EssData.X64.IdtTableSize =3D Idtr.Limit + 1; >>=20 >> - EssData.X64.GdtTable =3D mNewGdt; >>=20 >> - EssData.X64.GdtTableSize =3D sizeof (mNewGdt); >>=20 >> - EssData.X64.ExceptionTssDesc =3D mNewGdt + Gdtr.Limit + 1; >>=20 >> + EssData.X64.GdtTable =3D Gdt; >>=20 >> + EssData.X64.GdtTableSize =3D CPU_TSS_GDT_SIZE; >>=20 >> + EssData.X64.ExceptionTssDesc =3D Gdt + Gdtr.Limit + 1; >>=20 >> EssData.X64.ExceptionTssDescSize =3D CPU_TSS_DESC_SIZE; >>=20 >> - EssData.X64.ExceptionTss =3D mNewGdt + Gdtr.Limit + 1 + CPU_TSS= _DESC_SIZE; >>=20 >> + EssData.X64.ExceptionTss =3D Gdt + Gdtr.Limit + 1 + CPU_TSS_DES= C_SIZE; >>=20 >> EssData.X64.ExceptionTssSize =3D CPU_TSS_SIZE; >>=20 >>=20 >>=20 >> InitData =3D &EssData; >>=20 >> -- >>=20 >> 2.30.1 (Apple Git-130) >>=20 >>=20 >>=20 >>=20 >>=20 >>=20 >>=20 >>=20 --Apple-Mail=_5E446B0B-5553-40D4-AF09-93753C7F5229 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEsLABAI5Y5VbvBdmpL8K2O86Eyz4FAmGFh/MACgkQL8K2O86E yz4TvQ//dS7VF8LJlFSrw/60bZKcn1u9tk3uADDGi00x4dxhG9Et727sXgDcCAb/ 3DMBW13gvLO8y8u+De1aFsN2wI+ffC1OjE8/QyOqVkSPOoAxCPfmv1Bd1IXdJmoS uh5Fb9O5hfyZIJyNFC5tqNvhDJXCTsrdcjgCtHxGTA6PODZU2+d43fVbzQ/e3YFP JU/eqpWeu/Mo4eLwWegRHNgaElRIFJS7TOr9HUQNNDt9xILi75ChTxgW/KDYPohP LdieZcvB2s4PV9J3RMDCjaHQmFbDLYzb+bVlR8AJ6+eT796HWKfM+9idJg8VC+uy NaItLspHj7qvTPl5D3RK135CNIAvpd5RER79xRHjxw9uvNnYXNutDtvkOS1eRMN9 762sgyXm4ASj6l08F9YAuc/v5f/w+WZJIlFE1GyW1Ca0TYKnzLgi/xH78IiP1/lT 8N0RH0JAEDIKQy8S+1vNxcNl6c3jOIuZqGpT75ki96meN9YJXgRdO0eXfmHWMI0k D2KRnhro5YQXC5cjPvwK8m3PqT7fDFURH0m7tx8EHLLKNi+6CaCOtFpN5Si0QMH3 jsfKclyfYLajsBxuRIP4yj7rBN2RZ4KgetqYe2eMQWBzBqj9bbLngpCFSyWZyObb SPAnTCvrjL8ya+WijE75cGSUgAH6qeI7yBBkoQR0/xEyrXJILuk= =0SMW -----END PGP SIGNATURE----- --Apple-Mail=_5E446B0B-5553-40D4-AF09-93753C7F5229--