Re: [PATCH] ACPICA: Drop port I/O validation for some regions

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

 



On Thu, Dec 15, 2022 at 4:51 PM Mario Limonciello
<mario.limonciello@xxxxxxx> wrote:
>
> Microsoft introduced support in Windows XP for blocking port I/O
> to various regions.  For Windows compatibility ACPICA has adopted
> the same protections and will disallow writes to those
> (presumably) the same regions.
>
> On some systems the AML included with the firmware will issue 4 byte
> long writes to 0x80.  These writes aren't making it over because of this
> blockage. The first 4 byte write attempt is rejected, and then
> subsequently 1 byte at a time each offset is tried. The first at 0x80
> works, but then the next 3 bytes are rejected.
>
> This manifests in bizarre failures for devices that expected the AML to
> write all 4 bytes.  Trying the same AML on Windows 10 or 11 doesn't hit
> this failure and all 4 bytes are written.
>
> Either some of these regions were wrong or some point after Windows XP
> some of these regions blocks have been lifted.
>
> In the last 15 years there doesn't seem to be any reports popping up of
> this error in the Windows event viewer anymore.  There is no documentation
> at Microsoft's developer site indicating that Windows ACPI interpreter
> blocks these regions. Between the lack of documentation and the fact that
> the writes actually do work in Windows 10 and 11, it's quite likely
> Windows doesn't actually enforce this anymore.
>
> So to help the issue, only enforce Windows XP specific entries if the
> latest _OSI supported is Windows XP. Continue to enforce the
> ALWAYS_ILLEGAL entries.
>
> Link: https://github.com/acpica/acpica/pull/817
> Fixes: 7f0719039085 ("ACPICA: New: I/O port protection")
> Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>
> ---
>  drivers/acpi/acpica/hwvalid.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/acpi/acpica/hwvalid.c b/drivers/acpi/acpica/hwvalid.c
> index 915b26448d2c..0d392e7b0747 100644
> --- a/drivers/acpi/acpica/hwvalid.c
> +++ b/drivers/acpi/acpica/hwvalid.c
> @@ -23,8 +23,8 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width);
>   *
>   * The table is used to implement the Microsoft port access rules that
>   * first appeared in Windows XP. Some ports are always illegal, and some
> - * ports are only illegal if the BIOS calls _OSI with a win_XP string or
> - * later (meaning that the BIOS itelf is post-XP.)
> + * ports are only illegal if the BIOS calls _OSI with nothing newer than
> + * the specific _OSI strings.
>   *
>   * This provides ACPICA with the desired port protections and
>   * Microsoft compatibility.
> @@ -145,7 +145,8 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
>
>                         /* Port illegality may depend on the _OSI calls made by the BIOS */
>
> -                       if (acpi_gbl_osi_data >= port_info->osi_dependency) {
> +                       if (port_info->osi_dependency == ACPI_ALWAYS_ILLEGAL ||
> +                           acpi_gbl_osi_data == port_info->osi_dependency) {
>                                 ACPI_DEBUG_PRINT((ACPI_DB_VALUES,
>                                                   "Denied AML access to port 0x%8.8X%8.8X/%X (%s 0x%.4X-0x%.4X)\n",
>                                                   ACPI_FORMAT_UINT64(address),
> --

Applied as 6.3 material, thanks!



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux