use*_*587 1 linux kernel linux-kernel procfs
我正在编写可加载内核模块(LKM).如果刚执行cat/proc /的用户是当前用户,那么这个LKM需要做一些特殊的事情.所以我想弄清楚如何找到这个信息.我的第一次尝试是使用cred.h中定义的get_current_user().但这没有成功.http://lxr.linux.no/linux+*/include/linux/cred.h#L290我不是在寻找其他方法这是我发现的似乎没有工作如何在编写Linux内核模块时获取用户ID 如何做我从内核空间调用Linux系统调用?
有问题的功能:
static int getuid()
{
return get_current_user()->uid;
}
Run Code Online (Sandbox Code Playgroud)
gcc输出:
make -C /lib/modules/2.6.32-358.11.1.el6.x86_64/build M=/root/git_prj1 modules
make[1]: Entering directory `/usr/src/kernels/2.6.32-358.11.1.el6.x86_64'
CC [M] /root/git_prj1/proc_setup.o
/root/git_prj1/proc_setup.c:37: warning: function declaration isn???t a prototype
/root/git_prj1/proc_setup.c: In function ???getuid???:
/root/git_prj1/proc_setup.c:39: error: dereferencing pointer to incomplete type
/root/git_prj1/proc_setup.c:39: error: implicit declaration of function ???get_uid???
/root/git_prj1/proc_setup.c:39: warning: assignment makes pointer from integer without a cast
/root/git_prj1/proc_setup.c:39: warning: return makes integer from pointer without a cast
/root/git_prj1/proc_setup.c: In function ???read_key???:
/root/git_prj1/proc_setup.c:52: warning: format ???%s??? expects type ???char *???, but argument 4 has type ???int???
make[2]: *** [/root/git_prj1/proc_setup.o] Error 1
make[1]: *** [_module_/root/git_prj1] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.32-358.11.1.el6.x86_64'
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
由于我无法看到代码的完整来源,我无法确切地说出错误.
但是,我写了一个快速演示,并设法让它很容易地工作.我怀疑你在任何代码中都错过了一个标题.
danieltang@danieltang-virtual-machine:~/test_module$ cat test.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/cred.h>
static int test_init(void)
{
printk(KERN_INFO "Current UID = %u\n",
get_current_user()->uid);
return 0;
}
static void test_exit(void)
{
}
module_init(test_init);
module_exit(test_exit);
danieltang@danieltang-virtual-machine:~/test_module$ make
make -C /lib/modules/3.5.0-17-generic/build M=/home/danieltang/test_module modules
make[1]: Entering directory `/usr/src/linux-headers-3.5.0-17-generic'
Building with KERNELRELEASE = 3.5.0-17-generic
Building modules, stage 2.
Building with KERNELRELEASE = 3.5.0-17-generic
MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-3.5.0-17-generic'
danieltang@danieltang-virtual-machine:~/test_module$ sudo insmod test.ko
danieltang@danieltang-virtual-machine:~/test_module$ dmesg | tail -n1
[ 3705.237507] Current UID = 0
danieltang@danieltang-virtual-machine:~/test_module$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5075 次 |
| 最近记录: |