[PATCH 1/7] PID namespace translation support
Dmitry V. Levin
ldv at altlinux.org
Fri Jul 17 14:41:54 UTC 2020
On Sun, Jul 12, 2020 at 09:46:30PM +0200, Ákos Uzonyi wrote:
[...]
> +/**
> + * Returns a list of PID NS IDs for the specified PID.
> + *
> + * @param proc_pid PID (as present in /proc) to get information for.
> + * @param ns_buf Pointer to buffer that is able to contain at least
> + * MAX_NS_DEPTH items.
> + * @param last ID of NS on which ascencion can be interrupted.
> + * 0 for no interruption.
> + * @return Amount of NS in list. 0 indicates error, MAX_NS_DEPTH + 1
> + * indicates that ascension limit hasn't been reached (only
> + * MAX_NS_DEPTH values have been written to the array, however).
> + */
> +static size_t
> +get_ns_hierarchy(int proc_pid, uint64_t *ns_buf, size_t ns_buf_size)
Looks like the description of get_ns_hierarchy is out of sync with the
implementation.
> +{
> + char path[PATH_MAX + 1];
> + struct stat st;
> + ssize_t ret;
> + size_t n = 0;
> + int fd;
> + int parent_fd;
> +
> + ret = snprintf(path, sizeof(path), "/proc/%s/ns/pid",
> + pid_to_str(proc_pid));
> +
> + if ((ret < 0) || ((size_t) ret >= sizeof(path)))
> + return 0;
> +
> + fd = open(path, O_RDONLY | O_NONBLOCK);
> + if (fd < 0)
> + return 0;
> +
> + while (1) {
> + ret = fstat(fd, &st);
> + if (ret)
> + break;
> +
> + /* 32 is the hierarchy depth on modern Linux */
> + if ((n >= MAX_NS_DEPTH) || (n >= ns_buf_size)) {
Is ns_buf_size allowed to exceed MAX_NS_DEPTH?
--
ldv
More information about the Strace-devel
mailing list