5

Linux2.4用に作成されたLinuxカーネルモジュールをLinux2.6で動作するように移植しています。syscallN()マクロを介して宣言され、呼び出しでラップされた一部のシステムset_fs()コールがコードで使用されました。これらのマクロが存在しないLinux2.6でsycallを引き続き使用するにはどうすればよいですか?

syscallN()カーネルスペースからsyscallを使用するのは悪い味であり、ほとんどのプラットフォームでマクロが壊れていることを私は知っています。getuidカーネル空間で、、、、、、、syscallgeteuidを置き換えるための合理的な方法があればmknod幸いchownですunlinksched_yield

4

1 に答える 1

4

current->uid最初の 2 つをcurrent->euid置き換えることができます。

schedule()最後のもので機能するはずです。

ファイルシステムの操作はより複雑に見えます: sys_chown()sys_mknod()、およびsys_unlink()がエクスポートされているかどうかを試してみてください (どのモジュールでも使用できます)。それらが機能する場合、素晴らしいです。ここに役立つヒントがいくつかあります。それ以外の場合は、もう少し深く掘り下げる必要があります。

chownsyscall は で定義されていますfs/open.c。なぜそのコードを自分の「kernel_chown」関数にコピーして試してみることができなかったのか、一見しただけではわかりません。

およびsyscall は にmknodatあります。それらは最終的にとをそれぞれ呼び出すことになります。おそらく、そのコードを複製するか、そこからどのように行われるかを理解できます。unlinkfs/namei.cvfs_mknod()vfs_unlink()

于 2010-01-15T15:53:29.300 に答える