gpt4 book ai didi

permissions - 什么阻止设备文件被执行?

转载 作者:行者123 更新时间:2023-12-04 03:04:10 26 4
gpt4 key购买 nike

我正在编写一个内核字符设备驱动程序,我已经为它实现了 fops.read ,以及 FIONREAD ( 0x541B ) ioctl。 read返回的数据是一个 ELF 可执行文件。 ls -l确认设备有 r-x权限,并且以下两个命令都允许我执行包含的 ELF 二进制文件:

# cp /dev/foo0 /tmp/bar && /tmp/bar
-or-
# cat /dev/foo0 > /tmp/bar && /tmp/bar
foo_open
foo_ioctl 0x0000541B
foo_read size=131072 off=0
foo_ioctl 0x0000541B
foo_read size=131072 off=13096
foo_release
Hello from /tmp/bar!
...

请注意,内核消息指示调用的各种驱动程序消息。但是,当我尝试直接运行设备时,出现错误:
# /dev/foo0
foo_open
foo_release
/bin/sh: 6: /dev/foo0: Permission denied

什么检查可能导致权限错误,是否可以在不从根本上破坏 linux 的情况下覆盖它?我正在使用具有最小 sysroot 镜像的 4.18.3 内核。

最佳答案

来自 man 2 execve :

EACCES The file or a script interpreter is not a regular file.



Linux 内核只允许执行常规文件,不允许执行字符设备或任何其他特殊文件。内核会进行检查 in the do_open_execat function in fs/exec.c :

if (!S_ISREG(file_inode(file)->i_mode))
goto exit;

如果你真的想要,你可以在没有检查的情况下重建内核,但它可能有一个很好的理由。

关于permissions - 什么阻止设备文件被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52788573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com