Stlink: La compilación con GCC 11 falla

Creado en 9 dic. 2020  ·  7Comentarios  ·  Fuente: stlink-org/stlink

No puedo construir stlink 1.6.1 con el compilador GCC 11. Fedora GNU / Linux Rawhide.
Los errores son:

/builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:90:22: error: 'stlink_open_usb' accessing 64 bytes in a region of size 28 [-Werror=stringop-overflow=]
   90 |                 sl = stlink_open_usb(st->logging_level, st->reset, serialnumber, 0);
      |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c: In function 'serve':
/builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:90:22: note: referencing argument 3 of type 'char *'
In file included from /builddir/build/BUILD/stlink-1.6.1/include/stlink.h:297,
                 from /builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:27:
/builddir/build/BUILD/stlink-1.6.1/src/usb.h:71:15: note: in a call to function 'stlink_open_usb'
   71 |     stlink_t *stlink_open_usb(enum ugly_loglevel verbose, int reset, char serial[STLINK_SERIAL_MAX_SIZE], int freq);
      |               ^~~~~~~~~~~~~~~
In function 'do_connect',
    inlined from 'do_connect' at /builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:87:18,
    inlined from 'main' at /builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:212:10:
/builddir/build/BUILD/stlink-1.6.1/src/st-util/gdb-server.c:90:22: error: 'stlink_open_usb' accessing 64 bytes in a region of size 28 [-Werror=stringop-overflow=]
   90 |                 sl = stlink_open_usb(st->logging_level, st->reset, serialnumber, 0);
      |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Por favor ayúdame a corregirlo.

bucompilation buneeds-fix olinux staturesolved

Todos 7 comentarios

Puede ser STLINK_SERIAL_MAX_SIZE definir debe establecerse en 28 ?

Puede arreglar src/st-util/gdb-server.c :

static char serialnumber[28] = {0};

a

static char serialnumber[STLINK_SERIAL_MAX_SIZE] = {0};

Prefiero ver arreglar en aguas arriba.

@Vascom Yo también. Pero para solucionarlo en sentido ascendente, debe verificar si funciona.

ps Ha creado una descripción de problema que no está de acuerdo con una plantilla. @ Nightwalker-87 puede eliminarlo. Ver # 906

Si, funciona.

A la plantilla no le importan los problemas de compilación.

La plantilla está destinada a ser utilizada y rellenada con contenido que también incluye una descripción. Así que considere esto la próxima vez.

Puede arreglar src/st-util/gdb-server.c :

static char serialnumber[28] = {0};

a

static char serialnumber[STLINK_SERIAL_MAX_SIZE] = {0};

Casi sugerí eso (originalmente encontré el problema probando gcc-11 con Fedora). Mi preocupación con eso era este bucle en gdb-server.c:
para (tamaño_t k = 0; j> = 0 && k <tamaño de (número de serie); ++ k, j - = 2) {
búfer de caracteres [3] = {0};
memcpy (búfer, optarg + j, 2);
número de serie [longitud - k] = (uint8_t) strtol (búfer, NULL, 16);

Que se vería afectado al cambiar el tamaño de "serialnumber". Sin conocer la intención o el código en general, no me sentí cómodo recomendando cambiar el tamaño del "número de serie".

Y para darle a la gente un poco de historia. gcc-11 ha agregado diagnósticos para detectar accesos fuera de límites para argumentos de matriz. En términos más simples, si una función declara un argumento como una matriz con una longitud fija, entonces GCC asume que se podría hacer referencia a toda la matriz.

stlink_open_usb declara su tercer argumento como una matriz de caracteres de 64 bytes, sin embargo, "serialnumber" tiene solo 28 bytes y GCC naturalmente advierte porque cree que hay un potencial fuera de límites del argumento "serialnumber" por stlink_open_usb.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

gorynch picture gorynch  ·  5Comentarios

vitormhenrique picture vitormhenrique  ·  13Comentarios

tabemann picture tabemann  ·  5Comentarios

rayslinky picture rayslinky  ·  12Comentarios

lulle2007200 picture lulle2007200  ·  12Comentarios