• [^] # Re: Petite question technique : un logiciel de vérification n'aurait il pas alerté de cette erreur ?

    Posté par . En réponse au journal D'un kernel panic à un patch.... Évalué à 3.

    Quand on lance un scan-build ou SonarQube sur un kernel ça donne quoi comme nombre d'alerte de ce genre : c'est monstrueux/énorme/pas-si-pire/ça-va/RAS/c'est-pas-si-simple ?

    Il faudrait que le noyau compile avec Clang/LLVM pour scan-build. C'est un morceau de code quand même bien complexe, il a des dépendances légitimes à des extensions de GCC qui ne sont pas nécessairement implémentées par clang. Le projet LLVMLinux étant semble-t-il en sommeil pour le moment, les patchs ne sont pas à jour de ce côté.

    D’ailleurs question technique pour SonarQube : le warning est levé tout simplement parce que la variable err est écrasé sans être utilisé ou bien il y a des mécanismes en plus ?

    Je ne sais pas pour SonarQube, mais pour LLVM c'est parce que err est écrasé. C'est le seul warning levé pour le code suivant, qui correspond globalement à ce que fait au final le noyau pour le compilateur (j'ai pris stat comme fonction dont le résultat ne peut être déterminé par le compilateur)

    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    int *toto = NULL;
    int foo (const char *p) {
     struct stat statbuf;
     if (stat(p, &statbuf) != 0) {
     return -1;
     }
     toto = malloc(sizeof(int));
     return 0;
    }
    int zaz (int *a) {
     *a = 42;
     return 0;
    }
    int bar () {
     int err = 0;
     if (foo("/tmp/patate") != 0)
     err = 1;
     err = zaz(toto);
     return err;
    }