2

我正在编写一个内核模块,它将检查 VFS 中的某些内容。在这个模块中,我需要使用定义为的内核 API “putname”:

#ifdef CONFIG_AUDITSYSCALL
void putname(const char *name)
{
if (unlikely(!audit_dummy_context()))
    audit_putname(name);
else
    __putname(name);
}
EXPORT_SYMBOL(putname);

当我在内核 3.6.10 的 Fedora 18 中编译它时,一切正常,模块工作正常,但是当我将它切换到内核 3.11.4 时。编译器给了我一个警告“putname is undefined”,当我用“__putname”替换“putname”时,内核模块可以编译,但是当它运行时,会出错。回溯显示它在 __putname 中。有没有人可以帮助我解决这个问题?谢谢

4

1 回答 1

1

请参阅 Jeff 的提交 #91a27b2a756784714e924e5e854b919273082d26

此补丁集将 getname()/putname() 接口转换为返回结构而不是字符串。目前,该结构只跟踪内核空间中的字符串和它的原始用户空间指针。

界面在 v3.6 之后立即更改。因此,您必须在考虑到此更改的情况下重新编写代码。

于 2013-10-25T08:27:51.787 回答