Thomas Weißschuh [Tue, 19 May 2026 20:54:44 +0000 (22:54 +0200)]
tests: fold ts_failed_subtest into ts_failed
The differences between ts_failed_subtest and ts_failed are miniminal.
Make ts_failed usable from subtest context and remove the now unnecessary
ts_failed_subtest.
Thomas Weißschuh [Tue, 19 May 2026 20:46:01 +0000 (22:46 +0200)]
tests: fold ts_skip_subtest into ts_skip
The differences between ts_skip_subtest and ts_skip are miniminal.
Make ts_skip usable from subtest context and remove the now unnecessary
ts_skip_subtest.
This allows subtests to make use of all of the convenient helpers built
around ts_skip.
Leonid Znamenok [Tue, 19 May 2026 18:41:57 +0000 (22:41 +0400)]
tests: (cramfs) restore umask after creating test input files
The cramfs doubles/mkfs/mkfs-endianness tests set "umask 133" to get
deterministic permission bits on the test input files. The umask was
never restored, so it stayed in effect for every command run later in
the test, including the build-tree mount/umount/mkfs.cramfs helpers.
When such a helper is a libtool wrapper script that has to relink its
real binary on first use (fast_install=yes), the relink runs under the
leaked umask 133 and the resulting .libs/lt-* binary is created without
execute bits (mode 0644). The wrapper then fails to exec it with
"Permission denied" (EACCES). Because the broken binary is cached, every
subsequent test using that helper fails as well:
Karel Zak [Tue, 19 May 2026 08:54:57 +0000 (10:54 +0200)]
pam_lastlog2: fix libpam linking in autotools build
Move -lpam from LDFLAGS to LIBADD. When -lpam is in LDFLAGS it
appears on the linker command line before object files, so the
--as-needed linker flag (default on Fedora) discards it before
seeing any undefined PAM symbols. This results in pam_lastlog2.so
missing libpam.so in its ELF NEEDED entries.
The module then fails to load with dlopen() if the calling process
does not itself link against libpam (e.g., systemd in Fedora 44+):
PAM unable to dlopen(pam_lastlog2.so): undefined symbol: pam_syslog
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2453457 Signed-off-by: Karel Zak <kzak@redhat.com>
Karel Zak [Tue, 19 May 2026 08:18:44 +0000 (10:18 +0200)]
libblkid: (dasd) guard against uint64 underflow in LDL size calculation
When an LDL volume label has ldl_version < 0xf2, the partition
size is derived from the device size. If the device is smaller
than the partition start offset (3 blocks), the subtraction
wraps around producing a bogus partition size.
Karel Zak [Tue, 19 May 2026 08:12:41 +0000 (10:12 +0200)]
libblkid: (dasd) add buffer size guards to helper functions
Add explicit buffer size parameters to dasd_get_volser(),
dasd_get_dsnam(), is_dasd_cdl_label(), is_dasd_ldl_label()
and is_dasd_f4_label() so that these functions can protect
against buffer overflows without relying on callers to pass
correctly sized buffers.
The conversion functions still follow the DASD standard field
sizes (DASD_VOLSER_LENGTH, sizeof DS1DSNAM), but clamp to the
buffer size as a safety net. The label detection functions
derive their minimum sizes from the actual struct offsets and
magic constants rather than hardcoded numbers.
Karel Zak [Mon, 18 May 2026 09:59:17 +0000 (11:59 +0200)]
Merge branch 'macos' of https://github.com/t-8ch/util-linux
* 'macos' of https://github.com/t-8ch/util-linux:
ci: add a macos workflow
test_threads_create: add a macOS fallback
meson: gate test_child_create on sys/prctl.h
ctrlaltdel: pass correct integer types to printf
meson: gate irqtop on sys/epoll.h and cpu_set_t
meson: gate lsirq on cpu_set_t
meson: gate lsipc on LINUX
meson: gate pivot_root on LINUX
meson: gate lscpu on LINUX and cpu_set_t
meson: add build-lscpu option
Karel Zak [Mon, 18 May 2026 09:36:24 +0000 (11:36 +0200)]
Merge branch 'fincore_test' of https://github.com/cgoesche/util-linux-fork
* 'fincore_test' of https://github.com/cgoesche/util-linux-fork:
tests: (fincore) add --cachestat option test
fincore: define HAVE_CACHESTAT on fallback
Karel Zak [Mon, 18 May 2026 08:45:20 +0000 (10:45 +0200)]
readprofile: (man) clarify not designed for privilege-elevation use
Add a note to the DESCRIPTION that readprofile is a diagnostic tool
not intended for security-sensitive contexts (setuid, setgid, sudo).
Remove the suggestion to make readprofile set-user-ID 0 from the -r
option, and drop sudo from the example.
ionmeo [Wed, 13 May 2026 15:57:11 +0000 (11:57 -0400)]
license: switch from BSD 4-clause to 3-clause
Remove the advertising clause (clause 3) and renumber the
non-endorsement clause from 4 to 3 in all files containing the
BSD 4-clause license, following the notice issued by UC Berkeley
(quoted below).
Additional changes:
- Add SPDX-License-Identifier: BSD-3-Clause to each affected file.
- Remove the BSD-4-Clause-UC entry from README.licensing.
- Delete Documentation/licenses/COPYING.BSD-4-Clause-UC.
To all licensees, and distributors of software officially
licensed under a UC Berkeley version of the BSD license:
As you may know, certain software officially licensed by UC
Berkeley using the original 4-clause BSD license required that
further distributions of products containing all or portions of
the software acknowledge within their advertising materials that
such products contain software developed by UC Berkeley and its
contributors.
Specifically, the provision reads:
"3. All advertising materials mentioning features or use of
this software must display the following acknowledgement:
This product includes software developed by the University
of California, Berkeley and its contributors."
Effective immediately, licensees and distributors are no longer
required to include the acknowledgement within advertising
materials. Accordingly, the advertising clause 3 of the original
4-clause BSD license for any and all software officially licensed
by UC Berkeley, is hereby deleted in its entirety.
Michael Katz
Executive Director
Intellectual Property and Industry Research Alliances
University of California, Berkeley
Karel Zak [Thu, 14 May 2026 11:05:12 +0000 (13:05 +0200)]
Merge branch 'PR/write-utmp-and-cleanup' of https://github.com/karelzak/util-linux-work
* 'PR/write-utmp-and-cleanup' of https://github.com/karelzak/util-linux-work:
write: cleanup indentation and whitespace
write: use mem2strcpy() for utmp strings
write: always use utmp as fallback
Furkan Caliskan [Wed, 13 May 2026 09:45:09 +0000 (12:45 +0300)]
chrt: Add support for SCHED_FLAG_DL_OVERRUN
When set on a SCHED_DEADLINE task, the kernel sends SIGXCPU to the
task if it exceeds its runtime budget within a period. Without this
flag the task is silently throttled until the next period. Useful
for real-time applications that need to detect when they are not
meeting their timing requirements.
Add -O/--deadline-overrun option to allow users to toggle this
feature using the deadline scheduling class.
Karel Zak [Wed, 13 May 2026 09:22:59 +0000 (11:22 +0200)]
write: use mem2strcpy() for utmp strings
The utmp fields ut_user and ut_line are fixed-size buffers not
guaranteed to be null-terminated. Using strncmp(), snprintf() or
memcmp() directly on these fields can read beyond the buffer content.
Use mem2strcpy() to safely copy utmp fields into properly terminated
local buffers before any string operations.
Karel Zak [Wed, 13 May 2026 09:13:03 +0000 (11:13 +0200)]
write: always use utmp as fallback
The systemd session list may not cover all terminals (e.g., screen,
tmux, or old-style logins). Remove the "if systemd else utmp" pattern
and always fall through to utmp when the target user or tty is not
found in systemd sessions.
Also make sd_get_sessions() and sd_session_get_username() failures
non-fatal — silently fall through to utmp instead of calling errx().
Addresses: https://redhat.atlassian.net/browse/RHEL-157244 Signed-off-by: Karel Zak <kzak@redhat.com>
Furkan Caliskan [Mon, 11 May 2026 14:10:30 +0000 (17:10 +0300)]
chrt: Add support for (GRUB) bandwidth reclaim
The SCHED_DEADLINE policy supports the (GRUB) Greedy Reclamation
of Unused Bandwidth algorithm. This allows tasks to reclaim
bandwidth that are left over by other deadline tasks that finish
their work early, or voluntarily yield the cpu.
Currently, chrt has no way to set the SCHED_FLAG_RECLAIM bit in
the sched_flags field of the sched_attr structure.
Add -G/--reclaim-grub option to allow users to toggle this feature
using the deadline scheduling class.
[kzak@redhat.com: - add missing #ifdef SCHED_FLAG_RECLAIM guards
- add comments to #else/#endif for SCHED_DEADLINE block] Signed-off-by: Furkan Caliskan <frn1furkan10@gmail.com>
Karel Zak [Tue, 12 May 2026 16:01:52 +0000 (18:01 +0200)]
tests: (getino) skip namespace subtests when not supported
Skip namespace subtests when the getino namespace ioctl is not
supported, and skip individual subtests when the corresponding
/proc/self/ns/* entry is not readable.
Karel Zak [Tue, 12 May 2026 13:10:02 +0000 (15:10 +0200)]
tests: (getino) skip namespace subtests when unshare is not supported
The namespace subtests use unshare to create isolated namespaces, but
this fails on QEMU and restricted CI containers where namespace
creation is not available. Skip the namespace subtests in this case.
Karel Zak [Tue, 12 May 2026 11:53:48 +0000 (13:53 +0200)]
Merge branch 'chrt_pidino_support' of https://github.com/cgoesche/util-linux-fork
* 'chrt_pidino_support' of https://github.com/cgoesche/util-linux-fork:
chrt: improve error message for invalid policy value
chrt: remove redundant initializations to 0 in struct members
chrt: deduplicate code for process tasks retrieval
chrt: report actual PID in error message when 0 is specified
tests: (chrt) simple PID:inode address format test
chrt: support the 'PID:inode' address format
Karel Zak [Tue, 12 May 2026 11:33:22 +0000 (13:33 +0200)]
tests: (lsblk) add bcachefs multi-device regression test
Add a dump from a system with a two-device bcachefs filesystem
(sdc1 + sdc2 mounted at /mnt/test) to verify that mount point
propagation works for all member devices.
Karel Zak [Tue, 12 May 2026 11:33:17 +0000 (13:33 +0200)]
tests: (lsblk) capture multi-device filesystem sysfs in mk-input.sh
Add capture of /sys/fs/btrfs/<uuid>/devices/ and
/sys/fs/bcachefs/<uuid>/dev-*/block symlinks so that dumps
generated on systems with multi-device btrfs or bcachefs
filesystems include the sysfs data needed for mount propagation
testing.
Also add a "mnt" output with KNAME,FSTYPE,MOUNTPOINT,MOUNTPOINTS
columns.
Karel Zak [Mon, 11 May 2026 13:25:19 +0000 (15:25 +0200)]
lsblk: add bcachefs multi-device mount propagation
Add support for bcachefs multi-device filesystems to show mount points
on all member devices, not just the one listed in mountinfo.
The implementation follows the existing btrfs/ZFS multi-device group
framework in mnt.c:
- Enumerate member devices via /sys/fs/bcachefs/<uuid>/dev-N/block
symlinks (similar to btrfs /sys/fs/btrfs/<uuid>/devices/).
- Cache and propagate mount entries to all group members.
The mountinfo entry caching (previously inlined in the btrfs scanner)
has been refactored into the shared fs_devs_cache_mounts() function
used by both btrfs and bcachefs. The function now also filters
mountinfo entries by filesystem type to avoid unnecessary comparisons
with unrelated mounts.
Additionally, fs_devs_add_filesystem() now skips duplicate entries to
prevent the same mount from being cached multiple times.
Note that bcachefs uses a non-standard colon-separated source format in
mountinfo (e.g. "/dev/sdc1:/dev/sdc2") rather than a single device
path. This format is not recognized by libmount's mnt_fs_streq_srcpath(),
so an extra is_source_member() helper is used to match individual
device paths within the compound source string.
Addresses: https://github.com/util-linux/util-linux/discussions/4316 Signed-off-by: Karel Zak <kzak@redhat.com>
Karel Zak [Tue, 12 May 2026 10:49:52 +0000 (12:49 +0200)]
script: fix "--" separator when used as option argument
The commit 7268e79b added "+" to the getopt_long() options string and
post-getopt "--" detection to support commands after the "--" separator.
The "+" prefix stops getopt at the first non-option argument, which
broke backward compatible "script file -c command" usage.
The commit 70507ab9ea fixed this by pre-scanning argv for "--" before
getopt and removing the "+" prefix to restore GNU getopt argument
permutation. However, the pre-scan was too naive — it treated any "--"
in argv as the separator, even when "--" was used as an argument to an
option (e.g., -I -- or --log-in --). The value can come from a
variable, e.g., script -I "$VAR" will break if $VAR is --.
Note that getopt_long() behavior with "--" depends on the option type:
- required_argument: "--" is consumed as the option value
- optional_argument: "--" is NOT consumed, treated as end-of-options
- no_argument: "--" is treated as end-of-options
Without "+" getopt also permutes arguments, which means non-option
arguments before "--" (like the outfile) become inaccessible after
getopt sets optind past "--". The pre-scan approach is necessary to
split the command part out of argv before getopt runs.
Fix the pre-scan by adding ul_find_argv_separator() to optutils.h.
The helper ul_is_option_with_arg() checks if a given argv entry is an
option that expects its value in the next argv entry, handling both
long options (via o->name) and short/bundled options (via o->val).
The separator search scans backward from each "--" counting consecutive
options-with-required-arg. They pair up (each consumes the next as its
value), so odd count means "--" is consumed as an option argument, even
count means it is the real separator. This correctly handles chained
cases like --log-in --log-in -- where the second --log-in is a value
for the first and "--" is the separator.
Karel Zak [Mon, 11 May 2026 11:25:20 +0000 (13:25 +0200)]
Merge branch 'PR/tests-subtest-lifecycle' of https://github.com/karelzak/util-linux-work
* 'PR/tests-subtest-lifecycle' of https://github.com/karelzak/util-linux-work:
tests: (findmnt) add missing ts_finalize_subtest
tests: add ts_finalize_subtest before return in functions
tests: add ts_finalize_subtest before continue in loops
tests: move ts_finalize_subtest after if/else blocks
tests: add subtest status tracking to ts_finalize_subtest
Karel Zak [Mon, 11 May 2026 11:24:58 +0000 (13:24 +0200)]
Merge branch 'PR/build-sys-libeconf-split' of https://github.com/karelzak/util-linux-work
* 'PR/build-sys-libeconf-split' of https://github.com/karelzak/util-linux-work:
meson: check slang headers only when slang library is found
meson: rename logindefs_c to lib_common_logindefs
meson: split shells.c out of lib_common into lib_common_shells
build-sys: drop libcommon_shells from binaries that only need ul_default_shell
lib: split ul_default_shell() from shells.c into default_shell.c
Karel Zak [Mon, 11 May 2026 09:59:23 +0000 (11:59 +0200)]
tests: (lsfd) fix IPv4 label in lsfd_check_udp_lite skip message
The local variable $ip is reset to empty for IPv4 (to form the
"udp" command name), so the skip message "no UDP-Lite available
(IPv$ip)" was printing "(IPv)" instead of "(IPv4)". Use $1
which retains the original argument.
Karel Zak [Mon, 11 May 2026 09:58:44 +0000 (11:58 +0200)]
Merge branch 'test_mkfds--make-udplite-optional' of https://github.com/masatake/util-linux
* 'test_mkfds--make-udplite-optional' of https://github.com/masatake/util-linux:
tests: (lsfd/mkfds-udp*) make UDPLite related test cases skippable
tests: (lsfd/option-inet{,-udp}) make UDPLite related test case skippable
tests: (lsfd) add a function checking the availability of UDPLite socket
tests: (lsfd::mkfds-udp) fix confusion between UDP and UDPLite
Karel Zak [Mon, 11 May 2026 09:12:43 +0000 (11:12 +0200)]
Merge branch 'fix/bits_return_value_check' of https://github.com/echoechoin/util-linux
* 'fix/bits_return_value_check' of https://github.com/echoechoin/util-linux:
bits: add --fail-width option to reject out-of-range CPU numbers
bits: add test for invalid token in cpulist_parse()
bits: improve error message for out-of-range cpulist_parse()
cpuset: Validate full tokens in cpulist_parse()
bits: fix return value check for cpulist_parse()
Karel Zak [Wed, 6 May 2026 11:28:16 +0000 (13:28 +0200)]
tests: add ts_finalize_subtest before continue in loops
In loops where ts_skip_subtest is called before continue,
add ts_finalize_subtest to properly close the subtest block
before skipping to the next iteration.
Karel Zak [Wed, 6 May 2026 11:25:05 +0000 (13:25 +0200)]
tests: move ts_finalize_subtest after if/else blocks
Move ts_finalize_subtest out of individual if/else branches and
place it unconditionally after the entire block. This enforces
the ts_init_subtest/ts_finalize_subtest pairing introduced in
the previous commit.
Previously, ts_skip_subtest or ts_failed_subtest was used as a
terminal action instead of ts_finalize_subtest. Now each subtest
is a proper init/finalize block, with ts_skip_subtest and
ts_failed_subtest only setting state within the block.
Karel Zak [Wed, 6 May 2026 11:19:11 +0000 (13:19 +0200)]
tests: add subtest status tracking to ts_finalize_subtest
Add TS_SUBFAILED and TS_SUBSKIPPED flags that are set by
ts_failed_subtest and ts_skip_subtest respectively, and
cleared by ts_init_subtest.
ts_finalize_subtest now checks these flags before running the
diff comparison. If the subtest was already marked as failed or
skipped, it respects that status instead of unconditionally
running ts_gen_diff (which could report OK over a previous
failure).
Remove ts_init_core_env from ts_skip_subtest — environment
reset is now handled exclusively by ts_finalize_subtest, making
ts_init_subtest/ts_finalize_subtest the only paired open/close
for every subtest.
Add runtime guards: ts_init_subtest and ts_finalize both call
ts_failed if TS_SUBNAME is still set from a previous subtest
that was never finalized. This makes missing ts_finalize_subtest
calls a hard test failure, detectable in CI.
Karel Zak [Mon, 4 May 2026 12:15:45 +0000 (14:15 +0200)]
meson: check slang headers only when slang library is found
The slcurses.h and slang*.h headers were detected unconditionally
in the generic header check loop. When the headers existed on the
system but slang was not actually used (ncurses preferred), irqtop
and cfdisk would include slcurses.h instead of ncurses.h, causing
build failures for ncurses-specific functions like vw_printw() and
resizeterm().
Move slang header checks after slang library detection, guarded by
lib_slang.found(), matching the autotools behavior where these
headers are only checked with --with-slang.
Karel Zak [Mon, 4 May 2026 12:04:34 +0000 (14:04 +0200)]
meson: rename logindefs_c to lib_common_logindefs
Rename the logindefs static library variable from logindefs_c to
lib_common_logindefs for consistency with lib_common_shells and
the autotools libcommon_logindefs.la naming.
Karel Zak [Mon, 4 May 2026 12:02:39 +0000 (14:02 +0200)]
meson: split shells.c out of lib_common into lib_common_shells
Remove shells.c from lib_common_sources and build it as a separate
static library (lib_common_shells) with lib_econf dependency.
Link lib_common_shells only into binaries that use the econf-dependent
shell enumeration functions (is_known_shell, print_shells,
open_etc_shells): chsh, su, runuser, login.
Other binaries that only need ul_default_shell() get it from
lib_common via default_shell.c and don't need libeconf.
Karel Zak [Mon, 4 May 2026 11:59:47 +0000 (13:59 +0200)]
build-sys: drop libcommon_shells from binaries that only need ul_default_shell
Now that ul_default_shell() lives in libcommon, binaries that only
call this function no longer need to link against libcommon_shells
(and transitively libeconf).
Remove libcommon_shells linkage from: flock, unshare, nsenter,
script, scriptlive, more.
Keep libcommon_shells for: login, chsh, su, runuser — these use
is_known_shell(), print_shells() or open_etc_shells() which depend
on libeconf.
Karel Zak [Mon, 4 May 2026 11:57:41 +0000 (13:57 +0200)]
lib: split ul_default_shell() from shells.c into default_shell.c
Move ul_default_shell() and UL_SHELL_* flags into a new
lib/default_shell.c and include/default_shell.h pair, and add the
new file to libcommon (autotools and meson).
ul_default_shell() has no dependency on libeconf -- it simply checks
$SHELL, passwd, and falls back to _PATH_BSHELL. Separating it from
shells.c (which depends on libeconf for /etc/shells enumeration)
allows binaries that only need the default shell lookup (flock,
script, scriptlive, more, exec_shell.c users) to avoid unnecessary
libeconf linkage.
Update callers that only use ul_default_shell() to include
default_shell.h instead of shells.h.
This patch enables support for the PID:inode address format.
It removes a sentinel value from ctl->pid that controls the PID
parsing behavior and introduces a dedicated variable parse_pid
(member of struct chrt_ctl), which makes the code a bit more
readable and coherent.
Signed-off-by: Christian Goeschel Ndjomouo <cgoesc2@wgu.edu>