Реализация системного вызова: невозможно получить значение параметра от пользователя - PullRequest
0 голосов
/ 09 декабря 2018

Я выполняю системный вызов в Linux.У меня проблема: Не удается получить значение параметра от пользователя.Моя версия ядра 4.19.5

Это код пользователя:

int main(){
    char *name = (char*)malloc(sizeof(char)*32);

    int fd1;
    char buf[128];
    fd1 = open("/usr/src/linux-4.19.5/abc", O_WRONLY);
    if (fd1 == -1) {
        printf("ERROR\n");
        return EXIT_FAILURE;
    }
    printf("Enter process to find: ");
    scanf (" %[^\n]", name);
    write(fd1, name, strlen(name));
    long int status = syscall(335, name);
    printf("System call returned %ld\n", status);
    close(fd1);

    return 0;}

Но я не могу получить значение 'name' в коде ядра: Это код ядра:

asmlinkage long sys_process_name(char* process_name){

    struct task_struct *task;
    struct tty_struct *my_tty;
    my_tty = get_current_tty();
    char name[32];
    for_each_process(task){
        if(strcmp(task->comm,process_name) == 0){
            sprintf(name, "PID = %ld\n", (long)task_pid_nr(task));
            (my_tty->driver->ops->write) (my_tty, name, strlen(name)+1);
        }
    }
    return 0;}

Значение имя_процесса равно нулю.

...