1
0
mirror of https://github.com/systemd/systemd synced 2026-04-13 18:44:51 +02:00

Compare commits

..

8 Commits

Author SHA1 Message Date
YmrDtnJu
df4ec48f45 Fix journald audit logging with fields > N_IOVEC_AUDIT_FIELDS.
ELEMENTSOF(iovec) is not the correct value for the newly introduced parameter m
to function map_all_fields because it is the maximum number of elements in the
iovec array, including those reserved for N_IOVEC_META_FIELDS. The correct
value is the current number of already used elements in the array plus the
maximum number to use for fields decoded from the kernel audit message.
2022-01-21 23:12:45 +00:00
Jan Janssen
76fb85316e boot: Only build with debug symbols in developer mode
The debug symbols are of very limited use in proper deployments
unlike with regular userspace. Unless someone goes through the pain
of setting up an EFI debugger (assuming their firmware even supports
this in the first place) any provided debug symbols will just be
useless.
Debugging under QEMU is possible, but even then it is non-trivial
to set up, so anyone willing to go that far can just build in
developer mode.

Meanwhile, at least x86 firmware tends to refuse binaries that contain
debug symbols. We do strip the files when converted to PE anyway, but
the elf file needs to stay around on other arches as objcopy does not
support PE as input there.

Also, the generated debug symbols seem to be not reproducible when
building with LTO. Whether this is an issue in tooling or our side
is unclear. This works around this issue.

Fixes: #22157
2022-01-21 23:11:36 +00:00
Yu Watanabe
57cbf080b3
Merge pull request #22205 from yuwata/udevadm-info-cleanups
udevadm: keep watch directory and several cleanups
2022-01-22 02:45:36 +09:00
Daan De Meyer
e93ada9821 meson: Add missing test dependencies
Currently, running "meson build" followed by "meson test -C build"
will result in many failed tests due to missing dependencies. This
commit adds the missing dependencies to make sure no tests fail.
2022-01-22 01:56:03 +09:00
Yu Watanabe
4881a0d2d4 udevadm: add more assertions 2022-01-22 00:45:14 +09:00
Yu Watanabe
636ab00182 udevadm: simplify the code of removing udev state files 2022-01-22 00:44:51 +09:00
Yu Watanabe
9e0bd1d69b udevadm: split assertions
Then we can easily find which pointer is NULL.
2022-01-22 00:16:38 +09:00
Yu Watanabe
bd97980193 udevadm: do not remove watch directory
See the comment in the code.
2022-01-22 00:13:32 +09:00
8 changed files with 71 additions and 59 deletions

View File

