2010-03-03 32 views
5

Estoy intentando sobrescribir ciertas piezas en la memoria kernel (Linux 2.6.31, Ubuntu 9.10) en una máquina virtual (usando VirtualBox) a través de un módulo kernel. Cada vez que hago esto me sale este errorNo se puede escribir en la memoria kernel a través del módulo kernel de Linux (Ubuntu)

[27154.303726] ERROR: no se puede manejar la petición de localización al núcleo 0xc05769bc

Mi código:

unsigned char *p = (unsigned char *) c05769bc; 
p[1] = (addr & 0x000000ff); 
p[2] = (addr & 0x0000ff00) >> 8; 
p[3] = (addr & 0x00ff0000) >> 16; 
p[4] = (addr & 0xff000000) >> 24; 

la dirección correcta y también mi código de escritura Solo estoy usando un puntero para escribir en la memoria del kernel. Me preguntaba por qué recibo este mensaje, ya que la página de memoria de esa dirección está definitivamente en la memoria.

¿Este comportamiento tiene algo que ver con la máquina virtual? ¿O el kernel reciente tiene algún tipo de protección integrada? Espero que alguien pueda darme alguna pista.

El problema parece estar relacionado con Ubuntu, porque el mismo código no falla con Debian.

TIA!

Willem

+0

Debian en VM o independiente? –

+0

Debian también en VM (VirtualBox) –

Respuesta

2

Los núcleos recientes hacen que su sección de texto sea de solo lectura: ¿qué se supone que está viviendo en la dirección que intentas introducir?

+0

¿Sabes si hay una configuración de kernel var para cambiar las opciones de sección de texto? –

3

ASLR quizá (Address Space Layout La asignación al azar)?

Puede ser controlado por /proc/sys/kernel/randomize_va_space (haciendo eco 0 debe apagarlo).

Cuestiones relacionadas