ipxe.git
5 years ago[efi] Update to current EDK2 headers
Michael Brown [Tue, 6 Oct 2015 17:44:21 +0000 (18:44 +0100)] 
[efi] Update to current EDK2 headers

Signed-off-by: Michael Brown <mcb30@ipxe.org>
5 years ago[efi] Reset root directory when installing EFI_SIMPLE_FILE_SYSTEM_PROTOCOL
Michael Brown [Tue, 6 Oct 2015 23:21:34 +0000 (00:21 +0100)] 
[efi] Reset root directory when installing EFI_SIMPLE_FILE_SYSTEM_PROTOCOL

Signed-off-by: Michael Brown <mcb30@ipxe.org>
5 years ago[http] Verify server port when reusing a pooled connection
Michael Brown [Fri, 2 Oct 2015 06:54:51 +0000 (07:54 +0100)] 
[http] Verify server port when reusing a pooled connection

Reported-by: Allen <allen@gtf.org>
Reported-by: Andreas Hammarskjöld <junior@2PintSoftware.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
5 years ago[peerdist] Avoid NULL pointer dereference for plaintext blocks
Michael Brown [Tue, 29 Sep 2015 00:24:36 +0000 (01:24 +0100)] 
[peerdist] Avoid NULL pointer dereference for plaintext blocks

Avoid accidentally dereferencing a NULL cipher context pointer for
plaintext blocks (which are usually messages with a block length of
zero, indicating a missing block).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
5 years ago[malloc] Avoid integer overflow for excessively large memory allocations
Michael Brown [Tue, 29 Sep 2015 00:07:08 +0000 (01:07 +0100)] 
[malloc] Avoid integer overflow for excessively large memory allocations

Signed-off-by: Michael Brown <mcb30@ipxe.org>
5 years ago[efi] Expose an UNDI interface alongside the existing SNP interface
Michael Brown [Sun, 27 Sep 2015 16:21:24 +0000 (17:21 +0100)] 
[efi] Expose an UNDI interface alongside the existing SNP interface

UEFI UNDI is a hideously ugly lump of poorly specified garbage bolted
on as an appendix of the UEFI specification.  My personal favourite
line from the UNDI 'specification' is section E.2.2, which states
"Basically, the rule is: Do it right, or don't do it at all".  The
author appears to believe that such exhortations are a viable
substitute for documenting what it is that the wretched reader is
supposed to, in fact, do.

(Second favourite is the section listing the pros and cons of various
driver types.  This fails to identify a single con for the mythical
"Hardware UNDI", a design so insanely intrinsically slow that it
appears to have been the inspiration for the EFI_USB_IO_PROTOCOL.)

UNDI is functionally isomorphic to the substantially less preposterous
EFI_SIMPLE_NETWORK_PROTOCOL.  Provide an UNDI interface (as a thin
wrapper around the existing SNP interface) to allow for use by
third-party software that has made poor life choices.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
5 years ago[efi] Avoid infinite loops when asked to stop non-existent devices
Michael Brown [Mon, 28 Sep 2015 01:54:53 +0000 (02:54 +0100)] 
[efi] Avoid infinite loops when asked to stop non-existent devices

Calling EDK2's OpenProtocol() with attributes BY_DRIVER|EXCLUSIVE will
call DisconnectController() in a loop to attempt to dislodge any
existing openers with attributes BY_DRIVER.  The loop will continue
indefinitely until either no such openers remain, or until
DisconnectController() returns an error.

If our driver binding protocol's Stop() method is ever called to
disconnect a device that we are not in fact driving, then return
EFI_DEVICE_ERROR rather than EFI_SUCCESS, in order to break this
potentially infinite loop.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
5 years ago[efi] Work around broken 32-bit PE executable parsing in ImageHlp.dll
Michael Brown [Fri, 25 Sep 2015 12:41:32 +0000 (13:41 +0100)] 
[efi] Work around broken 32-bit PE executable parsing in ImageHlp.dll

The Microsoft PE/COFF specification defines the MajorLinkerVersion and
MinorLinkerVersion fields as "The linker major version number" and
"The linker minor version number" respectively, and has nothing more
to say on the matter.  These fields have no significance: they do not
affect the interpretation of the remainder of the file, but merely
provide diagnostic information for interested humans to read.

Apparently, versions 2.4 and earlier of the Microsoft linker produced
binaries so incorrigibly cursed that even to attempt to parse such a
binary would risk summoning a plague of enraged spiders.  To protect
users from unwanted arachnids, ImageHlp.dll's MapAndLoad() function
will helpfully fail to map and/or load a 32-bit binary unless the
linker version field indicates version 2.5 or later.  (64-bit binaries
are exempt from such helpfulness.)

Work around the broken Microsoft ImageHlp.dll library by providing a
linker version number that will satisfy the arbitrary whims of the
MapAndLoad() function.

