From: Lennart Poettering Date: Wed, 17 Mar 2021 17:43:42 +0000 (+0100) Subject: tree-wide: use read_full_virtual_file() where appropriate X-Git-Tag: v248-rc4~1^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=627055ce9ae66a637aa2b3eec876620aec80c705;p=thirdparty%2Fsystemd.git tree-wide: use read_full_virtual_file() where appropriate Wherever we read virtual files we better should use read_full_virtual_file(), to make sure we get a consistent response given how weird the kernel's handling with partial read on such file systems is. --- diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index 0b252eb28fb..8dd3f8cd950 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -100,7 +100,7 @@ int cg_read_event( if (r < 0) return r; - r = read_full_file(events, &content, NULL); + r = read_full_virtual_file(events, &content, NULL); if (r < 0) return r; diff --git a/src/basic/mountpoint-util.c b/src/basic/mountpoint-util.c index adf10a45481..c8f6675eb86 100644 --- a/src/basic/mountpoint-util.c +++ b/src/basic/mountpoint-util.c @@ -114,7 +114,7 @@ static int fd_fdinfo_mnt_id(int fd, const char *filename, int flags, int *ret_mn xsprintf(path, "/proc/self/fdinfo/%i", subfd); } - r = read_full_file(path, &fdinfo, NULL); + r = read_full_virtual_file(path, &fdinfo, NULL); if (r == -ENOENT) /* The fdinfo directory is a relatively new addition */ return -EOPNOTSUPP; if (r < 0) diff --git a/src/basic/process-util.c b/src/basic/process-util.c index d3eb3ad18ba..eb257144f02 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -1548,7 +1548,7 @@ int pidfd_get_pid(int fd, pid_t *ret) { xsprintf(path, "/proc/self/fdinfo/%i", fd); - r = read_full_file(path, &fdinfo, NULL); + r = read_full_virtual_file(path, &fdinfo, NULL); if (r == -ENOENT) /* if fdinfo doesn't exist we assume the process does not exist */ return -ESRCH; if (r < 0) diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c index 72e859a565d..2fb2404500e 100644 --- a/src/coredump/coredump.c +++ b/src/coredump/coredump.c @@ -1125,23 +1125,23 @@ static int gather_pid_metadata(struct iovec_wrapper *iovw, Context *context) { (void) iovw_put_string_field_free(iovw, "COREDUMP_OPEN_FDS=", t); p = procfs_file_alloca(pid, "status"); - if (read_full_file(p, &t, NULL) >= 0) + if (read_full_virtual_file(p, &t, NULL) >= 0) (void) iovw_put_string_field_free(iovw, "COREDUMP_PROC_STATUS=", t); p = procfs_file_alloca(pid, "maps"); - if (read_full_file(p, &t, NULL) >= 0) + if (read_full_virtual_file(p, &t, NULL) >= 0) (void) iovw_put_string_field_free(iovw, "COREDUMP_PROC_MAPS=", t); p = procfs_file_alloca(pid, "limits"); - if (read_full_file(p, &t, NULL) >= 0) + if (read_full_virtual_file(p, &t, NULL) >= 0) (void) iovw_put_string_field_free(iovw, "COREDUMP_PROC_LIMITS=", t); p = procfs_file_alloca(pid, "cgroup"); - if (read_full_file(p, &t, NULL) >=0) + if (read_full_virtual_file(p, &t, NULL) >=0) (void) iovw_put_string_field_free(iovw, "COREDUMP_PROC_CGROUP=", t); p = procfs_file_alloca(pid, "mountinfo"); - if (read_full_file(p, &t, NULL) >=0) + if (read_full_virtual_file(p, &t, NULL) >=0) (void) iovw_put_string_field_free(iovw, "COREDUMP_PROC_MOUNTINFO=", t); if (get_process_cwd(pid, &t) >= 0) diff --git a/src/libsystemd/sd-bus/bus-creds.c b/src/libsystemd/sd-bus/bus-creds.c index 3134d8ef172..5e748fdb462 100644 --- a/src/libsystemd/sd-bus/bus-creds.c +++ b/src/libsystemd/sd-bus/bus-creds.c @@ -1002,7 +1002,7 @@ int bus_creds_add_more(sd_bus_creds *c, uint64_t mask, pid_t pid, pid_t tid) { const char *p; p = procfs_file_alloca(pid, "cmdline"); - r = read_full_file(p, &c->cmdline, &c->cmdline_size); + r = read_full_virtual_file(p, &c->cmdline, &c->cmdline_size); if (r == -ENOENT) return -ESRCH; if (r < 0) { diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index 964ef1318ed..e556a6f838c 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -513,7 +513,7 @@ int device_read_uevent_file(sd_device *device) { path = strjoina(syspath, "/uevent"); - r = read_full_file(path, &uevent, &uevent_len); + r = read_full_virtual_file(path, &uevent, &uevent_len); if (r == -EACCES) { /* empty uevent files may be write-only */ device->uevent_loaded = true; diff --git a/src/pstore/pstore.c b/src/pstore/pstore.c index 9d59c608c15..6ce38f10a3e 100644 --- a/src/pstore/pstore.c +++ b/src/pstore/pstore.c @@ -342,7 +342,7 @@ static int list_files(PStoreList *list, const char *sourcepath) { size_t buf_size; /* Now read contents of pstore file */ - r = read_full_file(ifd_path, &buf, &buf_size); + r = read_full_virtual_file(ifd_path, &buf, &buf_size); if (r < 0) { log_warning_errno(r, "Failed to read file %s, skipping: %m", ifd_path); continue; diff --git a/src/shared/acpi-fpdt.c b/src/shared/acpi-fpdt.c index 11244537991..cccea2f7275 100644 --- a/src/shared/acpi-fpdt.c +++ b/src/shared/acpi-fpdt.c @@ -72,7 +72,7 @@ int acpi_get_boot_usec(usec_t *loader_start, usec_t *loader_exit) { struct acpi_fpdt_boot_header hbrec; struct acpi_fpdt_boot brec; - r = read_full_file("/sys/firmware/acpi/tables/FPDT", &buf, &l); + r = read_full_virtual_file("/sys/firmware/acpi/tables/FPDT", &buf, &l); if (r < 0) return r;