Sunday, February 20, 2022

[SOLVED] Execute shell command in kernel module

Issue

Is it possible to execute shell command in kernel module. I know that we can do it in user space C code using system subroutine.
I am debugging a kernel module which has memory leak issue. After doing insmod and rmmod module.ko in an infinite loop, system goes out of memory within few minutes with 8G RAM.
It would be helpful to know memory status using free command before and after the call to API responsible to free memory so i can know that API is working or not.
This is the way i am debugging. Please share if there is any other way to do so.


Solution

You can use call_usermodehelper function. See the example of how to use it at the LXR#1 or LXR#2.

UPD:

argv[0] = "/bin/bash";
argv[1] = "-c";
argv[2] = "/usr/bin/free";
argv[3] = NULL;

envp[0] = "HOME=/";
envp[1] = "TERM=linux";
envp[2] = "PATH=/sbin:/usr/sbin:/bin:/usr/bin";
envp[3] = NULL;

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


Answered By - Ilya Matveychikov
Answer Checked By - Katrina (WPSolving Volunteer)