- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经编写了在/proc 文件上读取和写入的模块,并且工作正常,但是当我创建下面所示的权限函数时,想要使用它的权限,它给了我错误(基本上我希望每个人都可以读取该文件,但是只有 root 可以写入)。
int my_permission(struct inode *inode, int op)
{
if(op == 4||(op == 2 && current->euid = 0)) //euid is not a member of task_struct
return 0;
return -EACCES;
}
const struct inode_operations my_iops = {
.permission = my_permission,
};
但它给我的错误如下:
/home/karan/practice/procf/testproc1.c: In function ‘my_permission’:
/home/karan/practice/procf/testproc1.c:50:32: error: ‘struct task_struct’ has no member named ‘euid’
我认为 task_struct 中还有其他成员指向用户 id 。我对解决方案以及用于的 task_struct 成员字段的描述感兴趣。
问候卡兰
最佳答案
参见 include/linux/cred.h:
#define current_euid() (current_cred_xxx(euid)) #define current_cred_xxx(xxx) \ ({ \ current_cred()->xxx; \ })
因此 current_euid() 依赖于 current_cred():
/** * current_cred - Access the current task's subjective credentials * * Access the subjective credentials of the current task. RCU-safe, * since nobody else can modify it. */ #define current_cred() \ rcu_dereference_protected(current->cred, 1)
因此,对于您的问题,要进行有效的 UID 比较,请查看/fs/exec.c:
if (current_euid() == current_uid() && current_egid() == current_gid()) bprm->cred->euid = current_euid(); bprm->cred->euid = inode->i_uid
与您的程序对比:
if (current_euid() == 0)
这意味着即使用户没有以UID=0登录,也会被有效地视为UID==0?听起来很危险
关于c - struct task_struct 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9117850/
我正在研究一种管理休眠进程的替代方法,为了我的实验,我需要制作一个修改过的 Linux 内核。对于我正在做的事情,我需要访问描述进程的 task_struct,即使它是当前正在运行的进程。我需要这样做
和这个问题有点关系: Direct access to structure task_struct from Usermode as root 编写了一个打印指向任务结构 (task_struct)
Task_struct 用于内核保存进程的必要信息。由于该结构,内核可以暂停一个进程,并在一段时间后继续执行它。但我的问题是:这个 task_struct 存储在内存中的什么地方(我读过内核堆栈,是在
内核 task_struct 如下所示。我对两个成员更感兴趣,即 children 和 sibling ,所以我从这个内核结构中删除了其他元素。 struct task_struct{
我有一个 task_struct *我通过调用 find_task_by_vpid(get_pid()) 得到的.我想弄清楚哪个用户拥有该进程,以便我可以在我正在编写的系统调用中进行一些权限检查,但要
我已经编写了在/proc 文件上读取和写入的模块,并且工作正常,但是当我创建下面所示的权限函数时,想要使用它的权限,它给了我错误(基本上我希望每个人都可以读取该文件,但是只有 root 可以写入)。
我正在尝试实现一个模块,该模块将 pid 作为输入并简单地打印该进程的一些属性。打印 sibling 的信息也是该模块的一部分。但是,当我进入第二或第三级叶进程时,它直接返回 pid=1 的父进程,即
我正在尝试编写一个内核模块来检测 fork 炸弹,为此,我想向 task_struct 添加一个字段 int descendantCount。到目前为止,这是我的代码: struct task_str
Linux中的task_struct中是否有成员可以统计进程中正在运行的线程总数? 我读到,在Linux中没有线程,但是如果我们检查任何进程目录(proc/[PID]/task)内的任务目录,就会发现
在一个模块中,我正在访问 task_struct 并返回 stime+utime。我想将它转换为毫秒。 stime 和 utime 将以什么格式出现在 task_struct 中。我也可以从/proc
我有一个家庭作业,我必须向 task_struct 添加一些条目并用它们做一些事情。此外,我必须在 task_struct 初始化时将一个条目初始化为特定的 int。 task_struct 第一次初
我想从 struct task_struct 中获取完整的进程名称。 comm 字段仅存储 16 个字符,而进程名称可以更长。有没有办法获得完整的进程名称? 这可以通过从task_struct获取st
我想获取有关任务的信息,例如任务的总执行时间(使用task_exec_time(task))、未运行的时间(task->sched_info.run_delay)以及调度程序调用任务的次数(任务->s
我读到线程使用 thread_info ,而 task_struct 是 thread_info 的成员,我怀疑进程也使用 thread_info 还是他们在为进程描述符条目分配内存时使用 task_
我正在尝试弄清楚流程是如何相互关联的。我知道 linux 内核使用循环链表 list_head 将不同的进程连接在一起,信息保存在一个名为 task_struct 的结构中。在 task_struct
我正在阅读 Linux 内核的 try_to_wake_up() 函数的源代码。这个函数做了很多事情,包括:return p->on_rq == TASK_ON_RQ_QUEUED。 那么,task_
在阅读 Linux 内核源代码时,我发现一件事让我感到困惑。 在task_struct中,是这样写的 struct task_struct { #ifdef CONFIG_THREAD_INFO_IN
我正在研究一些内核代码并试图了解数据结构是如何链接在一起的。我知道调度程序如何工作的基本概念,以及 PID 是什么。但是我不知道在这种情况下命名空间是什么,也无法弄清楚所有这些是如何协同工作的。 我已
sched.h 中 task_struct 中的 void *stack 声明是什么? ? 它是指向进程镜像(堆栈、堆、.bss、数据、文本)堆栈的指针吗?如果是这样,指向过程镜像其余部分的指针在哪里
我无法理解 Linux 中进程控制 block 和进程描述符之间的区别? 我看到这两种结构都被称为 task_struct,这些术语似乎可以互换使用 - 两者之间有什么区别? 非常感谢您的帮助! 最佳
我是一名优秀的程序员,十分优秀!