Canoeboot 26.11 “Carnivorous Olive” released! With full UEFI support.

Leah Rowe

2 November 2026


Return to index

Article published by: Leah Rowe

Date of publication: 2 November 2026

You can find today’s release in https://rsync.libreboot.org/canoeboot/26.11rev4/ or you can use one of the mirrors.

Canoeboot is free, open source boot firmware replacing proprietary BIOS/UEFI firmware on supported Intel/AMD and ARM64 hardware. It initialises the hardware inside your computer such as the CPU or memory controller, configuring the machine in such a way as to enable use of an operating system like Linux or BSD at boot - and now Microsoft Windows is also compatible because Canoeboot has added full UEFI support via MrChromebox EDK2 payload. Canoeboot offers greater security and customisation compared to proprietary firmware; its goal, plainly, is to rid the world of proprietary software and to do that, we therefore try to provide firmware that is extremely easy for non-technical users to understand.

Today’s release changelog is relative to the previous Canoeboot 26.01 release.

First thing’s first. (and yes, you read the previous paragraph correctly)

A strongly anti-AI policy was added to a new file: AGENTS.md in cbmk. This is the most important change in the release. Now everything else:

Intel/AMD Chromebooks

These were not added, unlike in the corresponding Libreboot 26.10 release. It’s possible that we can have from Intel SandyBridge, IvyBridge all the way up to Haswell in a future release, as native raminit and video initialisation is available on these boards; the EC firmware could be built from source quite easily. Work will be done on this, alongside Libreboot development.

NOTE: The EDK2 payload was added in this release, for Intel/AMD boards in Canoeboot that are able to use it.

15h.org fork for Fam15h

E.g. KGPE-D16. We use the coreboot fork from 15h.org now, on AMD Fam15h mainboards. This uses AMD AGESA source code instead of Timothy’s custom init code. It has much more reliable raminit and CPU initialisation; more RAM also supported. Many bugs are fixed. IOMMU works, I also saw that they mentioned TPM is fixed in their version, now our version also.

Regular binaries with SeaBIOS and GRUB payloads provided, with GRUB provided via SeaGRUB configuration.

Basically, these boards actually work for the first time.

EDK2 UEFI where possible

The following boards now have an EDK2 UEFI payload available:

There targets have EDK2 available, but unlike Libreboot they do not have an EFI GRUB build, so only Coreboot GRUB (seagrub roms) are available, due to lower BIOS region size in these targets compared to Libreboot:

These targets, as seen below, do have EDK2 support in Libreboot but not in Canoeboot because Canoeboot’s design uses the vendor’s specified BIOS region size which is smaller and insufficient for EDK2:

Other targets (e.g. ThinkPad X60, T60, D945GCL5, MacBook1,1, 2,1) are either 32-bit-only or have insufficient flash capacity for EDK2. NOTE: Even where EDK2 is available, the legacy SeaBIOS/GRUB setups are also still available, but UEFI will be Canoeboot’s preferred payload (via EDK2) in this and future releases.

EDK2 is Intel’s reference implementation of the UEFI specification, for booting. It’s typically used by vendors, in proprietary forks of Intel’s BSD-licensed code, but Intel’s reference code is Free Software. We use their reference code, and full source code is provided in this Canoeboot release. EDK is short for: EFI Development Kit.

More specifically:

We use a fork of EDK2 provided by MrChromebox, which specifically offers use of EDK2 as a generic coreboot payload. This is a complete, industry-standard UEFI implementation capable of booting any compliant operating system.

All. Nearly all boards use it in Canoeboot now, even older ones e.g. ThinkPad X200. Tested on all platforms. Older, 32-bit-only mainboards still use the setup from the previous release, while virtually all 64-bit-compatible hardware now use EDK2. EFI builds of GRUB and SeaBIOS are provided in flash, accessible from the EDK2 setup menu (press ESC at boot time when prompted), for backward compatibility with existing Linux/BSD installations in Canoeboot.

Several Canoeboot boards now use an open source UEFI implementation by default, where feasible. All of them, and it’s by default - the bare metal GRUB and SeaBIOS coreboot payloads have been removed, replaced by EFI versions that are backward compatible.

We previously did not provide UEFI at all, except for U-Boot on a few select mainboards. We now provide full UEFI, with all four freedoms intact, on nearly every mainboard that Canoeboot supports.

All of the following operating systems were tested and confirmed working, on various Canoeboot machines using EDK2:

