summaryrefslogtreecommitdiff
path: root/util
AgeCommit message (Collapse)Author
2023-06-05util/spkmodem-recv: rename variables for clarityLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: split print_char() upLeah Rowe
the logic for *setting* a character, and the logic for outputting it, ought to be separate. do that. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: reduce indent in print_char()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: squash a few code linesLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: bsd-style indentLeah Rowe
my style was: 2 tabs. bsd-style, for extending a line, is 4 spaces. this style has grown on me, so let's do it here Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: order prototypes per functionLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: warn on unhandled exit errorLeah Rowe
my style of C programming is this: always return errno upon exit from the program, or from a thread. handle errno in the calling/forking function. returning errno at the end of main has this intention: if an unhandled error occured, the program exits with non-zero status. a correctly written program should *never* return non-zero at the end of main, and if it does, this indicates a bug in the code (per my code style / philosophy). so, warn the user with a message if this occurs. the intention is that this message should never be printed. do not use assert() for this. i don't believe in that. such a test should always be present, for everyone. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: another minor code cleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: always set errno on err()Leah Rowe
This version of spkmodem uses err() to indicate an error, and the value of errno is used as exit status at all times, even when it is zero. When calling err(), it is intended that errno always be non-zero, so modify the code accordingly. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: minor code cleanupLeah Rowe
also be more thorough about errno value when calling pledge. rename variable in a for loop for clarity. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: handle sample errors correctlyLeah Rowe
when calling fread(), errno may be set to EOVEFLOW if the range being read will cause an integer overflow if end-of-file is reached, errno may not be set. when calling this function, you must check errno or check feof() - ferror() should also be checked, so this check is added immediately afterwards in the code ferror() does not set errno, so ERR() is used to set errno to ECANCELED as program exit status further separate reading of frames into a new function Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-04util/spkmodem-recv: simplify pulse checkLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-03util/nvmutil: call unveil earlier, and hardenLeah Rowe
The mentality behind pledge and unveil is that you should think ahead, so that large parts of code can run under extremely tight restrictions. The pledge calls have been adjusted accordingly, also. Disallow all unveil calls after the gbe file and the file /dev/urandom have been unveiled. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-03util/nvmutil: hardening: reduce pledges earlierLeah Rowe
also remove wpath if using the dump command Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-03util/nvmutil: fix faulty arg checkLeah Rowe
in practise, no other condition would be met and the program still worked. this is a pre-emptive fix.
2023-06-03util/nvmutil: cleanup: move logic out of main()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-03util/nvmutil: major cleanup. simpler arg handling.Leah Rowe
Also hardened the pledges. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-02util/nvmutil: simplify writeGbeFile()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: don't call writeGbeFile if O_RDONLYLeah Rowe
This replaces a check in the function for O_RDONLY, and fixes the bug where the "dump" command triggers such error. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: code cleanup (pledge/unveil calls)Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: harden pledge/unveil calls (OpenBSD)Leah Rowe
*Open* files at the start, then unveil. The same overall behaviour is observed. In the case that invalid arguments are given, simply opening a file does not cause much performance impact (if any). Restrict operations as early as possible in code. Bonus: writeGbeFile also hardened; if flags is O_RDONLY, it aborts. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: fix faulty fd checkLeah Rowe
i screwed up in an earlier commit this change fixes a bug where on rhex(), each call would re-open /dev/urandom, resetting rfd Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: only swap/copy if checksum is validLeah Rowe
in practise, the file was never written unless the checksum was valid, but in the same of sloccount reduction i made it do the swap/copy before checking. while functionally ok, it never sat right with me. this is one example of where sloc count doesn't mean everything. code correctness is critical Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: use bsd-style indentationLeah Rowe
the style was already quite similar, but extended lines in bsd are indented by 4 spaces instead of a tab. this style has grown on me, so i'm adopting it here Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: clean up rhex()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: check correct return value on close()Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: massive code cleanupLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: move includes to nvmutil.hLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: move xpledge/xunveil to nvmutil.hLeah Rowe
They don't precisely *pertain* to nvmutil, but they are useful helper functions for calling pledge/unveil in OpenBSD. Ideally, the main file should only contain core logic pertaining to the execution of *nvmutil*. Put xpledge() and xunveil() in nvmutil.h. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: use SPDX license headersLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: move non-functions to nvmutil.hLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: use even more macros (code cleanup)Leah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: remove unnecessary parenthesesLeah Rowe
2023-06-01util/nvmutil: simplify setWord() with word() macroLeah Rowe
There is nothing cooler than a macro. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: do xor swap in a macroLeah Rowe
eventually, everything will be a macro! Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil pledge,unveil: use correct err stringLeah Rowe
2023-06-01util/nvmutil: ensure that errno is set on err()Leah Rowe
When err() is called, it is intended that nvmutil will always exit with non-zero status, but with errno as the return value. Ensure that errno is *not* zero. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-06-01util/nvmutil: minor code cleanupLeah Rowe
Make word() a macro, simplify err_if(). Could also make setWord() a macro if I forego certain optimisations, but I'll leave it as-is. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-31util/nvmutil: simplified error handling in mainLeah Rowe
This change also reduces code indentation. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-31util/nvmutil: Use unveil, and harden pledgesLeah Rowe
After /dev/urandom (for MAC address randomisation) and the GbE file have been handled, unveil them. Unveil is a system call provided by OpenBSD that, when called, restricts access only to the files and/or directories specified, each given specific permissions. You can learn more about unveil here: https://man.openbsd.org/unveil.2 An ifdef rule makes nvmutil only use unveil on OpenBSD, because it's not available anywhere else. This is the same as with the pledge() system call. Where invalid arguments are given, and no action performed, pledge promises are also reduced to just stdio, preventing any writes to files, or reads from files. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-31util/nvmutil: Harden pledge promisesLeah Rowe
After reading a file, remove rpath. When removing rpath, also remove wpath if flags are not to O_RDONLY (read-only disk operation). When wpath is permitted, and a file was successfully written, remove wpath. In order to permit /dev/urandom access in rhex(), I call it as a void just before re-calling pledge. The rhex() function has been written in such a way that /dev/urandom only needs to be read *once*. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-31util/nvmutil: Simplify use of pledge (on OpenBSD)Leah Rowe
Define xpledge which calls pledge and handles errors. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-30util/nvmutil: Use correct pledge promise (OpenBSD)Leah Rowe
I assumed wpath was all that's needed, but this simply allows writes. rpath must be specified alongside wpath, for reads. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-30util/*: Properly detect OpenBSD for pledge() callLeah Rowe
The utils that are pledged checked HAVE_PLEDGE which was bogus. OpenBSD defines __OpenBSD__, which you can check for in ifdef. This change makes nvmutil and spkmodem-recv *actually* use pledge, when the utils are compiled on OpenBSD. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-29util/e6400-flash-unlock: clean up commented codeLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-16util/spkmodem_recv: Use pledge but only on OpenBSDLeah Rowe
It will only be used on OpenBSD. Other operating systems will behave in the same way. Pledge is feature specific to OpenBSD that restricts system operations, for security: https://man.openbsd.org/pledge.2 Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-16util/spkmodem_recv: Add -u flag (no line buffer)Leah Rowe
printf outputs to stdout, which is line buffered by default. Adding a -u option to disable buffering. Exit when a non-support flag is given, but adhere to current behaviour when no flag is given. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-16util/spkmodem_recv: Tidy up global variablesLeah Rowe
They do not need to be initialised zero, because global variables are always zero by default, unless set differently by the programmer. Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-16util/spkmodem_recv: Make pulse variable globalLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>
2023-05-16util/spkmodem_recv: Use parentheses on comparisonsLeah Rowe
Signed-off-by: Leah Rowe <leah@libreboot.org>