我正在为我的OS课程编写一个rootkit(老师可以在这里寻求帮助)。我的rootkit挂钩sys_read系统调用以隐藏用户的“魔术”端口。当我将用户缓冲区* buf(sys_read的一个参数)复制到内核空间(进入一个名为kbuf的缓冲区)时,我得到了内核崩溃/核心转储错误。这可能只是因为打破读取会导致系统停止,但我想知道是否有人对此有任何看法。
该代码可在线获取。看看第207行:https://github.com/joshimhoff/toykit/blob/master/toykit.c
我挂钩了getdents并使用copy_from_user将getdents结构带入内核空间,这很有效!我不确定阅读有什么不同。
感谢您的帮助!
答案 0 :(得分:1)
我明白了。我调用了实际的sys_read函数,但没有检查返回值。有时表示错误是否定的。我没有提前失败,而是向kmalloc询问了负字节数。
想象一下。分配负面记忆。那将是一个疯狂的世界。