我已经编写了一个写入内核(poolinfo_table)的数据结构的LKM。如果我在kernel 2.4中insmod这个LKM,我猜它会写到这个数据结构中,但是当我用kernel 3.10做同样的事情时,我的系统会像我预期的那样重新启动!kernel 2.4有什么问题?它的内核内存不受保护,或者我实际上没有向它写入数据?!我的意思是,当我试图写到它的内存时,我预计内核会崩溃,所以我怀疑我是否真的写到了我的内核2.4的内存中。实际上,我在我的主机系统(Fedora 18)的内核3.10和我的客户系统(Redhat 9)的内核2.4上尝试了相同的代码。(我有虚拟机管理程序Xen)
发布于 2019-04-17 06:25:31
在userland中,如果您写入不应该写入的位置(例如,在您的地址空间中不可写的某个位置,可能没有映射,或者可能是写保护的),mmu可能会向您的进程发出总线错误或分段冲突。
对于内核空间中的线程来说,这不太可能,但也不是不可能-您可以很容易地导致内存损坏或弄乱内存映射设备,而不会触发即时崩溃。最有可能在内核空间中产生的崩溃是通过践踏其他人的内存指针,并让他们无意中进入未映射的空间。
userland和kernel之间的主要区别实际上只与您可以造成的损害的范围有关。显然,在内核中,你可能会搞得一团糟。
https://stackoverflow.com/questions/21647215
复制相似问题