public inbox for ltp@lists.linux.it
 help / color / mirror / Atom feed
From: Cyril Hrubis <chrubis@suse.cz>
To: Samir Mulani <samir@linux.vnet.ibm.com>
Cc: geetika@linux.ibm.com, ltp@lists.linux.it
Subject: Re: [LTP] [PATCH] Migrating the libhugetlbfs/testcases/stack_grow_into_huge.c test
Date: Fri, 8 Sep 2023 14:22:17 +0200	[thread overview]
Message-ID: <ZPsR-fYtg70dC-Tc@yuki> (raw)
In-Reply-To: <20230908110530.14990-1-samir@linux.vnet.ibm.com>

Hi!
First of all the whitespaces in the test are messed up, please make sure
to run 'make check' and fix all the reported problems.

> +void do_child(void *stop_address)
> +{
> +	struct rlimit r;
> +	volatile int *x;
> +
> +	/* corefile from this process is not interesting and limiting
> +	 * its size can save a lot of time. '1' is a special value,
> +	 * that will also abort dumping via pipe, which by default
> +	 * sets limit to RLIM_INFINITY. */
> +	r.rlim_cur = 1;
> +	r.rlim_max = 1;
> +	SAFE_SETRLIMIT(RLIMIT_CORE, &r);
> +
> +	do {
> +		x = alloca(STACK_ALLOCATION_SIZE);
> +		*x = 1;
> +	} while ((void *)x >= stop_address);
> +}
> +
> +static void run_test(void)
> +{
> +	int pid, status, sig;
> +    	char *b;
> +	void *stack_address, *mmap_address, *heap_address;
> +        stack_address = alloca(0);
> +        heap_address = sbrk(0);
> +        /*
> +         * paranoia: start mapping two hugepages below the start of the stack,
> +         * in case the alignment would cause us to map over something if we
> +         * only used a gap of one hugepage.
> +         */
> +        mmap_address = PALIGN(stack_address - 2 * hpage_size, hpage_size);
> +        do {
> +		b = SAFE_MMAP(mmap_address, hpage_size, PROT_READ|PROT_WRITE,
> +						MAP_FIXED|MAP_SHARED, fd, 0);
> +		mmap_address -= hpage_size;
> +		/*
> +		 * if we get all the way down to the heap, stop trying
> +		 */
> +		if (mmap_address <= heap_address)
> +			break;
> + 	   } while (b == MAP_FAILED);

This definitelly wouldn't work as expected, SAFE_MMAP() cannot fail, it
does exit the test if it fails.

> +        if (b == MAP_FAILED)
> +		tst_res(TFAIL, "mmap() at unexpected address %p instead of %p\n", b,
> +	    		 mmap_address);
> +    
> +    	pid = SAFE_FORK();
> +		if (pid == 0) {
> +			do_child(mmap_address);
> +			exit(0);
> +		}
> +   	SAFE_WAITPID(pid, &status, 0);
> +
> +	if (WIFSIGNALED(status)) {
> +		sig = WTERMSIG(status);
> +
> +		if (sig == SIGSEGV) {
> +			 tst_res(TPASS, "Test Passed");
> +			 exit(0);
> +		} else {
> +			tst_res(TFAIL, "Got unexpected signal: %s", strsignal(sig));
> +			exit(1);

No calls to exit(1) in the test, the tst_res() is used to report test
results.

> +		}
> +	}
> +	tst_res(TFAIL, "Child not signalled");

This should use tst_strstatus() to print what has happened to the child.
Have a look at syscalls/mmap/mmap18.c how it's done.

> +}
> +
> +void setup(void)
> +{
> +    	struct rlimit r;
> +	page_size = getpagesize();
> +	hpage_size = tst_get_hugepage_size();
> +	/*
> +	 * Setting the stack size to unlimited.
> +	 */
> +	r.rlim_cur = RLIM_INFINITY;
> +        r.rlim_max = RLIM_INFINITY;
> +        SAFE_SETRLIMIT(RLIMIT_STACK, &r);
> +
> +        SAFE_GETRLIMIT(RLIMIT_STACK, &r);
> +        if (r.rlim_cur != RLIM_INFINITY)
> +		tst_brk(TCONF, "Stack rlimit must be 'unlimited'");
> +	fd = tst_creat_unlinked(MNTPOINT, 0);
> +}
> +
> +void cleanup(void)
> +{
> +    	if (fd > 0)
> +		SAFE_CLOSE(fd);
> +}
> +
> +static struct tst_test test = {
> +	.tags = (struct tst_tag[]) {
> +                {"linux-git", "0d59a01bc461"},
> +                {}
> +	},
> +	.needs_root = 1,
> +	.mntpoint = MNTPOINT,
> +	.needs_hugetlbfs = 1,
> +	.needs_tmpdir = 1,
> +	.setup = setup,
> +	.cleanup = cleanup,
> +	.test_all = run_test,
> +	.hugepages = {2, TST_NEEDS},
> +	.forks_child = 1,
> +};
> -- 
> 2.39.3
> 
> 
> -- 
> Mailing list info: https://lists.linux.it/listinfo/ltp

-- 
Cyril Hrubis
chrubis@suse.cz

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

      reply	other threads:[~2023-09-08 12:21 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-08 11:05 [LTP] [PATCH] Migrating the libhugetlbfs/testcases/stack_grow_into_huge.c test Samir Mulani
2023-09-08 12:22 ` Cyril Hrubis [this message]

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=ZPsR-fYtg70dC-Tc@yuki \
    --to=chrubis@suse.cz \
    --cc=geetika@linux.ibm.com \
    --cc=ltp@lists.linux.it \
    --cc=samir@linux.vnet.ibm.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox