繁体   English   中英

如何从linux内核模块打印出访问权限

[英]How to print out the access right from linux kernel module

当我从终端运行命令 lsof 时,它将显示标题为 FD 的所有文件描述符的详细列表。 像 1u 这样的 FD 列号是实际的文件描述符,后跟 u,r,w 其模式为:

  • r 用于读取访问
  • w 用于写访问
  • u 用于读写访问

我的问题是如何从 linux 内核模块打印出这些类型的访问? 我可以打印files_path(见吸引的图片)。 我在这里看到文件结构中有f_mode并试图将其打印出来并收到大数字,例如 1208647709 或 917507

运行dmesg后的结果

这是我的代码

struct task_struct *task_list;
struct fdtable *        fdt = NULL;
unsigned int process_count = 0;
int fd_i;
char  tmpbuf[256];
char * process_path = "";
struct path files_path;
unsigned int mode_path;
char *cwd;
for_each_process(task_list) {
    pr_info("Process: %s\t PID:[%d]\t State:%s\n", 
            task_list->comm, task_list->pid,
            get_task_state(task_list->state));
    if (task_list->files == NULL) continue; 
    fdt = files_fdtable(task_list->files);
    int i=0;
    while(fdt->fd[i] != NULL) { 
        files_path = fdt->fd[i]->f_path;
        mode_path = fdt->fd[i]->f_mode;
        cwd = d_path(&files_path,buf,100*sizeof(char));
        printk(KERN_INFO "Open file with fd %d  %s **mode: %d**", i,cwd, mode_path);            
        i++;
    }
}

有人可以审查并支持我解决这个问题吗? 提前致谢

Tsyvarev 的解决方案:使用 f_mode & (FMODE_READ | FMODE_WRITE) 提取两个标志。 然后切换该表达式的结果:

  1. 结果等于 FMODE_READ 表示“r”。
  2. 结果等于 FMODE_WRITE 表示“w”。
  3. 结果等于表达式 FMODE_READ | FMODE_WRITE 的意思是“你”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM