Skip to content

[CWE-401] Possible leak de malloc #11

@darnuria

Description

@darnuria

Avec l'ajout de l'option merveilleuse de compilation de GCC en version 10 -fanalyzer qui fait de l'ascii art ET de l'analyse statique, article a propos de cet option ici: https://developers.redhat.com/blog/2020/03/26/static-analysis-in-gcc-10/

Ping: @p4bl0- c'est une potentiel CWE donc je te ping ça fait un bon cas ses trois issues si tu veux faire un "point la securité vous touche aussi ici avec nous". ;p

En ajoutant l'option je suis tombé sur un leak sur malloc un-e étudiant-e motivé de L2 ou L3 c'est possible sinon M1.

Comment reproduire dans [configure.ac] changer la ligne suivante configure.ac#L56

-CFLAGS="-Wall -O3"
+CFLAGS="-Wall -Wextra -fanalyzer -O3"

Relancer les autotools: make -f Makefile.autotools
Puis compiler make -j4

Le problème en brut:

GL4D/fixed_heap.c: In function_newheap’:
GL4D/fixed_heap.c:125:13: warning: leak of<unknown>’ [CWE-401] [-Wanalyzer-malloc-leak]
  125 |   h.stack = malloc(nmem * sizeof *(h.stack));
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ‘fheapCreate’: events 1-4
    |
    |   34 | size_t fheapCreate(size_t nmem, size_t size) {
    |      |        ^~~~~~~~~~~
    |      |        |
    |      |        (1) entry tofheapCreate’
    |......
    |   38 |   if(_heap.heap == NULL) {
    |      |     ~   
    |      |     |
    |      |     (2) following ‘true’ branch...
    |   39 |     _heap = _newheap(_heap.nmem, _heap.size);
    |      |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |             |
    |      |             (3) ...to here
    |      |             (4) calling_newheapfromfheapCreate’
    |
    +-->_newheap’: events 5-6
           |
           |  118 | static fheap_t _newheap(size_t nmem, size_t size) {
           |      |                ^~~~~~~~
           |      |                |
           |      |                (5) entry to_newheap’
           |......
           |  123 |   h.heap = calloc(nmem, size * sizeof *(h.heap));
           |      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |            |
           |      |            (6) allocated here
           |
         ‘_newheap’: event 7
           |
           |  124 |   assert(h.heap);
           |      |   ^~~~~~
           |      |   |
           |      |   (7) assuming<unknown>is non-NULL
           |
         ‘_newheap’: event 8
           |
           |
         ‘_newheap’: event 9
           |
           |  125 |   h.stack = malloc(nmem * sizeof *(h.stack));
           |      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |             |
           |      |             (9) ...to here
           |
         ‘_newheap’: event 10
           |
           |  126 |   assert(h.stack);
           |      |   ^~~~~~
           |      |   |
           |      |   (10) following ‘true’ branch...
           |
         ‘_newheap’: event 11
           |
           |cc1:
           | (11): ...to here
           |
         ‘_newheap’: events 12-14
           |
           |  125 |   h.stack = malloc(nmem * sizeof *(h.stack));
           |      |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |             |
           |      |             (14) ‘<unknown>leaks here; was allocated at (6)
           |......
           |  128 |   for(i = 0; i < nmem; ++i)
           |      |   ^~~
           |      |   |
           |      |   (12) following ‘false’ branch (wheni >= nmem’)...
           |  129 |     _push(h.stack, &(h.head), nmem - 1 - i);
           |  130 |   return h;
           |      |          ~
           |      |          |
           |      |          (13) ...to here
           |

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions