法楽日記

デジタル散策記&マインド探訪記

AUDIT_ARG_xxx()

FreeBSD では、システム・コール xxx() のカーネル内受付関数の名前は sys_xxx() です。sys_xxx() は必要に応じてユーザ空間から引数をコピーしたあと、kern_xxx() を呼び出して、その後で必要に応じて結果をユーザ空間にコピーします。ですから実処理は kern_xxx() が行なっています。kern_xxx() は、カーネル内からシステム・コール相当の処理を依頼する場合にも呼び出されるようです。

その kern_xxx() では、関数の先頭付近で AUDIT_ARG_xxx() というマクロ関数を呼び出しています。これはどうやらセキュリティ機能の一環で、システム・コールの引数を記録しているようです。

AUDIT_ARG_xxx() は sys/security/audit/audit.h でマクロ定義されていて、現在の thread が audit を必要としている場合、対応する実関数 audit_arg_xxx() を呼び出しています。audit_arg_xxx() の本体は sys/security/audit/audit_arg.c で定義されています。

この機能については「The Design and Implementation of the FreeBSD Operating System, Second Edition」の第5章第11節「Security Event Auditing」(p.200〜205)で解説されています。

以上、忘れないように記録しておきます。