summaryrefslogtreecommitdiff
path: root/util
AgeCommit message (Collapse)Author
2023-04-06util/nvmutil: serious re-factoring (speed boost!)Leah Rowe
word/setWord no longer mitigates endianness. instead, all bytes are swapped after reading and before writing the file, and only if the host is big endian this improves performance on little endian hosts, which is most machines, and the code is much simpler, so it's more robust and less likely to break mac address endianness made more clear in code, including with a comment that explains it (the nvm section contains little endian words, *except* the mac address whose words are stored big endian)
2023-04-05util/nvmutil: fix faulty zeroes-mac-address checkLeah Rowe
it was resetting the total for each nibble. absolute epic fail on my part. fixed now.
2023-04-05util/nvmutil: minor code cleanupLeah Rowe
2023-04-05util/nvmutil: move mac address parsing to functionLeah Rowe
2023-03-06util/nvmutil: optimise rhex() furtherLeah Rowe
reduce the number of calls to read() by using bit shifts. when rnum is zero, read again. in most cases, a nibble will not be zero, so this will usually result in about 13-15 of of 16 nibbles being used. this is in comparison to 8 nibbles being used before, which means that the number of calls to read() are roughly halved. at the same time, the extra amount of logic is minimal (and probably less) when compiled, outside of calls to read(), because shifting is better optimised (on 64-bit machines, the uint64_t will be shifted with just a single instruction, if the compiler is decent), whereas the alternative would be to always precisely use exactly 16 nibbles by counting up to 16, which would involve the use of an and mask and still need a shift, plus... you get the point. this is probably the most efficient code ever written, for generating random numbers between the value of 0 and 15
2023-01-28util/nvmutil: tidy up variable declarationsLeah Rowe
2023-01-28util/nvmutil: setWord(): declare variables firstLeah Rowe
2023-01-28util/nvmutil: reset errno if any write attemptedLeah Rowe
the way nvmutil is designed, setWord() is only ever called under non-error conditions. however, if one part is valid but the other one isn't, and a command is run that touches both parts, errno is non-zero write writeGbeFile is called in situations where one part is valid, but the other isn't, AND the writes to gbe (in memory) results in a non-change, writeGbeFile is not called; in this situation, errno is not being reset, despite non-error condition this patch fixed the bug, resulting in zero status upon exit under such conditions
2023-01-28util/nvmutil: do not write non-changes to diskLeah Rowe
2023-01-28util/nvmutil: cmd_swap(): write sequentuallyLeah Rowe
the current code writes part 1 first, and part 0 next, on the disk, due to the way the swap works. with this change, swap still swaps the two parts of the file, on disk, but writes the new file sequentially. this change might speed up i/o on the file system, on HDDs. on SSDs, this change likely makes no difference at all.
2023-01-28util/nvmutil: don't use malloc()Leah Rowe
2023-01-28util/nvmutil: fix clang build errorsLeah Rowe
2023-01-28util/nvmutil: simplify rhex()Leah Rowe
don't use malloc(). instead, just load random bytes into a uint64_t
2023-01-27util/nvmutil: use gbe[] in word() and setword()Leah Rowe
this will make the code more flexible, if (when) i add changes that allow multiple commands to be used in a single run, on any given number of files
2023-01-27util/nvmutil: code cleanupLeah Rowe
2023-01-27util/nvmutil: call pledge() earlier, in main()Leah Rowe
2023-01-27util/nvmutil: remove unused #defineLeah Rowe
2023-01-27util/nvmutil: optimised disk readsLeah Rowe
only read the required number of bytes, per command
2023-01-27util/nvmutil: optimise cmd_swap()Leah Rowe
On many Lenovo GbE regions (in factory firmware), part 0 is invalid but part 1 is valid. This change means part 1 is checked first. If part 1 is valid, part 0 won't be checked at all (due to how most C compilers optimise). Most people are just going to extract the factory GbE file, modify it and re-insert it into the ROM image, so this causes a nice speedup.
2023-01-27util/nvmutil: optimise rhex() for speedLeah Rowe
don't constantly open/close the file: /dev/urandom only read 12 bytes at a time because of this change, the readFromFile() function now only handles gbe files
2023-01-27util/nvmutil: code cleanup in rhex()Leah Rowe
2023-01-17util/nvmutil: update copyright yearsLeah Rowe
2023-01-17util/nvmutil: limit bytes written per commandLeah Rowe
Massive reduction in number of bytes written, if copy/swap commands are not used.
2023-01-17util/nvmutil: make writeGbeFile more readableLeah Rowe
2023-01-17util/nvmutil: only write parts that are modifiedLeah Rowe
Old behaviour: always write both gbe sections. New behaviour: only write back what was changed.
2022-12-24util/nvmutil: use err() more consistentlylbmkplaceholder
2022-12-24util/nvmutil: more robust pointer handlingLeah Rowe
i didn't like the previous commits, they felt really hacky running malloc and then changing the pointer directly just rubs me the wrong way fix that
2022-12-23util/nvmutil: optimise cmd_swap() furtherlbmkplaceholder
don't do xor swap. we know gbe2 is always 4KB higher than gbe in memory, so we can just set gbe2 to the value of gbe, and OR the size in bytes of 4KB into gbe2 this is only a marginal speed boost, negligible even, but it's done for the lulz
2022-12-23util/nvmutil: greatly optimise cmd_copy()lbmkplaceholder
similar to the last change by concept. we now write individual 4KB blocks per part 0 and 1, at the end of nvmutil, based on pointer values gbe and gbe2 instead of running memcpy, simply overwrite the pointer this results in less I/O, thus more speed
2022-12-23util/nvmutil: greatly optimise cmd_swap()lbmkplaceholder
instead of XOR-swapping every byte, have pointers to the two parts and *XOR swap the pointers*. at the end of the program execution, when writing, pwrite the two parts into the same file
2022-12-21util/nvmutil: simplified error handling in rhex()lbmkplaceholder
2022-12-21util/nvmutil: return errno when calling err()lbmkplaceholder
2022-12-21util/nvmutil: exit non-zero if close() failslbmkplaceholder
2022-12-14util/nvmutil: only mask random unicast/local macslbmkplaceholder
Without this change, arbitrary MAC addresses will always be masked. This change restores the intended behaviour.
2022-12-08util/nvmutil: consistent parentheses on comparisonLeah Rowe
2022-12-08util/nvmutil file reads: skip reading if errno!=0Leah Rowe
*This condition will probably never be met, but it is theoretically possible that the code could still fail at this point. Catch all errors, and exit, ruthlessly.
2022-12-08util/nvmutil: return error when fstat() is -1Leah Rowe
Another oversight in my error handling.
2022-12-07util/nvmutil: rhex(): fail if errno not zeroLeah Rowe
The code was only checking whether all of the bytes were read, but there are other errors that can be caught via errno. Enforce strict errno handling, when generating random numbers for command `setmac`.
2022-12-05util/nvmutil: minor code formatting cleanupLeah Rowe
2022-12-03util/nvmutil: remove errant line breakLeah Rowe
2022-12-03util/nvmutil: missing paretheses on if statementLeah Rowe
2022-12-03util/nvmutil: don't initialise rbuf unless neededLeah Rowe
previously, it was always initialised, but now it's only initialised if '?' is used on a mac address character in command `setmac` this is done by simply moving mac address character randomisation to a separate function
2022-12-03util/nvmutil: rename variable in hextonumLeah Rowe
2022-12-03util/nvmutil: don't reallocate memory in hextonumLeah Rowe
2022-12-03util/nvmutil: dont report bad size if /dev/urandomLeah Rowe
2022-12-03util/nvmutil: rename variables in hextonumLeah Rowe
2022-12-03util/nvmutil: use BUFSIZ for rmac size in hextonumLeah Rowe
I will be using this function elsewhere, and in general I want this to be usable for lots of programs.
2022-12-03util/nvtutil: fix out of bounds errorLeah Rowe
the error would have never been triggered, because it never went over 11, but if this code were to be copied elsewhere, it would be problematic
2022-12-01util/nvmutil: reset errno on cmd_swapLeah Rowe
If one of the checksums was valid, but the other was not, errno would be set to E_CANCELED, but then the buffer would be modified anyway; this is acceptable behaviour, and errno would later be reset writing the GBE file, which is done only on the condition that the buffer was modified, but it's also a good idea to reset it here just in case. This is not a bugfix, and no behavioural changes will be observed by the user, but this may *prevent* a bug in the future, so let's pre-fix that bug now.
2022-11-27util/nvmutil: mild refactoringLeah Rowe