milabs / khook

Linux Kernel hooking engine (x86)
GNU General Public License v2.0
327 stars 50 forks source link

перехват scsi_execute рушит ядро #5

Closed zenbooster closed 5 years ago

zenbooster commented 5 years ago

После перехвата scsi_execute вставляю флешку. На первом вызове scsi_execute ядро рушится. Ubuntu 18.04 kernel 4.15.3 x64 В то же время тестовый пример (до внесения изменений) работает.

include <scsi/scsi_device.h>

KHOOK(scsi_execute); static int khook_scsi_execute( struct scsi_device sdev, const unsigned char cmd, int data_direction, void buffer, unsigned bufflen, unsigned char sense, struct scsi_sense_hdr sshdr, int timeout, int retries, u64 flags, req_flags_t rq_flags, int resid ) { int ret = 0;

    ret = KHOOK_ORIGIN(scsi_execute, sdev, cmd, data_direction, buffer, bufflen, sense, sshdr, timeout, retries, flags, rq_flags, resid);
    printk("khook (%s): opcode=%d; ret=%d\n", __func__, cmd[0], ret);

    return ret;

}

ub64devel-2019-06-04-10-09-59

milabs commented 5 years ago

Вероятно, что часть параметров этой функции передаются через стек (начиная с 7-го). Особенность реализации KHOOK на данный момент заключается в том, что там присутствует промежуточный CALL, который изменяет стековый фрейм. Соответственно, часть параметров становятся недоступны (в реальности в части параметров (с 7-го) будет мусор).

milabs commented 5 years ago

Посмотрите, пожалуйста, работает ли исправление?