一种污染变量跟踪方法

文档序号:6440643阅读:179来源:国知局
专利名称:一种污染变量跟踪方法
技术领域
本发明涉及设备驱动技术领域,特别涉及一种污染变量跟踪方法。
背景技术
可靠性是操作系统的一个重要目标。Windows XP操作系统85%的失效是由设备驱动造成的。Linux操作系统设备驱动失效的频率是其它部分的3-7倍以上。研究表明,设备驱动失效是导致操作系统失效的主要原因。对Windows服务器的研究发现,8%的系统的存储设备或网络适配器会失效。9%的微软的服务器由于硬盘或网络适配器的失效被迫重新启动。因此,在设备驱动中检查设备的错误对提高操作系统的可靠性具有重要意义。硬件设备发生故障时会将错误的寄存器值提供给设备驱动,从而导致设备驱动工作异常。在异常情况下,人们将与硬件设备寄存器中读出的值有关的变量称之为污染变量。污染变量(Tainted Variable)是操作系统领域顶级会议SOSP的2009年的文章《Tolerating Hardware Device Failures in Software》中提出的一个概念,原文是指从硬件设备寄存器中读出的数据,以及和这些数据相关的变量(从硬件设备寄存器中读出的数据会保存到变量中,首先这些变量被称之为污染变量,通过将这些变量赋值给其它变量,使“其它变量”的值为从硬件设备寄存器中读出的数据,“其它变量”也是污染变量)。对污染变量的赋值关系进行跟踪对于提高设备驱动和硬件设备的可靠性具有重要意义。

发明内容
(一)要解决的技术问题本发明要解决的技术问题是如何提供一种污染变量跟踪方法,以便提高设备驱动和硬件设备的可靠性。( 二 )技术方案为解决上述技术问题,本发明提供一种污染变量跟踪方法,其包括步骤A 将直接读取目标设备寄存器数据的函数作为污染函数存储到污染函数库中,根据目标设备驱动源代码建立变量赋值关系图、函数调用关系图和函数被调用关系图,创建用于存放污染变量及相应赋值关系的结果图和用于存放待处理函数的待处理函数队列;B:根据所述污染函数库,找到直接被所述污染函数赋值的第一污染变量,将所述第一污染变量存入所述结果图中,将所述第一污染变量所在的函数存入所述待处理函数队列;C:从所述待处理函数队列中取出一个待处理函数,根据所述结果图中已有的污染变量和所述变量赋值关系图,判断所述待处理函数中是否存在新的第二污染变量,如果存在,将所述新的第二污染变量和相应的赋值关系存入所述结果图中,并将所述待处理函数重新放回所述待处理函数队列,然后执行步骤D ;否则,直接执行步骤D ;
D 根据所述结果图中已有的污染变量、所述函数调用关系图和函数被调用关系图,判断是否存在由于函数调用或者被调用而产生的新的第三污染变量,如果存在,将所述新的第三污染变量和相应的赋值关系存入所述结果图中,并将发现所述新的第三污染变量的函数放入所述待处理函数队列中,然后执行步骤E ;否则,直接执行步骤E ;E 判断所述待处理函数队列是否为空队列,如果是,输出所述结果图;否则,执行所述步骤C。优选地,所述步骤A具体包括步骤Al 将直接读取目标设备寄存器数据的函数作为污染函数存储到污染函数库中;A2:分析目标设备驱动源代码,根据所述目标设备驱动源代码中的变量和函数信息,建立变量赋值关系图、函数调用关系图和函数被调用关系图;A3:创建用于存放污染变量及相应赋值关系的结果图和用于存放待处理函数的待处理函数队列。优选地,所述步骤D具体包括步骤Dl 根据所述结果图中已有的污染变量和所述函数调用关系图,判断是否存在第一实参变量被属于已有的污染变量的第一形参变量所污染,如果存在,将所述第一实参变量和相应的赋值关系存入所述结果图中,并将发现所述第一实参变量的函数放入所述待处理函数队列中,然后执行步骤D2 ;否则,直接执行步骤D2 ;D2:根据所述结果图中已有的污染变量和所述函数被调用关系图,判断是否存在第二形参变量被属于已有的污染变量的第二实参变量所污染,如果存在,将所述第二形参变量和相应的赋值关系存入所述结果图中,并将发现所述第二形参变量的函数放入所述待处理函数队列中,然后执行步骤E ;否则,直接执行步骤E。优选地,所述变量赋值关系图是以变量和代码行号为节点,以赋值关系为边的有向图。优选地,所述函数调用关系图是以函数为节点,以调用关系为边的有向图。优选地,所述函数被调用关系图是以函数为节点,以被调用关系为边的有向图。优选地,所述结果图是以污染变量加行号为节点,以赋值关系为边的有向图。优选地,所述待处理函数队列按照先进先出原则管理其中的待处理函数。(三)有益效果通过本发明实施例所述污染变量跟踪方法,可以获得污染变量的赋值路径,进而可以对设备驱动代码进行检查和修正,最终可以提高设备驱动和硬件设备的可靠性。


