设备驱动程序编程摘要

在实施设备驱动程序时应考虑以下准则。

注:已添加新的系统调用,以支持流和 FIFO 设备上每次读/写的扩展安全性。 两个新库 API eread() 和 ewrite() 都支持该扩展安全性属性。 如果它是 MLS 内核,那么将在该设备上设置安全性标志 DEV_SEC_ERDWR。 同样,对于 FIFO,将在设备上设置 GNF_SEC_ERDWR。 这些标志会启用对每个读/写操作的其他安全性检查。

一般设计技术

设备驱动程序中的所有安全性检查都应按照模块化方式写入,而且都应能轻易地识别。

设备驱动程序中的检查

在设备驱动程序之外进行 MIC、MAC 和 DAC 检查始终较好。 没有这些检查的设备驱动程序可轻松地移植到不可信系统或其他类型的可信系统,或从这些系统中进行移植。

在常规设备驱动程序实施中,内核执行 MIC、MAC 和 DAC 检查,而驱动程序执行所有其他所需的特权检查。 在非常规设备驱动程序实施中,所有检查(MIC、MAC、DAC 和特权检查)都在设备驱动程序中执行。 选择是实施常规还是非常规设备驱动程序是设计时需要判断的问题。

DAC

DAC 是对基于用于访问设备的文件系统入口点的每个设备特殊文件强制实施的。

检查安装是否正确

执行 MAC 检查的任何设备驱动程序都应安全地处理(在合理范围内)设备不正确定义的可能性。

特权访问

对于设备驱动程序,将某些设备操作限制为仅由特权进程执行可能比较合适。 但是,对于这些情境,有一些特定的建议。

您可以使用 refmon 内核函数来确定是否具有必需的特权。