Message ID | 20190805101519.11739-1-ahajkova@redhat.com |
---|---|
State | New |
Headers | show |
Series | [v3] elf: tst-ldconfig-bad-aux-cache: use support_capture_subprocess | expand |
On Mon, 5 Aug 2019 12:15:19 +0200 Alexandra Hájková <alexandra.khirnova@gmail.com> wrote: > From: Alexandra Hájková <ahajkova@redhat.com> > > --- > elf/tst-ldconfig-bad-aux-cache.c | 75 ++++++++++++++ > +----------------- 1 file changed, 35 insertions(+), 40 deletions(-) > > diff --git a/elf/tst-ldconfig-bad-aux-cache.c > b/elf/tst-ldconfig-bad-aux-cache.c index 68ce90a956..a7afcf4e94 100644 > --- a/elf/tst-ldconfig-bad-aux-cache.c > +++ b/elf/tst-ldconfig-bad-aux-cache.c > @@ -31,6 +31,7 @@ > #include <ftw.h> > #include <stdint.h> > > +#include <support/capture_subprocess.h> > #include <support/check.h> > #include <support/support.h> > #include <support/xunistd.h> > @@ -52,6 +53,15 @@ display_info (const char *fpath, const struct stat > *sb, return 0; > } > > +static void > +execv_wrapper (void *args) > +{ > + char **argv = args; > + > + execv (argv[0], argv); > + FAIL_EXIT1 ("execv: %m"); > +} > + > /* Run ldconfig with a corrupt aux-cache, in particular we test for > size truncation that might happen if a previous ldconfig run failed > or if there were storage or power issues while we were writing the > file. @@ -61,54 +71,39 @@ static int > do_test (void) > { > char *prog = xasprintf ("%s/ldconfig", > support_install_rootsbindir); > - char *const args[] = { prog, NULL }; > + char *args[] = { prog, NULL }; > const char *path = "/var/cache/ldconfig/aux-cache"; > struct stat64 fs; > long int size, new_size, i; > - int status; > - pid_t pid; > > /* Create the needed directories. */ > xmkdirp ("/var/cache/ldconfig", 0777); > > - pid = xfork (); > /* Run ldconfig fist to generate the aux-cache. */ ^^^ s/fist/first/ > - if (pid == 0) > - { > - execv (args[0], args); > - _exit (1); > - } Dan
On Aug 05 2019, Alexandra Hájková <alexandra.khirnova@gmail.com> wrote: > @@ -52,6 +53,15 @@ display_info (const char *fpath, const struct stat *sb, > return 0; > } > > +static void > +execv_wrapper (void *args) > +{ > + char **argv = args; > + > + execv (argv[0], argv); > + FAIL_EXIT1 ("execv: %m"); > +} Indent with two spaces. > + struct support_capture_subprocess result; > + result = support_capture_subprocess (execv_wrapper, args); > + support_capture_subprocess_check (&result, "execv", 0, sc_allow_none); > + support_capture_subprocess_free (&result); > + > + xstat (path, &fs); > + > + size = fs.st_size; > + /* Run 3 tests, each truncating aux-cache shorter and shorter. */ > + for (i = 3; i > 0; i--) > + { > + new_size = size * i / 4; > + if (truncate (path, new_size)) > + FAIL_EXIT1 ("truncation failed: %m"); > + if (nftw (path, display_info, 1000, 0) == -1) > + FAIL_EXIT1 ("nftw failed."); > + > + /* Verify that ldconfig can run with a truncated > + aux-cache and doesn't crash. */ > + struct support_capture_subprocess result; > + result = support_capture_subprocess (execv_wrapper, args); > + support_capture_subprocess_check (&result, "execv", 0, sc_allow_none); > + support_capture_subprocess_free (&result); > + } Likewise. Andreas.
* Alexandra Hájková: > diff --git a/elf/tst-ldconfig-bad-aux-cache.c b/elf/tst-ldconfig-bad-aux-cache.c > index 68ce90a956..a7afcf4e94 100644 > --- a/elf/tst-ldconfig-bad-aux-cache.c > +++ b/elf/tst-ldconfig-bad-aux-cache.c This version looks good to me. Please do not forget to add a ChangeLog entry when pushing. Feel free to fix the existing typo that Dan identified along the way. Thanks, Florian
diff --git a/elf/tst-ldconfig-bad-aux-cache.c b/elf/tst-ldconfig-bad-aux-cache.c index 68ce90a956..a7afcf4e94 100644 --- a/elf/tst-ldconfig-bad-aux-cache.c +++ b/elf/tst-ldconfig-bad-aux-cache.c @@ -31,6 +31,7 @@ #include <ftw.h> #include <stdint.h> +#include <support/capture_subprocess.h> #include <support/check.h> #include <support/support.h> #include <support/xunistd.h> @@ -52,6 +53,15 @@ display_info (const char *fpath, const struct stat *sb, return 0; } +static void +execv_wrapper (void *args) +{ + char **argv = args; + + execv (argv[0], argv); + FAIL_EXIT1 ("execv: %m"); +} + /* Run ldconfig with a corrupt aux-cache, in particular we test for size truncation that might happen if a previous ldconfig run failed or if there were storage or power issues while we were writing the file. @@ -61,54 +71,39 @@ static int do_test (void) { char *prog = xasprintf ("%s/ldconfig", support_install_rootsbindir); - char *const args[] = { prog, NULL }; + char *args[] = { prog, NULL }; const char *path = "/var/cache/ldconfig/aux-cache"; struct stat64 fs; long int size, new_size, i; - int status; - pid_t pid; /* Create the needed directories. */ xmkdirp ("/var/cache/ldconfig", 0777); - pid = xfork (); /* Run ldconfig fist to generate the aux-cache. */ - if (pid == 0) - { - execv (args[0], args); - _exit (1); - } - else - { - xwaitpid (pid, &status, 0); - TEST_COMPARE(status, 0); - xstat (path, &fs); - - size = fs.st_size; - /* Run 3 tests, each truncating aux-cache shorter and shorter. */ - for (i = 3; i > 0; i--) - { - new_size = size * i / 4; - if (truncate (path, new_size)) - FAIL_EXIT1 ("truncation failed: %m"); - if (nftw (path, display_info, 1000, 0) == -1) - FAIL_EXIT1 ("nftw failed."); - - pid = xfork (); - /* Verify that ldconfig can run with a truncated - aux-cache and doesn't crash. */ - if (pid == 0) - { - execv (args[0], args); - _exit (1); - } - else - { - xwaitpid (pid, &status, 0); - TEST_COMPARE(status, 0); - } - } - } + struct support_capture_subprocess result; + result = support_capture_subprocess (execv_wrapper, args); + support_capture_subprocess_check (&result, "execv", 0, sc_allow_none); + support_capture_subprocess_free (&result); + + xstat (path, &fs); + + size = fs.st_size; + /* Run 3 tests, each truncating aux-cache shorter and shorter. */ + for (i = 3; i > 0; i--) + { + new_size = size * i / 4; + if (truncate (path, new_size)) + FAIL_EXIT1 ("truncation failed: %m"); + if (nftw (path, display_info, 1000, 0) == -1) + FAIL_EXIT1 ("nftw failed."); + + /* Verify that ldconfig can run with a truncated + aux-cache and doesn't crash. */ + struct support_capture_subprocess result; + result = support_capture_subprocess (execv_wrapper, args); + support_capture_subprocess_check (&result, "execv", 0, sc_allow_none); + support_capture_subprocess_free (&result); + } free (prog); return 0;
From: Alexandra Hájková <ahajkova@redhat.com> --- elf/tst-ldconfig-bad-aux-cache.c | 75 +++++++++++++++----------------- 1 file changed, 35 insertions(+), 40 deletions(-)