Si __lddk_copy_from_user()
appelle simplement copy_from_user()
, puis le access_ok()
les vérifications sont redondantes, car copy_from_user()
effectue lui-même ces vérifications.
Le access_ok()
Les contrôles garantissent que l'application de l'espace utilisateur ne demande pas au noyau de lire ou d'écrire dans les adresses du noyau (il s'agit d'un contrôle d'intégrité/sécurité). Ce n'est pas parce qu'un pointeur a été fourni par l'espace utilisateur qu'il s'agit définitivement d'un pointeur d'espace utilisateur - dans de nombreux cas, "pointeur noyau" signifie simplement qu'il pointe dans une région particulière de l'espace d'adressage virtuel.
De plus, en appelant le access_ok()
avec VERIFY_WRITE
implique VERIFY_READ
, donc si vous cochez la première, vous n'avez pas besoin de vérifier également la seconde.
À partir de ce commit en 2019,
access_ok()
n'a plus le type
argument, donc le VERIFY_WRITE
contre VERIFY_READ
point est discutable.