[LTP] [PATCH v2] open08: rewrite to newlib
Li Wang
liwang@redhat.com
Fri Jun 15 05:04:11 CEST 2018
On Thu, Jun 14, 2018 at 9:47 PM, Li Wang <liwang@redhat.com> wrote:
> On Thu, Jun 14, 2018 at 8:48 PM, Jan Stancek <jstancek@redhat.com> wrote:
>> Fixes: https://github.com/linux-test-project/ltp/issues/330
>>
>> EACCES testcase changed:
>> Test now creates file (0600) in tmpdir, that is owned by privileged user,
>> and unprivileged user tries to open it for writing.
>>
>> EFAULT testcase changed:
>> Comments say the intent is to use address outside of process mapped space.
>> So, test is changed to map/unmap rather than map as PROT_NONE.
>>
>> uclinux ifdefs dropped.
>>
>> Signed-off-by: Jan Stancek <jstancek@redhat.com>
>> ---
>> testcases/kernel/syscalls/open/open08.c | 140 +++++++++++++-------------------
>> 1 file changed, 58 insertions(+), 82 deletions(-)
>>
>> diff --git a/testcases/kernel/syscalls/open/open08.c b/testcases/kernel/syscalls/open/open08.c
>> index d55d8e6bdd53..d749d1e7100e 100644
>> --- a/testcases/kernel/syscalls/open/open08.c
>> +++ b/testcases/kernel/syscalls/open/open08.c
>> @@ -1,5 +1,6 @@
>> /*
>> * Copyright (c) 2013 Wanlong Gao <gaowanlong@cn.fujitsu.com>
>> + * Copyright (c) 2018 Linux Test Project
>> *
>> * 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
>> @@ -39,7 +40,7 @@
>> * 4. Attempt to open() a filename which is more than VFS_MAXNAMLEN, and
>> * check for errno to be ENAMETOOLONG.
>> *
>> - * 5. Attempt to open a test executable in WRONLY mode,
>> + * 5. Attempt to open a (0600) file owned by different user in WRONLY mode,
>> * open(2) should fail with EACCES.
>> *
>> * 6. Attempt to pass an invalid pathname with an address pointing outside
>> @@ -56,113 +57,88 @@
>> #include <fcntl.h>
>> #include <signal.h>
>> #include <pwd.h>
>> -#include "test.h"
>> -#include "safe_macros.h"
>> -
>> -static void setup(void);
>> -static void cleanup(void);
>> -
>> -char *TCID = "open08";
>> -
>> -static char nobody_uid[] = "nobody";
>> -static struct passwd *ltpuser;
>> -
>> -static char *bad_addr;
>> +#include "tst_test.h"
>>
>> static char filename[40] = "";
>> -static char fname[] = "/bin/cat";
>> +static char user2_file[] = "user2_0600";
>> static char bad_file[] = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyz";
>>
>> +struct test_case_t;
>> +static void setup_badfname_buf(struct test_case_t *t);
>> +
>> static struct test_case_t {
>> + void (*setup)(struct test_case_t *t);
>
> This function pointer named setup make me a little bit confused at first sight.
> It makes me thinking about what's the relationship to ltp steup()
> function for a while, actually it does not have.
>
> To avoid the situation to other person, how about just using
> void (*func) (struct test_case_t *t);
> here?
Or, maybe we could drop the func pointer in the test structure, and
reset the badfname only in verify_open(). It's hard to say which
method is better, but seems this can make things more easier I guess.
Which something differ with your patch too:
--- a/testcases/kernel/syscalls/open/open08.c
+++ b/testcases/kernel/syscalls/open/open08.c
@@ -63,27 +63,30 @@ static char filename[40] = "";
static char user2_file[] = "user2_0600";
static char bad_file[] =
"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyz";
-struct test_case_t;
-static void setup_badfname_buf(struct test_case_t *t);
-
static struct test_case_t {
- void (*setup)(struct test_case_t *t);
char *fname;
int flags;
int error;
} tcases[] = {
- {NULL, filename, O_CREAT | O_EXCL, EEXIST},
- {NULL, "/tmp", O_RDWR, EISDIR},
- {NULL, filename, O_DIRECTORY, ENOTDIR},
- {NULL, bad_file, O_RDWR, ENAMETOOLONG},
- {NULL, user2_file, O_WRONLY, EACCES},
- {setup_badfname_buf, NULL, O_CREAT, EFAULT}
+ {filename, O_CREAT | O_EXCL, EEXIST},
+ {"/tmp", O_RDWR, EISDIR},
+ {filename, O_DIRECTORY, ENOTDIR},
+ {bad_file, O_RDWR, ENAMETOOLONG},
+ {user2_file, O_WRONLY, EACCES},
+ {NULL, O_CREAT, EFAULT}
};
void verify_open(unsigned int i)
{
- if (tcases[i].setup)
- tcases[i].setup(&tcases[i]);
+ if (i == ARRAY_SIZE(tcases) - 1) {
+ char *bad_addr;
+ int len = getpagesize();
+
+ bad_addr = SAFE_MMAP(0, len, PROT_READ|PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
+ tcases[i].fname = bad_addr;
+ SAFE_MUNMAP(bad_addr, len);
+ }
TEST(open(tcases[i].fname, tcases[i].flags,
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH));
@@ -104,17 +107,6 @@ void verify_open(unsigned int i)
}
}
-static void setup_badfname_buf(struct test_case_t *t)
-{
- char *bad_addr;
- int len = getpagesize();
-
- bad_addr = SAFE_MMAP(0, len, PROT_READ|PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
- t->fname = bad_addr;
- SAFE_MUNMAP(bad_addr, len);
-}
-
static void setup(void)
{
int fildes;
--
Regards,
Li Wang
More information about the ltp
mailing list