@ -19,7 +19,7 @@ support_url = get_option('support-url')
support_sed = 's~%SUPPORT_URL%~@0@~'.format(support_url)
foreach file : in_files
custom_target(
catalogs += custom_target(
file,
input : file + '.in',
output: file,

View File

@ -226,7 +226,8 @@ update_dbus_docs = custom_target(
if conf.get('BUILD_MODE_DEVELOPER') == 1
test('dbus-docs-fresh',
update_dbus_docs_py,
args : ['--build-dir', project_build_root, '--test', dbus_docs])
args : ['--build-dir', project_build_root, '--test', dbus_docs],
depends : dbus_programs)
endif
update_man_rules = custom_target(

View File

@ -1765,6 +1765,7 @@ conf.set10('SYSTEMD_SLOW_TESTS_DEFAULT', slow_tests)
tests = []
fuzzers = []
catalogs = []
############################################################
@ -2072,7 +2073,8 @@ foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
test('dlopen-nss_' + module,
test_dlopen,
# path to dlopen must include a slash
args : nss.full_path())
args : nss.full_path(),
depends : nss)
endif
endif
endforeach
@ -2186,7 +2188,8 @@ if want_tests != 'false'
test('test-fstab-generator',
test_fstab_generator_sh,
# https://github.com/mesonbuild/meson/issues/2681
args : exe.full_path())
args : exe.full_path(),
depends : exe)
endif
if conf.get('ENABLE_ENVIRONMENT_D') == 1
@ -2337,7 +2340,8 @@ if conf.get('ENABLE_LOGIND') == 1
test('dlopen-pam_systemd',
test_dlopen,
# path to dlopen must include a slash
args : pam_systemd.full_path())
args : pam_systemd.full_path(),
depends : pam_systemd)
endif
endif
@ -2676,7 +2680,7 @@ if conf.get('HAVE_LIBCRYPTSETUP') == 1
endif
if conf.get('HAVE_SYSV_COMPAT') == 1
executable(
exe = executable(
'systemd-sysv-generator',
'src/sysv-generator/sysv-generator.c',
include_directories : includes,
@ -2685,6 +2689,13 @@ if conf.get('HAVE_SYSV_COMPAT') == 1
install : true,
install_dir : systemgeneratordir)
sysv_generator_test_py = find_program('test/sysv-generator-test.py')
if want_tests != 'false'
test('sysv-generator-test',
sysv_generator_test_py,
depends : exe)
endif
executable(
'systemd-rc-local-generator',
'src/rc-local-generator/rc-local-generator.c',
@ -3568,7 +3579,8 @@ if want_tests != 'false'
test('test-network-generator-conversion',
test_network_generator_conversion_sh,
# https://github.com/mesonbuild/meson/issues/2681
args : exe.full_path())
args : exe.full_path(),
depends : exe)
endif
executable(
@ -3582,13 +3594,14 @@ executable(
############################################################
custom_target(
runtest_env = custom_target(
'systemd-runtest.env',
output : 'systemd-runtest.env',
command : [sh, '-c',
'{ echo SYSTEMD_TEST_DATA=@0@; echo SYSTEMD_CATALOG_DIR=@1@; } >@OUTPUT@'.format(
project_source_root / 'test',
project_build_root / 'catalog')],
depends : catalogs,
build_by_default : true)
test_cflags = ['-DTEST_CODE=1']
@ -3631,7 +3644,8 @@ foreach tuple : tests
build_by_default : want_tests != 'false',
install_rpath : rootlibexecdir,
install : install_tests,
install_dir : testsdir / type)
install_dir : testsdir / type,
link_depends : runtest_env)
if type == 'manual'
message('@0@ is a manual test'.format(name))
@ -3824,7 +3838,8 @@ foreach exec : public_programs
if want_tests != 'false'
test('check-help-' + name,
check_help,
args : exec.full_path())
args : exec.full_path(),
depends: exec)
endif
endforeach

View File

@ -195,7 +195,7 @@ efi_cflags += cc.get_supported_arguments({
if get_option('werror')
efi_cflags += ['-Werror']
endif
if get_option('debug')
if get_option('debug') and get_option('mode') == 'developer'
efi_cflags += ['-ggdb', '-DEFI_DEBUG']
endif
if get_option('optimization') != '0'
@ -213,13 +213,15 @@ foreach arg : get_option('c_args')
if arg in [
'-DNDEBUG',
'-fno-lto',
'-g', '-ggdb',
'-O1', '-O2', '-O3', '-Og', '-Os',
'-Werror',
] or arg.split('=')[0] in [
'-ffile-prefix-map',
'-flto',
]
] or (get_option('mode') == 'developer' and arg in [
'-DEFI_DEBUG',
'-g', '-ggdb',
])
message('Using "@0@" from c_args for EFI compiler'.format(arg))
efi_cflags += arg

View File

@ -399,7 +399,7 @@ void process_audit_string(Server *s, int type, const char *data, size_t size) {
z = n;
map_all_fields(p, map_fields_kernel, "_AUDIT_FIELD_", true, iovec, &n, ELEMENTSOF(iovec));
map_all_fields(p, map_fields_kernel, "_AUDIT_FIELD_", true, iovec, &n, n + N_IOVEC_AUDIT_FIELDS);
server_dispatch_message(s, iovec, n, ELEMENTSOF(iovec), NULL, NULL, LOG_NOTICE, 0);

View File

@ -152,7 +152,7 @@ foreach prog : udev_progs
install : true,
install_dir : udevlibexecdir)
udev_prog_paths += {name : exe.full_path()}
udev_prog_paths += {name : exe}
endforeach
if install_sysconfdir_samples

View File

@ -47,6 +47,8 @@ static const char *arg_export_prefix = NULL;
static usec_t arg_wait_for_initialization_timeout = 0;
static bool skip_attribute(const char *name) {
assert(name);
/* Those are either displayed separately or should not be shown at all. */
return STR_IN_SET(name,
"uevent",
@ -66,6 +68,9 @@ typedef struct SysAttr {
STATIC_DESTRUCTOR_REGISTER(arg_properties, strv_freep);
static int sysattr_compare(const SysAttr *a, const SysAttr *b) {
assert(a);
assert(b);
return strcmp(a->name, b->name);
}
@ -75,6 +80,8 @@ static int print_all_attributes(sd_device *device, bool is_parent) {
size_t n_items = 0;
int r;
assert(device);
value = NULL;
(void) sd_device_get_devpath(device, &value);
printf(" looking at %sdevice '%s':\n", is_parent ? "parent " : "", strempty(value));
@ -139,6 +146,8 @@ static int print_device_chain(sd_device *device) {
sd_device *child, *parent;
int r;
assert(device);
printf("\n"
"Udevadm info starts with the device specified by the devpath and then\n"
"walks up the chain of parent devices. It prints for every device\n"
@ -164,6 +173,8 @@ static int print_record(sd_device *device) {
const char *str, *val;
int i;
assert(device);
(void) sd_device_get_devpath(device, &str);
printf("P: %s\n", str);
@ -190,6 +201,8 @@ static int print_record(sd_device *device) {
static int stat_device(const char *name, bool export, const char *prefix) {
struct stat statbuf;
assert(name);
if (stat(name, &statbuf) != 0)
return -errno;
@ -229,11 +242,11 @@ static int export_devices(void) {
}
static void cleanup_dir(DIR *dir, mode_t mask, int depth) {
assert(dir);
if (depth <= 0)
return;
assert(dir);
FOREACH_DIRENT_ALL(dent, dir, break) {
struct stat stats;
@ -261,38 +274,27 @@ static void cleanup_dir(DIR *dir, mode_t mask, int depth) {
* entries for devices in /run/udev/data (such as "b8:16"), and removes
* all files except those that haven't been deleted in /run/udev/data
* (i.e. they were skipped during db cleanup because of the db_persist flag).
* Returns true if the directory is empty after cleanup.
*/
static bool cleanup_dir_after_db_cleanup(DIR *dir, DIR *datadir) {
unsigned int kept = 0;
assert(dir && datadir);
static void cleanup_dir_after_db_cleanup(DIR *dir, DIR *datadir) {
assert(dir);
assert(datadir);
FOREACH_DIRENT_ALL(dent, dir, break) {
struct stat data_stats, link_stats;
if (dot_or_dot_dot(dent->d_name))
continue;
if (fstatat(dirfd(dir), dent->d_name, &link_stats, AT_SYMLINK_NOFOLLOW) < 0) {
if (errno != ENOENT)
kept++;
if (faccessat(dirfd(datadir), dent->d_name, F_OK, AT_SYMLINK_NOFOLLOW) >= 0)
/* The corresponding udev database file still exists.
* Assuming the parsistent flag is set for the database. */
continue;
}
if (fstatat(dirfd(datadir), dent->d_name, &data_stats, 0) < 0)
(void) unlinkat(dirfd(dir), dent->d_name,
S_ISDIR(link_stats.st_mode) ? AT_REMOVEDIR : 0);
else
/* The entry still exists under /run/udev/data */
kept++;
(void) unlinkat(dirfd(dir), dent->d_name, 0);
}
return kept == 0;
}
static void cleanup_dirs_after_db_cleanup(DIR *dir, DIR *datadir) {
assert(dir && datadir);
assert(dir);
assert(datadir);
FOREACH_DIRENT_ALL(dent, dir, break) {
struct stat stats;
@ -305,15 +307,17 @@ static void cleanup_dirs_after_db_cleanup(DIR *dir, DIR *datadir) {
_cleanup_closedir_ DIR *dir2 = NULL;
dir2 = fdopendir(openat(dirfd(dir), dent->d_name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC));
if (dir2 && cleanup_dir_after_db_cleanup(dir2, datadir))
(void) unlinkat(dirfd(dir), dent->d_name, AT_REMOVEDIR);
if (dir2)
cleanup_dir_after_db_cleanup(dir2, datadir);
(void) unlinkat(dirfd(dir), dent->d_name, AT_REMOVEDIR);
} else
(void) unlinkat(dirfd(dir), dent->d_name, 0);
}
}
static void cleanup_db(void) {
_cleanup_closedir_ DIR *dir1 = NULL, *dir2 = NULL, *dir3 = NULL, *dir4 = NULL, *dir5 = NULL;
_cleanup_closedir_ DIR *dir1 = NULL, *dir2 = NULL, *dir3 = NULL, *dir4 = NULL;
dir1 = opendir("/run/udev/data");
if (dir1)
@ -331,9 +335,8 @@ static void cleanup_db(void) {
if (dir4)
cleanup_dir(dir4, 0, 2);
dir5 = opendir("/run/udev/watch");
if (dir5)
cleanup_dir_after_db_cleanup(dir5, dir1);
/* Do not remove /run/udev/watch. It will be handled by udevd well on restart.
* And should not be removed by external program when udevd is running. */
}
static int query_device(QueryType query, sd_device* device) {
@ -399,10 +402,10 @@ static int query_device(QueryType query, sd_device* device) {
case QUERY_ALL:
return print_record(device);
}
assert_not_reached();
return 0;
default:
assert_not_reached();
}
}
static int help(void) {

View File

@ -116,16 +116,6 @@ endif
############################################################
if conf.get('HAVE_SYSV_COMPAT') == 1
sysv_generator_test_py = find_program('sysv-generator-test.py')
if want_tests != 'false'
test('sysv-generator-test',
sysv_generator_test_py)
endif
endif
############################################################
if install_tests
install_data('run-unit-tests.py',
install_mode : 'rwxr-xr-x',
@ -184,9 +174,10 @@ if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family())
test(name,
udev_dmi_memory_id_test,
args : [udev_prog_paths['dmi_memory_id'],
args : [udev_prog_paths['dmi_memory_id'].full_path(),
source,
source + '.txt'])
source + '.txt'],
depends : udev_prog_paths['dmi_memory_id'])
endforeach
endif