[PATCH v1] acpi_table: Fix coverity defect in acpi_write_spcr

Moritz Fischer moritzf at google.com
Mon Oct 28 16:54:00 CET 2024


On Mon, Oct 28, 2024 at 1:09 AM Patrick Rudolph
<patrick.rudolph at 9elements.com> wrote:
>
> Fix "Integer handling issues  (SIGN_EXTENSION)" in newly added code:
> Cast serial_info.reg_offset to u64 to prevent an integer overflow when
> shifted too many bits to the left. Currently this never happens as the
> shift is supposed to be less than 4.
>
Reviewed-by: Moritz Fischer <moritzf at google.com>
> Signed-off-by: Patrick Rudolph <patrick.rudolph at 9elements.com>
> ---
>  lib/acpi/acpi_table.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/lib/acpi/acpi_table.c b/lib/acpi/acpi_table.c
> index 6473d95c10..b9e12228fd 100644
> --- a/lib/acpi/acpi_table.c
> +++ b/lib/acpi/acpi_table.c
> @@ -420,7 +420,7 @@ int acpi_write_dbg2_pci_uart(struct acpi_ctx *ctx, struct udevice *dev,
>  static int acpi_write_spcr(struct acpi_ctx *ctx, const struct acpi_writer *entry)
>  {
>         struct serial_device_info serial_info = {0};
> -       ulong serial_address, serial_offset;
> +       u64 serial_address, serial_offset;
>         struct acpi_table_header *header;
>         struct acpi_spcr *spcr;
>         struct udevice *dev;
> @@ -473,7 +473,7 @@ static int acpi_write_spcr(struct acpi_ctx *ctx, const struct acpi_writer *entry
>         }
>
>         serial_width = serial_info.reg_width * 8;
> -       serial_offset = serial_info.reg_offset << serial_info.reg_shift;
> +       serial_offset = ((u64)serial_info.reg_offset) << serial_info.reg_shift;
>         serial_address = serial_info.addr + serial_offset;
>
>         /* Encode register access size */
> --
> 2.46.2
>


More information about the U-Boot mailing list