Невозможно записать в память ядра через модуль ядра Linux (Ubuntu) - PullRequest
5 голосов
/ 03 марта 2010

Я пытаюсь перезаписать некоторые части в памяти ядра (Linux 2.6.31, Ubuntu 9.10) на виртуальной машине (используя VirtualBox) через модуль ядра. Всякий раз, когда я делаю это, я получаю эту ошибку

[27154.303726] BUG: невозможно обработать запрос подкачки ядра в 0xc05769bc

Мой код:

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;

Адрес правильный, как и мой код записи. Я просто использую указатель для записи в память ядра. Мне было интересно, почему я получаю это сообщение, поскольку страница памяти этого адреса определенно находится в памяти.

Это поведение как-то связано с виртуальной машиной? Или в последнее ядро ​​встроена какая-то защита? Я надеюсь, что кто-то может дать мне некоторую подсказку.

Проблема, похоже, связана с Ubuntu, потому что тот же код не дает сбоя при использовании Debian.

ТИА!

Willem

Ответы [ 2 ]

3 голосов
/ 04 марта 2010

ASLR возможно (рандомизация расположения адресного пространства)?

Он может управляться с помощью /proc/sys/kernel/randomize_va_space (эхолот 0 должен отключить его).

2 голосов
/ 04 марта 2010

Последние ядра делают свои текстовые разделы доступными только для чтения - что, как предполагается, будет жить по адресу, который вы пытаетесь указать?

...