Lines Matching refs:de
12 En un mundo perfecto, sería posible convertir todas las instancias de
14 único ciclo de desarrollo. Desafortunadamente, debido al tamaño del kernel,
15 la jerarquía de mantenimiento, y el tiempo, no siempre es posible hacer
16 estos cambios de una única vez. Esto significa que las nuevas instancias
17 han de ir creándose en el kernel, mientras que las antiguas se quitan,
18 haciendo que la cantidad de trabajo para limpiar las APIs crezca. Para
28 porque uno de los objetivos del kernel es que compile sin avisos, y
31 un archivo de cabecera, no es la solución completa. Dichos interfaces
37 Use WARN() y WARN_ON() en su lugar, y gestione las condiciones de error
38 "imposibles" tan elegantemente como se pueda. Mientras que la familia de
40 "situación imposible", confirmar y disponer de un hilo del kernel de forma
44 totalmente, lo cual hace imposible depurarlo o incluso generar reportes de
50 Nótese que la familia de funciones WARN() únicamente debería ser usada
53 de funciones pr_warn(). Los responsables del sistema pueden haber definido
59 Operaciones aritméticas en los argumentos de reserva de memoria
61 Los cálculos dinámicos de tamaño (especialmente multiplicaciones) no
62 deberían realizarse en los argumentos de reserva de memoria (o similares)
63 debido al riesgo de desbordamiento. Esto puede llevar a valores rotando y
64 que se realicen reservas de memoria menores que las que se esperaban. El
65 uso de esas reservas puede llevar a desbordamientos en el 'heap' de memoria
70 la reserva de memoria.)
76 En vez de eso, utilice la reserva con dos argumentos::
84 saturan, en caso de desbordamiento::
88 Otro caso común a evitar es calcular el tamaño de una estructura com
89 la suma de otras estructuras, como en::
94 En vez de eso emplee::
99 de longitud cero o un array de un único elemento como un array miembro,
104 Para otros cálculos, por favor use las funciones de ayuda: size_mul(),
105 size_add(), and size_sub(). Por ejemplo, en el caso de::
116 como también la familia de funciones relacionadas check_mul_overflow(),
127 cadena de caracteres termine en NUL o en el carácter de línea nueva.
132 strcpy() no realiza verificaciones de los límites del buffer de destino.
134 causando todo tipo de errores. Mientras `CONFIG_FORTIFY_SOURCE=y` otras
135 varias opciones de compilación reducen el riesgo de usar esta función, no
136 hay ninguna buena razón para añadir nuevos usos de esta. El remplazo seguro
137 es la función strscpy(), aunque se ha de tener cuidado con cualquier caso
139 devuelve un puntero a el destino, sino el número de caracteres no nulos
140 compilados (o el valor negativo de errno cuando se trunca la cadena de
143 strncpy() en cadenas de caracteres terminadas en NUL
145 El uso de strncpy() no garantiza que el buffer de destino esté terminado en
146 NUL. Esto puede causar varios errores de desbordamiento en lectura y otros
147 tipos de funcionamiento erróneo debido a que falta la terminación en NUL.
148 Esta función también termina la cadena de caracteres en NUL en el buffer de
149 destino si la cadena de origen es más corta que el buffer de destino, lo
151 función con cadenas de caracteres que sí están terminadas en NUL.
153 Cuando se necesita que la cadena de destino sea terminada en NUL,
154 el mejor reemplazo es usar la función strscpy(), aunque se ha de tener
155 cuidado en los casos en los que el valor de strncpy() fuera usado, ya que
156 strscpy() no devuelve un puntero al destino, sino el número de
157 caracteres no nulos copiados (o el valor negativo de errno cuando se trunca
158 la cadena de caracteres). Cualquier caso restante que necesitase todavía
161 Si una función usa cadenas de caracteres que no necesitan terminar en NUL,
166 necesitan cadenas de caracteres que se rellenen al final con el
171 strlcpy() primero lee por completo el buffer de origen (ya que el valor
172 devuelto intenta ser el mismo que el de strlen()). Esta lectura puede
173 sobrepasar el límite de tamaño del destino. Esto ineficiente y puede causar
174 desbordamientos de lectura si la cadena de origen no está terminada en el
175 carácter NUL. El reemplazo seguro de esta función es strscpy(), pero se ha
176 de tener cuidado que en los casos en lso que se usase el valor devuelto de
177 strlcpy(), ya que strscpy() devolverá valores negativos de erno cuando se
180 Especificación de formato %p
182 Tradicionalmente,el uso de "%p" en el formato de cadenas de caracteres
184 de dejar que sean una vulnerabilidad, todos los "%p" que se usan en el
186 para usarlos como direcciones de memoria. Nuevos usos de "%p" no deberían
187 ser añadidos al kernel. Para textos de direcciones, usar "%pS" es
189 resto de casos, mejor no usar "%p" en absoluto.
191 Parafraseando las actuales `direcciones de Linus <https://lore.kernel.org/lkml/CA+55aFwQEd_d40g4mUC…
196 algún estado del sistema o nivel de privilegio de usuario es considerado
198 del commit), de forma suficiente como para pasar el escrutinio de Linux,
203 se puede arrancar temporalmente con la opción de depuración "`no_hash_pointers
207 Arrays de longitud variable (VLAs)
210 de tamaño estático. Mientras que estos errores no triviales de `rendimiento
212 para no usar VLAs, esto además son un riesgo de seguridad. El crecimiento
214 el segmento de la pila. Esto podría llevara a un fallo, posible sobre-escritura
215 de contenido al final de la pila (cuando se construye sin
216 `CONFIG_THREAD_INFO_IN_TASK=y`), o sobre-escritura de la memoria adyacente
222 El lenguaje C permite a las sentencias 'switch' saltar de un caso al
223 siguiente caso cuando la sentencia de ruptura "break" no aparece al final
239 Ya que ha habido una larga lista de defectos `debidos a declaraciones de "break"
243 que expande las extensiones de gcc `__attribute__((__fallthrough__))
245 (Cuando la sintaxis de C17/c18 `[[fallthrough]]` sea más comúnmente
246 soportadas por los compiladores de C, analizadores estáticos, e IDEs,
249 Todos los bloques switch/case deben acabar en uno de:
258 Arrays de longitud cero y un elemento
260 Hay una necesidad habitual en el kernel de proveer una forma para declarar
261 un grupo de elementos consecutivos de tamaño dinámico en una estructura.
263 en estos casos. El estilo anterior de arrays de un elemento o de longitud
266 En el código C más antiguo, los elementos finales de tamaño dinámico se
267 obtenían especificando un array de un elemento al final de una estructura::
274 En código C más antiguo, elementos seguidos de tamaño dinámico eran creados
275 especificando una array de un único elemento al final de una estructura::
282 Esto llevó a resultados incorrectos en los cálculos de tamaño mediante
284 para tener un tamaño correcto de la "cabecera"). Una `extensión de GNU C
286 para permitir los arrays de longitud cero, para evitar estos tipos de
287 problemas de tamaño::
295 compartidos por ambos estilos, como no ser capaz de detectar cuando ese array
296 accidentalmente _no_ es usado al final de la estructura (lo que podía pasar
298 de estructuras, etc).
300 C99 introdujo "los arrays miembros flexibles", los cuales carecen de un
309 de tamaño dinámico concatenados. Esto permite al compilador generar
310 errores, cuando el array flexible no es declarado en el último lugar de la
313 Esto también permite al compilador analizar correctamente los tamaños de
315 Por ejemplo, si no hay un mecanismo que avise que el siguiente uso de
316 sizeof() en un array de longitud cero, siempre resulta en cero::
332 podría esperar que representa el tamaño total en bytes de la memoria dinámica
333 reservada para el array consecutivo ``items``. Aquí hay un par de ejemplos
338 Sin embargo, los array de miembros flexibles tienen un type incompleto, y
339 no se ha de aplicar el operador sizeof()<https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html>`_,
340 así cualquier mal uso de dichos operadores será detectado inmediatamente en
341 el momento de compilación.
343 Con respecto a los arrays de un único elemento, se ha de ser consciente de
345 tipo https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html>`_, de ahí que
346 estos contribuyan al tamaño de la estructura que los contiene. Esto es
347 proclive a errores cada vez que se quiere calcular el tamaño total de la
348 memoria dinámica para reservar una estructura que contenga un array de este
364 En el ejemplo anterior, hemos de recordar calcular ``count - 1``, cuando se
365 usa la función de ayuda struct_size(), de otro modo estaríamos
366 --desintencionadamente--reservando memoria para un ``items`` de más. La
368 uso de `array miembro flexible`, junto con las funciones de ayuda: