]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
acpi_table: Fix coverity defect in acpi_write_spcr
authorPatrick Rudolph <patrick.rudolph@9elements.com>
Wed, 30 Oct 2024 13:11:46 +0000 (14:11 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 1 Nov 2024 19:33:57 +0000 (13:33 -0600)
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.

Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
lib/acpi/acpi_table.c

index 6473d95c1028d6e92588be8fc57eb50861cc36e1..150f75027a5a9cca9f9f2c432d3613217becf52c 100644 (file)
@@ -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 */
@@ -495,7 +495,7 @@ static int acpi_write_spcr(struct acpi_ctx *ctx, const struct acpi_writer *entry
                break;
        }
 
-       debug("UART type %u @ %lx\n", spcr->interface_type, serial_address);
+       debug("UART type %u @ %llx\n", spcr->interface_type, serial_address);
 
        /* Fill GAS */
        spcr->serial_port.space_id = space_id;