小编use*_*768的帖子

call_usermodehelper API无法加载进程

我在linux内核模块中使用*call_usermodehelper*API时遇到问题.我在Kernel jprobes模块中使用此API来捕获*start_thread*函数.如果我提供*UMH_WAIT_EXEC*作为等待参数,则此API可以很好地工作,但是当*UMH_WAIT_PROC*作为参数传递时,它无法加载进程.

具体来说,以下代码正常工作.

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/kprobes.h>
#include <linux/kallsyms.h>
#include <linux/ptrace.h>
#include <linux/kmod.h>
#include <linux/syscalls.h>
#include <linux/delay.h>

static struct jprobe start_thread_jprobe;

static asmlinkage int kp_start_thread(struct pt_regs* regs, 
                        unsigned long new_ip,unsigned long new_sp){

    int retval;

    char * envp[] = { NULL };
    char* argv[]={"/bin/ls",NULL};

    //Only modifying this for a process named test1
    if(strcmp(current->comm,"test1")==0){

    retval=call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);

    if(retval<0){
            printk("Failed in starting! %d\n",retval);
    }
    else {
        printk("Succeded in starting %d\n",retval);
    }
}


jprobe_return();
/*NOTREACHED*/
return (0);
}

int …
Run Code Online (Sandbox Code Playgroud)

linux kernel

7
推荐指数
0
解决办法
1383
查看次数

标签 统计

kernel ×1

linux ×1