Message ID | 1680604594-16596-3-git-send-email-xuyang2018.jy@fujitsu.com |
---|---|
State | Superseded |
Headers | show |
Series | [1/4] syscalls/mlock01: Convert into new api | expand |
Hi, On Tuesday, April 4, 2023 4:06:33 PM IST Yang Xu wrote: > Also remove tst_require_root. Test mlock/munlock instead of mlock by default. > > Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com> > --- > testcases/kernel/syscalls/mlock/mlock03.c | 137 +++++++--------------- > 1 file changed, 43 insertions(+), 94 deletions(-) > > diff --git a/testcases/kernel/syscalls/mlock/mlock03.c b/testcases/kernel/syscalls/mlock/mlock03.c > index 8bc65701c..0fc3fa8ed 100644 > --- a/testcases/kernel/syscalls/mlock/mlock03.c > +++ b/testcases/kernel/syscalls/mlock/mlock03.c > @@ -1,119 +1,68 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later Original test only has GPLv2 > /* > - * Stack size mapping is decreased through mlock/munlock call. > - * > - * This is to test kernel if it has a problem with shortening [stack] > - * mapping through several loops of mlock/munlock of /proc/self/maps. > - * > - * From: > - * munlock 76KiB bfef2000-bff05000 rw-p 00000000 00:00 0 [stack] > - * > - * To: > - * munlock 44KiB bfefa000-bff05000 rw-p 00000000 00:00 0 [stack] > - * > - * with more iterations - could drop to 0KiB. > - * > * Copyright (C) 2010 Red Hat, Inc. > - * This program is free software; you can redistribute it and/or > - * modify it under the terms of version 2 of the GNU General Public > - * License as published by the Free Software Foundation. > - * > - * This program is distributed in the hope that it would be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > - * > - * Further, this software is distributed without any warranty that it > - * is free of the rightful claim of any third person regarding > - * infringement or the like. Any license provided herein, whether > - * implied or otherwise, applies only to this software file. Patent > - * licenses, if any, provided herein do not apply to combinations of > - * this program with other software, or any other product whatsoever. > + */ > + > +/*\ > + * [Description] > * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, write the Free Software > - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > - * 02110-1301, USA. > + * This case is designed to test kernel whether met a problem with shortening > + * [stack] mapping through several loops of mlock/munlock of /proc/self/maps. I don't understand how shortening of stack by calling to mlock/munlock for maps regions may work, so no comments on actual patch. > */ > + > #include <sys/mman.h> > #include <stdio.h> > #include <string.h> > -#include "test.h" > +#include <pwd.h> > +#include "tst_test.h" > +#include "tst_safe_stdio.h" > > #define KB 1024 > > -char *TCID = "mlock03"; > -int TST_TOTAL = 1; > - > -static void setup(void); > -static void cleanup(void); > - > -int main(int argc, char *argv[]) > +static void verify_mlock(void) > { > - int lc; > long from, to; > long first = -1, last = -1; > char b[KB]; > FILE *fp; > > - tst_parse_opts(argc, argv, NULL, NULL); > - > - setup(); > + fp = SAFE_FOPEN("/proc/self/maps", "r"); > + while (!feof(fp)) { > + if (!fgets(b, KB - 1, fp)) > + break; > + b[strlen(b) - 1] = '\0'; > + if (sscanf(b, "%lx-%lx", &from, &to) != 2) { > + tst_res(TFAIL, "parse %s start and end address failed", > + b); > + continue; > + } > > - for (lc = 0; TEST_LOOPING(lc); lc++) { > - fp = fopen("/proc/self/maps", "r"); > - if (fp == NULL) > - tst_brkm(TBROK | TERRNO, cleanup, "fopen"); > - while (!feof(fp)) { > - if (!fgets(b, KB - 1, fp)) > - break; > - b[strlen(b) - 1] = '\0'; > - sscanf(b, "%lx-%lx", &from, &to); > + /* Record the initial stack size. */ > + if (strstr(b, "[stack]") != NULL) > + first = (to - from) / KB; > > - /* Record the initial stack size. */ > - if (lc == 0 && strstr(b, "[stack]") != NULL) > - first = (to - from) / KB; > + tst_res(TINFO, "mlock[%lx,%lx]", from, to); > + if (mlock((const void *)from, to - from) == -1) > + tst_res(TINFO | TERRNO, "mlock failed"); > > - switch (lc & 1) { > - case 0: > - if (mlock((const void *)from, to - from) == -1) > - tst_resm(TINFO | TERRNO, > - "mlock failed"); > - break; > - case 1: > - if (munlock((void *)from, to - from) == -1) > - tst_resm(TINFO | TERRNO, > - "munlock failed"); > - break; > - default: > - break; > - } > - tst_resm(TINFO, "%s from %lx to %0lx", > - (lc & 1) ? "munlock" : "mlock", from, to); > + tst_res(TINFO, "munlock [%lx,%lx]", from, to); > + if (munlock((void *)from, to - from) == -1) > + tst_res(TINFO | TERRNO, "munlock failed"); > > - /* Record the final stack size. */ > - if (strstr(b, "[stack]") != NULL) > - last = (to - from) / KB; > - } > - fclose(fp); > + /* Record the final stack size. */ > + if (strstr(b, "[stack]") != NULL) > + last = (to - from) / KB; > } > - tst_resm(TINFO, "starting stack size is %ld", first); > - tst_resm(TINFO, "final stack size is %ld", last); > + SAFE_FCLOSE(fp); > + > + tst_res(TINFO, "starting stack size is %ld", first); > + tst_res(TINFO, "final stack size is %ld", last); > if (last < first) > - tst_resm(TFAIL, "stack size is decreased."); > + tst_res(TFAIL, "stack size is decreased."); > else > - tst_resm(TPASS, "stack size is not decreased."); > - > - cleanup(); > - tst_exit(); > + tst_res(TPASS, "stack size is not decreased."); > } > > -void setup(void) > -{ > - tst_require_root(); > - > - tst_sig(FORK, DEF_HANDLER, cleanup); > - TEST_PAUSE; > -} > - > -void cleanup(void) > -{ > -} > +static struct tst_test test = { > + .test_all = verify_mlock, > +}; > -- Regards, Avinesh
Hi Avinesh > Hi, > > On Tuesday, April 4, 2023 4:06:33 PM IST Yang Xu wrote: >> Also remove tst_require_root. Test mlock/munlock instead of mlock by default. >> >> Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com> >> --- >> testcases/kernel/syscalls/mlock/mlock03.c | 137 +++++++--------------- >> 1 file changed, 43 insertions(+), 94 deletions(-) >> >> diff --git a/testcases/kernel/syscalls/mlock/mlock03.c b/testcases/kernel/syscalls/mlock/mlock03.c >> index 8bc65701c..0fc3fa8ed 100644 >> --- a/testcases/kernel/syscalls/mlock/mlock03.c >> +++ b/testcases/kernel/syscalls/mlock/mlock03.c >> @@ -1,119 +1,68 @@ >> +// SPDX-License-Identifier: GPL-2.0-or-later > Original test only has GPLv2 Good catch. > >> /* >> - * Stack size mapping is decreased through mlock/munlock call. >> - * >> - * This is to test kernel if it has a problem with shortening [stack] >> - * mapping through several loops of mlock/munlock of /proc/self/maps. >> - * >> - * From: >> - * munlock 76KiB bfef2000-bff05000 rw-p 00000000 00:00 0 [stack] >> - * >> - * To: >> - * munlock 44KiB bfefa000-bff05000 rw-p 00000000 00:00 0 [stack] >> - * >> - * with more iterations - could drop to 0KiB. >> - * >> * Copyright (C) 2010 Red Hat, Inc. >> - * This program is free software; you can redistribute it and/or >> - * modify it under the terms of version 2 of the GNU General Public >> - * License as published by the Free Software Foundation. >> - * >> - * This program is distributed in the hope that it would be useful, >> - * but WITHOUT ANY WARRANTY; without even the implied warranty of >> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. >> - * >> - * Further, this software is distributed without any warranty that it >> - * is free of the rightful claim of any third person regarding >> - * infringement or the like. Any license provided herein, whether >> - * implied or otherwise, applies only to this software file. Patent >> - * licenses, if any, provided herein do not apply to combinations of >> - * this program with other software, or any other product whatsoever. >> + */ >> + >> +/*\ >> + * [Description] >> * >> - * You should have received a copy of the GNU General Public License >> - * along with this program; if not, write the Free Software >> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA >> - * 02110-1301, USA. >> + * This case is designed to test kernel whether met a problem with shortening >> + * [stack] mapping through several loops of mlock/munlock of /proc/self/maps. > I don't understand how shortening of stack by calling to mlock/munlock > for maps regions may work, so no comments on actual patch. It doesn't related to shortening [stack] mapping. I also see kernel org that doesn't have similar bug. Perhaps we can remove this case. Best Regards Yang Xu > >> */ >> + >> #include <sys/mman.h> >> #include <stdio.h> >> #include <string.h> >> -#include "test.h" >> +#include <pwd.h> >> +#include "tst_test.h" >> +#include "tst_safe_stdio.h" >> >> #define KB 1024 >> >> -char *TCID = "mlock03"; >> -int TST_TOTAL = 1; >> - >> -static void setup(void); >> -static void cleanup(void); >> - >> -int main(int argc, char *argv[]) >> +static void verify_mlock(void) >> { >> - int lc; >> long from, to; >> long first = -1, last = -1; >> char b[KB]; >> FILE *fp; >> >> - tst_parse_opts(argc, argv, NULL, NULL); >> - >> - setup(); >> + fp = SAFE_FOPEN("/proc/self/maps", "r"); >> + while (!feof(fp)) { >> + if (!fgets(b, KB - 1, fp)) >> + break; >> + b[strlen(b) - 1] = '\0'; >> + if (sscanf(b, "%lx-%lx", &from, &to) != 2) { >> + tst_res(TFAIL, "parse %s start and end address failed", >> + b); >> + continue; >> + } >> >> - for (lc = 0; TEST_LOOPING(lc); lc++) { >> - fp = fopen("/proc/self/maps", "r"); >> - if (fp == NULL) >> - tst_brkm(TBROK | TERRNO, cleanup, "fopen"); >> - while (!feof(fp)) { >> - if (!fgets(b, KB - 1, fp)) >> - break; >> - b[strlen(b) - 1] = '\0'; >> - sscanf(b, "%lx-%lx", &from, &to); >> + /* Record the initial stack size. */ >> + if (strstr(b, "[stack]") != NULL) >> + first = (to - from) / KB; >> >> - /* Record the initial stack size. */ >> - if (lc == 0 && strstr(b, "[stack]") != NULL) >> - first = (to - from) / KB; >> + tst_res(TINFO, "mlock[%lx,%lx]", from, to); >> + if (mlock((const void *)from, to - from) == -1) >> + tst_res(TINFO | TERRNO, "mlock failed"); >> >> - switch (lc & 1) { >> - case 0: >> - if (mlock((const void *)from, to - from) == -1) >> - tst_resm(TINFO | TERRNO, >> - "mlock failed"); >> - break; >> - case 1: >> - if (munlock((void *)from, to - from) == -1) >> - tst_resm(TINFO | TERRNO, >> - "munlock failed"); >> - break; >> - default: >> - break; >> - } >> - tst_resm(TINFO, "%s from %lx to %0lx", >> - (lc & 1) ? "munlock" : "mlock", from, to); >> + tst_res(TINFO, "munlock [%lx,%lx]", from, to); >> + if (munlock((void *)from, to - from) == -1) >> + tst_res(TINFO | TERRNO, "munlock failed"); >> >> - /* Record the final stack size. */ >> - if (strstr(b, "[stack]") != NULL) >> - last = (to - from) / KB; >> - } >> - fclose(fp); >> + /* Record the final stack size. */ >> + if (strstr(b, "[stack]") != NULL) >> + last = (to - from) / KB; >> } >> - tst_resm(TINFO, "starting stack size is %ld", first); >> - tst_resm(TINFO, "final stack size is %ld", last); >> + SAFE_FCLOSE(fp); >> + >> + tst_res(TINFO, "starting stack size is %ld", first); >> + tst_res(TINFO, "final stack size is %ld", last); >> if (last < first) >> - tst_resm(TFAIL, "stack size is decreased."); >> + tst_res(TFAIL, "stack size is decreased."); >> else >> - tst_resm(TPASS, "stack size is not decreased."); >> - >> - cleanup(); >> - tst_exit(); >> + tst_res(TPASS, "stack size is not decreased."); >> } >> >> -void setup(void) >> -{ >> - tst_require_root(); >> - >> - tst_sig(FORK, DEF_HANDLER, cleanup); >> - TEST_PAUSE; >> -} >> - >> -void cleanup(void) >> -{ >> -} >> +static struct tst_test test = { >> + .test_all = verify_mlock, >> +}; >> > > -- > Regards, > Avinesh > >
diff --git a/testcases/kernel/syscalls/mlock/mlock03.c b/testcases/kernel/syscalls/mlock/mlock03.c index 8bc65701c..0fc3fa8ed 100644 --- a/testcases/kernel/syscalls/mlock/mlock03.c +++ b/testcases/kernel/syscalls/mlock/mlock03.c @@ -1,119 +1,68 @@ +// SPDX-License-Identifier: GPL-2.0-or-later /* - * Stack size mapping is decreased through mlock/munlock call. - * - * This is to test kernel if it has a problem with shortening [stack] - * mapping through several loops of mlock/munlock of /proc/self/maps. - * - * From: - * munlock 76KiB bfef2000-bff05000 rw-p 00000000 00:00 0 [stack] - * - * To: - * munlock 44KiB bfefa000-bff05000 rw-p 00000000 00:00 0 [stack] - * - * with more iterations - could drop to 0KiB. - * * Copyright (C) 2010 Red Hat, Inc. - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Further, this software is distributed without any warranty that it - * is free of the rightful claim of any third person regarding - * infringement or the like. Any license provided herein, whether - * implied or otherwise, applies only to this software file. Patent - * licenses, if any, provided herein do not apply to combinations of - * this program with other software, or any other product whatsoever. + */ + +/*\ + * [Description] * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA. + * This case is designed to test kernel whether met a problem with shortening + * [stack] mapping through several loops of mlock/munlock of /proc/self/maps. */ + #include <sys/mman.h> #include <stdio.h> #include <string.h> -#include "test.h" +#include <pwd.h> +#include "tst_test.h" +#include "tst_safe_stdio.h" #define KB 1024 -char *TCID = "mlock03"; -int TST_TOTAL = 1; - -static void setup(void); -static void cleanup(void); - -int main(int argc, char *argv[]) +static void verify_mlock(void) { - int lc; long from, to; long first = -1, last = -1; char b[KB]; FILE *fp; - tst_parse_opts(argc, argv, NULL, NULL); - - setup(); + fp = SAFE_FOPEN("/proc/self/maps", "r"); + while (!feof(fp)) { + if (!fgets(b, KB - 1, fp)) + break; + b[strlen(b) - 1] = '\0'; + if (sscanf(b, "%lx-%lx", &from, &to) != 2) { + tst_res(TFAIL, "parse %s start and end address failed", + b); + continue; + } - for (lc = 0; TEST_LOOPING(lc); lc++) { - fp = fopen("/proc/self/maps", "r"); - if (fp == NULL) - tst_brkm(TBROK | TERRNO, cleanup, "fopen"); - while (!feof(fp)) { - if (!fgets(b, KB - 1, fp)) - break; - b[strlen(b) - 1] = '\0'; - sscanf(b, "%lx-%lx", &from, &to); + /* Record the initial stack size. */ + if (strstr(b, "[stack]") != NULL) + first = (to - from) / KB; - /* Record the initial stack size. */ - if (lc == 0 && strstr(b, "[stack]") != NULL) - first = (to - from) / KB; + tst_res(TINFO, "mlock[%lx,%lx]", from, to); + if (mlock((const void *)from, to - from) == -1) + tst_res(TINFO | TERRNO, "mlock failed"); - switch (lc & 1) { - case 0: - if (mlock((const void *)from, to - from) == -1) - tst_resm(TINFO | TERRNO, - "mlock failed"); - break; - case 1: - if (munlock((void *)from, to - from) == -1) - tst_resm(TINFO | TERRNO, - "munlock failed"); - break; - default: - break; - } - tst_resm(TINFO, "%s from %lx to %0lx", - (lc & 1) ? "munlock" : "mlock", from, to); + tst_res(TINFO, "munlock [%lx,%lx]", from, to); + if (munlock((void *)from, to - from) == -1) + tst_res(TINFO | TERRNO, "munlock failed"); - /* Record the final stack size. */ - if (strstr(b, "[stack]") != NULL) - last = (to - from) / KB; - } - fclose(fp); + /* Record the final stack size. */ + if (strstr(b, "[stack]") != NULL) + last = (to - from) / KB; } - tst_resm(TINFO, "starting stack size is %ld", first); - tst_resm(TINFO, "final stack size is %ld", last); + SAFE_FCLOSE(fp); + + tst_res(TINFO, "starting stack size is %ld", first); + tst_res(TINFO, "final stack size is %ld", last); if (last < first) - tst_resm(TFAIL, "stack size is decreased."); + tst_res(TFAIL, "stack size is decreased."); else - tst_resm(TPASS, "stack size is not decreased."); - - cleanup(); - tst_exit(); + tst_res(TPASS, "stack size is not decreased."); } -void setup(void) -{ - tst_require_root(); - - tst_sig(FORK, DEF_HANDLER, cleanup); - TEST_PAUSE; -} - -void cleanup(void) -{ -} +static struct tst_test test = { + .test_all = verify_mlock, +};
Also remove tst_require_root. Test mlock/munlock instead of mlock by default. Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com> --- testcases/kernel/syscalls/mlock/mlock03.c | 137 +++++++--------------- 1 file changed, 43 insertions(+), 94 deletions(-)