Lines Matching +full:un +full:-

1 .. SPDX-License-Identifier: GPL-2.0
3 .. include:: ../disclaimer-ita.rst
14 In un mondo perfetto, sarebbe possibile prendere tutti gli usi di
15 un'interfaccia deprecata e convertirli in quella nuova, e così sarebbe
16 possibile rimuovere la vecchia interfaccia in un singolo ciclo di sviluppo.
26 ------------
27 Nonostante questo attributo marchi visibilmente un interfaccia come deprecata,
32 di `__deprecated` in un file d'intestazione sia opportuno per segnare una
38 ----------------
42 per asserire "situazioni impossibili" e interrompere in sicurezza un
47 impossibile un'attività di debug o anche solo leggere un rapporto
48 circa l'errore. Linus ha un'opinione molto critica al riguardo:
50 <https://lore.kernel.org/lkml/CA+55aFy6jNLsywVYdGp83AMrXBo_P-pkjkphPGrO=82SPKCpLQ@mail.gmail.com/>`…
52 <https://lore.kernel.org/lkml/CAHk-=whDHsbK3HTOpTF=ue_o04onRwTEaK_ZoJp_fjbqq4+=Jw@mail.gmail.com/>`_
61 date un'occhiata al questo `commit
64 Calcoli codificati negli argomenti di un allocatore
65 ----------------------------------------------------
70 allocare può portare ad un overflow della memoria di heap e altri
72 compilatore può generare avvisi circa un potenziale overflow. Tuttavia, anche in
87 le funzioni del tipo *saturate-on-overflow*::
91 Un altro tipico caso da evitare è quello di calcolare la dimensione di una
92 struttura seguita da un vettore di altre strutture, come nel seguente caso::
94 header = kzalloc(sizeof(*header) + count * sizeof(*header->item),
102 in coda contiene un array di lunghezza zero o uno, allora siete
104 `flexible array member <#zero-length-and-one-element-arrays>`_.
109 foo = krealloc(current_size + chunk_size * (count - 3), GFP_KERNEL);
122 ----------------------------------------------------------------------
132 --------
134 di destinazione. Questo può portare ad un overflow oltre i limiti del
140 ritorno di strcpy(). La funzione strscpy() non ritorna un puntatore
141 alla destinazione, ma un contatore dei byte non NUL copiati (oppure
142 un errno negativo se la stringa è stata troncata).
145 --------------------------------------
155 non ritorna un puntatore alla destinazione, ma un contatore dei byte
156 non NUL copiati (oppure un errno negativo se la stringa è stata
162 marchiati con l'attributo `__nonstring <https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attribut…
166 ---------
172 ritorno di strlcpy(), dato che strscpy() ritorna un valore di errno
176 --------------------------------------
179 esponne un indirizzo di memoria in dmesg, proc, sysfs, eccetera. Per
183 essere aggiunti al kernel. Per una rappresentazione testuale di un
191 - Se il valore hash di "%p" è inutile, chiediti se il puntatore stesso
193 - Se credi davvero che il vero valore del puntatore sia importante,
194 perché alcuni stati del sistema o i livelli di privilegi di un
196 (in un commento e nel messaggio del commit) abbastanza bene da
207 ------------------------------------
211 tutt'altro che banali, sono già un motivo valido per eliminare i VLA; in
212 aggiunta sono anche un problema per la sicurezza. La crescita dinamica di un
216 `CONFIG_THREAD_INFO_IN_TASK=y`), o sovrascrivere un pezzo di memoria adiacente
219 Salto implicito nell'istruzione switch-case
220 -------------------------------------------
222 Il linguaggio C permette ai casi di un'istruzione `switch` di saltare al
225 l'istruzione "break" viene omessa intenzionalmente o è un baco. Per esempio,
241 permettiamo più che vi sia un "salto implicito" (*fall-through*). Per
242 identificare un salto implicito intenzionale abbiamo adottato la pseudo
245 <https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html>`_.
263 Array di lunghezza zero o con un solo elemento
264 ----------------------------------------------
269 tecnica degli array a lunghezza nulla o di un solo elemento non
272 Nel codice C più vecchio, la dichiarazione di un membro di dimensione
273 variabile in coda ad una struttura dati veniva fatto dichiarando un
274 array di un solo elemento posizionato alla fine della struttura dati::
281 Questo ha portato ad un calcolo di sizeof() traballante (dovrebbe
284 stata introdotta un' `estensione a GNU C
285 <https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html>`_ che
295 l'impossibilità di riconoscere se un array di quel tipo viene usato
328 instance->count = count;
330 size = sizeof(instance->items) * instance->count;
331 memcpy(instance->items, source, size);
336 ``items``. Qui un paio di esempi reali del problema: `collegamento 1
340 Invece, `i flexible array members hanno un tipo incompleto, e quindi
342 <https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html>`_; dunque ogni
346 Per quanto riguarda gli array di un solo elemento, bisogna essere
347 consapevoli che `questi array occupano almeno quanto lo spazio di un
349 <https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html>`_, e quindi
362 instance = kmalloc(struct_size(instance, items, count - 1), GFP_KERNEL);
363 instance->count = count;
365 size = sizeof(instance->items) * instance->count;
366 memcpy(instance->items, source, size);
368 In questo esempio ci siamo dovuti ricordare di usare ``count - 1`` in
369 struct_size(), altrimenti avremmo --inavvertitamente-- allocato
370 memoria per un oggetti ``items`` in più. Il modo più pulito e meno
382 instance->count = count;
384 memcpy(instance->items, source, flex_array_size(instance, items, instance->count));
389 struttura, e l'altro quando è parte di un unione. Per motivi non tecnici, entrambi