Modern computers and operating systems are all UEFI, and this new setup can boot basically all of it reliably. More testing will be required, but this is battle-tested code and it has been used extensively in coreboot by many users, for many years. Canoeboot finally has it as well.

This change alone is part of a much wider effort to modernise Canoeboot, and I’m only getting started. The next Canoeboot releases will draw heavily on this, as EDK2 is pretty much the expected payload on a lot of modern coreboot setups these days. Integration of EDK2 removes all limitations in Canoeboot, allowing us to support much newer hardware and it basically makes Canoeboot much easier to use; I expect Canoeboot to become much more popular and useful over time, as a result.

Some caveats and extra notes are provided at the end of this release page, for migration purposes. For example, despite boasting about all, older 32-bit-only hardware still use bare GRUB/SeaBIOS. Nearly all boards use EDK2 however!

Modern GPU support (via EDK2)

Finally, some notes about graphics cards that may be of interest to the more demanding users.

EDK2 alongside PCI-E relocatable BAR (rebar) means that you can now use modern graphics cards that require allocations above 4GB. Rebar is not enabled by default, but you can enable it in menuconfig (coreboot). Enabling it causes breakage of Intel GPU video output on libgfxinit in testing, and no fix was found yet, so rebar is disabled by default.

PCI-E Option ROMs are enabled by default where necessary, for EDK2 builds. This means you can use it on desktops with graphics cards. Tested on several desktops (Dell OptiPlex 9020 SFF and 5050 SFF).

On boards with only external GPU, rebar can be left enabled by default. On systems with functioning integrated graphics, accidental enablement of rebar can be remedied by inserting a graphics card; when the video output in the payload does become broken, the Linux i915 video driver still initialises video framebuffer properly in KMS/DRM.

This will be added to general documentation, pending fixes upstream. Note that even with this issue, Linux video output works fine. This will be corrected and rebar enabled by default, on a future Canoeboot release.

Upstream revisions

Nearly all major upstream revisions updated:

The 4.11_branch tree of coreboot was removed, because we now use the 15h.org fork of coreboot on AMD Fam15h hardware. This is much improved, with proper AGESA-based initialisation which initialises CPUs and memory controller more reliably. More RAM is supported, and several features were fixed too e.g. IOMMU and TPM.

The use of multiple coreboot upstreams was enabled by a design improvement in cbmk that makes all projects multi-tree, just with some projects ony having one tree in use. We can have N number of upstreams per project now, enabling use of forks.

The coreboot update brings in GCC 15.2, MPC 1.4.1, Nasm 3.02, acpica 20251212 and binutils 2.46.1 on crossgcc.

NEW hardware support

No new hardware was added in this Canoeboot release, but a lot of interesting features have been added to pre-existing hardware that Canoeboot supports.

Feature changes

This is very much a features release. A lot of feature changes were made!

Design changes

A lot of major design changes have been made!

Config changes

Bug fixes

Nvmutil changes

A lot of changes were made to util/nvmutil/ to the extent that it deserves its own release log:

NOTE: This applies to the standalone version of nvmutil. There was an attempt to rewrite it in a much larger utility, mentioned in the following section about canceled changes for this release (see notes below about libreboot-utils).

General cleanup

Roughly one thousand lines of dead code were cleaned out of the build system, but several hundred more were added due to new feature changes. Overall, the amount of code in cbmk has been reduced, in spite of its advances in this release.

Specific cleanup includes:

Canceled changes

A few changes were worked on, but did not land in this release. They pertain to two major projects:

util/libreboot-utils

This was an extension of nvmutil that later became a generalised set of utilities alongside a library for handling things like atomic writes, and userspace mitigation against various types of TOCTOU attacks. Not really critical for nvmutil itself, but…

An attempt was made to implement a hardened version of mktemp called mkhtemp. It implemented several mitigations in userspace against TOCTOU attacks e.g. directory replacement and symlink attacks.

