Hello,

I came across the function: call_usermodehelper 
This can be used to invoke exec a binary from the kernel space.
It ultimately calls:
call_usermodehelper_exec_async 

Which internally does: 
retval = do_execve(getname_kernel(sub_info->path),(const char __user *const __user *)sub_info->argv,(const char __user *const __user *)sub_info->envp);

This function works as expected and a new thread is spawned.
Now when I try to directly call do_execve within my module by passing the required arguments, I am getting  -EFAULT error.
This is happening in this function:

count(argv, MAX_ARG_STRINGS)

What am I missing here?

Thank you
Hemanth