valgrind signale les erreurs de mémoire non initialisée de code comme ceci:Est-ce que valgrind suit l'initialisation de la mémoire via les pilotes?
unsigned char buf[100];
struct driver_command cmd;
cmd.len = sizeof(buf);
cmd.buf = buf;
ioctl(my_driver_fd, READ, &cmd);
for(i = 0; i < sizeof(buf); i++)
{
foo(buf[i]); /* <<--- uninit use error from valgrind */
}
Si je memset() buf avant l'appel du pilote, l'erreur disparaît.
Est-ce que valgrind peut détecter si le pilote Linux écrit correctement dans le tampon? (J'ai regardé le code du pilote, et il semble être correct, mais peut-être qu'il me manque quelque chose.)
Ou passe-t-il simplement l'appel du conducteur et n'a aucun moyen de savoir que le tampon a été écrit à l'intérieur le noyau?
Merci.
À moins que l'ioctl ne memset (ou similaire) valgrind rapporte correctement ici. – ezpz
@ezpz: Le pilote est censé écrire 100 octets dans buf ... l'ioctl est une manière maladroite de faire un read(). (Il y a plus de configuration impliquée pas affichée ici.) – bstpierre
Ahh, j'ai raté le 'READ' la première fois. – ezpz