Commit ec6a5266 authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

sysctl: Add ctl_table chains into cstring paths



For any component of table passed to __register_sysctl_paths
that actually serves as a path, add that to the cstring path
that is passed to __register_sysctl_table.

The result is that for most calls to __register_sysctl_paths
we only pass a table to __register_sysctl_table that contains
no child directories.

Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
parent 6e9d5164
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -1076,6 +1076,7 @@ struct ctl_table_header *__register_sysctl_paths(
	struct nsproxy *namespaces,
	const struct ctl_path *path, struct ctl_table *table)
{
	struct ctl_table *ctl_table_arg = table;
	struct ctl_table_header *header = NULL;
	const struct ctl_path *component;
	char *new_path, *pos;
@@ -1090,7 +1091,15 @@ struct ctl_table_header *__register_sysctl_paths(
		if (!pos)
			goto out;
	}
	while (table->procname && table->child && !table[1].procname) {
		pos = append_path(new_path, pos, table->procname);
		if (!pos)
			goto out;
		table = table->child;
	}
	header = __register_sysctl_table(root, namespaces, new_path, table);
	if (header)
		header->ctl_table_arg = ctl_table_arg;
out:
	kfree(new_path);
	return header;