audk/UefiCpuPkg/CpuDxe
Ray Ni 4bfd668e5e UefiCpuPkg: CpuDxe: Set RW and P Attributes on Split Pages
A memory range can be submitted for attribute changes which is large
enough to not require a page split during the attribute update. Consider
the following scenario:

1. An attribute update removed the RW attribute on a range large enough
to not require a page split.
2. Later, an attributes update is called to re-add the RW attribute for
a subsection of that larger page which requires a split
3. The attribute update logic performs a page split, so now the parent
and child pages have matching attributes
4. Then, the attribute update logic changes the child page to have the
RW attribute.
5. The child page would then correctly have the RW attribute added but
the parent page would still have the RW attribute removed which will
cause an improper access violation.

The page being split should have loose attributes to accommodate the
above case. The split page should always have the attributes set so
the lowest level page frame determines the access rights as detailed
in 4.10.2.2 of the Intel 64 and IA-32 Architectures Software
Developer Manual. Setting the User/Supervisor attribute shouldn't
be necessary.

Cc: Eric Dong <eric.dong@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Signed-off-by: Taylor Beebe <t@taylorbeebe.com>
2022-06-23 06:36:56 +00:00
..
Ia32 UefiCpuPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
X64 UefiCpuPkg: Replace Opcode with the corresponding instructions. 2022-03-01 01:45:47 +00:00
CpuDxe.c CpuException: Remove InitializeCpuInterruptHandlers 2022-06-10 07:54:48 +00:00
CpuDxe.h UefiCpuPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
CpuDxe.inf UefiCpuPkg: Update AddressEncMask in CpuPageTable 2022-04-02 08:15:12 +00:00
CpuDxe.uni UefiCpuPkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:28 -07:00
CpuDxeExtra.uni UefiCpuPkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:28 -07:00
CpuGdt.c UefiCpuPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
CpuGdt.h UefiCpuPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
CpuMp.c CpuException: Add InitializeSeparateExceptionStacks 2022-06-10 07:54:48 +00:00
CpuMp.h UefiCpuPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
CpuPageTable.c UefiCpuPkg: CpuDxe: Set RW and P Attributes on Split Pages 2022-06-23 06:36:56 +00:00
CpuPageTable.h UefiCpuPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00