Signed-off-by: Yuan Sun <sunyu...@huawei.com> --- testcases/kernel/containers/userns01/Makefile | 26 +++++++ testcases/kernel/containers/userns01/userns01.c | 90 ++++++++++++++++++++++ .../kernel/containers/userns01/userns_helper.h | 37 +++++++++ 3 files changed, 153 insertions(+) create mode 100644 testcases/kernel/containers/userns01/Makefile create mode 100644 testcases/kernel/containers/userns01/userns01.c create mode 100644 testcases/kernel/containers/userns01/userns_helper.h
diff --git a/testcases/kernel/containers/userns01/Makefile b/testcases/kernel/containers/userns01/Makefile new file mode 100644 index 0000000..9f67216 --- /dev/null +++ b/testcases/kernel/containers/userns01/Makefile @@ -0,0 +1,26 @@ +############################################################################### +# ## +# Copyright (c) Huawei Technologies Co., Ltd., 2015 ## +# ## +# This program is free software; you can redistribute it and#or modify ## +# it under the terms of the GNU General Public License as published by ## +# the Free Software Foundation; either version 2 of the License, or ## +# (at your option) any later version. ## +# ## +# This program is distributed in the hope that it will be useful, but ## +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ## +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ## +# for more details. ## +# ## +# You should have received a copy of the GNU General Public License ## +# along with this program. ## +############################################################################### + +top_srcdir ?= ../../../.. + +include $(top_srcdir)/include/mk/testcases.mk +include $(abs_srcdir)/../Makefile.inc + +LDLIBS := -lclone -lltp + +include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/testcases/kernel/containers/userns01/userns01.c b/testcases/kernel/containers/userns01/userns01.c new file mode 100644 index 0000000..c6022b5 --- /dev/null +++ b/testcases/kernel/containers/userns01/userns01.c @@ -0,0 +1,90 @@ +/* +* Copyright (c) Huawei Technologies Co., Ltd., 2015 +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the Free +* Software Foundation; either version 2 of the License, or (at your option) +* any later version. This program is distributed in the hope that it will be +* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +* Public License for more details. You should have received a copy of the GNU +* General Public License along with this program. +* +* +* Verify that: +* If a user ID has no mapping inside the namespace, user ID and group +* ID will be the value defined in the file /proc/sys/kernel/overflowuid, 65534. +*/ + +#define _GNU_SOURCE +#include <sys/wait.h> +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <errno.h> +#include "test.h" +#include "libclone.h" +#include "userns_helper.h" +#define OVERFLOWUIDPATH "/proc/sys/kernel/overflowuid" + +char *TCID = "user_namespace1"; +int TST_TOTAL = 1; + +char fullpath[BUFSIZ]; +long overflowuid; + +/* + * child_fn1() - Inside a new user namespace + */ +static int child_fn1(void *arg) +{ + int exit_val; + int uid, gid; + + uid = geteuid(); + gid = getegid(); + + tst_resm(TINFO, "USERNS test is running in a new user namespace."); + if (uid == overflowuid && gid == overflowuid) { + printf("Got expected uid and gid\n"); + exit_val = 0; + } else { + printf("Got unexpected result of uid=%d gid=%d\n", uid, gid); + exit_val = 1; + } + + return exit_val; +} + +static void setup(void) +{ + check_newuser(); + SAFE_FILE_SCANF(NULL, OVERFLOWUIDPATH, "%ld", &overflowuid); +} + +int main(int argc, char *argv[]) +{ + int status; + + tst_parse_opts(argc, argv, NULL, NULL); + setup(); + + TEST(do_clone_unshare_test(T_CLONE, CLONE_NEWUSER, child_fn1, NULL)); + + if (TEST_RETURN == -1) + tst_brkm(TFAIL | TTERRNO, NULL, "clone failed"); + else if ((wait(&status)) == -1) + tst_brkm(TWARN | TERRNO, NULL, "wait failed"); + + if (WIFEXITED(status) && WEXITSTATUS(status) != 0) + tst_resm(TFAIL, "child exited abnormally"); + else if (WIFSIGNALED(status)) { + tst_resm(TFAIL, "child was killed with signal = %d", + WTERMSIG(status)); + } + + tst_resm(TPASS, "the uid and the gid are right inside the container"); + tst_exit(); +} + diff --git a/testcases/kernel/containers/userns01/userns_helper.h b/testcases/kernel/containers/userns01/userns_helper.h new file mode 100644 index 0000000..3fb7288 --- /dev/null +++ b/testcases/kernel/containers/userns01/userns_helper.h @@ -0,0 +1,37 @@ +/* +* Copyright (c) Huawei Technologies Co., Ltd., 2015 +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +* the GNU General Public License for more details. +*/ + +#include "../libclone/libclone.h" +#include "test.h" +#include "safe_macros.h" + +static int dummy_child(void *v) +{ + (void) v; + return 0; +} + +static int check_newuser(void) +{ + int pid, status; + + if (tst_kvercmp(3, 8, 0) < 0) + tst_brkm(TCONF, NULL, "CLONE_NEWUSER not supported"); + + pid = do_clone_unshare_test(T_CLONE, CLONE_NEWUSER, dummy_child, NULL); + if (pid == -1) + tst_brkm(TCONF | TERRNO, NULL, "CLONE_NEWUSER not supported"); + SAFE_WAIT(NULL, &status); + + return 0; +} -- 1.9.1 ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list