Zbigniew Jędrzejewski-Szmek
ea51623345
sd-event: drop some bitfield specifiers from struct sd_event_source
...
This does not change the size of the structure, because the size is determined
by .child, which has a 128-byte siginfo_t field. But by dropping the specifiers
we let the compiler generate code that operates on full bytes instead of having
to play with bitmasks, see second diff below.
Also move the bools in .memory_pressure into a gap to save a few bytes on
initialization.
$ diff -U100 <(pahole build/src/shared/libsystemd-shared-258.so.0 | awk '/struct sd_event_source/,/^}/') \
<(pahole build/src/shared/libsystemd-shared-258.so | awk '/struct sd_event_source/,/^}/')
--- /proc/self/fd/11 2025-06-08 13:16:55.614738334 +0200
+++ /proc/self/fd/12 2025-06-08 13:16:55.615738386 +0200
@@ -1,109 +1,109 @@
struct sd_event_source {
WakeupType wakeup; /* 0 4 */
unsigned int n_ref; /* 4 4 */
sd_event * event; /* 8 8 */
void * userdata; /* 16 8 */
sd_event_handler_t prepare; /* 24 8 */
char * description; /* 32 8 */
EventSourceType type; /* 40 4 */
signed int enabled:3; /* 44: 0 4 */
_Bool pending:1; /* 44: 3 1 */
_Bool dispatching:1; /* 44: 4 1 */
_Bool floating:1; /* 44: 5 1 */
_Bool exit_on_failure:1; /* 44: 6 1 */
_Bool ratelimited:1; /* 44: 7 1 */
/* XXX 24 bits hole, try to pack */
int64_t priority; /* 48 8 */
unsigned int pending_index; /* 56 4 */
unsigned int prepare_index; /* 60 4 */
/* --- cacheline 1 boundary (64 bytes) --- */
uint64_t pending_iteration; /* 64 8 */
uint64_t prepare_iteration; /* 72 8 */
sd_event_destroy_t destroy_callback; /* 80 8 */
sd_event_handler_t ratelimit_expire_callback; /* 88 8 */
sd_event_source * sources_next; /* 96 8 */
sd_event_source * sources_prev; /* 104 8 */
RateLimit rate_limit; /* 112 24 */
/* --- cacheline 2 boundary (128 bytes) was 8 bytes ago --- */
unsigned int earliest_index; /* 136 4 */
unsigned int latest_index; /* 140 4 */
union {
struct {
sd_event_io_handler_t callback; /* 144 8 */
int fd; /* 152 4 */
uint32_t events; /* 156 4 */
uint32_t revents; /* 160 4 */
- _Bool registered:1; /* 164: 0 1 */
- _Bool owned:1; /* 164: 1 1 */
+ _Bool registered; /* 164 1 */
+ _Bool owned; /* 165 1 */
} io; /* 144 24 */
struct {
sd_event_time_handler_t callback; /* 144 8 */
usec_t next; /* 152 8 */
usec_t accuracy; /* 160 8 */
} time; /* 144 24 */
struct {
sd_event_signal_handler_t callback; /* 144 8 */
struct signalfd_siginfo siginfo; /* 152 128 */
/* --- cacheline 4 boundary (256 bytes) was 24 bytes ago --- */
int sig; /* 280 4 */
_Bool unblock; /* 284 1 */
} signal; /* 144 144 */
struct {
sd_event_child_handler_t callback; /* 144 8 */
siginfo_t siginfo; /* 152 128 */
/* --- cacheline 4 boundary (256 bytes) was 24 bytes ago --- */
pid_t pid; /* 280 4 */
int options; /* 284 4 */
int pidfd; /* 288 4 */
_Bool registered:1; /* 292: 0 1 */
_Bool pidfd_owned:1; /* 292: 1 1 */
_Bool process_owned:1; /* 292: 2 1 */
_Bool exited:1; /* 292: 3 1 */
_Bool waited:1; /* 292: 4 1 */
} child; /* 144 152 */
struct {
sd_event_handler_t callback; /* 144 8 */
} defer; /* 144 8 */
struct {
sd_event_handler_t callback; /* 144 8 */
} post; /* 144 8 */
struct {
sd_event_handler_t callback; /* 144 8 */
unsigned int prioq_index; /* 152 4 */
} exit; /* 144 16 */
struct {
sd_event_inotify_handler_t callback; /* 144 8 */
uint32_t mask; /* 152 4 */
/* XXX 4 bytes hole, try to pack */
struct inode_data * inode_data; /* 160 8 */
sd_event_source * by_inode_data_next; /* 168 8 */
sd_event_source * by_inode_data_prev; /* 176 8 */
} inotify; /* 144 40 */
struct {
int fd; /* 144 4 */
+ _Bool registered; /* 148 1 */
+ _Bool locked; /* 149 1 */
+ _Bool in_write_list; /* 150 1 */
- /* XXX 4 bytes hole, try to pack */
+ /* XXX 1 byte hole, try to pack */
sd_event_handler_t callback; /* 152 8 */
void * write_buffer; /* 160 8 */
size_t write_buffer_size; /* 168 8 */
uint32_t events; /* 176 4 */
uint32_t revents; /* 180 4 */
sd_event_source * write_list_next; /* 184 8 */
/* --- cacheline 3 boundary (192 bytes) --- */
sd_event_source * write_list_prev; /* 192 8 */
- _Bool registered:1; /* 200: 0 1 */
- _Bool locked:1; /* 200: 1 1 */
- _Bool in_write_list:1; /* 200: 2 1 */
- } memory_pressure; /* 144 64 */
+ } memory_pressure; /* 144 56 */
}; /* 144 152 */
/* size: 296, cachelines: 5, members: 26 */
/* sum members: 292 */
/* sum bitfield members: 8 bits, bit holes: 1, sum bit holes: 24 bits */
/* last cacheline: 40 bytes */
};
Example diff in assembly:
$ diff -u <(objdump -S build/src/shared/libsystemd-shared-258.so.0|awk '/^static void event_source_time_prioq_reshuffle/,/^\}/') \
<(objdump -S build/src/shared/libsystemd-shared-258.so|awk '/^static void event_source_time_prioq_reshuffle/,/^\}/')
d->needs_rearm = true;
- 34d80e: 48 8b 45 f8 mov -0x8(%rbp),%rax
- 34d812: 0f b6 50 20 movzbl 0x20(%rax),%edx
- 34d816: 83 ca 01 or $0x1,%edx
- 34d819: 88 50 20 mov %dl,0x20(%rax)
- 34d81c: eb 01 jmp 34d81f <event_source_time_prioq_reshuffle+0x12c>
+ 34d7c3: 48 8b 45 f8 mov -0x8(%rbp),%rax
+ 34d7c7: c6 40 20 01 movb $0x1,0x20(%rax)
+ 34d7cb: eb 01 jmp 34d7ce <event_source_time_prioq_reshuffle+0x126>
return; /* no-op for an event source which is neither a timer nor ratelimited. */
- 34d81e: 90 nop
+ 34d7cd: 90 nop
2025-07-03 16:17:42 +02:00
Daan De Meyer
1b4645d762
forward: Drop socklen_t forward declaration
...
This is glibc specific and doesn't exist on musl, since removing only
means adding one more include in selinux-util.h, let's drop it.
Fixes #37779
2025-06-08 10:58:56 +09:00
Lennart Poettering
1434ccf709
nspawn: do basic port to PidRef
...
THis is sometimes a bit superficial, but in many cases allows us to use
pidfd for various of our operations.
2025-06-07 00:28:07 +02:00
Lennart Poettering
790f516217
machined: open up machine registration for unpriv clients also via D-Bus
...
This is already opened up via Varlink. Let's also open it up via D-Bus
with the same polikit operation.
2025-06-07 00:27:11 +02:00
Lennart Poettering
02927af799
machined: properly open up all missing method calls via D-Bus to unpriv clients
...
These method calls all already have polkit hookup, hence actually allow
them to go through on all levels.
This is mostly playing catchup with a variety of calls added over the
years.
2025-06-06 22:15:25 +02:00
Zbigniew Jędrzejewski-Szmek
8ec2e177b0
coredump: fix 0-passed-as-pointer warning
2025-06-06 22:15:03 +02:00
Lennart Poettering
ac8c558629
nspawn: start polkit agent while we do polkit operations
...
Let's make sure unpriv nspawn can acquire privs even when invoked
outside of a desktop environment that has a polkit agent registered.
2025-06-06 22:14:50 +02:00
Yu Watanabe
b5bd717fcd
test: extend timeout and enable generating debugging logs
...
Not sure why the test failed, but maybe the test environment is too
slow? Even this does not fix the failure, by enabling debugging logs,
this hopefully provides more useful information for debugging.
For issue #37685 .
2025-06-06 19:43:32 +01:00
Yu Watanabe
c928defc08
run: ignore bus connection error in acquiring invocation ID ( #37763 )
...
This introduce bus_error_is_connection(), and use it where applicable.
Then, this makes connection errors in acquiring invocation ID by
systemd-run handled gracefully, like we already do other places.
Fixes #37675 .
2025-06-07 01:55:21 +09:00
Yu Watanabe
6c2558a2fc
tree-wide: allow building with -Wgnu-variable-sized-type-not-at-end option for clang ( #37499 )
...
Follow-up for #36993 .
Closes #37497 .
2025-06-07 01:02:38 +09:00
Yu Watanabe
eb09b4b546
run: ignore bus connection error in acquiring invocation ID
...
Similar to 2b983b43c6 , but for acquiring
invocation ID.
Fixes #37675 .
2025-06-07 00:01:15 +09:00
Yu Watanabe
687a92a1b6
sd-device: replace '!' with '/' before calling sd_device_new_from_subsystem_sysname()
...
Device ID uses device directory name as is, hence may contain '!', but
sd_device_new_from_subsystem_sysname() expects that the input is sysname.
So, we need to replace '!' with '/'.
Follow-up for 1393c5a2a4 .
Fixes #37711 .
2025-06-06 23:59:02 +09:00
Lennart Poettering
52c9a3c392
codeql: taint basename()
2025-06-06 23:53:53 +09:00
Lennart Poettering
0f64d570cb
repart: fix CopyBlocks=auto for verity-sig partitions, even harder ( #37704 )
...
@DaanDeMeyer, this is for you.
Seems to work great here to duplicate ParticleOS onto another disk.
2025-06-06 16:06:26 +02:00
Lennart Poettering
113006a1f3
tree-wide: basename -> path_extract_filename ( #34906 )
2025-06-06 15:53:28 +02:00
Yu Watanabe
ac004f4cc9
tree-wide: introduce bus_error_is_connection() and use it where applicable
2025-06-06 21:42:25 +09:00
Lennart Poettering
6513646c62
repart: use partition_designator_is_verity_sig() + partition_designator_is_verity() more
2025-06-06 12:37:44 +02:00
Lennart Poettering
d3a6606cea
repart: try harder to find verity-sig partitions for CopyBlocks=auto
...
verity-sig partitions are not kernel concepts, hence dm-verity won't
link them for us from the slaves/ subdir in sysfs. Hence let's instead
look up the partition via udev's database.
Hence: when we search for the data+verity+verity-sig partitions then
search for the first two as usual, but search for the latter by looking
up the udev props on the first two, and then following the paths
provided therein.
Fixes : #34835
2025-06-06 12:37:44 +02:00
Lennart Poettering
188467dfd9
udev: add udev properties that point to verity/verity sig metadata partitions from data partitions
...
This extends the dissect_image builtin to actually add device node
references to the device nodes where the associated data is placed, if
we can find it.
This is kept very generic, and independent from the roothash properties
and suchlike, since it makes sense to make it possible to set these
properties also independently of the dissect-image builtin.
The device path is a /dev/disk/by-diskseq/ symlink, so that we have
stable reference that are not subject to dev_t reuses.
2025-06-06 12:37:41 +02:00
Lennart Poettering
870d6da909
gpt: add partition_designator_is_verity() helper
...
And rework partition_designator_is_verity_sig() to be based on
partition_verity_sig_to_data(), so that we don't have to maintain two
lists of verity sig partition types.
2025-06-06 12:37:20 +02:00
Yu Watanabe
f2a8cc943d
sd-lldp-rx: add VLAN ID parsing ( #37725 )
...
While the `port_vlan_id` field was already present in the
`sd_lldp_neighbor`, it wasn't currently parsed from the LLDP packet.
Added support for that as well as a small parsing test.
Closes #28354 .
2025-06-06 19:12:48 +09:00
Yu Watanabe
b1bfa60254
TODO: drop completed entry
2025-06-06 19:09:49 +09:00
Yu Watanabe
44875628ff
systemctl: replace basename() with path_extract_filename()
2025-06-06 19:06:48 +09:00
Yu Watanabe
59829bb37a
delta: rework how enumerate files
2025-06-06 19:06:48 +09:00
A. Wilcox
6b783209a8
tree-wide: basename -> path_extract_filename
2025-06-06 19:06:48 +09:00
Lennart Poettering
ee96d65e50
update TODO
2025-06-06 12:03:16 +02:00
Lennart Poettering
f7a79c7c43
generator: improve scope check ( #37761 )
...
Fixes : #35723
2025-06-06 12:02:25 +02:00
Lorenzo Arena
6b78f13b7e
network: test-lldp-rx: set more variable as static const
2025-06-06 09:35:11 +02:00
Lorenzo Arena
496b21ab8e
sd-lldp-rx: add VLAN ID parsing
...
Closes #28354 .
2025-06-06 09:35:11 +02:00
Lennart Poettering
da12ce285b
generator: check $SYSTEMD_SCOPE rather than cgroup membership
...
This is more explicit and ensures that even in testing environments we
operate the same way.
As side effect it also avoids the mess around SELinux blocking access to
cgroupfs.
Fixes : #35723
2025-06-06 09:04:45 +02:00
Lennart Poettering
d65dc4c593
core: break lines in some overly long function calls
2025-06-06 09:04:45 +02:00
Lennart Poettering
1de31f23a0
conf-files: use proper enum for flags parameters
2025-06-06 09:04:38 +02:00
Lennart Poettering
aab61a4ebc
journal: concurrent update fixes ( #37757 )
...
Fixes : #35229 #32436
2025-06-06 08:24:16 +02:00
Yu Watanabe
eefcf8de64
core: adding CGroup for io.systemd.Unit.List (second PR) ( #37646 )
...
This PR adds CGroup context/runtime for io.systemd.Unit.List method.
This is follow up for https://github.com/systemd/systemd/pull/37432 .
2025-06-06 06:07:35 +09:00
Yu Watanabe
3b1850d906
Bugprone argument comment 10 ( #37755 )
...
Follow up from https://github.com/systemd/systemd/pull/37712
2025-06-06 06:07:05 +09:00
Lennart Poettering
5ee8b3edb3
journal: replace a bunch of assert() with friendlier checks
...
We should not rely that data stored in the journal files remains
entirely untouched at all times. Because we unallocate files, data might
go away any time. Hence, never assert() on any expectations on what the
file contains. Instead, handle it more gracefully as a corruption issue,
and return EBADMSG.
Fixes : #35229 #32436
2025-06-05 22:31:41 +02:00
Lennart Poettering
813facd3ba
journal: add 'const' at one more place
2025-06-05 22:31:40 +02:00
Lennart Poettering
b16cb30edd
journal: determine compression once, not twice
...
This is just paranoia: let's determine the compression to use once,
instead of twice, after all te data is in journal files which might be
corrupted any time, and it would be weird if we came to different
results here each time.
2025-06-05 22:31:39 +02:00
Lennart Poettering
7d52a60843
journal: use EBADMSG for invalid data in file mmap
...
We must assume that any data in the mmap can change anytime because the
file is deallocated or similar. Let's strictly use EBADMSG for reporting
invalid file contents though (as opposed to using EINVAL if our own code
passes a wrong parameter somwhere).
2025-06-05 22:31:21 +02:00
Mike Yuan
29d1082002
core/varlink: split out dynamic-user stuff into its own source files
2025-06-06 04:31:42 +09:00
SoloSaravanan
4344ef73a0
hwdb: Acer Nitro ANV15-51 Mic Toggle
2025-06-05 18:43:45 +01:00
Lennart Poettering
9ace4f1c30
mountfsd: support processing block devices with MountImage() ( #37746 )
...
Fixes : #35111
2025-06-05 16:51:06 +02:00
Daan De Meyer
fdbfda7245
core: Various fixes for cgroup and pid namespaces ( #36815 )
2025-06-05 15:21:59 +02:00
Daan De Meyer
a292b55980
meson: Don't fail install script if file doesn't exist
...
Depending on which optional features are enabled, the NSS module
might not have been built, which means the custom install script
will fail to remove the file. Let's pass -f so it succeeds regardless
of whether the file exists or not.
2025-06-05 15:18:30 +02:00
Lennart Poettering
c91f1a3db8
man: suggest using --unlock-tpm2-device=auto in cryptenroll example
...
When refreshing a tpm2 enrollment, it makes sense to use tpm2 to unlock
the device.
Fixes : #35279
2025-06-05 14:10:32 +01:00
Daan De Meyer
d1ee3889cf
meson: Add libmount feature
...
Let's reduce the dependencies required to build just libsystemd by
making libmount optional. The meson disabler feature makes this quite
trivial.
2025-06-05 14:51:03 +02:00
Lennart Poettering
6315106268
add CITATION.cff file
...
As per spec: https://citation-file-format.github.io/
Fixes : #35260
2025-06-05 14:39:20 +02:00
Lennart Poettering
c882e7f124
mountfsd: slightly relax check on image fds
...
Fixes : #35111
2025-06-05 14:28:33 +02:00
Lennart Poettering
01e82dfa96
dissect-image: port to varlink_callbo_and_log()
2025-06-05 14:28:31 +02:00
Lennart Poettering
a589e1bd9e
varlink-util: format system errors via %m in varlink_call_and_log()
...
This kinda does what bee59ab901 did for
varlinkctl also for the generic varlink_call_and_log() handler.
2025-06-05 14:28:14 +02:00