Linux中的ioctl命令可以完全列举吗?

Jer*_*ell 3 linux ioctl linux-kernel

为了进行面向安全性的源代码审查,我有兴趣(全面)查找在Linux内核中注册的所有ioctl命令。另外,我想将它们分类为管理员(例如,root)可以访问的类别,以及非特权用户可以访问的类别。

我不确定阅读内核源代码是否更容易,或者是否有某种方法可以在用户空间中查询列表。如果需要查看内核,注册ioctl时需要寻找什么功能?

Mar*_*rkR 5

ioctl实际上并没有在内核中注册,每种类型的文件状对象都有一组不同的ioctl可用。

大多数情况下,它们是使用switch语句实现的。

因此,您真正需要做的是:

  • 找出与安全性相关的设备/文件类型集-那些只能由root用户打开的设备大概不需要检查root-exploits。
  • 找出可用的ioctl。

实际上,找出可用的ioctl并非易事。许多设备都有手册页,其中列出了它们,但其他设备则没有,并且列表可能不完整。

通常情况下,某个功能的开关状态很大。但是,存在一种“继承性”,即许多设备具有在不同级别实现的几种不同类型的ioctl。

相同的“种类”驱动程序通常在几种不同类型的硬件中实现,并且它们通常共享很多代码。

例如,串行端口在http://lxr.linux.no/#linux+v2.6.35/drivers/serial/serial_core.c#L1107中定义了自己的ioctl

但是,串行端口也可能在每个驱动程序的基础上定义了ioctl,但是由于它们是tty,因此它们也响应tty ioctl。

每个子系统的结构不同,因为它们具有不同的行为。