dpdk运行时目录/tmp/dpdk

dpdk开源代码中在创建运行时目录时,对当前的运行用户进行了监测。

如果监测到当前用户的gid是0,则表示当前用户为root用户,这时候其运行时目录在创建时会去读XDG_RUNTIME_DIR并创建dpdk运行时目录。

但是当监测到当前运行的用户是非root用户时,就不会进行该操作,而是直接在/tmp下创建一个dpdk目录,然后作为dpdk运行时目录。

文章由iaccepted发布与凌风技术站iaccepted.net,欢迎访问。

这个问题主要是,之前对服务去root权限最小化整改,发现运行时在/tmp/下多了dpdk这样一个目录,里面存放着dpdk运行时需要的信息。

其中的代码主要在eal.c文件中的eal_create_runtime_dir函数中

eal_create_runtime_dir(void)
{
	const char *directory = default_runtime_dir;
	const char *xdg_runtime_dir = getenv("XDG_RUNTIME_DIR");
	const char *fallback = "/tmp";
	char tmp[PATH_MAX];
	int ret;

	if (getuid() != 0) {
		/* try XDG path first, fall back to /tmp */
		if (xdg_runtime_dir != NULL)
			directory = xdg_runtime_dir;
		else
			directory = fallback;
	}
	/* create DPDK subdirectory under runtime dir */
	ret = snprintf(tmp, sizeof(tmp), "%s/dpdk", directory);
	if (ret < 0 || ret == sizeof(tmp)) {
		RTE_LOG(ERR, EAL, "Error creating DPDK runtime path name\n");
		return -1;
	}

	/* create prefix-specific subdirectory under DPDK runtime dir */
	ret = snprintf(runtime_dir, sizeof(runtime_dir), "%s/%s",
			tmp, eal_get_hugefile_prefix());
	if (ret < 0 || ret == sizeof(runtime_dir)) {
		RTE_LOG(ERR, EAL, "Error creating prefix-specific runtime path name\n");
		return -1;
	}

	/* create the path if it doesn't exist. no "mkdir -p" here, so do it
	 * step by step.
	 */
	ret = mkdir(tmp, 0700);
	if (ret < 0 && errno != EEXIST) {
		RTE_LOG(ERR, EAL, "Error creating '%s': %s\n",
			tmp, strerror(errno));
		return -1;
	}

	ret = mkdir(runtime_dir, 0700);
	if (ret < 0 && errno != EEXIST) {
		RTE_LOG(ERR, EAL, "Error creating '%s': %s\n",
			runtime_dir, strerror(errno));
		return -1;
	}

	return 0;
}

文章由iaccepted发布与凌风技术站iaccepted.net,欢迎访问。

这样,就能清楚为什么去root权限最小化整改后,运行起来,/tmp/dpdk 目录怎么来的。

本文遵从CC3.0协议转载请注明:转自凌风技术站

本文标题:dpdk运行时目录/tmp/dpdk

本文链接地址:https://www.iaccepted.net/net/250.html

相关文章