[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