2014-11-09 12 views
8

Sto scrivendo un LKM e ho bisogno di scoprire dove punta un link simbolico specifico. Fondamentalmente ho bisogno della funzionalità di syscall readlinkat (o readlink) ma nello spazio del kernel. C'è un modo semplice per farlo?Leggere un collegamento simbolico nello spazio del kernel

L'utilizzo di readlinkat non funziona correttamente, sto sempre ricevendo EFAULT (suppongo che questo sia dovuto al fatto che il mio buffer si trova ovviamente nello spazio di memoria del kernel e non nello spazio utente).

+1

possibile duplicato di [allocare memoria spazio utente dal kernel] (http://stackoverflow.com/questions/7629141/allocate-user-space-memory-from-kernel) – Hasturkun

+1

Forse non un duplicato, ma potrebbe essere rilevante . – Hasturkun

risposta

4

In primo luogo, non è possibile utilizzare le chiamate del sistema di spazio utente (readlinkat() o readlink()) direttamente nel modulo del kernel. Piuttosto è necessario utilizzare la funzione/il simbolo esportato all'interno dello spazio del kernel.

Quindi, potrebbe voler esaminare lo specifico struct inode_operations per il file system che si sta utilizzando. Esaminare anche generic_readlink() che internamente chiama vfs_readlink().