Unverified Commit b8f7622a authored by Christian Brauner's avatar Christian Brauner
Browse files

selftests/open_tree: add OPEN_TREE_NAMESPACE tests

parent 9b8a0ba6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
open_tree_ns_test
+10 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0
TEST_GEN_PROGS := open_tree_ns_test

CFLAGS := -Wall -Werror -g $(KHDR_INCLUDES)
LDLIBS := -lcap

include ../../lib.mk

$(OUTPUT)/open_tree_ns_test: open_tree_ns_test.c ../utils.c
	$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)
+1030 −0

File added.

Preview size limit exceeded, changes collapsed.

+26 −0
Original line number Diff line number Diff line
@@ -515,6 +515,32 @@ int setup_userns(void)
	return 0;
}

int enter_userns(void)
{
	int ret;
	char buf[32];
	uid_t uid = getuid();
	gid_t gid = getgid();

	ret = unshare(CLONE_NEWUSER);
	if (ret)
		return ret;

	sprintf(buf, "0 %d 1", uid);
	ret = write_file("/proc/self/uid_map", buf);
	if (ret)
		return ret;
	ret = write_file("/proc/self/setgroups", "deny");
	if (ret)
		return ret;
	sprintf(buf, "0 %d 1", gid);
	ret = write_file("/proc/self/gid_map", buf);
	if (ret)
		return ret;

	return 0;
}

/* caps_down - lower all effective caps */
int caps_down(void)
{
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ extern int cap_down(cap_value_t down);

extern bool switch_ids(uid_t uid, gid_t gid);
extern int setup_userns(void);
extern int enter_userns(void);

static inline bool switch_userns(int fd, uid_t uid, gid_t gid, bool drop_caps)
{