Skip to content
  • Arnd Bergmann's avatar
    gpio: acpi: work around false-positive -Wstring-overflow warning · e40a3ae1
    Arnd Bergmann authored
    gcc-7 notices that the pin_table is an array of 16-bit numbers,
    but fails to take the following range check into account:
    
    drivers/gpio/gpiolib-acpi.c: In function 'acpi_gpiochip_request_interrupt':
    drivers/gpio/gpiolib-acpi.c:206:24: warning: '%02X' directive writing between 2 and 4 bytes into a region of size 3 [-Wformat-overflow=]
       sprintf(ev_name, "_%c%02X",
                            ^~~~
    drivers/gpio/gpiolib-acpi.c:206:20: note: directive argument in the range [0, 65535]
       sprintf(ev_name, "_%c%02X",
                        ^~~~~~~~~
    drivers/gpio/gpiolib-acpi.c:206:3: note: 'sprintf' output between 5 and 7 bytes into a destination of size 5
       sprintf(ev_name, "_%c%02X",
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~
        agpio->triggering == ACPI_EDGE_SENSITIVE ? 'E' : 'L',
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        pin);
        ~~~~
    
    As suggested by Andy, this changes the format string to have a fixed length.
    Since modifying the range check did not help, I also opened a bug against
    gcc, see link below.
    
    Fixes: 0d1c28a4 ("gpiolib-acpi: Add ACPI5 event model support to gpio.")
    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://patchwork.kernel.org/patch/9840801/
    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82123
    
    
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Acked-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    e40a3ae1