Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
zenbooster opened this issue Jun 4, 2019 · 2 comments
Closed

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

zenbooster opened this issue Jun 4, 2019 · 2 comments

Comments

@zenbooster
Copy link

zenbooster commented Jun 4, 2019

После перехвата 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
Copy link
Owner

milabs commented Jun 4, 2019

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

milabs added a commit that referenced this issue Jun 9, 2019
This makes a copy of on-stack arguments before calling the hook
function so it's possible to access them.
@milabs
Copy link
Owner

milabs commented Jun 9, 2019

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants