# Patent

## Title
Receiving an update module by accessing a network site

## Abstract

Fault of a particular module in an electronic device is detected. In response to detecting the fault, an update module is retrieved from a network site over a network to update the particular module, where the network stack is independent of a network stack associated with an operating system in the electronic device.

## Background
BACKGROUND
An electronic device can include various modules that include machine-readable instructions, such as a boot code (e.g. Basic Input/Output System code or Unified Extensible Firmware Interface (UEFI) code), an operating system, an application, and so forth. When a module in the electronic device exhibits a fault, the electronic device may cease to operate properly.



BRIEF DESCRIPTION OF THE DRAWINGS
Some embodiments are described with respect to the following figures:
FIG. 1 is a block diagram of an electronic device that incorporates some implementations;
FIG. 2 is a flow diagram of a module recovery process, in accordance with some implementations; and
FIG. 3 is a block diagram of an electronic device according to further implementations.



DETAILED DESCRIPTION
A module (including machine-readable instructions) in an electronic device can exhibit a fault due to various causes. In some examples, the fault can be due to corruption caused by malware (e.g. virus or other type of malicious code). A fault can also be caused by corruption in various data structures used by the module. There can be other causes of faults in a module.
Example modules in an electronic device can include any one or a combination of the following: a boot code (e.g. Basic Input/Output System (BIOS) code or Unified Extensible Firmware Interface (UEFI) code), an operating system, a device driver, an application, and so forth. Note that UEFI code is provided as a replacement for traditional BIOS code. In the ensuing discussion, reference to “BIOS code” is intended to refer to either traditional BIOS code or UEFI code. A fault in a module of the electronic device can cause malfunction of the electronic device, or may lead to reduced performance of the electronic device. For example, if the boot code or operating system of the electronic device were to crash, then the electronic device may no longer be useable, since the electronic device would not be able to start properly. As another example, if a device driver were to exhibit a fault, then access to a corresponding hardware device of the electronic device may no longer be possible. Failure of an application may lead to an inability of the user to use the application for performing desired tasks.
In response to a fault of a module, a user may attempt to update the faulty module (by either replacing the module or repairing the module) using an update module (update code) provided on a storage medium such as a hard disk drive, a Universal Serial Bus (USB) storage medium, or other removable medium. However, in cases where a storage medium that has an update module is not readily available, it can be difficult for the user to recover the faulty module.
In accordance with some implementations, rather than having to restore a faulty module using code on a storage medium, a preboot network stack of the electronic device can be used for retrieving, over a network, an update module for recovering the faulty module. The preboot network stack can be part of a management subsystem, where the preboot network stack is independent of a network stack that is associated with an operating system of the electronic device. A “network stack” can include network communication layers that allow communications over a network. A network can be a wired network, a wireless network, or a combination of wired and wireless networks.
Using the preboot network stack, retrieval of an update module can be performed in a preboot context of the electronic device. A preboot context refers to a state of the electronic device prior to completion of a boot procedure and prior to loading of an operating system. The boot procedure of an electronic device involves executing boot code (e.g. BIOS code), and loading the operating system of the electronic device. By being able to use the preboot network stack to retrieve an update module, the ability to recover a faulty module does not have to rely on proper operation of boot code or an operating system in the electronic device.
Although reference is made to a “preboot network stack,” it is noted that such network stack, which is independent of the operating system-associated network stack, can also be used to perform communication (including communication to retrieve an update module) after booting of the electronic device has completed and the operating system has been loaded. Thus, a preboot network stack refers to a network stack that is capable of operating both in the preboot context and after successful booting of the electronic device and loading of the operating system.
FIG. 1 is a block diagram of an example electronic device 100 that includes a fault manager 102, an operating system (OS) 104, and a network stack 106 that is associated with the OS 104. In the ensuing discussion, the network stack 106 is referred to as an “OS-associated network stack”. Although the network stack 106 is depicted as being outside of the OS 104, it is noted that the network stack 106 can be considered to be part of the OS 104 in some implementations.
The electronic device 100 further includes a management subsystem 108, which has another network stack 110 that is independent of the OS-associated network stack 106. This network stack 110 can be referred to as a preboot network stack as discussed above.
The management subsystem 108 is used for performing various management tasks with respect to the electronic device 100. By using the network stack 110 that is independent of the OS-associated network stack 106, the management subsystem 108 can perform its management tasks using out-of-band network connectivity. If the network connectivity associated with the OS 104 (using the OS-associated network stack 106) is considered the in-band network connectivity (in other words, this network connectivity is used for performing the normal operations of the electronic device that involve network communications), then the out-of-band network connectivity refers to a separate connectivity that can be maintained without involving the OS-associated network stack 106.
As further depicted in FIG. 1, the electronic device 100 includes a physical network interface 112, which can be a network interface card or some other type of physical network interface. Both the network stack 106 and network stack 110 can communicate through the physical network interface 112 over a network 114. Although just one physical network interface is depicted in FIG. 1, note that in alternative examples, multiple physical network interfaces can be present.
Examples of various management tasks that can be performed using the management subsystem 108 can include any one or combination of the following: transmitting information of the electronic device 100 in response to a query from a remote management server, downloading of malware signatures from the remote management server, power cycling the electronic device in response to a request from the remote management server, performing tasks to quarantine the electronic device upon detection of infection by viruses or other malware, and so forth.
In accordance with some implementations, the management subsystem 108 (and in particular the network stack 110 in the management subsystem 108) can also be used by the fault manager 102 for the purpose of obtaining an update module 118 from a remote network site 116 (which includes a server computer) for updating (or recovering) a faulty module in the electronic device 100. Updating (or recovering) a faulty module can refer to replacing or repairing the faulty module using the update module.
The fault manager 102 can detect a fault of a module (such as the OS 104 or some other module in the electronic device 100). In response to detecting the fault, the fault manager 102 can use the network stack 110 of the management subsystem 108 to access, over the network 114, the remote network site 116, for retrieving the update module 118 at the network site 116. The retrieved update module 118 can be used for recovering the faulty module in the electronic device 100.
The ability of the management subsystem 108 to perform network communications using its network stack 110 (which is independent of the OS-associated network stack 106), allows retrieval of the update module 118 over the network 114 even if the electronic device 100 cannot boot properly. In fact, the faulty module to be recovered can be the OS 104 or boot code.
The network stack 110 of the management subsystem 108 also provides greater flexibility since the network stack 110 does not have to rely upon use of a specific remote boot protocol, such as the Preboot Execution Environment (PXE) protocol. PXE communications can be restricted to communications between PXE clients and PXE servers within a secure network, such as a private network of an enterprise (e.g. business concern, educational organization, government agency, etc.).
In contrast, the network stack 110 of the management subsystem 108 supports communications in a greater variety of environments for the purpose of retrieving the update module 118 at the network site 116. The greater variety of environments can include an enterprise environment and a public environment (such as the world wide web).
The electronic device 100 further includes a processor (or multiple processors) 118, and a storage medium (or storage media) 120. The fault manager 102 and OS 104 are executable on the processor(s) 118. Although not shown, other modules in the electronic device 100 can also be executable on the processor(s) 118.
FIG. 2 is a flow diagram of a module recovery process 200 according to some implementations. The process 200 can be performed by the fault manager 102, in some examples. The process 200 detects (at 202) a fault of a particular module in the electronic device 100. In some implementations, the detection of the fault can be performed within the electronic device 100 without input from any remote server. For example, the fault manager 102 can start a timer whenever the particular module is started—failure of the particular module to complete loading and execution within a predefined time interval of the timer is an indication of fault of the particular module. In other examples, a faulty module can issue an exception or other message that is received by the fault manager 102. Using techniques according to some implementations, remote server involvement does not have to be employed for performing fault detection of the particular module.
In response to detecting the fault, the process 200 accesses (at 204) the network site 116 using network communication through the network stack 110 of the management subsystem 108, which is independent of the OS-associated network stack 106. The access of the network site 116 using the network stack 110 of the management subsystem 108 can be performed in the preboot context. In response to the access, the process 200 receives (at 206) the update module 118 from the network site 116, which can be used to update the faulty particular module. Updating the faulty particular module includes replacing the particular module and/or repairing the particular module.
FIG. 3 is a block diagram of an electronic device 100′ according to alternative implementations. Components in the electronic device 100′ that are the same as components of the electronic device 100 are assigned the same reference numerals.
The electronic device 100′ includes a management engine 302, which can be implemented as an integrated circuit controller chip, such as an application specific integrated circuit (ASIC) chip, programmable gate array (PGA) chip, microcontroller, microprocessor, and so forth. The management engine 302 is an implementation of the management subsystem 108 of FIG. 1.
An application programming interface (API) 304, or some other type of interface, is provided to allow the fault manager 102 to access services of the management engine 302. In accordance with some implementations, a service that can be accessed by the fault manager 102 using the API 304 is the out-of-band network connectivity (including the network stack 110) supported by the management engine 302, which allows the fault manager 102 to retrieve an update module (e.g. 118 in FIG. 1) from the remote network site 116 without having to rely on the OS-associated network stack 106. The API 304 includes various functions or routines that can be called by the fault manager 102 for accessing the services of the management engine 302.
In FIG. 3, the network stack 110 in the management engine 302 has a Hypertext Transfer Protocol (HTTP) layer 306, which allows the management engine 302 to perform HTTP communications over a network, such as the network 114 of FIG. 1. HTTP defines various requests and responses that can be communicated by the HTTP layer 306. The HTTP requests can be used for obtaining information (such as the update module 118 in FIG. 1) from a network entity (such as a server computer at the network site 116). In other examples, instead of using HTTP, the network stack 110 can include a component according to another protocol for managing request-response communications (or other types of communications) over a network.
The network stack 110 further includes a Transmission Control Protocol/Internet Protocol (TCP/IP) stack 308, which has a TCP layer and an IP layer. An IP layer is used to communicate IP packets that have source and destination IP addresses to allow for the packets to be routed through a network to a destination. The TCP layer provides for reliable, ordered delivery of data between network entities.
It is noted that the OS-associated network stack 106 can include similar layers as the network stack 110 in the management engine 302.
The electronic device 100′ also includes a non-volatile memory 310, such as flash memory or other type of memory. The non-volatile memory 310 can be used to store BIOS code 312 and management engine code 314. The BIOS code 312 can be considered firmware (which includes machine-readable instructions) that is executable by the processor(s) 118 of the electronic device 100′, such as to perform boot tasks. In some examples, the fault manager 102 can be part of the BIOS code 312. In other examples, the fault manager 102 is separate from the BIOS code 312.
The management engine code 314 can also be considered firmware that is executable in the management engine 302. The management engine code 314 can provide various services that are offered by the management engine 302, such as services relating to management tasks that are performed by the management engine 302. In other examples, the management engine code 314 can be embedded in a non-volatile storage medium that is part of the management engine 302.
Machine-readable instructions of various modules described above (including the fault manager 102, OS 104, application 316, BIOS code 312, and management engine code 314 of FIG. 1 or 3) are loaded for execution on a processing circuit (such as the processor(s) 118 or management engine 102 in FIG. 1 or 3).
Data and instructions are stored in respective storage devices, which are implemented as one or more computer-readable or machine-readable storage media. The storage media include different forms of memory including semiconductor memory devices such as dynamic or static random access memories (DRAMs or SRAMs), erasable and programmable read-only memories (EPROMs), electrically erasable and programmable read-only memories (EEPROMs) and flash memories; magnetic disks such as fixed, floppy and removable disks; other magnetic media including tape; optical media such as compact disks (CDs) or digital video disks (DVDs); or other types of storage devices. Note that the instructions discussed above can be provided on one computer-readable or machine-readable storage medium, or alternatively, can be provided on multiple computer-readable or machine-readable storage media distributed in a large system having possibly plural nodes. Such computer-readable or machine-readable storage medium or media is (are) considered to be part of an article (or article of manufacture). An article or article of manufacture can refer to any manufactured single component or multiple components. The storage medium or media can be located either in the machine running the machine-readable instructions, or located at a remote site from which machine-readable instructions can be downloaded over a network for execution.
In the foregoing description, numerous details are set forth to provide an understanding of the subject disclosed herein. However, implementations may be practiced without some or all of these details. Other implementations may include modifications and variations from the details discussed above. It is intended that the appended dams cover such modifications and variations.

