Merge pull request #27536 from dtardon/checked-fd-parsing
Always check parsed fds for validity
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user