This mirrors wimboot commit 670c7e2 ("[efi] Work around broken 32-bit
PE executable parsing in ImageHlp.dll").

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[vmxnet3] Avoid completely filling the TX descriptor ring
Carl Henrik Lunde [Wed, 16 Sep 2015 10:10:04 +0000 (11:10 +0100)] 
[vmxnet3] Avoid completely filling the TX descriptor ring

Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[pxe] Notify BIOS via INT 1a,564e for each new network device
Michael Brown [Tue, 15 Sep 2015 12:43:35 +0000 (13:43 +0100)] 
[pxe] Notify BIOS via INT 1a,564e for each new network device

Use INT 1a,564e to notify the BIOS of each network device that we
detect.  This provides an opportunity for the BIOS to implement
platform policy such as changing the MAC address by issuing a call to
PXENV_UNDI_SET_STATION_ADDRESS.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[pxe] Invoke INT 1a,564e when PXE stack is activated
Michael Brown [Tue, 15 Sep 2015 12:20:17 +0000 (13:20 +0100)] 
[pxe] Invoke INT 1a,564e when PXE stack is activated

Invoke INT 1a,564e whenever a PXE stack is activated, passing the
address of the PXENV+ structure in %es:%bx.  This is designed to allow
a BIOS to be notified when a PXE stack has been installed, providing
an opportunity for start-of-day commands such as setting the MAC
address according to a policy chosen by the BIOS.

PXE defines INT 1a,5650 as a means of locating the PXENV+ structure:
this call returns %ax=0x564e and the address of the PXENV+ structure
in %es:%bx.  We choose INT 1a,564e as a fairly natural notification
call, using the parameters as would be returned by INT 1a,5650.

The full calling convention (documented as per section 3.1 of the PXE
specification) is:

  INT 1a,564e - PXE installation notification
  Enter:
    %ax = 0x564e
    %es = 16-bit segment address of the PXENV+ structure
    %bx = 16-bit offset of the PXENV+ structure
  Exit:
    %edx may be trashed (as is the case for INT 1a,5650)
    All other register contents must be preserved
    CF is cleared
    IF is preserved
    All other flags are undefined

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Minimise use of iPXE header files when building host utilities
Michael Brown [Mon, 14 Sep 2015 22:29:24 +0000 (23:29 +0100)] 
[efi] Minimise use of iPXE header files when building host utilities

Avoid dragging in unnecessary iPXE header files such as <ipxe/uuid.h>
and <ipxe/tables.h> when building host utilities, and ensure that
FILE_LICENCE() (present in the imported EDK2 headers) expands to a
no-op.

Reported-by: Michael Tautschnig <mt@debian.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[build] Remove dependency on libiberty
Michael Brown [Mon, 14 Sep 2015 21:49:34 +0000 (22:49 +0100)] 
[build] Remove dependency on libiberty

Commit 7d36a1b ("[build] Explicitly link efilink against -liberty")
introduced a dependency on libiberty to cope with old versions of
libbfd.  This commit dates from 2008 and seems to apply only to what
are now extremely old versions of libbfd (prior to binutils 2.12).

There are systems (such as current Debian) which do not include
libiberty within the binutils packages.  On such systems, our build
dependency on libiberty represents a pointless hurdle.

Remove the explicit dependency on libiberty, hoping that there are no
modern systems where this will cause a problem.

Suggested-by: Ben Hildred <42656e@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[ncm] Support setting MAC address
Michael Brown [Mon, 14 Sep 2015 21:45:56 +0000 (22:45 +0100)] 
[ncm] Support setting MAC address

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Expose unused USB devices via EFI_USB_IO_PROTOCOL
Michael Brown [Thu, 10 Sep 2015 16:22:03 +0000 (17:22 +0100)] 
[efi] Expose unused USB devices via EFI_USB_IO_PROTOCOL

Allow the UEFI platform firmware to provide drivers for unrecognised
devices, by exposing our own implementation of EFI_USB_IO_PROTOCOL.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[usb] Allow for wildcard USB class IDs
Michael Brown [Mon, 14 Sep 2015 16:52:25 +0000 (17:52 +0100)] 
[usb] Allow for wildcard USB class IDs

Make the class ID a property of the USB driver (rather than a property
of the USB device ID), and allow USB drivers to specify a wildcard ID
for any of the three component IDs (class, subclass, or protocol).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[usb] Select preferred USB device configuration based on driver score
Michael Brown [Mon, 14 Sep 2015 15:53:05 +0000 (16:53 +0100)] 
[usb] Select preferred USB device configuration based on driver score

Generate a score for each possible USB device configuration based on
the available driver support, and select the configuration with the
highest score.  This will allow us to prefer ECM over RNDIS (for
devices which support both) and will allow us to meaningfully select a
configuration even when we have drivers available for all functions
(e.g. when exposing unused functions via EFI_USB_IO_PROTOCOL).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Include a copy of the device path within struct efi_device
Michael Brown [Thu, 10 Sep 2015 22:23:14 +0000 (23:23 +0100)] 
[efi] Include a copy of the device path within struct efi_device

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Provide efi_devpath_len()
Michael Brown [Thu, 10 Sep 2015 22:22:43 +0000 (23:22 +0100)] 
[efi] Provide efi_devpath_len()

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[xhci] Support arbitrarily large transfers
Michael Brown [Sun, 13 Sep 2015 11:31:18 +0000 (12:31 +0100)] 
[xhci] Support arbitrarily large transfers

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[ehci] Support arbitrarily large transfers
Michael Brown [Sun, 13 Sep 2015 10:48:14 +0000 (11:48 +0100)] 
[ehci] Support arbitrarily large transfers

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[ehci] Do not treat zero-length NULL pointers as unreachable
Michael Brown [Thu, 10 Sep 2015 23:19:16 +0000 (00:19 +0100)] 
[ehci] Do not treat zero-length NULL pointers as unreachable

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[usb] Generalise zero-length packet generation logic
Michael Brown [Sat, 12 Sep 2015 23:49:56 +0000 (00:49 +0100)] 
[usb] Generalise zero-length packet generation logic

The decision on whether or not a zero-length packet needs to be
transmitted is independent of the host controller and belongs in the
USB core.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[tcpip] Avoid generating positive zero for transmitted UDP checksums
Michael Brown [Thu, 10 Sep 2015 12:19:16 +0000 (13:19 +0100)] 
[tcpip] Avoid generating positive zero for transmitted UDP checksums

TCP/IP checksum fields are one's complement values and therefore have
two possible representations of zero: positive zero (0x0000) and
negative zero (0xffff).

In RFC768, UDP over IPv4 exploits this redundancy to repurpose the
positive representation of zero (0x0000) to mean "no checksum
calculated"; checksums are optional for UDP over IPv4.

In RFC2460, checksums are made mandatory for UDP over IPv4.  The
wording of the RFC is such that the UDP header is mandated to use only
the negative representation of zero (0xffff), rather than simply
requiring the checksum to be correct but allowing for either
representation of zero to be used.

In RFC1071, an example algorithm is given for calculating the TCP/IP
checksum.  This algorithm happens to produce only the positive
representation of zero (0x0000); this is an artifact of the way that
unsigned arithmetic is used to calculate a signed one's complement
sum (and its final negation).

A common misconception has developed (exemplified in RFC1624) that
this artifact is part of the specification.  Many people have assumed
that the checksum field should never contain the negative
representation of zero (0xffff).

A sensible receiver will calculate the checksum over the whole packet
and verify that the result is zero (in whichever representation of
zero happens to be generated by the receiver's algorithm).  Such a
receiver will not care which representation of zero happens to be used
in the checksum field.

However, there are receivers in existence which will verify the
received checksum the hard way: by calculating the checksum over the
remainder of the packet and comparing the result against the checksum
field.  If the representation of zero used by the receiver's algorithm
does not match the representation of zero used by the transmitter (and
so placed in the checksum field), and if the receiver does not
explicitly allow for both representations to compare as equal, then
the receiver may reject packets with a valid checksum.

For UDP, the combined RFCs effectively mandate that we should generate
only the negative representation of zero in the checksum field.

For IP, TCP and ICMP, the RFCs do not mandate which representation of
zero should be used, but the misconceptions which have grown up around
RFC1071 and RFC1624 suggest that it would be least surprising to
generate only the positive representation of zero in the checksum
field.

Fix by ensuring that all of our checksum algorithms generate only the
positive representation of zero, and explicitly inverting this in the
case of transmitted UDP packets.

Reported-by: Wissam Shoukair <wissams@mellanox.com>
Tested-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Add a USB host controller driver based on EFI_USB_IO_PROTOCOL
Michael Brown [Fri, 4 Sep 2015 01:26:01 +0000 (02:26 +0100)] 
[efi] Add a USB host controller driver based on EFI_USB_IO_PROTOCOL

Allow iPXE to coexist with other USB device drivers, by attaching to
the EFI_USB_IO_PROTOCOL instances provided by the UEFI platform
firmware.

The EFI_USB_IO_PROTOCOL is an unsurprisingly badly designed
abstraction of a USB device.  The poor design choices intrinsic in the
UEFI specification prevent efficient operation as a network device,
with the result that devices operated using the EFI_USB_IO_PROTOCOL
operate approximately two orders of magnitude slower than devices
operated using our native EHCI or xHCI host controller drivers.

Since the performance is so abysmally slow, and since the underlying
problems are due to fundamental architectural mistakes in the UEFI
specification, support for the EFI_USB_IO_PROTOCOL host controller
driver is left as disabled by default.  Users are advised to use the
native iPXE host controller drivers instead.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Allow efidev_parent() to traverse multiple device generations
Michael Brown [Mon, 7 Sep 2015 00:25:41 +0000 (01:25 +0100)] 
[efi] Allow efidev_parent() to traverse multiple device generations

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Add USB headers and GUID definitions
Michael Brown [Thu, 3 Sep 2015 15:00:28 +0000 (16:00 +0100)] 
[efi] Add USB headers and GUID definitions

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[usb] Add function to device's function list before attempting probe
Michael Brown [Sat, 5 Sep 2015 17:29:53 +0000 (18:29 +0100)] 
[usb] Add function to device's function list before attempting probe

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[usb] Expose usb_find_driver()
Michael Brown [Sat, 5 Sep 2015 14:53:56 +0000 (15:53 +0100)] 
[usb] Expose usb_find_driver()

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Implement the EFI_PXE_BASE_CODE_PROTOCOL
Michael Brown [Tue, 1 Sep 2015 20:23:34 +0000 (21:23 +0100)] 
[efi] Implement the EFI_PXE_BASE_CODE_PROTOCOL

Many UEFI NBPs expect to find an EFI_PXE_BASE_CODE_PROTOCOL installed
in addition to the EFI_SIMPLE_NETWORK_PROTOCOL.  Most NBPs use the
EFI_PXE_BASE_CODE_PROTOCOL only to retrieve the cached DHCP packets.

This implementation has been tested with grub.efi, shim.efi,
syslinux.efi, and wdsmgfw.efi.  Some methods (such as Discover() and
Arp()) are not used by any known NBP and so have not (yet) been
implemented.

Usage notes for the tested bootstraps are:

  - grub.efi uses EFI_PXE_BASE_CODE_PROTOCOL only to retrieve the
    cached DHCP packet, and uses no other methods.

  - shim.efi uses EFI_PXE_BASE_CODE_PROTOCOL to retrieve the cached
    DHCP packet and to retrieve the next NBP via the Mtftp() method.
    If shim.efi was downloaded via HTTP (or other non-TFTP protocol)
    then shim.efi will blindly call Mtftp() with an HTTP URI as the
    filename: this allows the next NBP (e.g. grubx64.efi) to also be
    transparently retrieved by HTTP.

    shim.efi can also use the EFI_SIMPLE_FILE_SYSTEM_PROTOCOL to
    retrieve files previously loaded by "imgfetch" or similar commands
    in iPXE.  The current implementation of shim.efi will use the
    EFI_SIMPLE_FILE_SYSTEM_PROTOCOL only if it does not find an
    EFI_PXE_BASE_CODE_PROTOCOL; this patch therefore prevents this
    usage of our EFI_SIMPLE_FILE_SYSTEM_PROTOCOL.  This logic could be
    trivially reversed in shim.efi if needed.

  - syslinux.efi uses EFI_PXE_BASE_CODE_PROTOCOL only to retrieve the
    cached DHCP packet.  Versions 6.03 and earlier have a bug which
    may cause syslinux.efi to attach to the wrong NIC if there are
    multiple NICs in the system (or if the UEFI firmware supports
    IPv6).

  - wdsmgfw.efi (ab)uses EFI_PXE_BASE_CODE_PROTOCOL to retrieve the
    cached DHCP packets, and to send and retrieve UDP packets via the
    UdpWrite() and UdpRead() methods.  (This was presumably done in
    order to minimise the amount of benefit obtainable by switching to
    UEFI, by replicating all of the design mistakes present in the
    original PXE specification.)

The EFI_DOWNGRADE_UX configuration option remains available for now,
until this implementation has received more widespread testing.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[uri] Generalise tftp_uri() to pxe_uri()
Michael Brown [Wed, 26 Aug 2015 21:35:42 +0000 (22:35 +0100)] 
[uri] Generalise tftp_uri() to pxe_uri()

Merge the functionality of parse_next_server_and_filename() and
tftp_uri() into a single pxe_uri(), which takes a server address
(IPv4/IPv6/none) and a filename, and produces a URI using the rule:

 - if the filename is a hierarchical absolute URI (i.e. includes a
   scheme such as "http://" or "tftp://") then use that URI and ignore
   the server address,

 - otherwise, if the server address is recognised (according to
   sa_family) then construct a TFTP URI based on the server address,
   port, and filename

 - otherwise fail.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[pxe] Populate ciaddr in fake PXE Boot Server ACK packet
Michael Brown [Tue, 1 Sep 2015 15:52:27 +0000 (16:52 +0100)] 
[pxe] Populate ciaddr in fake PXE Boot Server ACK packet

We currently do not populate the ciaddr field in the constructed PXE
Boot Server ACK packet.  This causes a WDS server to respond with a
broadcast packet, which is then ignored by wdsmgfw.efi since it does
not match the specified IP address filter.

Fix by populating ciaddr within the constructed PXE Boot Server ACK
packet.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Do not return EFI_NOT_READY from our ReceiveFilters() method
Michael Brown [Tue, 1 Sep 2015 18:20:28 +0000 (19:20 +0100)] 
[efi] Do not return EFI_NOT_READY from our ReceiveFilters() method

Our SNP ReceiveFilters() method is a no-op, since we always (if
possible) use promiscuous mode for all network cards.  The method
currently returns EFI_NOT_READY if the SNP interfaces are claimed for
use by iPXE, as with all other SNP methods.

The WDS bootstrap wdsmgfw.efi attempts to use both the PXE Base Code
protocol and the Simple Network Protocol simultaneously.  This is
fundamentally broken, since use of the PXE Base Code protocol requires
us to disable the use of SNP (by claiming the interfaces for use by
iPXE), otherwise MnpDxe swallows all of the received packets before
our PXE Base Code's UdpRead() method is able to return them.

The root cause of this problem is that, as with BIOS PXE, the network
booting portions of the UEFI specification are less of a specification
and more of an application note sketchily describing how the original
hacked-together Intel implementation works.  No sane design would ever
have included the UdpWrite() and UdpRead() methods.

Work around these fundamental conceptual flaws by unconditionally
returning success from efi_snp_receive_filters().

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Fix order of events on SNP removal path
Michael Brown [Tue, 1 Sep 2015 20:22:39 +0000 (21:22 +0100)] 
[efi] Fix order of events on SNP removal path

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Allow calls to efi_snp_claim() and efi_snp_release() to be nested
Michael Brown [Tue, 1 Sep 2015 15:19:08 +0000 (16:19 +0100)] 
[efi] Allow calls to efi_snp_claim() and efi_snp_release() to be nested

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[tcpip] Allow supported address families to be detected at runtime
Michael Brown [Tue, 1 Sep 2015 15:18:32 +0000 (16:18 +0100)] 
[tcpip] Allow supported address families to be detected at runtime

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[build] Search for ldlinux.c32 separately from isolinux.bin
Michael Brown [Tue, 1 Sep 2015 19:58:28 +0000 (20:58 +0100)] 
[build] Search for ldlinux.c32 separately from isolinux.bin

Some distributions (observed with Ubuntu 15.04) place ldlinux.c32 in a
separate directory from isolinux.bin.  Search for these files
separately, and allow an alternative location of ldlinux.c32 to be
provided via LDLINUX_C32=... on the make command line.

Reported-by: Adrian Koshka <adriankoshcha@teknik.io>
Tested-by: Adrian Koshka <adriankoshcha@teknik.io>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Populate debug directory entry FileOffset field
Michael Brown [Tue, 1 Sep 2015 00:30:57 +0000 (01:30 +0100)] 
[efi] Populate debug directory entry FileOffset field

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Fix debug directory size
Michael Brown [Tue, 1 Sep 2015 00:29:23 +0000 (01:29 +0100)] 
[efi] Fix debug directory size

The debug directory size specified in the data directory should cover
only the EFI_IMAGE_DEBUG_DIRECTORY_ENTRY structure, not the whole of
the .debug section.

Reported-by: Andreas Hammarskjöld <junior@2PintSoftware.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Add definitions of GUIDs observed when booting wdsmgfw.efi
Michael Brown [Sun, 30 Aug 2015 17:42:03 +0000 (18:42 +0100)] 
[efi] Add definitions of GUIDs observed when booting wdsmgfw.efi

Add definitions of protocols observed to be used by wdsmgfw.efi, and
add a handle name type for ConIn, ConOut, and StdErr.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[pxe] Construct all fake DHCP packets before starting PXE NBP
Michael Brown [Sat, 29 Aug 2015 15:49:54 +0000 (16:49 +0100)] 
[pxe] Construct all fake DHCP packets before starting PXE NBP

Commit edf74df ("[pxe] Always reconstruct packet for
PXENV_GET_CACHED_INFO") fixed the problems caused by returning stale
DHCP packets (e.g. from an earlier boot attempt using a different
network device), but broke interoperability with NBPs such as WDS
which may overwrite our cached (fake) DHCP packets and expect the
modified packets to be returned by a subsequent call to
PXENV_GET_CACHED_INFO.

Fix by constructing the fake DHCP packets immediately before
transferring control to a PXE NBP.  Calls to PXENV_GET_CACHED_INFO
will now never modify the cached packets.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Improve efi_wrap debugging
Michael Brown [Thu, 27 Aug 2015 09:36:52 +0000 (10:36 +0100)] 
[efi] Improve efi_wrap debugging

Add debug wrappers for more boot services functions, and print
symbolic values rather than raw numbers where possible.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Include installed protocol list in unknown handle names
Michael Brown [Thu, 27 Aug 2015 14:37:46 +0000 (15:37 +0100)] 
[efi] Include installed protocol list in unknown handle names

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Remove raw EFI_HANDLE values from debug messages
Michael Brown [Thu, 27 Aug 2015 09:08:00 +0000 (10:08 +0100)] 
[efi] Remove raw EFI_HANDLE values from debug messages

The raw EFI_HANDLE value is almost never useful to know, and simply
adds noise to the already verbose debug messages.  Improve the
legibility of debug messages by using only the name generated by
efi_handle_name().

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Mark EFI debug transcription functions as __attribute__ (( pure ))
Michael Brown [Thu, 27 Aug 2015 00:40:40 +0000 (01:40 +0100)] 
[efi] Mark EFI debug transcription functions as __attribute__ (( pure ))

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Add definitions of GUIDs observed when booting shim.efi and grub.efi
Michael Brown [Thu, 27 Aug 2015 00:28:37 +0000 (01:28 +0100)] 
[efi] Add definitions of GUIDs observed when booting shim.efi and grub.efi

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[dhcp] Do not skip ProxyDHCPREQUEST if next-server is empty
Michael Brown [Wed, 26 Aug 2015 15:02:46 +0000 (16:02 +0100)] 
[dhcp] Do not skip ProxyDHCPREQUEST if next-server is empty

We attempt to mimic the behaviour of Intel's PXE ROM by skipping the
separate ProxyDHCPREQUEST if the ProxyDHCPOFFER already contains a
boot filename or a PXE boot menu.

Experimentation reveals that Intel's PXE ROM will also check for a
non-empty next-server address alongside the boot filename.  Update our
test to match this behaviour.

Reported-by: Wissam Shoukair <wissams@mellanox.com>
Tested-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[settings] Re-add "uristring" setting type
Michael Brown [Tue, 25 Aug 2015 11:33:40 +0000 (12:33 +0100)] 
[settings] Re-add "uristring" setting type

Commit 09b057c ("[settings] Remove "uristring" setting type") removed
support for URI-encoded settings via the "uristring" setting type, on
the basis that such encoding was no longer necessary to avoid problems
with the command line parser.

Other valid use cases for the "uristring" setting type do exist: for
example, a password containing a '/' character expanded via

  chain http://username:${password:uristring}@server.name/boot.php

Restore the existence of the "uristring" setting, avoiding the
potentially large stack allocations that were used in the old code
prior to commit 09b057c ("[settings] Remove "uristring" setting
type").

Requested-by: Robin Smidsrød <robin@smidsrod.no>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[autoboot] Display image information as part of the default control flow
Michael Brown [Fri, 21 Aug 2015 15:28:33 +0000 (16:28 +0100)] 
[autoboot] Display image information as part of the default control flow

When booting without an embedded script, display the imgstat()
information immediately before executing the downloaded image.  This
allows potentially useful diagnostic information (such as the detected
image type) to be observed by the user without needing to enter the
iPXE shell and manually download the image.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[image] Detect image type when image is first registered
Michael Brown [Fri, 21 Aug 2015 15:15:24 +0000 (16:15 +0100)] 
[image] Detect image type when image is first registered

The current usage pattern of image_probe() is a legacy from the time
before commit 34b6ecb ("[image] Simplify image management") when
loading an image to its executable location in memory was a separate
action from actually executing the image.

Call image_probe() as soon as an image is registered.  This allows
"imgstat" to display image type information for all images and allows
image-consuming code to assume that image->type is already set
correctly.

Ignore failures if image_probe() does not recognise the image, since
we do expect to handle unrecognised images (initrds, modules, etc).
Unrecognised images will be left with a NULL image->type, which
image-consuming code can easily check.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[test] Allow self-tests to report exit status when running under Linux
Michael Brown [Fri, 21 Aug 2015 14:41:35 +0000 (15:41 +0100)] 
[test] Allow self-tests to report exit status when running under Linux

Allow the return status from an embedded image to propagate out to the
eventual return status from main().  When running under Linux, this
allows the pass/fail result of unit tests to be observable without
having to visually inspect the console output.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[pxe] Warn about PXE NBPs that may be EFI executables
Michael Brown [Fri, 21 Aug 2015 14:04:31 +0000 (15:04 +0100)] 
[pxe] Warn about PXE NBPs that may be EFI executables

A relatively common user mistake is to attempt to boot an EFI
executable (such as grub.efi) using a BIOS version of iPXE.

Unfortunately there are no signature checks that we can use to
unambiguously identify a PXE NBP, since a PXE NBP is just raw machine
code.  We therefore have to accept anything sufficiently small to fit
into base memory as a valid PXE NBP.

We can detect that a file might be an EFI executable by checking for
the initial "MZ" signature bytes.  This does not necessarily preclude
the file from also being a PXE NBP (since it would be possible to
create a hybrid binary which acts as both an EFI executable and a PXE
NBP, similar to the way in which wimboot and the Linux kernel are
hybrid binaries which act as both an EFI executable and a bzImage).

If the initial "MZ" signature bytes are present, then attempt to warn
the user by setting the image type to "PXE-NBP (may be EFI?)".  We
can't (sensibly) prevent the user from accidentally running an EFI
executable as a PXE NBP, but we can at least make it easier for the
user to identify their mistake.

Inspired-by: Robin Smidsrød <robin@smidsrod.no>
Inspired-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[dhcp] Ignore ProxyDHCPACKs without PXE options
Michael Brown [Tue, 18 Aug 2015 16:18:38 +0000 (17:18 +0100)] 
[dhcp] Ignore ProxyDHCPACKs without PXE options

Suggested-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[dhcp] Allow pseudo-DHCP servers to use pseudo-identifiers
Michael Brown [Tue, 18 Aug 2015 14:43:06 +0000 (15:43 +0100)] 
[dhcp] Allow pseudo-DHCP servers to use pseudo-identifiers

Some ProxyDHCP servers and PXE boot servers do not specify a DHCP
server identifier via option 54.  We currently work around this in a
variety of ad-hoc ways:

 - if a ProxyDHCPACK has no server identifier then we treat it as
   having the correct server identifier,

 - if a boot server ACK has no server identifier then we use the
   packet's source IP address as the server identifier.

Introduce the concept of a DHCP server pseudo-identifier, defined as
being:

 - the server identifier (option 54), or

 - if there is no server identifier, then the next-server address
   (siaddr),

 - if there is no server identifier or next-server address, then the
   DHCP packet's source IP address.

Use the pseudo-identifier in place of the server identifier when
handling ProxyDHCP and PXE boot server responses.

Originally-fixed-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Work around bugs in Emulex NII driver
Fabrice Bacchella [Thu, 13 Aug 2015 10:44:21 +0000 (12:44 +0200)] 
[efi] Work around bugs in Emulex NII driver

Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Improve NII driver logging
Fabrice Bacchella [Wed, 12 Aug 2015 10:17:04 +0000 (12:17 +0200)] 
[efi] Improve NII driver logging

Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[ipoib] Fix a race when chain-loading undionly.kpxe in IPoIB
Wissam Shoukair [Wed, 12 Aug 2015 09:28:58 +0000 (12:28 +0300)] 
[ipoib] Fix a race when chain-loading undionly.kpxe in IPoIB

The Infiniband link status change callback ipoib_link_state_changed()
may be called while the IPoIB device is closed, in which case there
will not be an IPoIB queue pair to be joined to the IPv4 broadcast
group.  This leads to NULL pointer dereferences in ib_mcast_attach()
and ib_mcast_detach().

Fix by not attempting to join (or leave) the broadcast group unless we
actually have an IPoIB queue pair.

Signed-off-by: Wissam Shoukair <wissams@mellanox.com>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[peerdist] Add support for PeerDist (aka BranchCache) HTTP content encoding
Michael Brown [Mon, 17 Aug 2015 12:16:45 +0000 (13:16 +0100)] 
[peerdist] Add support for PeerDist (aka BranchCache) HTTP content encoding

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[peerdist] Add block download multiplexer
Michael Brown [Mon, 17 Aug 2015 12:16:40 +0000 (13:16 +0100)] 
[peerdist] Add block download multiplexer

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[peerdist] Add individual block download mechanism
Michael Brown [Mon, 17 Aug 2015 12:16:37 +0000 (13:16 +0100)] 
[peerdist] Add individual block download mechanism

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[peerdist] Add segment discovery mechanism
Michael Brown [Mon, 17 Aug 2015 12:16:33 +0000 (13:16 +0100)] 
[peerdist] Add segment discovery mechanism

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[http] Rewrite HTTP core to support content encodings
Michael Brown [Mon, 17 Aug 2015 12:16:26 +0000 (13:16 +0100)] 
[http] Rewrite HTTP core to support content encodings

Rewrite the HTTP core to allow for the addition of arbitrary content
encoding mechanisms, such as PeerDist and gzip.

The core now exposes http_open() which can be used to create requests
with an explicitly selected HTTP method, an optional requested content
range, and an optional request body.  A simple wrapper provides the
preexisting behaviour of creating either a GET request or an
application/x-www-form-urlencoded POST request (if the URI includes
parameters).

The HTTP SAN interface is now implemented using the generic block
device translator.  Individual blocks are requested using http_open()
to create a range request.

Server connections are now managed via a connection pool; this allows
for multiple requests to the same server (e.g. for SAN blocks) to be
completely unaware of each other.  Repeated HTTPS connections to the
same server can reuse a pooled connection, avoiding the per-connection
overhead of establishing a TLS session (which can take several seconds
if using a client certificate).

Support for HTTP SAN booting and for the Basic and Digest
authentication schemes is now optional and can be controlled via the
SANBOOT_PROTO_HTTP, HTTP_AUTH_BASIC, and HTTP_AUTH_DIGEST build
configuration options in config/general.h.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[block] Add generic block device translator
Michael Brown [Tue, 4 Aug 2015 14:33:11 +0000 (15:33 +0100)] 
[block] Add generic block device translator

Add a generic mechanism for providing block devices on top of a data
transfer interface (such as HTTP).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[prefix] Use correct register for KEEP_IT_REAL physical address conversion
Daniel Pieczko [Wed, 12 Aug 2015 10:45:58 +0000 (11:45 +0100)] 
[prefix] Use correct register for KEEP_IT_REAL physical address conversion

Signed-off-by: Daniel Pieczko <dpieczko@solarflare.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Add missing "ULL" suffix on 64-bit constant
Michael Brown [Mon, 3 Aug 2015 12:05:21 +0000 (13:05 +0100)] 
[efi] Add missing "ULL" suffix on 64-bit constant

Older versions of gcc complain if this suffix is missing.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[efi] Hold off watchdog timer while running
Michael Brown [Mon, 3 Aug 2015 11:39:05 +0000 (12:39 +0100)] 
[efi] Hold off watchdog timer while running

UEFI platforms may provide a watchdog timer, which will reboot the
machine if an operating system takes more than five minutes to load.
This can cause long-lived iPXE downloads (or interactive shell
sessions) to unexpectedly reboot.

Fix by resetting the watchdog timer every ten seconds while the iPXE
main processing loop continues to run.

Reported-by: Bradley B Williams <bradleybwilliams@swbell.net>
Reported-by: John Clark <john.r.clark.3@gmail.com>
Reported-by: wdriever@gmail.com
Reported-by: Charlie Beima <cbeima@indiana.edu>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[crypto] Support SHA-{224,384,512} in X.509 certificates
Michael Brown [Sun, 2 Aug 2015 15:54:24 +0000 (16:54 +0100)] 
[crypto] Support SHA-{224,384,512} in X.509 certificates

Add support for SHA-224, SHA-384, and SHA-512 as digest algorithms in
X.509 certificates, and allow the choice of public-key, cipher, and
digest algorithms to be configured at build time via config/crypto.h.

Originally-implemented-by: Tufan Karadere <tufank@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[crypto] Add ASN.1 OIDs for sha{224,384,512}WithRsaEncryption
Tufan Karadere [Sun, 2 Aug 2015 15:38:19 +0000 (16:38 +0100)] 
[crypto] Add ASN.1 OIDs for sha{224,384,512}WithRsaEncryption

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[tls] Report supported signature algorithms in ClientHello
Michael Brown [Sun, 2 Aug 2015 13:08:38 +0000 (14:08 +0100)] 
[tls] Report supported signature algorithms in ClientHello

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[tls] Do not access beyond the end of a 24-bit integer
Michael Brown [Fri, 31 Jul 2015 22:47:50 +0000 (23:47 +0100)] 
[tls] Do not access beyond the end of a 24-bit integer

The current implementation handles big-endian 24-bit integers (which
occur in several TLS record types) by treating them as big-endian
32-bit integers which are shifted by 8 bits.  This can result in
"Invalid read" errors when running under valgrind, if the 24-bit field
happens to be exactly at the end of an I/O buffer.

Fix by ensuring that we touch only the three bytes which comprise the
24-bit integer.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[serial] Check for UART existence in uart_select()
Michael Brown [Fri, 31 Jul 2015 10:19:19 +0000 (11:19 +0100)] 
[serial] Check for UART existence in uart_select()

Check for existence of the UART in uart_select(), not just in
uart_init().  This allows uart_select() to refuse to set a non-working
address in uart->base, which in turns means that the serial console
code will not attempt to use a non-existent UART.

Reported-by: Torgeir Wulfsberg <Torgeir.Wulfsberg@kongsberg.com>
Reported-by: Ján ONDREJ (SAL) <ondrejj@salstar.sk>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[comboot] Avoid dragging in serial console support unconditionally
Michael Brown [Fri, 31 Jul 2015 09:46:15 +0000 (10:46 +0100)] 
[comboot] Avoid dragging in serial console support unconditionally

When the ability for iPXE to handle multiple serial ports was added,
the choice was made that the singular serial port referred to by
COMBOOT calls should mean the port used for the serial console.  This
unintentionally caused IMAGE_COMBOOT to also enable CONSOLE_SERIAL.

Fix by providing a weak-symbol version of the serial console which
will be used if serial console support was not explicitly enabled.

Reported-by: Torgeir Wulfsberg <Torgeir.Wulfsberg@kongsberg.com>
Reported-by: Ján ONDREJ (SAL) <ondrejj@salstar.sk>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[elf] Reject ELFBoot images requiring virtual addressing
Michael Brown [Wed, 29 Jul 2015 13:09:34 +0000 (14:09 +0100)] 
[elf] Reject ELFBoot images requiring virtual addressing

We do not set up any kind of virtual addressing before invoking an
ELFBoot image.  Reject if the image's program headers indicate that
virtual addresses are not equal to physical addresses.

This avoids problems when loading some RHEL5 kernels, which seem to
include ELFBoot headers using virtual addressing.  With this change,
these kernels are no longer detected as ELFBoot, and so may be
(correctly) detected as bzImage instead.

Reported-by: Torgeir.Wulfsberg@kongsberg.com
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[linebuf] Support buffering of multiple lines
Michael Brown [Tue, 28 Jul 2015 15:59:11 +0000 (16:59 +0100)] 
[linebuf] Support buffering of multiple lines

Allow line buffer to accumulate multiple lines, with buffered_line()
returning each freshly-completed line as it is encountered.  This
allows buffered lines to be subsequently processed as a group.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[pool] Add a generic concept of a pooled connection
Michael Brown [Tue, 28 Jul 2015 15:23:28 +0000 (16:23 +0100)] 
[pool] Add a generic concept of a pooled connection

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[peerdist] Add support for constructing and decoding retrieval messages
Michael Brown [Tue, 28 Jul 2015 14:59:43 +0000 (15:59 +0100)] 
[peerdist] Add support for constructing and decoding retrieval messages

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[peerdist] Add support for constructing and decoding discovery messages
Michael Brown [Tue, 28 Jul 2015 14:56:23 +0000 (15:56 +0100)] 
[peerdist] Add support for constructing and decoding discovery messages

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[peerdist] Include trimmed range within content information block
Michael Brown [Mon, 20 Jul 2015 17:17:53 +0000 (18:17 +0100)] 
[peerdist] Include trimmed range within content information block

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[netdevice] Allow network devices to disclaim IRQ support at runtime
Michael Brown [Tue, 28 Jul 2015 14:05:44 +0000 (15:05 +0100)] 
[netdevice] Allow network devices to disclaim IRQ support at runtime

VLAN and 802.11 devices use a network device operations structure that
wraps an underlying structure.  For example, the vlan_operations
structure wraps the network device operations structure of the
underlying trunk device.  This can cause false positives from the
current implementation of netdev_irq_supported(), which will always
report that VLAN devices support interrupts since it has no visibility
into the support provided by the underlying trunk device.

Fix by allowing network devices to explicitly flag that interrupts are
not supported, despite the presence of an irq() method.

Originally-fixed-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[iscsi] Add missing "break" statements
Michael Brown [Tue, 28 Jul 2015 13:11:35 +0000 (14:11 +0100)] 
[iscsi] Add missing "break" statements

iscsi_tx_done() is missing "break" statements at the end of each case.
(Fortunately, this happens not to cause a bug in practice, since
iscsi_login_request_done() is effectively a no-op when completing a
data-out PDU.)

Reported-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[ipv4] Allow IPv4 socket addresses to include a scope ID
Michael Brown [Tue, 21 Jul 2015 13:54:11 +0000 (14:54 +0100)] 
[ipv4] Allow IPv4 socket addresses to include a scope ID

Extend the IPv6 concept of "scope ID" (indicating the network device
index) to IPv4 socket addresses, so that IPv4 multicast transmissions
may specify the transmitting network device.

The scope ID is not (currently) exposed via the string representation
of the socket address, since IPv4 does not use the IPv6 concept of
link-local addresses (which could legitimately be specified in a URI).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[ipv4] Redefine IP address constants to avoid unnecessary byte swapping
Michael Brown [Tue, 21 Jul 2015 14:26:52 +0000 (15:26 +0100)] 
[ipv4] Redefine IP address constants to avoid unnecessary byte swapping

Redefine various IPv4 address constants and testing macros to avoid
unnecessary byte swapping at runtime, and slightly rename the macros
to prevent code from accidentally using the old definitions.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[netdevice] Avoid using zero as a network device index
Michael Brown [Tue, 21 Jul 2015 13:51:16 +0000 (14:51 +0100)] 
[netdevice] Avoid using zero as a network device index

Avoid using zero as a network device index, so that a zero
sin6_scope_id can be used to mean "unspecified" (rather than
unintentionally meaning "net0").

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[ipv6] Treat a missing network device name as "netX"
Michael Brown [Tue, 28 Jul 2015 12:00:15 +0000 (13:00 +0100)] 
[ipv6] Treat a missing network device name as "netX"

When an IPv6 socket address string specifies a link-local or multicast
address but does not specify the requisite network device name
(e.g. "fe80::69ff:fe50:5845" rather than "fe80::69ff:fe50:5845%net0"),
assume the use of "netX".

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[build] Fix strict-aliasing warning on older gcc versions
Michael Brown [Mon, 27 Jul 2015 22:28:01 +0000 (23:28 +0100)] 
[build] Fix strict-aliasing warning on older gcc versions

Reported-by: James A. Peltier <jpeltier@sfu.ca>
Reported-by: Matthew Helton <mwhelton@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[crypto] Remove AXTLS headers
Michael Brown [Mon, 27 Jul 2015 14:06:20 +0000 (15:06 +0100)] 
[crypto] Remove AXTLS headers

Remove AXTLS headers now that no AXTLS code remains, with many thanks
to the AXTLS project for use of their cryptography code over the past
several years.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[test] Add NIST self-tests for AES192 in ECB and CBC modes
Michael Brown [Sat, 25 Jul 2015 13:54:57 +0000 (14:54 +0100)] 
[test] Add NIST self-tests for AES192 in ECB and CBC modes

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[crypto] Replace AES implementation
Michael Brown [Fri, 24 Jul 2015 23:16:32 +0000 (00:16 +0100)] 
[crypto] Replace AES implementation

Replace the AES implementation from AXTLS with a dedicated iPXE
implementation which is slightly smaller and around 1000% faster.
This implementation has been verified using the existing self-tests
based on the NIST AES test vectors.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[test] Add NIST self-tests for AES128 and AES256 in ECB mode
Michael Brown [Mon, 27 Jul 2015 13:53:32 +0000 (14:53 +0100)] 
[test] Add NIST self-tests for AES128 and AES256 in ECB mode

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[test] Define shortcuts for frequently-used NIST AES test vectors
Michael Brown [Mon, 27 Jul 2015 13:24:55 +0000 (14:24 +0100)] 
[test] Define shortcuts for frequently-used NIST AES test vectors

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[test] Generalise cipher tests and use okx()
Michael Brown [Mon, 27 Jul 2015 13:00:57 +0000 (14:00 +0100)] 
[test] Generalise cipher tests and use okx()

Generalise the existing support for performing CBC-mode block cipher
tests, and update the code to use okx() for neater reporting of test
results.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[crypto] Add ECB block cipher mode (for debug and self-tests only)
Michael Brown [Mon, 27 Jul 2015 01:48:49 +0000 (02:48 +0100)] 
[crypto] Add ECB block cipher mode (for debug and self-tests only)

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[802.11] Use correct SHA1_DIGEST_SIZE constant name
Michael Brown [Sat, 25 Jul 2015 13:42:06 +0000 (14:42 +0100)] 
[802.11] Use correct SHA1_DIGEST_SIZE constant name

The constant SHA1_SIZE is defined only as part of the imported AXTLS code.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[crypto] Add bit-rotation functions for 8-bit and 16-bit values
Michael Brown [Sat, 25 Jul 2015 13:41:30 +0000 (14:41 +0100)] 
[crypto] Add bit-rotation functions for 8-bit and 16-bit values

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[build] Fix compiler warnings on some gcc versions
Michael Brown [Mon, 27 Jul 2015 14:15:12 +0000 (15:15 +0100)] 
[build] Fix compiler warnings on some gcc versions

xfer_buffer() uses intf_get_dest_op() to obtain the destination
interface for xfer_deliver(), in order to check that this is the same
interface which provides xfer_buffer().  The return value from
intf_get_dest_op() (which contains the actual method implementing
xfer_deliver()) is not used.

On some gcc versions, this triggers a "value computed is not used"
warning, since the explicit type cast included within the
intf_get_dest_op() macro is treated as a "value computed".

Fix by explicitly casting the result of intf_get_dest_op() to void.

Reported-by: Matthew Helton <mwhelton@gmail.com>
Reported-by: James A. Peltier <jpeltier@sfu.ca>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[downloader] Provide direct access to the underlying data transfer buffer
Michael Brown [Mon, 20 Jul 2015 11:17:13 +0000 (12:17 +0100)] 
[downloader] Provide direct access to the underlying data transfer buffer

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[downloader] Use generic data-transfer buffer mechanism
Michael Brown [Wed, 15 Jul 2015 12:55:56 +0000 (13:55 +0100)] 
[downloader] Use generic data-transfer buffer mechanism

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[xferbuf] Add xfer_buffer() to provide direct access to underlying buffer
Michael Brown [Mon, 20 Jul 2015 11:15:21 +0000 (12:15 +0100)] 
[xferbuf] Add xfer_buffer() to provide direct access to underlying buffer

Allow data transfer buffer users to provide direct access to their
underlying data transfer buffer.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[xferbuf] Generalise to handle umalloc()-based buffers
Michael Brown [Wed, 15 Jul 2015 12:43:58 +0000 (13:43 +0100)] 
[xferbuf] Generalise to handle umalloc()-based buffers

Signed-off-by: Michael Brown <mcb30@ipxe.org>
6 years ago[xfer] Add xfer_check_order() utility function
Michael Brown [Mon, 20 Jul 2015 16:53:30 +0000 (17:53 +0100)] 
[xfer] Add xfer_check_order() utility function

Signed-off-by: Michael Brown <mcb30@ipxe.org>