システムコール LKM でシステム呼び出し側の uid を取得するために cred.h を使用すると問題が発生します。

システムコール LKM でシステム呼び出し側の uid を取得するために cred.h を使用すると問題が発生します。

uid私のシステムコールを呼び出すプロセスランチャーを取得しようとしています。私が使用するマクロlinux/cred.hはですcurrent_uid()

問題は私が知らないタイプですkuid_t。したがって、戻り値をint静的変数型に保存することはできません。以下はコードとエラーの一部です。

static int getuid(void){
    return current_uid();
}

static int caller_uid = getuid();

間違い:

error: incompatible types when returning type ‘kuid_t’ {aka ‘const struct <anonymous>’} but ‘int’ was expected
  current_cred()->xxx;   \

答え1

kuid_tlinux/uidgid.h単一のメンバーで構成される単純な構造として定義されますuid_t

typedef struct {
    uid_t val;
} kuid_t;

uid_tあなたは利用可能でなければならず、current_uid().val単にuid_t価値を得ることですusigned int

関連情報