## Claims

1. An electronic device comprising:
an operating system;
a first network stack associated with the operating system;
a management subsystem having a second network stack that is independent of the first network stack, the management subsystem to perform a management task using network communication through the second network stack;
a fault manager to:
detect fault of a particular module in the electronic device,
in response to detecting the fault, access a network site using network communication through the second network stack in a preboot context, and
in response to the access, receive an update module to update the particular module.

2. The electronic device of claim 1, wherein the fault manager is to perform the detecting of the fault without input from any remote server.

3. The electronic device of claim 1, wherein the particular module includes code of the operating system.

4. The electronic device of claim 1, wherein the particular module includes boot code.

5. The electronic device of claim 1, wherein the particular module includes application code or a device driver.

6. The electronic device of claim 1, wherein the management subsystem includes a controller chip that has the second network stack.

7. The electronic device of claim 1, wherein the second network stack has an Internet Protocol (IP) layer and Transmission Control Protocol (TCP) layer, the IP and TCP layers to perform the network communication to retrieve the update module.

8. The electronic device of claim 7, wherein the network stack further includes a Hypertext Transfer Protocol (HTTP) layer to perform the network communication to retrieve the update module.

9. The electronic device of claim 1, further comprising an application programming interface to allow the fault manager to access the second network stack.

10. The electronic device of claim 1, wherein the fault manager is part of a Basic Input/Output System (BIOS) code.

11. A method comprising:
detecting, by a fault manager in an electronic device, fault of a particular module, wherein the detecting is performed without input from any remote server; and
in response to detecting the fault, retrieve an update module for updating the particular module, using a preboot network stack that is independent of a second network stack associated with an operating system in the electronic device, wherein the update module is retrieved from a network site over a network.

12. The method of claim 11, wherein retrieving the update module using the preboot network stack comprises performing network communication over the network in a preboot context, the preboot context including a context of the electronic device prior to completion of a boot procedure of the electronic device.

13. The method of claim 11, further comprising:
updating the particular module using the update module, wherein the updating includes replacing or repairing the particular module using the update module.

14. The method of claim 11, wherein the particular module is selected from among boot code and code of an operating system.

15. An article comprising at least one machine-readable storage medium storing instructions that upon execution cause an electronic device to:
detect, by a fault manager, fault of a particular module; and
in response to detecting the fault, retrieve an update module for updating the particular module, using a network stack of a management subsystem, the network stack of the management subsystem being independent of a second network stack that is associated with an operating system in the electronic device, wherein the update module is retrieved from a network site over a network in a preboot context.