Ronan Pigott [Thu, 23 Mar 2023 22:18:00 +0000 (15:18 -0700)]
hexdump-parse: handle truncated format pattern
If the fmt being parsed by block_size is exactly '%', *++fmt is the
terminator and strchr will return a valid pointer to the terminator of
spec rather than NULL, the while condition will pass and subsequent
strchr will read past the end of fmt until a spec character is found
again
ASAN aborts with the following error on the first buffer overread:
AddressSanitizer: heap-buffer-overflow on address 0x602000000212 at pc 0x55bf1c4b2d78 bp 0x7ffe33c8cff0 sp 0x7ffe33c8cfe0
READ of size 1 at 0x602000000212 thread T0
#0 0x55bf1c4b2d77 in block_size ../text-utils/hexdump-parse.c:207
#1 0x55bf1c4ad36f in main ../text-utils/hexdump.c:214
#2 0x7f15f063c78f (/usr/lib/libc.so.6+0x2378f)
#3 0x7f15f063c849 in __libc_start_main (/usr/lib/libc.so.6+0x23849)
#4 0x55bf1c4ac6c4 in _start (../build/hexdump+0x86c4)
Karel Zak [Thu, 23 Mar 2023 20:19:11 +0000 (21:19 +0100)]
Merge branch 'xry111/lscpu-loongarch' of https://github.com/xry111/util-linux
* 'xry111/lscpu-loongarch' of https://github.com/xry111/util-linux:
lscpu: Add loongarch testcase
lscpu: Add "ISA" field into lscpu_cputype and determine loongarch op-mode from its value
lscpu: Parse loongarch specific lines
Karel Zak [Thu, 23 Mar 2023 14:25:00 +0000 (15:25 +0100)]
libmount: fix MS_REMOUNT emulation by mount_setattr()
The classic mount(MS_REMOUNT) means that all unspecified MS_NOxxx
flags are remove (except MS_NOATIME). We need to follow this semantic
when emulate remount by mount_setattr(), because "mount -o remount /"
is the way how (for example) systemd resets root filesystem to default
(e.g. ro->rw, etc.)
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=2180593 Signed-off-by: Karel Zak <kzak@redhat.com>
Xi Ruoyao [Wed, 22 Mar 2023 12:44:19 +0000 (20:44 +0800)]
lscpu: Parse loongarch specific lines
/proc/cpuinfo on loongarch uses UPPERCASE letters in some field names.
Add the patterns for them.
"Address Sizes", "CPU Family", "CPU Revision" (aka "Model"), and
"Model Name" are correctly outputed, but "CPU MHz" not (because we
don't have a CPUFreq driver yet).
наб [Wed, 15 Mar 2023 15:16:48 +0000 (16:16 +0100)]
wall: use fputs_careful()
LINE_MAX only applies to teletypes in canonical mode: when stdin is a
file, it could still very much tear; start off at 512 for the sprintf(),
then use getline() like in write.
The line wrapping has one suboptimal edge-case:
$ wall < all
Broadcast message from nabijaczleweli@tarta (pts/4) (Tue Mar 14 22:31:25
2023):
^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^[^\^]^^^_
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ
KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~^?\200\201\202\203\204\205\206
\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232
\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256
\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302
\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326
\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352
\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376
\377
but that's a pathological input, and the result is still infinitely
better than it was before, so fixing that is more trouble than it's
worth.
наб [Wed, 15 Mar 2023 15:16:43 +0000 (16:16 +0100)]
wall: convert homebrew buffering to open_memstream()
The struct buffer system duplicates a plethora of standard I/O
functions (including a fork of fputc_careful())
and adds a lot of complexity ‒ open_memstream() is standard,
and fits perfectly into this niche
наб [Wed, 15 Mar 2023 15:16:31 +0000 (16:16 +0100)]
write: correctly handle wide characters
Do this by replacing fputc_careful() (notice that the description said
it's locale-aware ‒ it very much is /not/), with a fputs_careful() which
does the same thing, but if it were to output a byte in the \123 format,
first it checks whether this byte starts a valid multibyte character.
If it does, and that character is printable, write it verbatim.
This means that
echo 'foo åäö ąęćźżń bar' | write nabijaczleweli pts/4
instead of
foo \303\245\303\244\303\266
\304\205\304\231\304\207\305\272\305\274\305\204 bar
yields
foo åäö ąęćźżń bar
or, more realistically, from a message I got earlier today,
Filip powiedzia\305\202 \305\274e zap\305\202aci jutro
becomes
Filip powiedział że zapłaci jutro
Invalid/non-printable sequences get processed as before.
Line reading in write must become getline() to avoid dealing with
partial characters: for example on input consisting solely of
ąęćźżń, where every {1} is an instance, the output would be
{42}ąęć\305\272żń{84}ąęćź\305\274ń{84}ąęćźż\305\204{39}
with just fixed-512 fgets()
наб [Thu, 16 Mar 2023 16:08:59 +0000 (17:08 +0100)]
lsfd: error if extraneous argument given
The manual and help string both spec lsfd [options];
actually stick to that instead of ignoring subsequent arguments.
This is particularly a weird thing to allow given that lsof path
is legal and does something (either same as
lsfd -Q "MAJ:MIN == \"$(stat -c %Hd:%Ld path)\"" if it's a mountpoint or
lsfd -Q "NAME ~= '$path'" (sans the regex and escaping) otherwise).
Ian Kent [Mon, 13 Mar 2023 01:43:02 +0000 (09:43 +0800)]
mount: ignore autofs entries in mount listing
Since we can't enable use of ignoring autofs mounts that have the
"ignore" option present by default (systemd could get confused) it's
necessary to enable it for individual applications.
The mount utility is one applcation we need it for so enable it.
Signed-off-by: Ian Kent <raven@themaw.net> Cc: John Westerdale <jwesterd@redhat.com> Cc: Frank Hertz <fhirtz@redhat.com> Cc: Frank Sorenson <fsorenso@redhat.com>
Ian Kent [Mon, 13 Mar 2023 01:42:56 +0000 (09:42 +0800)]
libmount: dont ignore autofs mounts by default
Making libmount ingore autofs mounts by default can be a problem for
systemd, I remember now what the problem was.
autofs multi-mounts can be nested (and often are, think of a tree of
NFS exports) where there are autofs file system mounts within NFS
mounts and together with autofs mount triggers.
In this case systemd needs to see all the mounts at shutdown when it
is umounting the tree of mounts. We don't want to have to rely on
modifications having been made to systemd for this to work properly
so we can't make this the default behaviour in libmount.
Fixes: 22147e08c987 (libmount: use autofs mount hint to ignore autofs mount entries) Signed-off-by: Ian Kent <raven@themaw.net> Cc: John Westerdale <jwesterd@redhat.com> Cc: Frank Hertz <fhirtz@redhat.com> Cc: Frank Sorenson <fsorenso@redhat.com>
Michael Trapp [Mon, 6 Mar 2023 10:40:20 +0000 (10:40 +0000)]
libuuid: fix lib internal cache size
The lib internal cache improves throughput in high load
scenarios but for applications with a low request rate,
the cache size must be adapted to this situation.
Therefore the cache size should be changed to the current
requirements of the application during runtime.
Karel Zak [Thu, 9 Mar 2023 11:17:46 +0000 (12:17 +0100)]
Merge branch 'lsfd-packet' of https://github.com/masatake/util-linux
* 'lsfd-packet' of https://github.com/masatake/util-linux:
tests: (lsfd) add more cases for packet sockets
tests: (mkfds) don't specify a protocol in connect(2) for AF_PACKET socket
lsfd: (man) write more about NAME column
lsfd: use extra information loaded from /proc/net/packet
lsfd: add a helper function decoding interface indexes
lsfd: make items in netns_tree extensible
lsfd: simplify functions for comparing items
lsfd: (style) reformat colinfo array
Karel Zak [Thu, 9 Mar 2023 11:15:51 +0000 (12:15 +0100)]
Merge branch 'fix_cal_num_months' of https://github.com/JadingTsunami/util-linux
* 'fix_cal_num_months' of https://github.com/JadingTsunami/util-linux:
cal: Update column test to show full year output in 5-column mode.
cal: fix multi-month printing.
Toomas Losin [Sun, 5 Mar 2023 23:57:55 +0000 (15:57 -0800)]
libfdisk: Fix randomly generated GPT UUID's
Fdisk commands that create random GPT UUID's result in values that are
not UEFI-compliant being written to disk: The "g" command creates a
new GPT whose in-core DiskGUID value is entirely big-endian; the "n"
command creates a GPT partition whose in-core UniquePartitionGUID
value is entirely big-endian. Those big-endian values are written to
disk by the "w" command rather than the mix of little- and big-endian
spec'd by UEFI.
This was caused by a libfdisk patch in 2017 that was addressing
warnings about "taking address of packed member". Reading gpt.c finds
two instances of dead code which suggests that perhaps there was some
confusion between a struct and a pointer to a struct. The intent must
have been to convert the randomly generated big-endian RFC 4122 UUID
values to UEFI's mixed-endian but the confusion(?) resulted in some
dead code and non-conversion of the UUID's.
This patch corrects the breakage while still avoiding "taking address
of packed member" warnings. The "w" command will once again write
UEFI-compliant values to disk.
Fixes: 92e486f80ef8 ("libfdisk: fix guid usage of packed struct gpt_entry") Signed-off-by: Toomas Losin <tlo@lenrek.net>
Enter the namespace:
$ nsenter --all -t 470012 --env env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=cb0b69aa7aec
PROJECT=util linux
HOME=/root
Reviewed-by: Thomas Weißschuh <thomas@t-8ch.de> Reviewed-by: Karel Zak <kzak@redhat.com> Signed-off-by: u2386 <hugo.cavan2386@gmail.com>
Karel Zak [Thu, 2 Mar 2023 13:08:38 +0000 (14:08 +0100)]
libmount: (optstr) do not use xalloc.h in test
It's technically valid to use xalloc.h in the tests, but then we mix
regular malloc and xalloc in the same source file, and it makes
"make checkxalloc" using difficult.