Check cbmk git log for util/libreboot-utils to see more (might have been util/libreboot_utils.

Mkhtemp was started when implementing atomic writes for nvmutil, but then I naturally made use of tmpfiles for that, and that led to me auditing every implementation of mktemp. I concluded that I could do better - and I did.

Examples of how mkhtemp innovated:

…it was an over-engineered piece of crap, and had several memory issues related to stack memory usage, which tripped up a lot on BSD. The could could be tidied up and finished, but I came to a conclusion:

Distros would never accept it. Mkhtemp worked fine on Linux, but it had much stricter operation that would trip up most build systems that use it. I tried it in cbmk to replace mkhtemp, symlinking it in PATH, but for example GRUB had virtually no error checking on mktemp. Most programs that use mktemp wrongly assume that it can never fail, so it doesn’t; implementations try to mitigate errors and continue operation, in ways that are extremely complex. Mkhtemp was a clean attempt at stricter TMPDIR usage.

Because I decided it was a waste of time, I don’t think I care to write more about it in this changelog. Check cbmk git log if you’re interested.

util/spkmodem-decode

A heavily extended version of util/spkmodem-recv that implemented much stronger noise protection, attempted automatic tone detection and frequency selection, plus more. I went a bit overboard with it and decided that it was an overengineering effort. It will not be resumed at any point. You can find it in cbmk git log. (might have been util/spkmodem_decode).

Pointless effort. Spkmodem the protocol is unusable in most setups regardless.

The most pointless effort ever, such as:

Completely pointless. The simpler code works just fine, so the effort was abandoned and thus spkmodem-recv is still present; this is a cleaned up version of what was inherited from GNU GRUB several years ago.

Miscallaneous canceled work

Just two canceled works:

Hidden third cancelation, because there always is one:

Linuxboot. Now with EFI support, we can easily use any number of UKIs added to flash if we want to - and we will, in a future release. The term Linuxboot refers to any flash-based Linux distro that can boot other Linux kernels via Kexec - my preference is ZFSBootMenu, or at least something inspired by it as ZFSBootMenu’s build system is thoroughly incompatible with Canoeboot’s strict design principles.

(which is a polite way of saying that I hate podman/docker with a passion)

Linux UKIs are common now, for boot, and Canoeboot EDK2 can easily integrate it.

U-Boot x86 payload REMOVED

The ARM64 payload is still present, but EDK2 has replaced U-Boot on x86.

This deserves its own section, in this release, as it is a major design change. EDK2 was not merely added as an option; it has replaced U-Boot on x86. I could make this its own article. It deserves one. It deserves my judgement, publicly as I’m now about to articulate in no uncertain terms:

U-Boot was used for lightweight UEFI implementation on Intel/AMD boards, but the person chiefly in charge of the x86 coreboot payload for U-Boot has largely forked U-Boot into a newly vibe-coded project; Canoeboot opposes heavily the use of AI, as per new policy. AI is no good, and upstream x86 U-Boot support has largely bitrotted although several interesting patches were merged.

U-Boot is thus a liability on x86. EDK2 is more fully functional already, so this is used instead. Think AI makes you a super hacker? Think again:

U-Boot was always buggy on x86 anyway. It’s really just not ready at all. It is better used on RISCV and ARM64(where we continue to use it).

U-Boot upstream itself is staunchly anti-AI, at least at the time of this release, and much discussion of the above was had on their mailing list. It would not be productive to re-ligitate that on this release page, but it should suffice to say that the Canoeboot project considers U-Boot to be effectively dead on x86. The ARM-based development is still ongoing strongly, upstream, and we will continue to use U-Boot for UEFI on ARM64 (chromebooks for example).

I will not say his name, or the name of his fork, because I don’t want to promote him or his U-Boot fork. If you know his name or his project, you should not say it or promote it either. AI is bad, very bad, for reasons here:

The fork in question, of U-Boot, is heavily AI vibe-coded and thus useless to Canoeboot. This is not mere conjecture; in said aforementioned U-Boot mailing list thread, the author stated thus. We will not, in any way, encourage or facilitate use of AI. It has been made clear that several projects Canoeboot uses also have some AI-assisted commits; GCC, GRUB, etc. This is not our fault, but it is my intention that I and others will audit these projects in the future, de-slopping them and possibly even forking them entirely for that very reason. The author of the fork basically went insane with it, proposing to the U-Boot upstream that his work be “custodian”, and merged slowly into the upstream U-Boot tree. He was basically pressuring them to accept AI code against their wills. I say in my capacity as leader of the Canoeboot project that U-Boot should never allow AI to taint its project. When you accept AI, you become deskilled and you erode the trust that exists between you and your users. You remove the human connection between maintainers and users, and your project will start to become dependent on what is - yes - proprietary technology, paid for in blood. AI is one of the single biggest consumers of electricity and water on the planet, leading to resource shortages all over the world and its increasing control over what information people see in the news is even a threat to democracy worldwide. This is before even arguing about unclear licensing, copyright violations and so on. It was decided that Canoeboot would join the crusade against all artificial intelligence. The countries chiefly in charge of AI training and infrastructure are the United States (led by several companies currently attacking democracy worldwide) and the People’s Republic of China; even if all the other problems with AI didn’t exist, it would be a very bad idea to give these countries even more power over our computing.

NO. Canoeboot says no to AI. Thus, we will continue using upstream U-Boot as they say no also, and we will not use any vibecoded forks of it. Even if that causes me to have to spend weeks integrating a totally new system to replace it. That is precisely, exactly and indubitably how far I will go to prove my point.

That is why I went to such extreme effort integrating EDK2. Rather than replace U-Boot with yet another incomplete UEFI implementation, I simply added EDK2 which is already feature-complete as it is the reference, industry-standard implementation of the UEFI spec.

CrabEFI was what I initially considered, to replace U-Boot. This is a new payload written by Arthur Heymans, and the project itself is excellent, but rustc/cargo is inherently unreliable for several reasons: It was brought to my attention that the author of crabEFI uses AI heavily in new works, and indeed crabEFI itself seems to contain AI-assisted commits. This violates Canoeboot’s rigorous anti-AI policy, and thus crabEFI will no longer even be remotely considered for use in cbmk.

Rust is awesome, but in my opinion not production-ready yet. Give it another ten years. EDK2 is infinitely more complex, but the size of the code is not a concern as it is generally stable, and written in C (some small bits of it are in C++). It has the most amount of eyes on it, and regularly receives security audits. It’s one of the most battle-tested codebases on the internet, and works well.

CrabEFI will likely be merged in Canoeboot at some time in the future, when Rust tooling has stabilised across distros (including BSDs). It has a much better design, even if it’s not yet feature-complete, and use of Rust means that it will have fewer memory bugs. For now, Canoeboot uses EDK2 to replace U-Boot and it has been enabled by default on all boards. Clankers are banned from Canoeboot.

On memory safety, we can say contrarily that EDK2 is at least stable; bugs are also stable. That’s the point. We have stable C/C++ compilers, properly tested according to formalised standards (not really, because GCC and LLVM do all sorts of whacky things too, but they also try to be compatible with each other behaviourally). You want your code, when compiled, to behave exactly the same, bugs included. This is more strongly guaranteed with projects written in C and C++ (especially pure C projects, and most of EDK2 is in fact pure C).

It was originally intended that U-Boot would become Canoeboot’s primary payload on x86, but alas. I bit the Intel-flavoured bullet and went with EDK2.

Say no to AI. AI makes you stupid. AI is the reason we can’t have nice things.

Want old GRUB/SeaBIOS back?

Import from Libreboot 26.11 initially shipped with only EDK2 UEFI payload on 64-bit boards, which meant that you needed to modify cbmk to get the old bare GRUB/SeaBIOS setup (SeaGRUB) back.

Subsequent revisions to the release restored BIOS mode images, so now you have a choice. Example:

The new naming scheme makes sorting through images easier. Image names with seabios or seagrub in the file name are BIOS-based (legacy setup).

Images with edk2 in the file name are UEFI-based; 26.11rev10 and higher also prefix images with bios_ or uefi_ - U-Boot and EDK2 images are uefi_, while SeaBIOS and SeaGRUB images are bios_.

Issues with S3 resume were found on Linux distros in the initial release, when booted using CSMWrap; these will of course be fixed, in addition to other CSMWrap errata, in a future revision. Moreover, it made sense to continue offering the older setup as some users may prefer it. CSMWrap removed in Canoeboot 26.11rev12, so you must use bare SeaBIOS now if you want SeaBIOS.

The plan initially was to make cbmk much simpler, thus EDK2-only on most boards. For the time being, Canoeboot will maintain dual configuration in this manner.

A new, more unified naming scheme was also introduced in revisions to the release, as above. For example, the arm64 images all say uefi_ but actually use U-Boot, not EDK2; U-Boot implements a subset of the UEFI specification, and it is the default payload on ARM64 Chromebooks. Intel/AMD targets with UEFI all use EDK2.

FreeBSD and DragonFlyBSD users who set up on SeaBIOS txtmode before are advised to once again choose one of the bios_ images, picking any SeaBIOS image with txtmode in the filename. This is for bootloader compatibility, irrespective of further setup - conversion to EFI is recommended, so that you can use the newer EDK2 setup.

Libreboot revisions

This Canoeboot release also inherits several revisions to the Libreboot 26.10 release, detailed below. The bits that Canoeboot did not inherit are not listed:

Import from Libreboot 26.11rev1, 17 Oct 2026

Bugs were found in the main Libreboot release, later fixed, on legacy hardware where EDK2 was not used; here, we had standalone GRUB and SeaBIOS payloads. On setups with GRUB, some users reported broken keyboard input. This is because some machines need a timeout loop during PS/2 keyboard initialisation, and I’d overlooked this fact when making GRUB a standalone payload on legacy hardware.

I’ve thus made GRUB only available in the form of SeaGRUB once more. Images with GRUB now start SeaBIOS first.

Here is the full list of changes, from recent to oldest:

Import from Libreboot 26.11rev2, 18 Oct 2026

Minor cleanup:

Import from Libreboot 26.11rev3, 18 Oct 2026

CrabEFI was set release="n" in rev1, because it’s not yet ready for use as a standalone payload and is currently inserted for loading from SeaBIOS and GRUB; this isn’t working yet, so rev1 made it such that CrabEFI is not inserted into images via scripting in include/fw/rom.sh - this alone is sufficient and this third revision simply removes release="n" - otherwise, users could not build images in the source code tar archive unless they set the XBMK_RELEASE environmental variable. - CrabEFI banned from Canoeboot becrause it was found that it contains AI-assisted code.

This is because release tarballs disable source fetching, by virtue of whether or not a CHANGELOG file is prevent - absent in the Git repository but generated in release archives.

REMARK: MrChromebox sources also do not fetch/compile in the release archive, but this is OK because we don’t provide images for those in this release. You should just use the cbmk Git repository to build these.

Import from Libreboot 26.11rev4, 20 Oct 2026

Removed CrabEFI as I plan instead now to port edk2 on 32-bit, from the MrChromebox tree. This will be easier as the latter is maintained on 64-bit anyway, and work likely already exists. It’s better just to always standardise on one project. CrabEFI was only added experimentally anyway and wasn’t provided as a build in rev3. Just delete it.

Other changes:

The re-addition of BIOS targets alongside UEFI, where both are present on a given mainboard, is likely to remain permanent even when CSMWrap bugs are fixed. I initially reasoned that it’s best to keep things simple from my point of view, but it’s better to just provide users choices. With this, most users shouldn’t have any problem as the setup they’ve always used is still available, and they can otherwise upgrade to the new setup at their leisure. Yes, they call this: the principle of least surprise.

The reason I did this was also that S3 resume is currently broken on CSMWrap but not the bare SeaBIOS payload. Thus, we provide actual real BIOS setups alongside EFI; the EFI build also has CSM, but the SeaBIOS build does not have EFI.

Keymapped images were also re-added on the classic BIOS (SeaBIOS plus GRUB) targets; the EDK2 targets are still locked to only one keymap.

Import from Libreboot 26.11rev5, 20 Oct 2026

Reverted some defconfig changes that changed VBT path and SMBIOS vendor strings, to prevent build errors. I removed these, believing them to be redundant on a handful of boards, as they’d be defined in Kconfig. I’ve restored them, and also corrected them, e.g. Dell OptiPlex 780 variants now have correct board names in these strings.

Import from Libreboot 26.11rev6, 20 Oct 2026

The most pedantic revision of all, but I wanted to make everything a bit more clean:

Please note: these board target names make vendor file injection break on older release archives. Please rename accordingly, or just use image tarballs from the current rev6 release and beyond. Naming scheme is stable now in Canoeboot, thus:

For example, variant can be 8mb on lenovo_x200_8mb.

Import from Libreboot 26.11rev7, 20 Oct 2026

Renamed more boards, for more consistent naming across all mainboards and platforms.

Renamed chromebook_ to cros_ in coreboot chromebook boards, for more consistent naming across different google products.

The new naming scheme is also more friendly to scripts (build systems).

Import from Libreboot 26.11rev8, 20 Oct 2026

Renamed cros rk3399 targets to match u-boot and coreboot target names. This affects gru bob/kevin chromebooks.

Import from Libreboot 26.11rev9, 21 Oct 2026

None of the changes from this rev were included (they were all for boards that Canoeboot does not support in this release).

Import from Libreboot 26.11rev10, 25 Oct 2026

Minor fixes and usability improvements:

Of note, this revision backports a major coreboot patchset from upstream:

Nicholas Chin has done extensive rework on battery handling for Dell Latitude models. It is no longer done in SMM. It is now done in a generalised ACPI framework, and existing S3 fixes are done there (patching to prevent DRAM from powering down in S3).

This patchset also adds support for battery status in EC, via the new ACPI patching. This means you can now monitor battery usage / charge level in ACPI-enabled operating systems.

The following features are still broken (and previously broken too), on Dell Latitudes:

The new EC handler code is more efficient, on Dell Latitudes. Doing it all in SMM violates one of coreboot’s main design criteria… putting everything in SMM is bloat. Doing it all in ACPI is just more performance-efficient, and easier to maintain. Note that these patches are still under review on the coreboot project, but they were deemed stable enough for a Canoeboot release.

Building Canoeboot 26.11 sources

The Canoeboot 26.11 release series has one extra dependency compared to the master branch of cbmk: 32-bit libc headers needed on 64-bit build hosts, for 32-bit memtest86+ builds.

Memtest86+ isn’t cross-compiled on cbmk, and not every distro will have 32-bit headers available for libc, so it’s 64-bit-only in cbmk master. 32-bit memtest is used on 32-bit-only hardware like ThinkPad X60, as a nice-to-have.

E.g. lib32-glibc package on Arch Linux.

Use of x86-64 is assumed, when building Canoeboot releases. We do also have 32-bit support, for building 32-bit machines on 32-bit hosts. For example, a Thinkpad X60 can be used to build X60 images in cbmk.

Please just make sure to have 32-bit libc headers available on 64-bit hosts when building the 26.11 release series - maintaining this dependency in the main branch is unacceptable, so cbmk would have to cross-compile payloads, which is in fact on TODO but not currently handled (cbmk uses host toolchains for nearly everything except coreboot and U-Boot, which are both compiled with crossgcc, but non-U-Boot payloads are built with the host toolchain).

Import from Libreboot 26.11rev11, 27 Oct 2026

Minor tweaks to RK3399 coreboot chromebooks (fix payload setup). Switching to defconfigs nuked CONFIG_PAYLOAD_NONE for some reason - more investigation needed, but rk3399 configs were switched back to full configs for now. This bug does not affect Intel/AMD boards, so they are still defconfig. Without this setting, cbmk’s payload insertion is skipped. This is a bug upstream that needs to be fixed, mitigated for now in this revision release.

Moved RK3399 chromebooks in coreboot to their own tree, for coreboot and u-boot, both trees named cros_arm.

Import from Libreboot 26.11rev12, 28 Oct 2026

CSMWrap payload deleted from EDK2. It was decided that Canoeboot 26.11 would be UEFI-only in earlier revisions, but I later re-added bare SeaBIOS/SeaGRUB payloads which makes CSMWrap redundant. If you want SeaBIOS, then please use the SeaBIOS images or run CSMWrap yourself; you can use CSMWrap builds in ESP, booted from EDK2. Bundling it in cbmk is a maintainer burden, and several major bugs were reported in CSMWrap (broken S3 resume, weird graphical issues on some boards, etc). My OpenBSD installation, that I use for my LibreWolf port updates (I maintain the LibreWolf port in OpenBSD) also crashed and brought down my entire package database; it’s possible that CSMWrap may have produced buggy conditions that led to this, though it could have just been a bad SSD.

Yes, CSMWrap is a liability to maintain in cbmk. We already know that the bare coreboot payload of SeaBIOS works well, and this is available on most boards. We will provide this instead.

Users are still recommended to use the new EDK2-based images. Note that the GRUB EFI and Memtest86+ EFI builds are still available in EDK2, and these do provide value. GRUB EFI especially, can be used to unlock encrypted /boot and bypass the need for an ESP, while still having an EFI runtime in the Linux distro of the user’s choice.

This change is permanent. We will no longer provide CSMWrap builds in Canoeboot. Please note: SMMSTORE is still present, intentionally, on SeaBIOS images, so that the user can switch interchangeably between SeaBIOS and EDK2 images via FMAP-based flashing (e.g. flashing only the COREBOOT section in FMAP). This is an intentional design choice, on the understanding that the lesser amount of space used in flash by payloads (on SeaBIOS setups without EDK2) compared to EDK2 images, is less than the cost of a SMMSTORE region in flash. Therefore, this provides a sensible regime upon which the user essentially does have, in a roundabout way, the benefits of a CSM except that they have to re-flash to get a BIOS image.

We’re not the proprietary vendors. Users can just build whatever they want in Canoeboot. It’s better to keep setups simple, so providing two versions of SeaBIOS is pointless.

Several major design issues exist in CSMWrap, such as hogging an entire CPU core, and these design issues are caused by the fact that CSMWrap is designed to work on proprietary UEFI firmware where they don’t have access to firmware, for instance they can’t use SMM. Here in Canoeboot, we could properly integrate CSMWrap and remove many of its limitations, but this would mean forking CSMWrap - which then means we are maintaining a fork of SeaBIOS, while still using SeaBIOS upstream on bare metal. Pointless. Completely pointless work.

Thus, CSMWrap was removed. It was assumed that it would be more stable in the release, and that we’d only do UEFI images, but this design change was canceled.

Import from Libreboot 26.11rev13, 28 Oct 2026

Fixed a critical remote code execution bug in EDK2, as reported by Intel’s Tianocore Security Advisory here:

https://github.com/tianocore/edk2/security/advisories/GHSA-99cj-7hg9-mp4m

An unchecked bound on incoming ICMP packets allowed attackers to send large packets during the PXE boot window, which could allow the ICMP buffer in EDK2 to overflow and, hence, the attacker could run unsigned code in an unprivileged context.

Tianocore released this patch to fix the CVE:

https://github.com/tianocore/edk2/pull/13302 - fixes CVE-2026-97631; users who did not boot with PXE were unaffected by this issue.

Import from Libreboot 26.11rev14, 28 Oct 2026

Backported a patch from MrChromebox which fixes SD card booting on (tested models) ThinkPad W541 and Dell Latitude E7240:

https://github.com/MrChromebox/edk2/commit/c205cebb1a534261c9aef428c37f889c3661e2cb

Fixes a hanging bug in EDK2 when booting operating systems via SD card on affected hardware. The fix is done by reverting a previous patch that forced eMMC probing as some soldered-down mmc flash may report itself as removeable; see notes in the patch, linked above. This patch was backported into Canoeboot EDK2, for the 26.11 release series.

Import from Libreboot 26.10rev15, 2 November 2026

Removed forx function in the build system, removed unused srclink variable, don’t use backticks on commands; general cleanup in the build system. More: removed trivial uses of eval and awk in the build system. The build_sbase macro is now a function.

Sources only cleaned before doing a build, to save on build time.

Simplified building of PCSX-Redux Open BIOS, by making use of the cpbin variable recently added to the Libreboot build system.

Simplified building of serprog images by using cpbin instead of custom copy logic.

In get.sh, more thorough hash checks are done based on build_depend and fetch_depend, which makes adding symlinks to config directories unnecessary (useful on Chromebooks where EDK2 is built while depending also on GRUB EFI - Libreboot-only, not available in Canoeboot yet).

Added EDK2 build with just iPXE, nothing else, for images with 3MB of CBFS space. Not used in this Libreboot release, but some targets in Canoeboot have this smaller size compared to Libreboot, on specific boards.

NOTE: No rev15 builds will be provided, because it did not change any in-firmware behaviour compared to rev14. This rev15 release is being tagged, so as to cleanly sync up with Canoeboot - now we have a reference point as to how the two projects align, as the Canoeboot 26.11rev1 release is in sync with Libreboot 26.10rev15.

Canoeboot 26.11rev1, 2 Nov 2026

Canoeboot 26.11 was in sync with Libreboot 26.10rev14.

Canoeboot 26.11rev1 adds the changes from Libreboot 26.10rev15, and it is thus in sync with Libreboot 26.10rev15.

Canoeboot 26.11rev2, 2 Nov 2026

Re-added 32-bit memtest86+ on 32-bit targets. Accidentally removed in the rev1 release.

Canoeboot 26.11rev3, 2 Nov 2026

Added missing SMMSTORE config on ThinkPad T420, T420s and T520.

Canoeboot 26.11rev4, 2 Nov 2026

Also enabled SMMSTORE config on HP Elite 8200 SFF

Markdown file for this page: https://canoeboot.org/news/canoeboot2611.md

Site map

This HTML page was generated by the Libreboot Static Site Generator.