Angenommen, es gibt zwei Linux kernel modules
. Es gibt eine global pointer
, die zwischen diesen beiden Modulen geteilt wird. Module 1
versucht, auf diese pointer
zuzugreifen, diesen Zeigerwert beschädigt und beendet. Jetzt versucht Module 2
auf diese pointer
zuzugreifen, die nicht mehr gültig ist und abstürzt.Zwei Linux-Kernel-Module korrumpieren einen gemeinsamen Zeiger - Wie Debuggen?
Modul 1:
module_function()
{
//corrupt global_ptr
}
module2_function()
{
local_ptr = global_ptr;
//local_ptr corrupted
//Now if local_ptr is accessed, it will crash
}
Kann jemand erklären, wenn dieses Szenario gültig und möglich ist? Dann
i) Wie dieses Problem zu debuggen. Das heißt, herauszufinden, welches Modul den Zeiger korrumpiert?
ii) Wie behebt man dieses Problem, damit module2 niemals abstürzen sollte?
0. Ja, dieses Szenario ist möglich. 1. Versuchen Sie, Änderungen am Zeiger abzufangen. Zum Beispiel mit Haltepunkten auf Daten. 2. Im Allgemeinen gibt es keinen Schutz gegen eine Fehlfunktion des Moduls. Alle Module und Kernel-Core-Shares ** einzelner Adressraum **. Es können also nicht nur globale Variablen, sondern auch lokale verfälscht werden. – Tsyvarev