图1是本发明实施例所述的污染变量跟踪方法流程图;图2是本实施例所述方法的驱动代码示意图;图3是对应图2中代码的变量赋值关系图;图4是对应图2中代码的函数调用关系图;图5是对应图2中代码的函数被调用关系图;图6是本发明实施例所述方法的另一段驱动代码示意图。
具体实施例方式下面结合附图和实施例,对本发明的具体实施方式
作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。图1是本发明实施例所述的污染变量跟踪方法流程图。如图1所示,所述方法包括步骤A 将直接读取目标设备寄存器数据的函数作为污染函数存储到污染函数库中,根据目标设备驱动源代码建立变量赋值关系图、函数调用关系图和函数被调用关系图,创建用于存放污染变量及相应赋值关系的结果图和用于存放待处理函数的待处理函数队列。所述步骤A具体包括步骤Al 将直接读取目标设备寄存器数据的函数作为污染函数存储到污染函数库中。 图2是本实施例所述方法的驱动代码示意图。如图2所示,其中第3行的函数readl (port) 直接读取目标设备寄存器数据,即属于污染函数,被赋值的变量a即为污染变量。A2:分析目标设备驱动源代码,根据所述目标设备驱动源代码中的变量和函数信息,建立变量赋值关系图、函数调用关系图和函数被调用关系图。图3是对应图2中代码的变量赋值关系图;图4是对应图2中代码的函数调用关系图;图5是对应图2中代码的函数被调用关系图。如图3所示,所述变量赋值关系图是以变量和代码行号为节点,以赋值关系为边的有向图。如图4所示,所述函数调用关系图是以函数为节点,以调用关系为边的有向图。如图5所示,所述函数被调用关系图是以函数为节点,以被调用关系为边的有向图。A3 创建用于存放污染变量及相应赋值关系的结果图和用于存放待处理函数的待处理函数队列。所述结果图是与所述赋值关系图基本相同的有向图,其不同之处仅在于是以污染变量加行号为节点。所述结果图在开始时不包含任何节点,后续随着污染变量被发现,逐渐被记录到所述结果图中,并最终作为污染变量跟踪结果输出。述待处理函数队列按照先进先出原则管理其中的待处理函数。B:根据所述污染函数库,找到直接被所述污染函数赋值的第一污染变量,将所述第一污染变量存入所述结果图中,将所述第一污染变量所在的函数存入所述待处理函数队列。本实施例中将所述污染变量分为三种第一污染变量、第二污染变量和第三污染变量。 其中,第一污染变量是被污染函数直接赋值产生的,如图2代码第3行的变量a。C:从所述待处理函数队列中取出位于队列最前端的一个待处理函数,根据所述结果图中已有的污染变量和所述变量赋值关系图,判断所述待处理函数中是否存在新的第二污染变量,如果存在,将所述新的第二污染变量和相应的赋值关系存入所述结果图中,并将所述待处理函数重新放回所述待处理函数队列,然后执行步骤D ;否则,直接执行步骤D。所述第二污染变量是指通过赋值运算被所述第一污染变量直接或者间接污染的变量。图6是本发明实施例所述方法的另一段驱动代码示意图。如图6所示,其中第5行的变量c即属于第二污染变量;并且,假设紧跟第5行,又通过变量c对另一变量赋值,则该另一变量也属于第二污染变量。D 根据所述结果图中已有的污染变量、所述函数调用关系图和函数被调用关系图,判断是否存在由于函数调用或者被调用而产生的新的第三污染变量,如果存在,将所述新的第三污染变量和相应的赋值关系存入所述结果图中,并将发现所述新的第三污染变量的函数放入所述待处理函数队列中,然后执行步骤E ;否则,直接执行步骤E。
所述步骤D具体包括步骤Dl 根据所述结果图中已有的污染变量和所述函数调用关系图,判断是否存在第一实参变量被属于已有的污染变量的第一形参变量所污染,如果存在,将所述第一实参变量和相应的赋值关系存入所述结果图中,并将发现所述第一实参变量的函数放入所述待处理函数队列中,然后执行步骤D2 ;否则,直接执行步骤D2。所述第三污染变量有包括两种 第一实参变量和第二形参变量。图2所示代码第11行的实参变量d即属于被第一形参变量f所污染的第一实参变量。D2:根据所述结果图中已有的污染变量和所述函数被调用关系图,判断是否存在第二形参变量被属于已有的污染变量的第二实参变量所污染,如果存在,将所述第二形参变量和相应的赋值关系存入所述结果图中,并将发现所述第二形参变量的函数放入所述待处理函数队列中,然后执行步骤E ;否则,直接执行步骤E。图2所述代码第7行的形参变量 b即属于被第二实参变量a所污染的第二形参变量。E 判断所述待处理函数队列是否为空队列,如果是,输出所述结果图;否则,执行所述步骤C。通过本发明实施例所述污染变量跟踪方法,可以获得污染变量的赋值路径,进而可以对设备驱动代码进行检查和修正,最终可以提高设备驱动和硬件设备的可靠性。以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
权利要求
1.一种污染变量跟踪方法,其特征在于,包括步骤A 将直接读取目标设备寄存器数据的函数作为污染函数存储到污染函数库中,根据目标设备驱动源代码建立变量赋值关系图、函数调用关系图和函数被调用关系图,创建用于存放污染变量及相应赋值关系的结果图和用于存放待处理函数的待处理函数队列;B 根据所述污染函数库,找到直接被所述污染函数赋值的第一污染变量,将所述第一污染变量存入所述结果图中,将所述第一污染变量所在的函数存入所述待处理函数队列;C:从所述待处理函数队列中取出一个待处理函数,根据所述结果图中已有的污染变量和所述变量赋值关系图,判断所述待处理函数中是否存在新的第二污染变量,如果存在,将所述新的第二污染变量和相应的赋值关系存入所述结果图中,并将所述待处理函数重新放回所述待处理函数队列,然后执行步骤D ;否则,直接执行步骤D ;D 根据所述结果图中已有的污染变量、所述函数调用关系图和函数被调用关系图,判断是否存在由于函数调用或者被调用而产生的新的第三污染变量,如果存在,将所述新的第三污染变量和相应的赋值关系存入所述结果图中,并将发现所述新的第三污染变量的函数放入所述待处理函数队列中,然后执行步骤E ;否则,直接执行步骤E ;E 判断所述待处理函数队列是否为空队列,如果是,输出所述结果图;否则,执行所述步骤Co
2.如权利要求1所述的方法,其特征在于,所述步骤A具体包括步骤Al 将直接读取目标设备寄存器数据的函数作为污染函数存储到污染函数库中; A2 分析目标设备驱动源代码,根据所述目标设备驱动源代码中的变量和函数信息,建立变量赋值关系图、函数调用关系图和函数被调用关系图;A3 创建用于存放污染变量及相应赋值关系的结果图和用于存放待处理函数的待处理函数队列。
3.如权利要求1所述的方法,其特征在于,所述步骤D具体包括步骤Dl 根据所述结果图中已有的污染变量和所述函数调用关系图,判断是否存在第一实参变量被属于已有的污染变量的第一形参变量所污染,如果存在,将所述第一实参变量和相应的赋值关系存入所述结果图中,并将发现所述第一实参变量的函数放入所述待处理函数队列中,然后执行步骤D2 ;否则,直接执行步骤D2 ;D2 根据所述结果图中已有的污染变量和所述函数被调用关系图,判断是否存在第二形参变量被属于已有的污染变量的第二实参变量所污染,如果存在,将所述第二形参变量和相应的赋值关系存入所述结果图中,并将发现所述第二形参变量的函数放入所述待处理函数队列中,然后执行步骤E ;否则,直接执行步骤E。
4.如权利要求1所述的方法,其特征在于,所述变量赋值关系图是以变量和代码行号为节点,以赋值关系为边的有向图。
5.如权利要求1所述的方法,其特征在于,所述函数调用关系图是以函数为节点,以调用关系为边的有向图。
6.如权利要求1所述的方法,其特征在于,所述函数被调用关系图是以函数为节点,以被调用关系为边的有向图。
7.如权利要求1所述的方法,其特征在于,所述结果图是以污染变量加行号为节点,以赋值关系为边的有向图。
8.如权利要求1所述的方法,其特征在于,所述待处理函数队列按照先进先出原则管理其中的待处理函数。
全文摘要
本发明公开了一种污染变量跟踪方法,涉及设备驱动领域。所述方法包括找到第一污染变量,存入结果图中,将其所在的函数存入待处理函数队列;取出一个待处理函数,判断其中是否存在新的第二污染变量,如果是,将新的第二污染变量和相应的赋值关系存入结果图,并将待处理函数放回,执行步骤D;否则,直接执行步骤D;判断是否存在新的第三污染变量,如果是,将新的第三污染变量和相应的赋值关系存入结果图中,并将相应的函数放入待处理函数队列中,执行步骤E;否则,直接执行步骤E;判断待处理函数队列是否为空,如果是,输出结果图;否则,执行步骤C。所述方法可以提高设备驱动和硬件设备的可靠性。
文档编号G06F11/34GK102567183SQ20111040751
公开日2012年7月11日 申请日期2011年12月8日 优先权日2011年12月8日
发明者王瑀屏, 胡事民, 阎栋, 马超 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1