固件更新补丁的制作方法

文档序号:31694389发布日期:2022-10-01 02:19阅读:32来源:国知局
固件更新补丁的制作方法
固件更新补丁


背景技术:

1.计算设备的固件管理被包括在计算设备中的硬件组件的功能。例如,固件可以是基本输入/输出系统(bios)。计算设备的固件有时可能会被更新以进行更改,例如修复安全漏洞、调整硬件设置、修复固件功能中的错误、增强可靠性和可维护性特征,或者启用或禁用硬件组件。在该处执行固件更新的计算设备可以是被包括在数据中心中的服务器计算设备。


技术实现要素:

2.根据本公开的一个方面,提供了一种计算系统,该计算系统包括处理器和存储有指令的存储器,该指令在被执行时使处理器将固件更新补丁存储在存储器中包括的运行时缓冲中。运行时缓冲可以是计算系统的固件和操作系统能够访问的。该指令还可以使处理器对运行时缓冲中存储的固件更新补丁执行第一验证检查。当固件更新补丁通过第一验证检查时,指令还可以使处理器将固件更新补丁复制到存储器中包括的系统管理随机存取存储器(smram)缓冲。smram缓冲可以是固件能够访问并且操作系统无法访问的。该指令还可使处理器对smram缓冲中存储的固件更新补丁的副本执行第二验证检查。当固件更新补丁的副本通过第二验证检查时,指令还可以使处理器执行固件更新补丁的副本。
3.提供本发明内容来以简化形式介绍概念的选择,这些概念将在下面的详细描述中进一步描述。本发明内容并非旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。此外,要求保护的主题不限于解决在本公开的任何部分中指出的任何或所有缺点的实施方式。
附图说明
4.图1示意性地示出了根据一个示例实施例的在该处执行操作系统和固件的示例计算系统。
5.图2示出了根据图1的实施例的包括固件卷的示例统一可扩展框架接口(uefi)运行时补丁(urp)封装(capsule)。
6.图3示出了根据图1的实施例的可以对固件更新补丁执行的示例验证过程。
7.图4示出了根据图1的实施例的在其中检查时间-使用时间(toc-tou)攻击被阻止的示例流程图。
8.图5示出了根据图1的实施例的可以在urputil.exe命令行实用程序处执行的命令的示例流程图。
9.图6示出了根据图1的实施例的可以在处理器处执行的示例更新过程。
10.图7示出了根据图1的实施例的操作系统、bios运行时系统管理模式(smm)层和bios协议接口smm层。
11.图8示出了根据图1的实施例的示例smm驱动。
12.图9示出了根据图1的实施例的示例版本感知更新序列。
13.图10a示出了根据图1的实施例的示例urpsmmcore驱动。
14.图10b示出了根据图10的实施例的示例urpsmmhelper驱动。
15.图11示出了根据图1的实施例的可以在处理器处执行的示例激活过程。
16.图12a示出了根据图1的实施例的与计算系统一起使用的方法的流程图。
17.图12b至图12e示出了可以在一些实施例中执行的、图12a的方法的附加步骤。
18.图13示出可在其中实现图1的计算系统的示例计算环境的示意图。
具体实施方式
19.当在位于数据中心的服务器计算设备处执行固件更新时,通常希望避免与将进程转移到其他服务器计算设备相关联的服务器停机时间和开销。然而,更新计算设备的固件的现有方法通常包括重新引导服务器计算设备。此外,此类现有方法通常用bios的更新版本替换整个bios。由于bios的文件大小可能很大,因此在执行对固件的更新时重新安装bios可能会很耗时。在一些情况下,固件更新可以应用于数据中心中的每个服务器计算设备,诸如当固件更新修复主要安全漏洞时。在这种情况下,使用现有方法更新服务器计算设备的固件可能是成本高昂的过程,会显着中断服务器的可用性。
20.现有的bios更新通常只运行一次,并且不会被重放。bios供应方通常将bios的多个不同特征的更改打包到单个更新中,该单个更新在安装时替换整个bios。这些打包的bios更新也不支持版本感知,也不支持卸载或模块化更新。因此,使用现有更新技术进行的封装bios更新不利于低影响更新,在低影响更新中服务器计算设备在更新其固件的同时保持运行。
21.此外,当根据现有技术执行固件更新时,服务器计算设备的bios可能容易受到经由检查时间-使用时间(toc-tou)攻击插入的恶意代码。在toc-tou攻击中,恶意代码最初可能正在服务器计算设备的处理器的核上运行。当执行固件更新时,处理器的一个核(被称为君主(monarch)核)可以被用于服务中断,而处理器的其他核被停止。在中断期间,处理器的核在不同的时间被停止。因此,可能会出现一种竞争条件,在该竞争条件中在一个或多个其他核被停止之前,君主核开始服务于系统管理中断。在所有核已经停止之前的时间窗口内,操作系统中运行的恶意代码可能会编辑固件更新的代码。
22.toc-tou攻击也可以在固件更新期间使用附接到服务器计算设备的恶意硬件进行尝试。当使用恶意硬件进行toc-tou攻击时,恶意硬件设备可能会执行直接存储器访问(dma)传输以修改固件更新的代码,同时处理器的君主核正在为更新提供服务。
23.为了克服现有固件更新技术的上述缺点,提供了一种计算系统10,如图1的示例所示。计算系统10可以包括处理器12。处理器12可以包括多个处理器核,一个或多个处理器线程可以在这些处理器核上执行。计算系统10还可以包括存储器14,其可操作地耦合到处理器12,使得处理器12可以将数据存储在存储器14中并且从存储器14取回数据。存储器14可以包括随机存取存储器(ram)20并且还可以包括非易失性存储设备22。非易失性存储设备22可以存储被配置为由处理器12执行的指令。
24.在一些实施例中,处理器12和存储器14的功能可以跨多个可操作地耦合的计算设备来实例化。例如,计算系统10可以是可操作地耦合到数据中心中的一个或多个其他计算设备的服务器计算设备。可操作地耦合的计算设备中的每个可操作地耦合的计算设备可以
执行下面讨论的处理器12或者存储器14的一些或所有功能。
25.处理器12可以被配置为执行操作系统50,在操作系统50中可以执行一个或多个应用程序。处理器12还可以被配置为执行固件52,例如基本输入/输出系统(bios)或者统一可扩展框架接口(uefi)。如上所述,固件52可以被配置为管理计算系统10中包括的硬件设备的功能和它们之间的交互,计算系统10可以包括处理器12和/或存储器14。固件52还可以包括对可操作地耦合到计算系统10的处理器12和/或存储器14的一个或多个附加硬件设备的设置,一个或多个附加硬件设备诸如一个或多个输入设备、一个或多个输出设备、或者一个或多个网络设备。用于执行操作系统50和/或固件52的指令可以被存储在非易失性存储设备22中。
26.存储器14可以存储有指令,这些指令在被执行时使处理器12将固件更新补丁40存储在被包括在存储器14中的运行时缓冲30中。指令可以被包括在非易失性存储设备22中。运行时缓冲30可以被包括在uefi运行时存储器24中,该uefi运行时存储器可以被包括在ram 20中并且被配置为由操作系统50和固件52两者读取和/或写入。因此,运行时缓冲30可以被计算系统10的固件52和操作系统50两者访问。
27.固件更新补丁40可以包括用于修改计算系统10的固件52的多个代码指令。固件更新补丁40可以例如从另一服务器计算设备被接收。在一些实施例中,固件更新补丁40可以是uefi运行时补丁(urp)封装,该urp封装包括固件卷42、urp封装清单头44、平台公钥46和补丁签名48。固件卷42可以包括用于修改固件52的代码指令,并且可以被存储为具有预定大小的存储器块。例如,固件卷42可以具有在64kb与2mb之间的大小。urp封装清单头44可以例如被附加在固件卷42的末尾并且可以包括诸如封装类型、签名密钥长度、基本bios版本和urp封装的urp封装版本号的元数据。在该示例中,平台公钥46可以被附加在urp封装清单头44之后。补丁签名48可以是urp封装签名并且可以被附加在平台公钥46之后。在一些实施例中,补丁签名48可以由另一服务器计算设备分配给urp封装。在其他实施例中,固件卷42、urp封装清单头44、平台公钥46和/或补丁签名48可以以某种其他顺序被包括在固件更新补丁40中。附加地或备选地,固件更新补丁40中可以进一步包括其他数据。
28.图2显示了根据图1的实施例的urp固件卷100和由urp固件卷100形成的urp封装110的示例。图2所示的urp固件卷100包括固件卷头和多个.efi文件,这些多个.efi文件包括urpsmmpatch.efi、urpsmmhelperpatch.efi、smm driver l.efi和smm_driver_2.efi。除了包括在urp固件卷100中的数据之外,图2中所示的urp封装110还包括urp封装清单头44、平台公钥46和被附加在urp固件卷100末尾的urp封装签名(其可以是补丁签名48)。
29.下面提供了可用于urp封装清单头44的示例数据结构:
[0030][0031]
备选地,可以使用一些其他数据结构来定义urp封装清单头44。
[0032]
返回图1,指令还可以使处理器12对存储在运行时缓冲30中的固件更新补丁40执行第一验证检查70。处理器12可以执行第一验证检查70以确定固件更新补丁40是否被授权以对固件52进行修改。在一些实施例中,可以至少对包括在固件更新补丁40中的平台公钥46执行第一验证检查70。附加地或备选地,可以对至少固件更新补丁40的补丁签名48执行第一验证检查70。
[0033]
在一些实施例中,存储器14还存储有指令,该指令在被执行时使处理器12将固件补丁版本指示符45存储在存储器14中。固件补丁版本指示符45可以(例如,利用版本号)标识固件更新补丁40被配置为要将固件52更新到的版本。在固件更新补丁40是urp封装的实施例中,固件补丁版本指示符45可以包括在urp封装清单头44中。因此,固件补丁版本指示符45可以存储在运行时缓冲30中。在固件补丁版本指示符45存储在存储器14中的实施例中,可以进一步对固件补丁版本指示符45执行第一验证检查70。
[0034]
在作为第一验证检查70的一部分检查固件补丁版本指示符45的实施例中,处理器12可以至少部分地通过确定固件补丁版本指示符45所指示的固件版本新于当前安装的固件版本53,来确定固件更新补丁40通过了第一验证检查70。因此,通过检查固件补丁版本指示符45,处理器12可以被配置为确定固件更新补丁40是否与当前安装的固件版本53兼容。
[0035]
计算系统10的存储器14还可以包括系统管理随机存取存储器(smram)26,该系统管理随机存取存储器(smram)26被配置为由固件52而不是操作系统50来读写。smram 26可以包括smram缓冲32,固件更新指令被配置为被载入该缓冲32。smram缓冲32可以被固件52访问并且不能被计算系统10的操作系统50访问。
[0036]
在一些实施例中,第一验证检查70可以包括确定smram缓冲32的可用容量34。处理器12可以被配置为至少部分地通过确定smram缓冲32的可用容量34大于固件更新补丁40的文件大小74,来确定固件更新补丁40通过了第一验证检查70。因此,处理器12可以确定固件
更新补丁40是否适合smram缓冲32以防止smram缓冲32溢出。
[0037]
在执行第一验证检查70之后,当固件更新补丁40通过了第一验证检查70时,指令可以进一步使处理器12将固件更新补丁40复制到smram缓冲32。因此,处理器12可以被配置为生成固件更新补丁副本60。固件更新补丁副本60可以包括固件卷副本62、平台公钥副本66和补丁签名副本68。在固件更新补丁副本60是urp封装的实施例中,固件更新补丁副本60还可以包括urp封装清单头副本64,在一些实施例中,封装清单头副本64可以包括固件补丁版本指示符副本65。固件更新补丁副本60可以在固件52处生成。
[0038]
指令还可以使处理器12对存储在smram缓冲32中的固件更新补丁副本60执行第二验证检查72。当处理器12执行第二验证检查72时,处理器12可以被配置为检查在第一验证检查70期间检查的一个或多个属性,但是针对固件更新补丁副本60而不是固件更新补丁40。在一些实施例中,可以至少对平台公钥副本66执行第二验证检查72。附加地或备选地,可以至少对补丁签名副本68执行第二验证检查72。
[0039]
在固件补丁版本指示符副本65被包括在固件更新补丁副本60中的实施例中,可以至少对固件补丁版本指示符副本65执行第二验证检查72。在这样的实施例中,指令可以使处理器12至少部分地通过确定固件补丁版本指示符副本65所指示的固件版本新于当前安装的固件版本53,来确定固件更新补丁副本60通过了第二验证检查72。
[0040]
在一些实施例中,执行第二验证检查72可以包括确定smram缓冲32的可用容量34。在这样的实施例中,指令可以使处理器12至少部分地通过确定smram缓冲32的可用容量34大于固件更新补丁副本60的文件大小,来确定固件更新补丁副本60通过了第二验证检查72。
[0041]
当固件更新补丁副本60通过了第二验证检查72时,该指令还可以使处理器12执行固件更新补丁副本60。当处理器12执行固件更新补丁副本60时,固件卷副本62中包含的代码可以修改和/或替换固件52中包括的一个或多个系统管理模式(smm)驱动,如下文进一步详细描述的。在一些实施例中,固件更新补丁副本60可以在运行时smm中被执行而不重新引导计算系统10。smm可以是针对计算系统10的最高级别的管理特权。
[0042]
图3示出了根据图1的实施例的可以在处理器12处对固件更新补丁40执行的示例验证过程200。在图3的示例中,固件更新补丁40是urp封装。当处理器12在被包括在操作系统50中的命令行实用程序urputil.exe处接收到/验证(verify)命令时,可以执行图3的过程200。当处理器12接收到/verify命令时,处理器12可以进一步被配置为发送对urpdrv.sys内核模式驱动的ioctl_urp_verify请求,该urpdrv.sys内核模式驱动可以被包括在操作系统50中。urputil.exe/verify命令可以包括将urp封装文件读取到运行时缓冲30的命令。
[0043]
在urpdrv.sys内核模式驱动中,验证过程200还可以包括触发gtrt缓冲(getrtbuffer)系统管理中断(smi)。getrtbuffer smi可以被发送到固件52中包括的urpsmm核(urpsmmcore)驱动。urpsmmcore驱动可以响应getrtbuffer smi向urpdrv.sys内核模式驱动返回bios urp封装缓冲地址。bios urp封装缓冲地址可以是运行时缓冲30在uefi运行时存储器24中的位置。在接收到bios urp封装缓冲地址之后,urpdrv.sys内核模式驱动还可以被配置为将urp封装复制到bios urp封装缓冲,其在图3的示例中作为操作系统50和固件52都可访问的运行时缓冲30被使用。urpdrv.sys内核模式驱动可以进一步被配
置为触发发送到urpsmmcore驱动的urp验证(urpverify)smi。
[0044]
urpsmmcore驱动然后可以被配置为执行第一验证检查70。如图3中的示例所示,urpsmmcore驱动可以被配置为验证固件卷42和urp封装的文件大小74。urpsmmcore驱动可以进一步配置为检查smram 26的可用容量34是否足以部署urp封装。urpsmmcore驱动可以进一步配置为验证urp封装的签名密钥和签名,并且验证urp封装的封装版本新于当前安装的固件版本53。
[0045]
当urpsmmcore驱动确定urp封装通过了第一验证检查70时,urpsmmcore可以将urp封装复制到smram缓冲32。smram缓冲32可以由urpsmmcore驱动用作urp封装可以从其将urp封装安装到固件52中的暂存(staging)缓冲。将urp封装复制到smram缓冲32中可以称为暂存urp封装。在将urp封装复制到smram缓冲32之后,urpsmmcore驱动可以进一步配置为对已复制到smram缓冲32的urp封装重复作为第一验证检查70的一部分已被执行的验证步骤中的部分或全部。因此,urpsmmcore驱动可以对urp封装执行第二验证检查72。在一些实施例中,可以在执行第二验证检查72时检查包括在第一验证检查70中的每个属性。在其他实施例中,可以省略第一验证检查70的一个或多个步骤。附加地或备选地,当执行第二验证检查72时,可以添加未在第一验证检查70中执行的一个或多个附加检查。
[0046]
在执行第二验证检查72之后,urpsmmcore驱动还可以用于向urpdrv.sys内核模式驱动返回状态码(图3中示出为urpstatus)和返回消息(图3中示出为urpsmilog缓冲地址)。状态码可以指示相应smi中断的当前状态。例如,状态码可以是urp封装通过了第一验证检查70和第二验证检查72并且被成功复制到smram缓冲32的指示。如图3的示例中所示,返回消息中指示的urpsmilog缓冲地址可以是状态码所在的运行时缓冲30中的缓冲地址。urpsmilog缓冲地址还可以存储与固件更新补丁40相关的其他信息,例如固件补丁版本指示符45。urpdrv.sys内核模式驱动还可以被配置为完成ioctl_urp_verify的执行并切返回命令行实用程序urputil.exe。处理器12可以被配置为在命令行实用程序urputil.exe处输出urputil.exe/verify命令已经完成的通知。
[0047]
如图4的示例流程图210所示,执行第一验证检查70和第二验证检查72两者可以保护计算系统10免受上述类型的攻击,在这些攻击中当固件更新补丁40被复制到smram缓冲32中时恶意代码被插入。在此示例中,在步骤212处对运行时缓冲30处的urp封装进行第一验证检查70。当第一验证检查70成功时,可以在步骤214处将urp封装复制到smram。当第一验证检查70失败时,则在步骤213处可以防止安装urp封装。如果在将urp封装复制到smram时执行修改urp封装的攻击215,则在步骤216处在第二验证检查72在smram缓冲32中的urp封装的副本上执行时可以检测到对urp封装的修改。在攻击215期间所做的修改可能导致urp封装无法通过第二验证检查72。当urp封装未通过第二验证检查72,在步骤217处可以防止安装urp封装。因此,可以避免安装受损的urp封装。当urp封装通过第二验证检查72时,urp封装的安装可以在步骤218处进行。
[0048]
图5示出了可以在urputil.exe命令行实用程序处执行的命令的示例流程图300。在步骤302处,处理器12可以被配置为执行/verify命令,如上面参考图3所讨论的。在步骤304处,处理器12可以进一步被配置为执行/更新(/update)命令,如下文进一步详细讨论的。在已经执行/update命令之后,处理器12可以进一步被配置为在步骤306处执行/激活(/activate)命令。/activate命令可以使暂存smm驱动器替代固件52中包括的现有smm驱动
器。备选地,用户可以在步骤308处输入/去暂存(/unstage)命令。/unstage命令可以取消暂存的smm驱动而不改变任何现有的smm驱动。在步骤310处,处理器12还可以被配置为执行/list命令。/列表(/list)命令可以将当前暂存的smm驱动的列表和/或当前活动的smm驱动的列表输出到命令行实用程序。
[0049]
图6示出了可以在处理器12处执行的示例更新过程220。在图6的示例中,固件更新补丁40是urp封装。当处理器12在被包括在操作系统50中的命令行实用程序urputil.exe处接收到/update命令时,可以执行图6的更新过程220。当处理器12接收到/update命令时,处理器12可以进一步配置为向urpdrv.sys内核模式驱动发送ioctl_urp_update请求。ioctl_urp_update请求可以包括将urp封装文件读取到运行时缓冲30的指令。
[0050]
在urpdrv.sys内核模式驱动中,更新过程220还可以包括触发getrtbuffer smi。getrtbuffer smi可以被发送到固件52中包括的urpsmmcore驱动。urpsmmcore驱动可以响应getrtbuffer smi而向urpdrv.sys内核模式驱动返回bios urp封装缓冲地址。bios urp封装缓冲地址可以是运行时缓冲30在uefi运行时存储器24中的位置。在接收到bios urp封装缓冲地址之后,urpdrv.sys内核模式驱动还可以被配置为将urp封装复制到bios urp封装缓冲。urpdrv.sys内核模式驱动可以进一步配置为触发被发送到urpsmmcore驱动的urpupdate smi。
[0051]
在urpsmmcore驱动处,处理器12可以进一步被配置为运行urp验证序列,该urp验证序列包括在第一验证检查70和第二验证检查72中包括的一个或多个检查。在一些实施例中,被包括在第一验证检查70和第二验证检查72中的每个属性可以在执行更新过程220时被检查。在其他实施例中,可以省略第一验证检查70或第二验证检查72的一个或多个步骤。附加地或备选地,可以添加未在第一验证检查70或第二验证检查72中执行的一个或多个附加检查。在运行验证序列之后,urpsmmcore驱动可以进一步配置为循环通过固件卷42并且运行固件卷42的封装的smm.efi文件的_moduleentrypoint方法。_moduleentrypoint方法可以利用暂存的全局唯一标识符(guid)初始化efi_staged_driver_entry,如下面进一步详细描述的。_moduleentrypoint方法可以进一步配置为将暂存的guid传递给urpsmmcore驱动的stageurpdriver方法。
[0052]
在运行_moduleentrypoint方法后,urpsmmcore驱动还可以被配置为向urpdrv.sys内核模式驱动返回状态码(图6中示出为urpstatus)和返回消息(图6中示出为urpsmilog缓冲地址)。urpstatus可以是执行被更新的指示。urpsmilog缓冲地址可以是运行时缓冲30中的缓冲地址,其存储包括以下的信息:新安装的urp封装的固件补丁版本指示符45、先前安装的smm驱动版本的版本指示符或其他版本控制信息。urpdrv.sys内核模式驱动可以进一步配置为完成ioctl_urp_update的执行并且返回到命令行实用程序urputil.exe。处理器12还可被配置为在命令行实用程序处输出urputil.exe/update命令已完成的通知。
[0053]
图7更详细地示出了根据一个示例实施例的由处理器12执行的操作系统50和固件52的层。在图7的示例中,固件52包括bios运行时smm层54和bios协议接口smm层56。如上所述,操作系统80可以包括urputil.exe命令行实用程序80。在urputil.exe命令行实用程序80处,处理器12可以被配置为处理urp补丁更新命令,验证固件更新补丁40的补丁签名48,和/或查询当前安装的urp补丁。urputil.exe命令行实用程序80还可以被配置为将urp命令
82传送至urpdrv.sys内核模式驱动84。例如,urp命令82可以是图5所示的命令中的一个命令。urpdrv.sys内核模式驱动84可以被配置为代表urputil.exe命令行实用程序80向固件52提供smi传输。urpdrv.sys内核模式驱动84可以进一步被配置为向bios运行时smm层54提供smi传输缓冲。
[0054]
在bios运行时smm层54处,处理器12可以被进一步配置为执行到urpsmmcore驱动88的smi传输86。urpsmmcore驱动88可以被配置为处理从urpdrv.sys内核模式驱动84接收的/verify、/update、/activate、/unstage和/list命令。urpsmmcore驱动88可以被进一步配置为从操作系统50接收urp封装并且将urp封装复制到smram 26。此外,urpsmmcore驱动88可以被进一步配置为对urp封装执行第一验证检查70和第二验证检查72,并且执行固件卷副本62中包括的补丁映像。urpsmmcore驱动88可以被进一步配置为暂存、激活和去激活urpsmmdrivers,例如下面参考图8讨论的示例smm驱动400。
[0055]
在bios协议接口smm层56处,处理器12可以被进一步配置为执行pismmcore驱动94。pismmcore驱动94可以被配置为从urpsmmcore驱动88接收一个或多个smm调用92。pismmcore驱动94可以被进一步配置为安装或卸载smm协议接口(smmprotocolinterface),如下所述。此外,pismmcore驱动94还可以被配置为注册和注销smi处理程序(handler)、在smram 26中分配和释放位置、验证smram 26、内存映射输入/输出(mmio)和内存缓冲以及处理smi调度。
[0056]
固件更新补丁40可以是对一个或多个smm驱动的更新。图8中描绘了当被加载到smram 26中时的示例smm驱动器400。存储在smram 402中的处理程序402可以指示smram 26中存储smm驱动400的映像的位置。此外,smm驱动400可以具有指示协议接口406在smram 26中的位置的主guid 404。协议接口406可以包括一个或多个函数指针,它们分别指向一个或多个方法,例如获取驱动上下文(getdrvcontext)、获取上下文(getcontext)、获取处理程序(gethandles)、注册处理程序(registerhandles)、注销处理程序(unregisterhandles)、激活暂存(activatestaged)和去激活暂存(deactivatestaged)。在协议接口406中可以附加地或备选地包括其他方法。smm驱动400还可以包括私有数据408,例如签名、修订、校验和、m主要版本(mmajorversion)以及m最小版本(mminorversion)。其他私有数据408可以附加地或备选地包括在smm驱动400中。
[0057]
当处理器12执行如图6所示的urpupdate smi时,处理器12可以被配置为在执行_模块入口点(_moduleentrypoint)时在smm驱动400的暂存guid 412下将smm驱动400加载到smram 26。当处理器12执行urpactivate smi时,如下文进一步详细讨论的,处理器12可以被配置为利用在暂存guid 412下安装的驱动接口替换安装在主guid 404下的驱动接口。
[0058]
在一些实施例中,如图3、图6和图7所示,第一验证检查70、将固件更新补丁40复制到smram缓冲32、以及第二验证检查72可以在smm核处执行。smm核例如可以是urpsmmcore驱动88或者pismmcore驱动94。另外,smm驱动400在图8的示例中是smm核。存储器14可以进一步存储有指令,当指令被执行时,使处理器12执行smm助手(helper)90,该smm助手90被配置为将固件更新补丁副本60应用到smm核以获得更新的smm核410。如图7中的示例所示,被配置为将固件更新补丁副本60应用到smm核的smm助手90可以在bios运行时smm层54中执行。smm助手90可以被进一步被配置为暂存、激活或停用urpsmmcore驱动88。
[0059]
当固件更新补丁副本60被用于更新smm核时,smm助手90可以被配置为向存储在
smram缓冲32中的固件更新补丁副本60分配暂存guid 412。当暂存guid 412被分配给固件更新补丁副本60,smm助手90可以进一步被配置为将暂存guid 412添加到包括在urpsmmcore驱动88中的暂存驱动列表中。在将固件更新补丁副本60应用到smm核之后,smm助手90可以将主要guid 404重新分配给更新的smm核410。smm助手90可以被进一步配置为从urpsmmcore驱动88的暂存驱动列表中删除暂存guid 412。因此,通过其主要guid 404标识smm核的过程可以将更新的smm核410视为smm核的先前版本。
[0060]
现在转到图9,其示出了示例版本-感知更新序列500。在图9的示例中,将启用硬件错误记录的bios更新传输到包括位于数据中心中的多个服务器计算设备的集群。图9的示例中的bios更新包括具有固件卷的urp封装fvurp_v2.cap,该固件卷包括whealog.efi smm驱动。示例版本-感知更新序列500的第一更新阶段510包括暂存和激活whealog.efi smm驱动的步骤。在第一更新阶段510中,urpsmmcore驱动88可以被配置为执行针对whealog.efi smm驱动的_moduleentrypoint方法以便执行该更新。当第一更新阶段510被执行时,urpsmmcore驱动88还被配置为将服务器节点补丁版本更新为v2。
[0061]
在第一更新阶段510之后,服务器计算设备集群进一步接收urpsmmcmdlet.efi smm驱动,该驱动被配置为添加helloworld smm处理程序以供内部团队使用。与使用urpsmmcmdlet.efi smm驱动为新接收到的urp封装创建新的固件卷(这会增加bios代码存储库的复杂性)不同,而是可以将urpsmmcmdlet.efi smm驱动打包到与whealog.efi smm驱动相同的固件卷中。图9还示出了第二更新阶段520,其中urpsmmcmdlet.efi smm驱动被暂存和激活。在第二更新阶段520,处理器12被配置为生成包括whealog.efi smm驱动和urpsmmcmdlet.efi smm驱动的urp封装fvurp v3.cap。urpsmmcore驱动88可以被进一步被配置为执行针对whealog.efi smm驱动和urpsmmcmdlet.efi smm驱动两者的相应_moduleentrypoint方法。
[0062]
为了避免不必要地重复whealog.efi smm驱动的暂存和激活,urpsmmcore驱动88可以被配置为检查固件卷中whealog.efi smm驱动的版本号是否比已安装的whealog.efi smm驱动的版本号更加新。由于urp封装fvurp_v3.cap中包括的whealog.efi smm驱动与已安装的whealog.efi smm驱动具有相同的版本号,因此urpsmmcore驱动88不会暂存whealog.efi smm驱动。此外,针对whealog.efi smm驱动的_moduleentrypoint方法可能会返回错误通知并且释放为暂存whealog.efi smm驱动分配的内存。当执行第二更新阶段520时,urpsmmcore驱动88还被配置为将服务器节点补丁版本更新为v3。
[0063]
在示例版本-感知更新序列500的第三更新阶段530中,执行对urpsmmcmdlet.efi smm驱动的更新。在第三更新阶段530中,urpsmmcmdlet.efi smm驱动的更新版本与whealog.efi smm驱动和urpsmmcmdlet.efi smm驱动的先前版本一起被包括在urp封装中。urpsmmcore驱动88可以被配置为对urp封装中包括的每个.efi模块执行相应的_moduleentrypoint方法。如在第二更新阶段520中,whealog.efi smm驱动暂存失败,而urpsmmcmdlet.efi smm驱动成功暂存。urpsmmcmdlet.efi smm驱动后,服务器节点补丁版本更新为v4。
[0064]
图10a-10b分别示出了urpsmmcore驱动88和urpsmmhelper驱动90的示例,包括它们各自的驱动条目列表。urpsmmcore驱动88包括第一mstagedurpdriverlist 540,其指示当前在urpsmmcore驱动88上暂存的每个smm驱动和每个暂存的smm驱动的相应版本号。在图
10a的示例中,第一mstagedurpdriverlist 540包括三个暂存的smm驱程序,其各自都具有版本号1.1。在第一mstagedurpdriverlist 540中列出的暂存的smm驱动中的每个暂存的smm驱动可以是通过_moduleentrypoint方法被添加到第一mstagedurpdriverlist 540的efi暂存urp驱动条目(efi_staged_urp_driver_entry)。
[0065]
urpsmmcore驱动88还可以包括第一mactivatedurpdriverlist 542,其指示在urpsmmcore驱动88处的每个当前激活的smm驱动和那些smm驱动的相应版本号。在图10a的示例中,第一mactivatedurpdriverlist 542包括三个激活的smm驱动,其各自具有版本号1.0。
[0066]
图10b示出了被包括在urpsmmhelper驱动90中的第二mstagedurpdriverlist 550。第二mstagedurpdriverlist 550指示当前在urpsmmhelper驱动90上暂存的urpsmmcore驱动和urpsmmcore驱动的相应版本号。在图10b的示例中,第二mstagedurpdriverlist 550指示一个具有版本号1.4的urpsmmcore驱动88。urpsmmhelper驱动90还可以包括第二mactivatedurpdriverlist 552,其指示在urpsmmhelper核90处的每个当前激活的urpsmmcore驱动88,以及每个先前激活的urpsmmcore驱动88的相应版本号。在图10b的示例中,第二mactivatedurpdriverlist 552指示三个先前激活的urpsmmcore驱动88,它们具有各自的版本号1.0、1.1和1.2。
[0067]
图11示出了可以在处理器12处对固件更新补丁40执行的示例激活过程230。在图11的示例中,固件更新补丁40是urp封装。当处理器12在被包括在操作系统50中的命令行实用程序urputil.exe处接收到/activate命令时,可以执行图11的激活过程230。当接收到/activate命令时,处理器12还可以被配置为向urpdrv.sys内核模式驱动发送ioctl_urp_activate请求。在urpdrv.sys内核模式驱动处,激活过程230还可以包括触发urpactivate smi,该urpactivate smi可以被发送给urpsmmcore驱动88。
[0068]
在urpsmmcore驱动88处,响应于接收到urpactivate smi,处理器12可以进一步被配置为循环通过第一mstagedurpdriverlist 540中的每个暂存的驱动条目。对于每个暂存的驱动条目,处理器12可以被配置为针对基于暂存的驱动条目的stageddriverguid的暂存的驱动条目定位暂存驱动协议。stageddriverguid可以是针对该暂存驱动条目的暂存guid 412。
[0069]
处理器12还可以被配置为调用由purpsmmdriverstaged指针指向的暂存驱动条目的激活暂存(activatestaged)方法。activatestaged方法可以检索主驱动400的上下文数据并且将该上下文数据迁移到暂存驱动。主驱动可以是已经安装在固件52中的smm驱动400。检索上下文数据可以包括基于其主驱动dguid(primarydriverguid)定位主驱动,该主驱动可以是包括在图8所示的smm驱动400中的主guid 404。activatestaged方法然后可以卸载主驱动的协议接口406并且利用上下文数据生成新的主驱动协议接口406。处理器12还可以被配置为调用由purpsmmdriver指针指向的去激活暂存(deactivatestaged)方法。deactivatestaged方法可以去激活暂存驱动。
[0070]
处理器12还可以被配置为从第一mstagedurpdriverlist 540中移除暂存的驱动条目,并且将暂存的驱动条目添加到第一mactiveurpdriverlist 542。处理器12还可以被配置为将urp封装的urpstatus和urpsmilog缓冲地址返回给urpdrv.sys内核模式驱动。处理器12还可以被配置为完成ioctl_urp_activate的执行并且返回到urputil.exe命令行实
用程序。
[0071]
现在转到图12a,其描绘了用于与计算系统一起使用的方法600的流程图。方法600可以与图1的计算系统10或者一些其他的计算设备一起使用。在步骤602处,方法600可以包括将固件更新补丁存储在存储器中包括的运行时缓冲中。运行时缓冲可以被包括在ram中并且可以被固件和计算系统的操作系统访问。在一些实施例中,固件更新补丁可以是包括固件卷、urp封装清单头、平台公钥和补丁签名的urp封装。
[0072]
在步骤604处,方法600还可以包括对存储在运行时缓冲中的固件更新补丁执行第一验证检查。在固件更新补丁是urp封装的实施例中,可以至少对平台公钥执行第一验证检查。附加地或备选地,可以至少对补丁签名执行第一验证检查。当固件更新补丁通过第一验证检查时,方法600还可以包括,在步骤606处,将固件更新补丁复制到存储器中包括的smram缓冲。smram缓冲可以被固件访问smram缓冲,而无法被操作系统访问。
[0073]
在步骤608处,方法600还可以包括对存储在smram缓冲中的固件更新补丁的副本执行第二验证检查。在第一验证检查之后,可以执行第二验证检查以检查固件更新补丁是否已被修改(例如,在toc-tou攻击中)。在固件更新补丁是urp封装的实施例中,可以至少对被包括在固件更新补丁的副本中的平台公钥的副本执行第二验证检查。备选地,可以至少对固件更新补丁的副本中包括的补丁签名的副本执行第二验证检查。当固件更新补丁的副本通过第二验证检查时,方法600还可以包括,在步骤610处,执行固件更新补丁的副本。
[0074]
图12b示出了可以在一些实施例中执行的方法600的附加步骤。在步骤612处,方法600还可以包括将固件补丁版本指示符存储在存储器中。在固件更新补丁是urp封装的实施例中,固件补丁版本可以被包括在urp封装清单头中。在一些实施例中,可以至少对固件补丁版本指示符执行第一验证检查或第二验证检查。在固件更新补丁版本指示符在第一验证检查期间被检查的实施例中,固件更新补丁版本指示符可以存储在运行时缓冲中。在固件更新补丁版本指示符在第二验证检查期间被检查的实施例中,固件补丁版本指示符副本可以存储在smram缓冲中。确定固件更新补丁通过第一验证检查或第二验证检查可以包括,在步骤614处,确定固件补丁版本指示符所指示的固件版本新于当前安装的固件版本。因此,当固件更新补丁除了包括在相同固件卷中的新修改之外还包括对已经进行的固件的修改时,可以避免重复更新。
[0075]
图12c还示出了可以在一些实施例中执行的方法600的附加步骤。在步骤616处,方法600还可以包括确定smram缓冲的可用容量。在执行步骤616的实施例中,方法600还可包括在步骤618处确定smram缓冲的可用容量大于固件更新补丁的文件大小。步骤618可以作为第一验证检查或第二验证检查的一部分来执行。
[0076]
图12d还示出了可以在一些实施例中执行的方法600的附加步骤。图12d中所示出的步骤可以在固件更新补丁是对具有主全局唯一标识符(guid)的smm驱动的更新的实施例中执行。在这样的实施例中,如步骤604、606和608中所示的第一验证检查、将固件更新补丁复制到smram缓冲以及第二验证检查可以在smm核处执行。在步骤620处,方法600还可以包括执行被配置为将固件更新补丁的副本应用到smm核以获得更新的smm核的smm助手。步骤620可以包括,在步骤622,将升级guid分配给存储在smram缓冲中的固件更新补丁的副本。步骤620还可以包括,在步骤624处,在将固件更新补丁的副本应用到smm核之后,将主guid重新分配给更新的smm核。因此,暂存的guid可以在更新期间用作临时guid,并且主guid可
以在smm核被更新后替换暂存的guid。
[0077]
如图12e所示的,当smm核之外的smm驱动被更新时,类似于图12d的附加步骤可以作为方法600的一部分来执行。在步骤626处,方法600还可以包括执行被配置为将固件更新补丁的副本应用到smm驱动以获得更新的smm驱动的smm核。步骤626可以包括,在步骤628处,将暂存的guid分配给存储在smram缓冲中的固件更新补丁的副本。步骤626还可以包括,在步骤630处,在将固件更新补丁的副本应用到smm驱动之后,将主guid重新分配给更新的smm驱动。如在图12d中所示的步骤620,暂存的guid可以在更新期间用作临时guid,并且主guid可以在smm驱动更新后替换暂存的guid。
[0078]
使用上述系统和方法,可以在计算系统处执行不需要重新引导的低影响的固件更新。这些固件更新可以是仅替换计算系统的bios的一部分bio而不是整个bios的模块化更新。此外,上述固件更新过程可以是版本-感知的,以防止冗余或不兼容的更新。上面讨论的系统和方法还可以通过执行第一验证检查和第二验证检查来防止恶意代码在固件更新期间被插入到固件中。
[0079]
在一些实施例中,本文描述的方法和过程可以被绑定到一个或多个计算设备的计算系统。特别地,这样的方法和过程可以实现为计算机应用程序或服务、应用编程接口(api)、库和/或其他计算机程序产品。
[0080]
图13示意性地示出了计算系统700的非限制性实施例,其可以实施上述方法和过程中的一个或多个。计算系统700以简化形式示出。计算系统700可以体现为上述以及和图1所示的计算系统10。计算系统700可以采用一台或多台个人计算机、服务器计算机、平板计算机、家庭娱乐计算机、网络计算设备、游戏设备、移动计算设备、移动通信设备(例如,智能电话)和/或其他计算设备,以及可穿戴计算设备,例如智能手表和头戴式增强现实设备。
[0081]
计算系统700包括逻辑处理器702、易失性存储器704和非易失性存储设备706。计算系统700可以可选地包括显示子系统708、输入子系统710、通信子系统712和/或图13中未示出的其他组件。
[0082]
逻辑处理器702包括被配置为执行指令的一个或多个物理设备。例如,逻辑处理器可以被配置为执行作为一个或多个应用程序、程序、例程、库、对象、组件、数据结构或其他逻辑构造的一部分的指令。此类指令可以被实施以执行任务、实现数据类型、转换一个或多个组件的状态、实现技术效果或以其他方式达到期望的结果。
[0083]
逻辑处理器可以包括被配置为执行软件指令的一个或多个物理处理器(硬件)。附加地或备选地,逻辑处理器可以包括一个或多个硬件逻辑电路或固件设备,其被配置为执行硬件实现的逻辑或固件指令。逻辑处理器702的处理器可以是单核或多核,并且在其上执行的指令可以被配置用于顺序、并行和/或分布式处理。逻辑处理器的各个组件可选地可以分布在两个或更多个单独的设备之间,这些设备可以远程定位和/或配置用于协调处理。逻辑处理器的各方面可以由云计算配置中被配置的远程可访问的联网计算设备虚拟化和执行。在这种情况下,这些虚拟化方面运行在各种不同机器的不同物理逻辑处理器上,这是可以理解的。
[0084]
非易失性存储设备706包括一个或多个物理设备,这些物理设备被配置为保存由逻辑处理器可执行以实现本文所述的方法和过程的指令。当实现这样的方法和过程时,可以转换非易失性存储设备706的状态——例如,以保存不同的数据。
[0085]
非易失性存储设备706可以包括可移动和/或内置的物理设备。非易失性存储设备706可以包括光学存储器(例如cd、dvd、hd-dvd、蓝光光盘等)、半导体存储器(例如rom、eprom、eeprom、闪存等)、和/或磁存储器(例如,硬盘驱动器、软盘驱动器、磁带驱动器、mram等)或者其他大容量存储技术。非易失性存储设备706可以包括非易失性、动态、静态、读/写、只读、顺序访问、位置可寻址、文件可寻址和/或内容可寻址设备。应当理解,非易失性存储设备706被配置为即使在非易失性存储设备706的电源被切断时也保存指令。
[0086]
易失性存储器704可以包括包括随机存取存储器的物理设备。易失性存储器704通常被逻辑处理器702用于在处理软件指令期间临时存储信息。应当理解,当对易失性存储器704断电时,易失性存储器704通常不继续存储指令。
[0087]
逻辑处理器702、易失性存储器704和非易失性存储设备706的方面可以一起集成到一个或多个硬件逻辑组件中。此类硬件逻辑组件可以包括例如现场可编程门阵列(fpga)程序和应用专用集成电路(pasic/asic)、程序和应用专用标准产品)(pssp/assp)、系统上芯片(soc)和复杂可编程逻辑器件(cpld)。
[0088]
术语“模块”、“程序”和“引擎”可以被用于描述计算系统700的方面,该计算系统700通常由处理器在软件中实现,以使用易失性存储器的部分执行特定功能,该功能涉及转换处理,该转换处理特别地配置处理器以执行该功能。因此,模块、程序或引擎可以通过逻辑处理器702使用易失性存储器704的部分执行由非易失性存储设备706保存的指令来实例化。应当理解,不同的模块、程序和/或引擎可以是从相同的应用程序、服务、代码块、对象、库、例程、api、函数等实例化。同样,相同的模块、程序和/或引擎可以由不同的应用程序、服务、代码块、对象、例程、api、函数等实例化。术语“模块”、“程序”和“引擎”可以包含单个或一组可执行文件、数据文件、库、驱动、脚本、数据库记录等。
[0089]
当被包括时,显示子系统708可以被用于呈现由非易失性存储设备706保存的数据的视觉表示。视觉表示可以采用图形用户界面(gui)的形式。由于这里描述的方法和过程改变了非易失性存储设备所保存的数据,并且因此转换了非易失性存储设备的状态,所以显示子系统708的状态同样可以被转换以在视觉上表示底层数据的变化。显示子系统708可以包括使用实际上任何类型的技术的一个或多个显示设备。这样的显示设备可以与共享外壳中的逻辑处理器702、易失性存储器704和/或非易失性存储设备706组合,或者这样的显示设备可以是外围显示设备。
[0090]
当被包括时,输入子系统710可以包括一个或多个用户输入设备或者与一个或多个用户输入设备接口,一个或多个用户输入设备例如键盘、鼠标、触摸屏或游戏控制器。在一些实施例中,输入子系统可以包括选定的自然用户输入(nui)组件或者与选定的自然用户输入(nui)组件接口。这样的组件可以是集成的或外围的,并且输入动作的转换和/或处理可以在板上或板外处理。示例nui组件可以包括用于语音和/或语音识别的麦克风,用于机器视觉和/或手势识别的红外、彩色、立体和/或深度相机,用于运动检测和/或意图识别的头部跟踪器、眼球跟踪器、加速度计和/或陀螺仪,以及用于评估大脑活动的电场感应组件,和/或任何其他合适的传感器。
[0091]
当被包括时,通信子系统712可以被配置为将本文描述的各种计算设备彼此通信耦合,并且与其他设备通信耦合。通信子系统712可以包括与一种或多种不同通信协议兼容的有线和/或无线通信设备。作为非限制性示例,通信子系统可以被配置用于经由无线电话
网络或者有线或无线局域网或广域网(诸如wi-fi连接上的hdmi)进行通信。在一些实施例中,通信子系统可以允许计算系统700经由诸如互联网的网络向其他设备发送和/或接收消息。
[0092]
根据本公开的一个方面,提供了一种计算系统,该计算系统包括处理器和存储器。存储器可以存储有指令,这些指令在被执行时使处理器将固件更新补丁存储在存储器中包括的运行时缓冲中。运行时缓冲可以是计算系统的固件和操作系统能够访问的。该指令还可以使处理器对运行时缓冲中存储的固件更新补丁执行第一验证检查。当固件更新补丁通过第一验证检查时,指令还可以使处理器将固件更新补丁复制到存储器中包括的smram缓冲。smram缓冲可以是固件能够访问而操作系统无法访问的。该指令还可以使处理器对smram缓冲中存储的固件更新补丁的副本执行第二验证检查。当固件更新补丁的副本通过第二验证检查时,指令还可以使处理器执行固件更新补丁的副本。
[0093]
根据该方面,固件更新补丁可以是包括固件卷、urp封装清单标头、平台公钥和补丁签名的urp封装。
[0094]
根据该方面,第一验证检查可以至少对平台公钥执行。第二验证检查可以至少对固件更新补丁的副本中包括的平台公钥的副本执行。
[0095]
根据该方面,第一验证检查可以至少对补丁签名执行。第二验证检查可以至少对固件更新补丁的副本中包括的补丁签名的副本执行。
[0096]
根据该方面,存储器还可以存储有指令,当执行这些指令时,使处理器将固件补丁版本指示符存储在存储器中。
[0097]
根据该方面,还可以对固件补丁版本指示符进行第一验证检查。指令在被执行时可以使处理器至少部分地通过确定固件补丁版本指示符所指示的固件版本新于当前安装的固件版本,来确定固件更新补丁通过了第一验证检查。
[0098]
根据该方面,第一验证检查和第二验证检查中的至少一个验证检查可以包括确定smram缓冲的可用容量。指令在被执行时可以使处理器至少部分地通过确定smram缓冲的可用容量大于固件更新补丁的文件大小,来确定固件更新补丁通过了第一验证检查和第二验证检查中的至少一个验证检查。
[0099]
根据该方面,固件更新补丁可以是对具有主guid的smm驱动的更新。
[0100]
根据该方面,第一验证检查、将固件更新补丁复制到smram缓冲以及第二验证检查可以在smm核处被执行。存储器还可以存储有指令,该指令当被执行时,使处理器执行smm助手,该smm助手被配置为将固件更新补丁的副本应用到smm核以获得更新的smm核。
[0101]
根据该方面,smm助手可以被配置为将暂存guid分配给被存储在smram缓冲中的固件更新补丁的副本。smm助手可以进一步被配置为在将固件更新补丁的副本应用到smm核之后将主guid重新分配给更新的smm核。
[0102]
根据该方面,固件更新补丁的副本可以在运行时smm中执行,而不重新引导计算系统。
[0103]
根据本公开的另一方面,提供了一种与计算系统一起使用的方法。该方法可以包括将固件更新补丁存储存储器中包括的运行时缓冲中。运行时缓冲可以是计算系统的固件和操作系统能够访问的。该方法还可以包括对运行时缓冲中存储的固件更新补丁执行第一验证检查。当固件更新补丁通过第一验证检查时,该方法还可以包括将固件更新补丁复制
到存储器中包括的系统管理随机存取存储器(smram)缓冲。固件可以访问smram缓冲,而操作系统则无法访问。该方法还可以包括对smram缓冲中存储的固件更新补丁的副本执行第二验证检查。当固件更新补丁的副本通过第二验证检查时,该方法还可以包括执行固件更新补丁的副本。
[0104]
根据该方面,固件更新补丁可以是包括固件卷、urp封装清单标头、平台公钥和补丁签名的urp封装。
[0105]
根据该方面,可以至少对平台公钥执行第一验证检查。可以至少对包括在固件更新补丁的副本中的平台公钥的副本执行第二验证检查。
[0106]
根据该方面,可以至少对补丁签名执行第一验证检查。可以至少对包括在固件更新补丁的副本中的补丁签名的副本执行第二验证检查。
[0107]
根据该方面,该方法还可以包括将固件补丁版本指示符存储在存储器中。还可以对固件补丁版本指示符进行第一验证检查。确定固件更新补丁通过第一验证检查可以包括确定由固件补丁版本指示符指示的固件版本比当前安装的固件版本更加新。
[0108]
根据该方面,固件更新补丁可以是对具有主guid的smm驱动的更新。
[0109]
根据该方面,第一验证检查、将固件更新补丁复制到smram缓冲以及第二验证检查可以在smm核处被执行。该方法还可以包括执行被配置为将固件更新补丁的副本应用到smm核以获得更新的smm核的smm助手。
[0110]
根据该方面,执行smm助手可以包括将暂存guid分配给存储在smram缓冲中的固件更新补丁的副本。该方法还可以包括在将固件更新补丁的副本应用到smm核之后,将主guid重新分配给更新的smm核。
[0111]
根据本公开的另一方面,提供了一种计算系统,该计算系统包括处理器和存储器。存储器可以存储有指令,这些指令在被执行时使处理器将固件更新补丁存储在存储器中包括的运行时缓冲中。运行时缓冲可以是计算系统的固件和操作系统能够访问的。在具有主guid的smm核处,指令还可以使处理器将固件更新补丁复制到存储器中包括的smram缓冲。固件可以访问smram缓冲,而操作系统则无法访问smram缓冲。该指令还可以使处理器执行固件更新补丁的副本,其中执行固件更新补丁的副本包括在smm助手处将暂存guid分配给存储在smram缓冲中的固件更新补丁的副本。执行固件更新补丁的副本还可以包括将固件更新补丁的副本应用到smm核以获得更新的smm核。执行固件更新补丁的副本还可以包括将主guid重新分配给更新的smm核。
[0112]
应当理解,这里描述的配置和/或方法本质上是示例性的,并且这些特定实施例或示例不应被认为具有限制意义,因为许多变化是可能的。本文描述的特定例程或方法可以代表任意数量的处理策略中的一个或多个。这样,所示和/或描述的各种动作可以以所示和/或描述的顺序、以其他顺序、并行或省略来执行。同样,可以改变上述处理的顺序。
[0113]
本公开的主题包括本文所公开的各种过程、系统和配置以及其他特征、功能、动作和/或属性的所有新颖和非明显的组合和子组合,以及它们的任何和所有的等价物。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1