2

構造体ファイルが与えられた場合、Linuxカーネルスペースで関連するファイル記述子を取得することは可能ですか?sys_chmodまたはsys_fchmodのいずれかを使用して権限を変更しようとしています。1つはファイル記述子を取り、もう1つはユーザースペースからのファイル名を期待します。ファイル名を取得する方法はわかりますが、ユーザースペースポインタにキャストするにはどうすればよいですか?

ありがとう

4

1 に答える 1

2

あなたが求めている機能はchmod_common

static int chmod_common(struct path *path, umode_t mode)

pathとあなたが設定したいモードを取ります。残念ながら、お気づきのとおり、これは静的であり、明らかにエクスポートされません。したがって、複数の方法で進むことができます。

  • あなた自身の機能でそれがすることは何でも複製する
  • struct file(醜い)から「ファイル記述子」を取得する
  • 電話をかける方法を見つけるsys_chmod

これsys_chmodでユーザーポインタが必要になりますが、カーネルを使用しています。これをだますためにできることは次のとおりです。

mm_segment_t oldfs = get_fs();

char __user *userptr;
userptr = (char __user __force *) kernptr;

set_fs(KERNEL_DS);

/* call sys_chmod */

set_fs(oldfs);

これはすべて、「カーネルで絶対にすべきでないこと」と非常に一致しています。

于 2013-02-16T19:15:04.917 に答える