我写了一个LKM
写入内核(poolinfo_table)
的数据结构。如果我insmod
这LKM
在kernel 2.4
我想它写入这个数据结构,但当我对kernel 3.10
做同样的事情时,我的系统重启就像我期望的那样! kernel 2.4
有什么问题?它的内核内存没有受到保护,或者我实际上并没有写入内存?!我的意思是当我尝试写入内存时,我期待任何内核粉碎,所以我怀疑我实际上已经写入内核2.4的内存。事实上,我在我的主机系统(Fedora 18)上使用内核3.10和我的guest(Redhat 9)以及内核2.4尝试了相同的代码。 (我有管理程序Xen)
在userland中,如果你写到某个你不应该的地方(你的地址空间某处不可写,也许它没有被映射,或者它可能被写保护),mmu可能会对你的进程发出总线错误或分段违规。
内核空间中的线程不太可能但不是不可能 - 您可以轻松地导致内存损坏或弄乱内存映射设备而不会触发即时崩溃。你在内核空间中产生的最可能的崩溃是踩到别人的内存指针并让它们无意中将它逐步进入未映射的空间。
userland和kernel之间的主要区别实际上只与您可以做的损害范围有关。显然在内核中你可以搞得更多。