This will also be used in lbmk itself at some point, which currently just uses regular mktemp, for tmpdir handling during the build process. Renamed util/nvmutil to util/libreboot-utils, which now contains two tools. The new tool, mkhtemp, is a hardened implementation of mktemp, which nvmutil also uses now. Still experimental, but good enough for nvmutil. Mkhtemp attempts to provide TOCTOU resistance on Linux, by using modern features in Linux such as Openat2 (syscall) with O_EXCL and O_TMPFILE, and many various security checks e.g. inode/dev during creation. Checks are done constantly, to try to detect race conditions. The code is very strict about things like sticky bits in world writeable directories, also ownership (it can be made to bar even root access on files and directories it doesn't own). It's a security-first implementation of mktemp, likely even more secure than the OpenBSD mkstemp, but more auditing and testing is needed - more features are also planned, including a compatibility mode to make it also work like traditional mktemp/mkstemp. The intention, once this becomes stable, is that it will become a modern drop-in replacement for mkstemp on Linux and BSD systems. Some legacy code has been removed, and in general cleaned up. I wrote mkhtemp for nvmutil, as part of its atomic write behaviour, but mktemp was the last remaining liability, so I rewrote that too! Docs/manpage/website will be made for mkhtemp once the code is mature. Other changes have also been made. This is from another experimental branch of Libreboot, that I'm pushing early. For example, nvmutil's state machine has been tidied up, moving more logic back into main. Mktemp is historically prone to race conditions, e.g. symlink attacks, directory replacement, remounting during operation, all sorts of things. Mkhtemp has been written to solve, or otherwise mitigate, that problem. Mkhtemp is currently experimental and will require a major cleanup at some point, but it already works well enough, and you can in fact use it; at this time, the -d, -p and -q flags are supported, and you can add a custom template at the end, e.g. mkhtemp -p test -d Eventually, I will make this have complete parity with the GNU and BSD implementations, so that it is fully useable on existing setups, while optionally providing the hardening as well. A lot of code has also been tidied up. I didn't track the changes I made with this one, because it was a major re-write of nvmutil; it is now libreboot-utils, and I will continue to write more programs in here over time. It's basically now a bunch of hardened wrappers around various libc functions, e.g. there is also a secure I/O wrapper for read/write. There is a custom randomisation function, rlong, which simply uses arc4random or getrandom, on BSD and Linux respectively. Efforts are made to make it as reliable as possible, to the extent that it never returns with failure; in the unlikely event that it fails, it aborts. It also sleeps between failure, to mitigate certain DoS attacks. You can just go in util/libreboot-utils and type make, then you will have the nvmutil and mkhtemp binaries, which you can just use. It all works. Everything was massively rewritten. Signed-off-by: Leah Rowe <leah@libreboot.org>
Libreboot
Documentation: libreboot.org
Support: #libreboot on
Libera IRC
Libreboot provides libre boot firmware on supported motherboards. It replaces proprietary vendor BIOS/UEFI implementations, by
- Using coreboot to initialize the hardware (e.g. memory controller, CPU, etc.) while minimizing unwanted functionality (e.g. backdoors such as the Intel Management Engine)
- ... which runs a payload such as SeaBIOS, GRUB, or U-Boot
- ... which loads your operating system's boot loader (BSD and Linux-based systems are supported).
Why use Libreboot, and what is coreboot?
A lot of users who use libre operating systems still use proprietary boot firmware, which often contain backdoors and bugs, hampering user freedom and right to repair.
coreboot provides libre boot firmware by initializing the hardware then running a payload. However, coreboot is notoriously difficult to configure and install for most non-technical users, requiring detailed technical knowledge of hardware.
Libreboot solves this by being a coreboot distribution (in the same way that Alpine Linux is a Linux distribution). It provides a fully automated build system that downloads and compiles pre-configured ROM images for supported motherboards, so end-users could easily fetch images to flash onto their devices.
Libreboot also produces documentation aimed at non-technical users and excellent user support via IRC.
Contribute
You can check bugs listed on the bug tracker.
You may use Codeberg pull requests to send patches with bug fixes or other improvements. This repository hosts the code for the main build system. The website lives in a separate repository.
Development is also done on the IRC channel.
License for this README
It's just a README file. It is released under Creative Commons Zero, version 1.0.