summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorLuca Boccassi <bluca@debian.org>2023-05-05 20:55:48 +0100
committerGitHub <noreply@github.com>2023-05-05 20:55:48 +0100
commit6ad7989ea03064a0ed8e562e1e2f69305b98f633 (patch)
tree175b98b3d4d7392df7a8fabcf03b1719de653cc2 /src/shared
parentd685a5f6a4ae8f9eaea1d1c5c78171a915f3b16d (diff)
parentb45e3167089f709c08e4d5112030692c0238df8d (diff)
downloadsystemd-6ad7989ea03064a0ed8e562e1e2f69305b98f633.tar.gz
Merge pull request #27536 from dtardon/checked-fd-parsing
Always check parsed fds for validity
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/bpf-program.c8
-rw-r--r--src/shared/varlink.c10
2 files changed, 9 insertions, 9 deletions
diff --git a/src/shared/bpf-program.c b/src/shared/bpf-program.c
index f4bb7f390c..d924a973ec 100644
--- a/src/shared/bpf-program.c
+++ b/src/shared/bpf-program.c
@@ -449,11 +449,11 @@ int bpf_program_deserialize_attachment(const char *v, FDSet *fds, BPFProgram **b
if (r == 0)
return -EINVAL;
- r = safe_atoi(sfd, &ifd);
- if (r < 0)
- return r;
- if (ifd < 0)
+ ifd = parse_fd(sfd);
+ if (ifd == -ERANGE)
return -EBADF;
+ if (ifd < 0)
+ return r;
/* Extract second word: the attach type */
r = extract_first_word(&v, &sat, NULL, 0);
diff --git a/src/shared/varlink.c b/src/shared/varlink.c
index 808e2b2dba..a4936bff26 100644
--- a/src/shared/varlink.c
+++ b/src/shared/varlink.c
@@ -3060,12 +3060,12 @@ int varlink_server_deserialize_one(VarlinkServer *s, const char *value, FDSet *f
n = strcspn(v, " ");
buf = strndupa_safe(v, n);
- r = safe_atoi(buf, &fd);
- if (r < 0)
- return log_debug_errno(r, "Unable to parse VarlinkServerSocket varlink-server-socket-fd=%s: %m", buf);
- if (fd < 0)
+ fd = parse_fd(buf);
+ if (fd == -ERANGE)
return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
- "VarlinkServerSocket varlink-server-socket-fd= has an invalid value: %d", fd);
+ "VarlinkServerSocket varlink-server-socket-fd= has an invalid value: %s", buf);
+ if (fd < 0)
+ return log_debug_errno(fd, "Unable to parse VarlinkServerSocket varlink-server-socket-fd=%s: %m", buf);
if (!fdset_contains(fds, fd))
return log_debug_errno(SYNTHETIC_ERRNO(EBADF),
"VarlinkServerSocket varlink-server-socket-fd= has unknown fd %d: %m", fd);