diff options
| author | Leah Rowe <leah@libreboot.org> | 2025-05-03 06:23:10 +0100 | 
|---|---|---|
| committer | Leah Rowe <leah@libreboot.org> | 2025-05-05 12:18:22 +0100 | 
| commit | 91ffabd836374be1b81f8d5702203da64097cf22 (patch) | |
| tree | 3c1a5e4ea64a75452a465a7cf5f0e3c19d11f9d8 /util | |
| parent | e6687929b96ba1e01a9796a66fe6cf8e554ad506 (diff) | |
util/nvmutil:  use x, not ?, for random characters
A user reported that '?' causes an error on zsh. See:
https://codeberg.org/libreboot/lbmk/issues/261
For example:
./mk inject libreboot-XXXXXX.tar.xz setmac ??:??:??:??:??:??
The user got:
 zsh: no matches found: ??:??:??:??:??:??
The mitigation here is to double-quote, e.g.:
./mk inject libreboot-XXXXXX.tar.xz setmac "??:??:??:??:??:??"
However, a lot of people won't do that. Therefore, I will
retain the current behaviour but support x/X for randomness.
Now lbmk uses x by default, instead. I will now update the
documentation, accordingly.
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'util')
| -rw-r--r-- | util/nvmutil/nvmutil.c | 12 | 
1 files changed, 9 insertions, 3 deletions
| diff --git a/util/nvmutil/nvmutil.c b/util/nvmutil/nvmutil.c index 12aabe4d..05459bb7 100644 --- a/util/nvmutil/nvmutil.c +++ b/util/nvmutil/nvmutil.c @@ -40,7 +40,7 @@ size_t partsize, gbe[2];  uint8_t nvmPartChanged[2] = {0, 0}, do_read[2] = {1, 1};  int flags, rfd, fd, part; -const char *strMac = NULL, *strRMac = "??:??:??:??:??:??", *filename = NULL; +const char *strMac = NULL, *strRMac = "xx:xx:xx:xx:xx:xx", *filename = NULL;  typedef struct op {  	char *str; @@ -278,8 +278,11 @@ parseMacString(const char *strMac, uint16_t *mac)  				err(errno = EINVAL, "Invalid character '%c'",  				    strMac[i + nib]); +			/* If random, ensure that local/unicast bits are set */  			if ((byte == 0) && (nib == 1)) -				if (strMac[i + nib] == '?') /* ?=random */ +				if ((strMac[i + nib] == '?') || +				    (strMac[i + nib] == 'x') || +				    (strMac[i + nib] == 'X')) /* random */  					h = (h & 0xE) | 2; /* local, unicast */  			mac[byte >> 1] |= ((uint16_t ) h) @@ -302,7 +305,10 @@ hextonum(char ch)  		return ch - 'A' + 10;  	else if ((ch >= 'a') && (ch <= 'f'))  		return ch - 'a' + 10; -	return (ch == '?') ? rhex() : 16; +	else if ((ch == '?') || (ch == 'x') || (ch == 'X')) +		return rhex(); /* random hex value */ +	else +		return 16; /* error: invalid character */  }  uint8_t | 
