All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Palethorpe <rpalethorpe@suse.de>
To: Andrea Cervesato <andrea.cervesato@suse.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v1] Refactor pidns06 test using new LTP API
Date: Tue, 11 Oct 2022 10:59:02 +0100	[thread overview]
Message-ID: <87zge27kb2.fsf@suse.de> (raw)
In-Reply-To: <20220805091353.27230-1-andrea.cervesato@suse.com>


Andrea Cervesato via ltp <ltp@lists.linux.it> writes:

> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
>  testcases/kernel/containers/pidns/pidns06.c | 152 +++++---------------
>  1 file changed, 38 insertions(+), 114 deletions(-)
>
> diff --git a/testcases/kernel/containers/pidns/pidns06.c b/testcases/kernel/containers/pidns/pidns06.c
> index d6623941a..b561c055f 100644
> --- a/testcases/kernel/containers/pidns/pidns06.c
> +++ b/testcases/kernel/containers/pidns/pidns06.c
> @@ -1,133 +1,57 @@
> +// SPDX-License-Identifier: GPL-2.0
>  /*
> -* Copyright (c) International Business Machines Corp., 2008
> -* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> -
> -*************************************************************************
> -* Description:
> -*  Testcase tries killing of the parent namespace pid by the container-init.
> -*  It also tries killing of non-existent PID, by the container-init.
> -*  Returns Success if Unable to kill, and proper error number is set.
> -*  else Returns Failure
> -*
> -* Steps:
> -* 1. Parent process clone a process with flag CLONE_NEWPID
> -* 2. The pid of the parent namespace is passed to the container.
> -* 3. Container receieves the PID and passes SIGKILL to this PID.
> -* 4. If kill() is unsuccessful and the errno is set to 'No Such process'
> -*	then sets PASS
> -*    else,
> -*	sets FAIL
> -* 5. It also verifies by passing SIGKILL to FAKE_PID
> -* 6. If kill() is unsuccessful and the errno is set to 'No Such process'
> -*	then sets PASS
> -*    else,
> -*	sets FAIL
> -*
> -*******************************************************************************/
> -#define _GNU_SOURCE 1
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <sys/wait.h>
> -#include <assert.h>
> -#include <unistd.h>
> -#include <errno.h>
> -#include <signal.h>
> -#include "pidns_helper.h"
> -#include "test.h"
> + * Copyright (C) International Business Machines Corp., 2008
> + * Copyright (C) 2022 SUSE LLC Andrea Cervesato <andrea.cervesato@suse.com>
> + */
>  
> -#define CINIT_PID       1
> -#define PARENT_PID      0
> -#define FAKE_PID	-1
> +/*\
> + * [Description]
> + *
> + * Clone a process with CLONE_NEWPID flag and check that parent process can't
> + * be killed from child namespace.
> + */
>  
> -char *TCID = "pidns06";
> -int TST_TOTAL = 1;
> +#include "tst_test.h"
> +#include "lapi/namespaces_constants.h"
>  
> -/*
> - * kill_pid_in_childfun()
> - *      Cont-init tries to kill the parent-process using parent's global Pid.
> - *	Also checks passing SIGKILL to non existent PID in the container.
> - */
> -static int kill_pid_in_childfun(void *vtest)
> +static int child_func(LTP_ATTRIBUTE_UNUSED void *arg)
>  {
> -	int cpid, ppid, *par_pid;
> -	int ret = 0;
> +	pid_t cpid, ppid;
> +	int ret;
> +
>  	cpid = getpid();
>  	ppid = getppid();
> -	par_pid = (int *)vtest;
>  
> -	/* Checking the values to make sure pidns is created correctly */
> -	if (cpid != CINIT_PID || ppid != PARENT_PID) {
> -		printf("Unexpected result for Container: init "
> -		       "pid=%d ppid=%d\n", cpid, ppid);
> -		exit(1);
> +	if (cpid != 1 || ppid != 0) {
> +		tst_res(TFAIL, "Got unexpected result of cpid=%d ppid=%d", cpid, ppid);
> +		return 1;
>  	}
>  
> -	/*
> -	 * While trying kill() of the pid of the parent namespace..
> -	 * Check to see if the errno was set to the expected, value of 3 : ESRCH
> -	 */
> -	ret = kill(*par_pid, SIGKILL);
> -	if (ret == -1 && errno == ESRCH) {
> -		printf("Container: killing parent pid=%d failed as expected "
> -		       "with ESRCH\n", *par_pid);
> -	} else {
> -		printf("Container: killing parent pid=%d, didn't fail as "
> -		       "expected with ESRCH (%d) and a return value of -1. Got "
> -		       "%d (\"%s\") and a return value of %d instead.\n",
> -		       *par_pid, ESRCH, errno, strerror(errno), ret);
> -		exit(1);
> -	}
> -	/*
> -	 * While killing non-existent pid in the container,
> -	 * Check to see if the errno was set to the expected, value of 3 : ESRCH
> -	 */
> -	ret = kill(FAKE_PID, SIGKILL);
> -	if (ret == -1 && errno == ESRCH) {
> -		printf("Container: killing non-existent pid failed as expected "
> -		       "with ESRCH\n");
> -	} else {
> -		printf("Container: killing non-existent pid, didn't fail as "
> -		       "expected with ESRCH (%d) and a return value of -1. Got "
> -		       "%d (\"%s\") and a return value of %d instead.\n",
> -		       ESRCH, errno, strerror(errno), ret);
> -		exit(1);
> +	ret = kill(*(int *)arg, SIGKILL);
> +
> +	if (ret != -1 || errno != ESRCH) {
> +		tst_res(TFAIL, "kill() didn't fail with ESRCH");
> +		return 1;
>  	}
>  
> -	exit(0);
> -}
> +	tst_res(TPASS, "Can't kill parent process from child namespace");
>  
> -static void setup(void)
> -{
> -	tst_require_root();
> -	check_newpid();
> +	return 0;
>  }
>  
> -int main(void)
> +static void run(void)
>  {
> -	int status;
> -
> -	setup();
> +	int ret;
> +	pid_t pid;
>  
> -	pid_t pid = getpid();
> +	pid = getpid();
>  
> -	tst_resm(TINFO, "Parent: Passing the pid of the process %d", pid);
> -	TEST(do_clone_unshare_test(T_CLONE, CLONE_NEWPID, kill_pid_in_childfun,
> -				   (void *)&pid));
> -	if (TEST_RETURN == -1) {
> -		tst_brkm(TFAIL | TTERRNO, NULL, "clone failed");
> -	} else if (wait(&status) == -1) {
> -		tst_brkm(TFAIL | TERRNO, NULL, "wait failed");
> -	}
> -
> -	tst_exit();
> +	ret = ltp_clone_quick(CLONE_NEWPID | SIGCHLD, child_func, &pid);

tst_clone

> +	if (ret < 0)
> +		tst_brk(TBROK | TERRNO, "clone failed");
>  }
> +
> +static struct tst_test test = {
> +	.test_all = run,
> +	.needs_root = 1,
> +};
> -- 
> 2.35.3


-- 
Thank you,
Richard.

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2022-10-11  9:59 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-05  9:13 [LTP] [PATCH v1] Refactor pidns06 test using new LTP API Andrea Cervesato via ltp
2022-10-11  9:59 ` Richard Palethorpe [this message]
2022-11-01 10:01 ` Richard Palethorpe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87zge27kb2.fsf@suse.de \
    --to=rpalethorpe@suse.de \
    --cc=andrea.cervesato@suse.com \
    --cc=ltp@lists.linux.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.