Linux操作系统源代码详细分析
日期:2007年10月4日 作者: 查看:[大字体 中字体 小字体]-
24446:以内核中的一个独立进程的形式执行exec_modprobe函数(24384行)。这并不能只通过函数的简单调用实现,因为exec_modprobe要继续调用exec来执行一个程序。因此,对函数exec_modprobe的简单调用将永远不会有返回。
这和使用fork以准备exec调用十分类似,你可以认为kernel_thread对内核来说就是较低版本的fork,虽然两者有很大不同。fork是从指定函数开始执行新的进程,而不是从调用者的当前位置开始运行。正如fork一样,kernel_thread返回的值是新进程的进程号。
24448:和fork一样,从kernel_thread返回的负值表示内部错误。
24455:正如函数中论述的一样,大部分的信号将因当前进程而被暂时阻塞。
24462:等待exec_modprobe执行完毕,同时指出所需要的模块是已经成功装入内存,还是装载失败了。
24465:结束运行,恢复信号。如果exec_modprobe返回错误代码,则打印错误消息。
2. exec_modprobe
24384:exec_modprobe运行为内核增加内核模块的程序。这里的模块名是一个void*的指针,而不是char*的指针。原因简单说来就是kernel_thread 产生的函数通常都使用void*指针参数。
24386:设置modprobe的参数列表和环境。modprobe_path(24363行)用来定位modprobe程序的位置。它可以通过内核的sysctl特性来修改,这一点将在第11章中介绍(参见30388行)。这意味着root可以动态选择不同于/sbin/modprobe的程序来运行,以适应当modprobe被安装到其他地方或者使用修改过的modprobe替换掉了原有的modprobe之类的情况。
24400:(正如代码中描述的一样)出于安全性考虑,丢弃所有挂起的信号和信号句柄(handl-ers)。这里最重要的部分是对flush_signal_handlers的调用(28041行),它使用内核默认的信号句柄代替所有用户定义的信号句柄。如果在此时有信号被传送到内核,它将获得默认响应—通常是忽略信号或杀死进程。但是不管怎样都不会引起安全风险。由于该函数从触发它的进程中分离出来(如前所述),所以,不管原始进程在此处是否改变其原来分配的信号,句柄都不会产生任何影响。
24405:关闭调用进程打开的所有文件。最重要的是,这意味着modprobe程序不再从调用进程中继承标准输入输出和标准错误。这很有可能会引起安全漏洞(这可能是在替代modprobe的程序中引起的问题,但是modprobe本身实际上并不关心这个差异)。
24413:modprobe程序作为root运行,它拥有root所拥有的所有权限。和整个内核中其他地方一样,请注意root使用用户ID号0的假定在这里已经被写入程序。用户ID号和权能系统(capability system,在接下来的几行中会用到)将在第7章中介绍。
24421:试图执行modprobe程序。如果尝试失败,内核将使用printk打印错误消息并返回错误代码。这里是可能产生printk的缓冲器过载的地点之一。module_name的长度并没有明确限制,就我们对该调用的看法而言,它可能长达一百万个字符。为防止printk缓冲器过载,你必需遍历所有对于该函数的调用(实际上是对request_module的调用),以保证每个调用者使用足够短的、不会为printk造成麻烦的模块名。
24427:当execve成功执行时,它不会返回任何结果,因此本处是不可能执行到的。但是编译器却并不知道这一点,因此,此处使用了return语句以保证gcc不出错。
对于内核的进一步讨论将超出本章的既定范围,因此在这个问题上我们到此为止。然而本书中也包括了其他必需的内核代码。在读完第4章和第5章之后,也许你会希望再次仔细研读一下这部分内容。有关这个问题的两个文件是include/linux/module.h(从15529行开始)和/kernel/module.c(从24476行开始)。和sys_create_module(24586行)、sys_init_module(24637行)、sys_delete_module(24860行)和sys_query_module(25148行)四个函数需要特别注意一样,struct module(15581行)也要特别引起注意。这些函数实现了modprobe及insmod、lsmod和rmmod所使用的系统调用,以完成模块的装载、定位和卸载。
- 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
-
- Linux操作系统源代码详细分析 相关文章:
- ·魔法门7 攻略解析
- ·校园网网络方案设计及分析
- ·计算机一级B考试试题分析
- ·Linux操作系统源代码详细分析
- ·联讯证券同花顺软件分析系统使用
- ·ORACLE UPDATE 语句语法与性能分析的一点看法
- ·经典爱情格言爱情名句赏析
- ·网站推广计划的一个案例分析
- ·网络术语解析-ICS
- ·UML业务建模实例分析
- Linux操作系统源代码详细分析 相关软件
- ·龙卷风基金投资分析系统
- ·同花顺证券行情分析软件(同花顺)2007 V4.40.12
- ·大智慧level2行情分析系统 V2.1
- ·大福星行情分析系统 V1.52
- ·大智慧新一代高速行情分析系统(Internet) V2.05.07.0208
- ·木马分析专家2007V9.49 Build 1226
- ·科来网络分析系统 V6.5
- ·股赢天下股票证券分析系统 V1.9 Beta1
- ·和讯股道实时行情分析系统 普及版
- ·长江证券分析软件 普通版 V4.30.59
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
下一篇:linux下安装软件的办法
精品推荐
热点TOP10
- ·什么是MIS
- ·BIOS知识大全
- ·Linux操作系统源代码详细分析
- ·Linux学习手册
- ·linux知识大全
- ·Vi命令一览表
- ·Linux/Unix环境下的make命令详解
- ·Linux循序渐进(19):shell
- ·LINUX 常见问题1000个详细解答
- ·RPM命令大全
- ·Linux中QQ的配置
- ·Linux主要shell命令详解
- ·最新linux iso光盘下载点
- ·常见端口表汇总
- ·Linux发行版图标大全
- ·linux内核编译详解
- ·Linux From Scratch安装学习笔记
- ·万能声卡驱动(Alsa)的安装方法
- ·Linux下用pptp连接VPN服务器
- ·Bourne shell编程入门及脚本测试
特别推荐
- ·BIOS知识大全
- ·如何编写Linux设备驱动程序
- ·Linux管理工具介绍
- ·Linux操作系统源代码详细分析
- ·Linux下用pptp连接VPN服务器
- ·在linux7.1上安装jdk+tomcat+oracle9i笔记
- ·Linux学习手册
- ·学习Linux的八点忠告
- ·深入分析Linux防火墙
- ·UNIX系统后门的安放和日志的擦除
- ·揭开Expect的神秘面纱
- ·万能声卡驱动(Alsa)的安装方法
- ·长篇连载--arm linux演艺---序
- ·为CanonPIXMAiP1000喷墨打印机安装驱动程序
- ·详细讲解Linux系统下ADSL拨号上网方法
- ·使用ImageMagick 的提示与技巧
- ·轻松实现 Linux系统下互联网过滤功能
- ·Linux下一些故障现象以及解决的相关资源
- ·重安装gentoo 2005.1 for AMD64版经验
- ·Linux/Unix环境下的make命令详解
