On Tue, 2009-03-03 at 17:02 -0600, Serge E. Hallyn wrote: > >From d94e82179644f02d3561da104a054f099bc72416 Mon Sep 17 00:00:00 2001 > From: Nadia Derbey <nadia.der...@bull.net> > Date: Tue, 16 Dec 2008 22:00:40 +0000 > Subject: [PATCH 2/4] ltp: posix mqns: test parent to child mq access > > It's kind of redundant with test 01 since there is no hierarchical > relationship between ipc namespaces - they are all completely isolated. > But heck it can't hurt. > > Signed-off-by: Nadia Derbey <nadia.der...@bull.net> > Signed-off-by: Serge Hallyn <se...@us.ibm.com>
Thanks. Merged. Regards-- Subrata > --- > testcases/kernel/containers/mqns/mqns_02.c | 139 > +++++++++++++++++++++++ > testcases/kernel/containers/mqns/runmqnstest.sh | 2 +- > 2 files changed, 140 insertions(+), 1 deletions(-) > create mode 100644 testcases/kernel/containers/mqns/mqns_02.c > mode change 100644 => 100755 testcases/kernel/containers/mqns/runmqnstest.sh > > diff --git a/testcases/kernel/containers/mqns/mqns_02.c > b/testcases/kernel/containers/mqns/mqns_02.c > new file mode 100644 > index 0000000..5e0645f > --- /dev/null > +++ b/testcases/kernel/containers/mqns/mqns_02.c > @@ -0,0 +1,139 @@ > +/* > +* Copyright (c) International Business Machines Corp., 2009 > +* Copyright (c) Nadia Derbey, 2009 > +* 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; if not, write to the Free Software > +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > +* > +* Author: Nadia Derbey <nadia.der...@bull.net> > +* > +* Check mqns isolation: child mqns cannot be accessed from father > +* > +* Mount mqueue fs > +* unshare > +* In unshared process: > +* Mount newinstance mqueuefs > +* Create a posix mq -->mq1 > +* Check that mq1 is not readable from father > +* > +* Changelog: > +* Dec 16: accomodate new mqns semantics (Serge Hallyn) > + > +***************************************************************************/ > + > +#define _GNU_SOURCE 1 > +#include <sys/wait.h> > +#include <assert.h> > +#include <stdio.h> > +#include <stdlib.h> > +#include <unistd.h> > +#include <string.h> > +#include <errno.h> > +#include "mqns.h" > + > +char *TCID = "posixmq_namespace_02"; > +int TST_TOTAL=1; > + > +int p1[2]; > +int p2[2]; > + > +int check_mqueue(void *vtest) > +{ > + char buf[30]; > + mqd_t mqd; > + > + close(p1[1]); > + close(p2[0]); > + > + read(p1[0], buf, 3); > + > + mqd = mq_open(SLASH_MQ1, O_RDWR|O_CREAT|O_EXCL, 0777, NULL); > + if (mqd == -1) { > + write(p2[1], "mqfail", 7); > + tst_exit(3); > + } > + > + write(p2[1], "mqopen", 7); > + > + read(p1[0], buf, 5); > + > + /* destroy the mqueue */ > + mq_close(mqd); > + mq_unlink(SLASH_MQ1); > + > + write(p2[1], "done", 5); > + > + tst_exit(0); > + > + /* NOT REACHED */ > + return 0; > +} > + > + > +int main(int argc, char *argv[]) > +{ > + int r; > + mqd_t mqd; > + char buf[30]; > + int use_clone = T_UNSHARE; > + > + if (argc == 2 && strcmp(argv[1], "-clone") == 0) { > + tst_resm(TINFO, "Testing posix mq namespaces through > clone(2).\n"); > + use_clone = T_CLONE; > + } else > + tst_resm(TINFO, "Testing posix mq namespaces through > unshare(2).\n"); > + > + if (pipe(p1) == -1) { perror("pipe"); exit(EXIT_FAILURE); } > + if (pipe(p2) == -1) { perror("pipe"); exit(EXIT_FAILURE); } > + > + /* fire off the test */ > + r = do_clone_unshare_test(use_clone, CLONE_NEWIPC, check_mqueue, NULL); > + if (r < 0) { > + tst_resm(TFAIL, "failed clone/unshare\n"); > + tst_exit(1); > + } > + > + tst_resm(TINFO, "Checking namespaces isolation (child to parent)\n"); > + > + close(p1[0]); > + close(p2[1]); > + write(p1[1], "go", 3); > + > + read(p2[0], buf, 7); > + if (!strcmp(buf, "mqfail")) { > + tst_resm(TFAIL, "child process could not create mqueue\n"); > + umount(DEV_MQUEUE); > + tst_exit(TFAIL); > + } else if (strcmp(buf, "mqopen")) { > + tst_resm(TFAIL, "child process could not create mqueue\n"); > + umount(DEV_MQUEUE); > + tst_exit(TFAIL); > + } > + > + mqd = mq_open(SLASH_MQ1, O_RDONLY); > + if (mqd == -1) { > + r = TPASS; > + tst_resm(TPASS, "Father process doesn't see mqueue\n"); > + } else { > + r = TFAIL; > + tst_resm(TFAIL, "Father process found mqueue\n"); > + mq_close(mqd); > + } > + > + write(p1[1], "cont", 5); > + read(p2[0], buf, 7); > + > + tst_exit(r); > + > + /* NOT REACHED */ > + return 0; > +} > diff --git a/testcases/kernel/containers/mqns/runmqnstest.sh > b/testcases/kernel/containers/mqns/runmqnstest.sh > old mode 100644 > new mode 100755 > index e3b334c..1252352 > --- a/testcases/kernel/containers/mqns/runmqnstest.sh > +++ b/testcases/kernel/containers/mqns/runmqnstest.sh > @@ -21,7 +21,7 @@ > > ################################################################################ > > exit_code=0 > -tests_list='mqns_01' > +tests_list='mqns_01 mqns_02' > > for t in $tests_list > do ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list