C - Linux 内核 - 协助 current_uid()

C - Linux Kernel - Assistance with current_uid()

我一直在处理我无法修复的部分作业。要求是拦截系统调用 open 并将其替换为仅针对普通用户的新系统 open 调用,并在系统日志中打印出用户 ID 和文件名。否则它只会执行标准系统公开调用。这是困扰我的部分内容:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/syscalls.h>

unsigned long **sys_call_table;

asmlinkage long (*ref_sys_open)(const char *filename, int flags, umode_t mode);
asmlinkage long (*ref_sys_close)(unsigned int fd);

asmlinkage long new_sys_open(const char *filename, int flags, umode_t mode) {

    if (current_uid() >= 1000) {

    printk(KERN_INFO "User %d is opening file: %s\n", current_uid(), filename);

    } else {

    (*ref_sys_open)(filename, flags, mode);

    }

    return 0;
}

我遇到的问题是 current_uid() 的返回值是类型为 kuid_t 的结构。我进一步调查,发现该结构如下所示:

typedef struct {
  uid_t val;
} kuid_t;

我想知道如何将 int 1000 与类型 uid_t val 进行比较?

附带说明一下,我是否正确调用了旧版本的系统调用?

来自 here, uid_t is just a typedef of __kernel_uid32_t, which is unsigned int according to here