Commit Graph
82093 Commits
Author SHA1 Message Date
Zbigniew Jędrzejewski-Szmek 9f145c2a9a sd-event: extend comment about a flex member
Follow-up for dbef4dd4f2. Everything that that
commit says is true, but — at least for me — it wasn't obvious why the code is
correct and we can do fixed-size allocations like new(struct inotify_data, 1).
2025-07-03 16:35:40 +02:00
Zbigniew Jędrzejewski-Szmek 391b507257 sd-event: typedef struct inotify_data to InotifyData 2025-07-03 16:35:40 +02:00
Zbigniew Jędrzejewski-Szmek 7eb10d69df sd-event: typedef struct inode_data to InodeData
This is an internal definition, so use the usual CamelCase typedef.
2025-07-03 16:35:40 +02:00
Zbigniew Jędrzejewski-Szmek c9ea39689f sd-event: make some more bools non-bitfield
In sd_event_source.child, we have 5 bools. If we make them each take one byte,
the structure size increases. So let's do that for the three of them, and leave
the other two (less frequently used) squished into the last byte. This allows
more efficient code to be generated, without changing the size of the struct:

$ diff -u <(objdump -S build/src/shared/libsystemd-shared-258.so.0|awk '/^static void source_io_unregister/,/^\}/') \
          <(objdump -S build/src/shared/libsystemd-shared-258.so|awk '/^static void source_io_unregister/,/^\}/')

         s->io.registered = false;
-  34d46f:      48 8b 45 d8             mov    -0x28(%rbp),%rax
-  34d473:      0f b6 90 a4 00 00 00    movzbl 0xa4(%rax),%edx
-  34d47a:      83 e2 fe                and    $0xfffffffe,%edx
-  34d47d:      88 90 a4 00 00 00       mov    %dl,0xa4(%rax)
-  34d483:      eb 04                   jmp    34d489 <source_io_unregister+0x1ca>
+  34bffe:      48 8b 45 d8             mov    -0x28(%rbp),%rax
+  34c002:      c6 80 a4 00 00 00 00    movb   $0x0,0xa4(%rax)
+  34c009:      eb 04                   jmp    34c00f <source_io_unregister+0x1be>
                 return;
2025-07-03 16:33:33 +02:00
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