порождение перезагрузки от пространства пользователя

После большего количества рытья вокруг мы нашли эту статью:

2015 HP XW9300 и Adaptec примечания к Linux

Таким образом, все, чему было нужно сделанный, должно было загрузиться в noprobe режим:

boot: linux noprobe text

затем укажите драйвер вручную:

I2O Block driver (i2o_block)

Однако после всего того потраченного впустую времени, было решено, чтобы эти поля и SCSI имели свой день и производятся к пастбищу.

0
19.05.2017, 16:20
4 ответа

Ядро Linux не позволяет пространству пользователя делать такие вещи, которые могли влиять на других пользователей. Как корень, Вы Смогли делать что-то как этот, но ядро могло бы все еще предотвратить такое прямое управление; в конце концов, корневой процесс является все еще процессом пространства пользователя, но тот, который имеет неограниченный доступ к системным вызовам ядра.

Больше подхода correct/UNIXy должно выполнить этот вид действия в ядре и выставить интерфейс, который процессы пространства пользователя могут использовать для вызова его. Затем Ваш код будет выполнен в контексте ядра и иметь полный доступ к аппаратным средствам/характеристикам системы, к которым у пользователей не должно обычно быть доступа.

5
28.01.2020, 02:13

Сбои ЦП как это обрабатываются обработчиками прерываний привилегированного режима. Код ядра хорош, и если отказ пространства пользователя происходит (как деление на нуль или доступ к недопустимой памяти), первый обработчик прерываний должен обработать его правильно. Что-либо еще - ошибка в ядре - если существует отказ в обработчике прерываний, в основном единственная нормальная вещь сделать вывести регистры и стек, и спадать до отладчика (как OpenBSD делает), или HCF так, чтобы паническое сообщение могло быть записано. Тройные отказы существуют, потому что той точкой Ваш код просто не работает.

TL; DR: Чтобы это работало, необходимо найти ошибку в обрабатывающем отказ коде в Linux.

Вы смогли делать это в модуле ядра, который намеренно разрушает обработчиков прерываний, но Вы, также очень вероятно, разрушите систему. Это не тот же эффект как shutdown -r now!

4
28.01.2020, 02:13

На Linux можно использовать reboot системный вызов:

#include <unistd.h>
#include <sys/reboot.h>

int main(void) {
    return reboot(LINUX_REBOOT_CMD_RESTART);
}
1
28.01.2020, 02:13

Если Вам действительно нужен ассемблер (?!), это раньше работало от корня (с nasm, я думаю):

BITS    32
    mov eax, 88
    mov ebx, 0xfee1dead
    mov ecx, 85072278
    mov edx, 0x01234567
    int  0x80
0
28.01.2020, 02:13

Теги

Похожие вопросы