Lors de l'examen du code du noyau, j'ai rencontré la situation suivante.Conventions de codage sécurisées dans le noyau Linux
Supposons que nous ayons deux composants du noyauA et B (par exemple, les modules du noyau), avec un invoquant un EXPORT_SYMBOL
« ed some_func()
de B. Supposons que some_func()
possède des arguments d'entrée, qui doivent être affectés uniquement aux valeurs "légitime" ou "valide". Par exemple, supposons que nous avons
some_func(void * p);
où void * p
devrait être non NULL
, montrant peut-être aussi à une partie de la mémoire allouée correctement.
Ma question est: qui est responsable que les arguments de some_func()
sont en effet légitimes? Est-ce l'appelant A ou l'appelé B? Je n'ai pas été en mesure de trouver une source faisant autorité décrivant quelle convention devrait être suivie dans le noyau. Lorsque l'on considère l'exemple d'argument d'entrée de pointeur, du point de vue de la sécurité, il est clair que nous pourrions rencontrer un problème de déréférencement NULL
-pointer, qui devrait être évité. Alors, de se spécialiser ma question, est Une responsable de la sécurité des arguments qu'il passe à B, ou si B ont placé à l'validations d'entrée à chaque symbole qu'elle exporte?
Veuillez noter que cette question concerne l'appel des conventions au sein du noyau, et non liée aux conventions d'appel de l'espace utilisateur.