Skip to contentSkip to conversation

syscalls/fremovexattr: Add fremovexattr() tests

PATCH New Rafael David Tinoco 2 participants 12 messages Nov 1, 2018 – Nov 18, 2018

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 syscalls/fremovexattr: Add fremovexattr() tests

Fixes #276

Following the same logic and tests used to test removexattr() syscall, this commit implements tests for fremovexattr(). It only differs from removexattr() on the given arguments: using a file descriptor instead of the filename.

Kernel has different entry points for both, with slightly different execution paths, mainly related to dealing with the passed file descriptor.

---
 runtest/syscalls                              |   3 +
 .../kernel/syscalls/fremovexattr/.gitignore   |   2 +
 .../kernel/syscalls/fremovexattr/Makefile     |   8 ++
 .../syscalls/fremovexattr/fremovexattr01.c    | 105 ++++++++++++++
 .../syscalls/fremovexattr/fremovexattr02.c    | 130 ++++++++++++++++++
 5 files changed, 248 insertions(+)
 create mode 100644 testcases/kernel/syscalls/fremovexattr/.gitignore
 create mode 100644 testcases/kernel/syscalls/fremovexattr/Makefile
 create mode 100644 testcases/kernel/syscalls/fremovexattr/fremovexattr01.c
 create mode 100644 testcases/kernel/syscalls/fremovexattr/fremovexattr02.c
runtest/syscalls +3 -0
index 2ac9f7665..c48ada707 100644
@@ -319,6 +319,9 @@ fork14 fork14
 
 fpathconf01 fpathconf01
 
+fremovexattr01 fremovexattr01
+fremovexattr02 fremovexattr02
+
 fstat01 fstat01
 fstat01_64 fstat01_64
 fstat02 fstat02
testcases/kernel/syscalls/fremovexattr/.gitignore new file +2 -0
new file mode 100644
index 000000000..455a9db2e
@@ -0,0 +1,2 @@
+fremovexattr01
+fremovexattr02
testcases/kernel/syscalls/fremovexattr/Makefile new file +8 -0
new file mode 100644
index 000000000..f71e4fc25
@@ -0,0 +1,8 @@
+# Copyright (c) 2018 - Linaro Limited. All rights reserved.
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+top_srcdir		?= ../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
\ No newline at end of file
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +105 -0

105 lines not on this page · raw message

testcases/kernel/syscalls/fremovexattr/fremovexattr02.c new file +130 -0

130 lines not on this page · raw message

Signature · 1 line
2.19.1
#1 lore raw

PATCH 1/1 syscalls/fremovexattr: Add fremovexattr() tests

Quoted 7 lines · Rafael David Tinoco
Fixes #276

Following the same logic and tests used to test removexattr() syscall, this commit implements tests for fremovexattr(). It only differs from removexattr() on the given arguments: using a file descriptor instead of the filename.

Quoted 5 lines

Kernel has different entry points for both, with slightly different execution paths, mainly related to dealing with the passed file descriptor.

Sorry, Ignore this one please, sending out a v2 with a small fix PLUS lremovexattr() test as well, both Fixing: #276. Thanks!

#2 lore raw

PATCH v2 1/2 syscalls/fremovexattr: Add fremovexattr() tests

Fixes #276

Following the same logic and tests used to test removexattr() syscall, this commit implements tests for fremovexattr(). It only differs from removexattr() on the given arguments: using a file descriptor instead of the filename.

Kernel has different entry points for both, with slightly different execution paths, mainly related to dealing with the passed file descriptor.

---
 runtest/syscalls                              |   3 +
 .../kernel/syscalls/fremovexattr/.gitignore   |   2 +
 .../kernel/syscalls/fremovexattr/Makefile     |   8 ++
 .../syscalls/fremovexattr/fremovexattr01.c    | 106 ++++++++++++++
 .../syscalls/fremovexattr/fremovexattr02.c    | 130 ++++++++++++++++++
 5 files changed, 249 insertions(+)
 create mode 100644 testcases/kernel/syscalls/fremovexattr/.gitignore
 create mode 100644 testcases/kernel/syscalls/fremovexattr/Makefile
 create mode 100644 testcases/kernel/syscalls/fremovexattr/fremovexattr01.c
 create mode 100644 testcases/kernel/syscalls/fremovexattr/fremovexattr02.c
runtest/syscalls +3 -0
index 2ac9f7665..c48ada707 100644
@@ -319,6 +319,9 @@ fork14 fork14
 
 fpathconf01 fpathconf01
 
+fremovexattr01 fremovexattr01
+fremovexattr02 fremovexattr02
+
 fstat01 fstat01
 fstat01_64 fstat01_64
 fstat02 fstat02
testcases/kernel/syscalls/fremovexattr/.gitignore new file +2 -0
new file mode 100644
index 000000000..455a9db2e
@@ -0,0 +1,2 @@
+fremovexattr01
+fremovexattr02
testcases/kernel/syscalls/fremovexattr/Makefile new file +8 -0
new file mode 100644
index 000000000..f71e4fc25
@@ -0,0 +1,8 @@
+# Copyright (c) 2018 - Linaro Limited. All rights reserved.
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+top_srcdir		?= ../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
\ No newline at end of file
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +106 -0

106 lines not on this page · raw message

testcases/kernel/syscalls/fremovexattr/fremovexattr02.c new file +130 -0

130 lines not on this page · raw message

Signature · 1 line
2.19.1
#3 lore raw

PATCH v2 2/2 syscalls/lremovexattr: Add lremovexattr() test

Fixes #276

This commit implements a test for lremovexattr(). According to attr(5), extended attributes are interpreted differently among files, directories and symbolic links. User attributes are only allowed for regular files and directories, thus the need to test security.* attributes being removed from symbolic links.

---
 runtest/syscalls                              |   2 +
 .../kernel/syscalls/lremovexattr/.gitignore   |   1 +
 .../kernel/syscalls/lremovexattr/Makefile     |   8 +
 .../syscalls/lremovexattr/lremovexattr01.c    | 140 ++++++++++++++++++
 4 files changed, 151 insertions(+)
 create mode 100644 testcases/kernel/syscalls/lremovexattr/.gitignore
 create mode 100644 testcases/kernel/syscalls/lremovexattr/Makefile
 create mode 100644 testcases/kernel/syscalls/lremovexattr/lremovexattr01.c
runtest/syscalls +2 -0
index c48ada707..77a36b1f5 100644
@@ -581,6 +581,8 @@ llseek01 llseek01
 llseek02 llseek02
 llseek03 llseek03
 
+lremovexattr01 lremovexattr01
+
 lseek01 lseek01
 lseek02 lseek02
 lseek07 lseek07
testcases/kernel/syscalls/lremovexattr/.gitignore new file +1 -0
new file mode 100644
index 000000000..810f86214
@@ -0,0 +1 @@
+lremovexattr01
testcases/kernel/syscalls/lremovexattr/Makefile new file +8 -0
new file mode 100644
index 000000000..f71e4fc25
@@ -0,0 +1,8 @@
+# Copyright (c) 2018 - Linaro Limited. All rights reserved.
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+top_srcdir		?= ../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
\ No newline at end of file
testcases/kernel/syscalls/lremovexattr/lremovexattr01.c new file +140 -0

140 lines not on this page · raw message

Signature · 1 line
2.19.1
#4 lore raw

PATCH v2 1/2 syscalls/fremovexattr: Add fremovexattr() tests

In reply to Rafael David Tinoco

Hi!

Quoted 23 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +23 -0
+/*
+ * Test Name: fremovexattr01
+ *
+ * Description:
+ * Like removexattr(2), fremovexattr(2) also removes an extended attribute,
+ * identified by a name, from a file but, instead of using a filename path, it
+ * uses a descriptor. This test verifies that a simple call to fremovexattr(2)
+ * removes, indeed, a previously set attribute key/value from a file.
+ */
+
+#include "config.h"
+#include <errno.h>
+#include <stdlib.h>
+
+#ifdef HAVE_SYS_XATTR_H
+# include <sys/xattr.h>
+#endif
+
+#include "tst_test.h"
+
+#ifdef HAVE_SYS_XATTR_H
+
+#define ENOATTR ENODATA

testcases/kernel/syscalls/fremovexattr/fremovexattr01.c line 39

Quoted 10 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +10 -0
+
+#define XATTR_TEST_KEY "user.testkey"
+#define XATTR_TEST_VALUE "this is a test value"
+#define XATTR_TEST_VALUE_SIZE 20
+
+#define MNTPOINT "mntpoint"
+#define FNAME MNTPOINT"/fremovexattr01testfile"
+
+static int fd = -1;
+static char *got_value;

Why not just static char got_value[XATTR_TEST_VALUE_SIZE]?

Quoted 24 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +24 -0
+static void verify_fremovexattr(void)
+{
+	SAFE_FSETXATTR(fd, XATTR_TEST_KEY, XATTR_TEST_VALUE,
+			XATTR_TEST_VALUE_SIZE, XATTR_CREATE);
+
+	TEST(fremovexattr(fd, XATTR_TEST_KEY));
+
+	if (TST_RET != 0) {
+		tst_res(TFAIL | TTERRNO, "fremovexattr(2) failed");
+		return;
+	}
+
+	memset(got_value, 0, XATTR_TEST_VALUE_SIZE);
+
+	TEST(fgetxattr(fd, XATTR_TEST_KEY, got_value, XATTR_TEST_VALUE_SIZE));
+
+	if (TST_RET >= 0) {
+		tst_res(TFAIL, "fremovexattr(2) did not remove attribute");
+		return;
+	}
+
+	if (TST_RET < 0 && TST_ERR != ENOATTR) {
+		tst_brk(TBROK, "fremovexattr(2) could not verify removal");
+		return;

testcases/kernel/syscalls/fremovexattr/fremovexattr01.c line 74

Quoted 10 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +10 -0
+	}
+
+	tst_res(TPASS, "fremovexattr(2) removed attribute as expected");
+}
+
+static void cleanup(void)
+{
+	free(got_value);
+
+	close(fd);
        ^
	if (fd > 0)
		SAFE_CLOSE(fd);

	would be slightly better here as it would emit
	warning if the close() has failed.

testcases/kernel/syscalls/fremovexattr/fremovexattr01.c line 81

Quoted 7 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +7 -0
+}
+
+static void setup(void)
+{
+	SAFE_TOUCH(FNAME, 0644, NULL);
+
+	fd = SAFE_OPEN(FNAME, O_RDWR, NULL);

^
open() is a variable argument function and the third argument is an integer but only in a case that we passed O_CREAT in the flags, if we are not creating the file it should be omitted

So if we want to create the file, we don't have to call the SAFE_TOUCH() but pass O_CREAT in the flags and pass the mode as third argument here as:

	fd = SAFE_OPEN(FNAME, O_RDWR | O_CREAT, 0644);

testcases/kernel/syscalls/fremovexattr/fremovexattr01.c line 87

Quoted 5 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +5 -0
+	TEST(fremovexattr(fd, XATTR_TEST_KEY));
+
+	if (TST_RET == -1 && TST_ERR == EOPNOTSUPP) {
+		tst_brk(TCONF, "fremovexattr(2) not supported");
+		return;

^
No need for the return here.

Quoted 119 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +19 -0
+	}
+
+	got_value = SAFE_MALLOC(XATTR_TEST_VALUE_SIZE);
+}
+
+static struct tst_test test = {
+	.setup = setup,
+	.test_all = verify_fremovexattr,
+	.cleanup = cleanup,
+	.mntpoint = MNTPOINT,
+	.mount_device = 1,
+	.all_filesystems = 1,
+	.needs_tmpdir = 1,
+	.needs_root = 1,
+};
+
+#else /* HAVE_SYS_XATTR_H */
+TST_TEST_TCONF("<sys/xattr.h> does not exist");
+#endif
testcases/kernel/syscalls/fremovexattr/fremovexattr02.c new file +94 -0
new file mode 100644
index 000000000..5585b6abe
@@ -0,0 +1,130 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2018 Linaro Limited. All rights reserved.
+ * Author: Rafael David Tinoco <[email protected]>
+ */
+
+/*
+ * Test Name: fremovexattr02
+ *
+ * Test cases::
+ * 1) fremovexattr(2) fails if the named attribute does not exist.
+ * 2) fremovexattr(2) fails if file descriptor is not valid.
+ * 3) fremovexattr(2) fails if named attribute has an invalid address.
+ *
+ * Expected Results:
+ * fremovexattr(2) should return -1 and set errno to ENODATA.
+ * fremovexattr(2) should return -1 and set errno to EBADF.
+ * fremovexattr(2) should return -1 and set errno to EFAULT.
+ */
+
+#include "config.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#ifdef HAVE_SYS_XATTR_H
+# include <sys/xattr.h>
+#endif
+
+#include "tst_test.h"
+
+#ifdef HAVE_SYS_XATTR_H
+
+#define XATTR_TEST_KEY "user.testkey"
+
+#define MNTPOINT "mntpoint"
+#define FNAME MNTPOINT"/fremovexattr02testfile"
+
+static int fd = -1;
+
+struct test_case {
+	int fd;
+	char *key;
+	char *value;
+	char *gotvalue;
+	int size;
+	int exp_ret;
+	int exp_err;
+};
+
+struct test_case tc[] = {
+	{				/* case 1: attribute does not exist */
+	 .key = XATTR_TEST_KEY,
+	 .exp_ret = -1,
+	 .exp_err = ENODATA,
+	 },
+	{				/* case 2: file descriptor is invalid */
+	 .fd = -1,
+	 .key = XATTR_TEST_KEY,
+	 .exp_ret = -1,
+	 .exp_err = EBADF,
+	 },
+	{				/* case 3: bad name attribute */
+	 .exp_ret = -1,
+	 .exp_err = EFAULT,
+	},
+};
+
+static void verify_fremovexattr(unsigned int i)
+{
+	TEST(fremovexattr(tc[i].fd, tc[i].key));
+
+	if (TST_RET == -1 && TST_ERR == EOPNOTSUPP)
+		tst_brk(TCONF, "fremovexattr(2) not supported");
+
+	if (tc[i].exp_ret == TST_RET) {
+
+		if (tc[i].exp_err) {
+			if (tc[i].exp_err == TST_ERR) {
+				tst_res(TPASS, "fremovexattr(2) passed");
+				return;
+			}
+		} else  {
+			tst_res(TPASS, "fremovexattr(2) passed");
+			return;
+		}
+	}
+
+	tst_res(TFAIL | TTERRNO, "fremovexattr(2) failed");
+}
+
+static void cleanup(void)
+{

testcases/kernel/syscalls/fremovexattr/fremovexattr02.c line 104

Quoted 10 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr02.c new file +10 -0
+	if (fd > 0)
+		SAFE_CLOSE(fd);
+}
+
+static void setup(void)
+{
+	size_t i = 0;
+
+	SAFE_TOUCH(FNAME, 0644, NULL);
+	fd = SAFE_OPEN(FNAME, O_RDWR, NULL);

Here as well no need for the SAFE_TOUCH().

Quoted 11 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr02.c new file +11 -0
+	for (i = 0; i < ARRAY_SIZE(tc); i++) {
+
+		if (tc[i].fd != -1)
+			tc[i].fd = fd;
+
+		if (!tc[i].key && tc[i].exp_err == EFAULT)
+			tc[i].key = tst_get_bad_addr(cleanup);
+	}
+}
+
+static struct tst_test test = {

testcases/kernel/syscalls/fremovexattr/fremovexattr02.c line 126

Quoted 10 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr02.c new file +10 -0
+	.setup = setup,
+	.test = verify_fremovexattr,
+	.cleanup = cleanup,
+	.tcnt = ARRAY_SIZE(tc),
+	.mntpoint = MNTPOINT,
+	.mount_device = 1,
+	.all_filesystems = 1,
+	.needs_tmpdir = 1,
+	.needs_root = 1,
+};

I'm wondering if we need the all_filesystem here, I guess that the ENODATA test will reach down to the filesystem driver, so it's probably relevant here.

Quoted 9 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr02.c new file +3 -0
+#else /* HAVE_SYS_XATTR_H */
+TST_TEST_TCONF("<sys/xattr.h> does not exist");
+#endif
Signature · 5 lines
2.19.1


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp
Signature · 2 lines
Cyril Hrubis
[email protected]
#5 lore raw

PATCH v2 1/2 syscalls/fremovexattr: Add fremovexattr() tests

Quoted 4 lines

testcases/kernel/syscalls/fremovexattr/fremovexattr01.c line 39

Quoted 2 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +2 -0
+static int fd = -1;
+static char *got_value;

Why not just static char got_value[XATTR_TEST_VALUE_SIZE]?

Of course =o) !! Will do.

Quoted 8 lines

testcases/kernel/syscalls/fremovexattr/fremovexattr01.c line 74

Quoted 5 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +5 -0
+static void cleanup(void)
+{
+     free(got_value);
+
+     close(fd);
        ^
        if (fd > 0)
                SAFE_CLOSE(fd);

Missed this.

Quoted 4 lines

would be slightly better here as it would emit warning if the close() has failed.

Quoted 14 lines

testcases/kernel/syscalls/fremovexattr/fremovexattr01.c line 81

Quoted 7 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +7 -0
+}
+
+static void setup(void)
+{
+     SAFE_TOUCH(FNAME, 0644, NULL);
+
+     fd = SAFE_OPEN(FNAME, O_RDWR, NULL);

^
open() is a variable argument function and the third argument is an integer but only in a case that we passed O_CREAT in the flags, if we are not creating the file it should be omitted

Sure! Auto mode, sorry.

Quoted 6 lines

Review

Quoted 4 lines

+++ b/testcases/kernel/syscalls/fremovexattr/fremovexattr02.c
...

(quoted diff) +2 -0
+     SAFE_TOUCH(FNAME, 0644, NULL);
+     fd = SAFE_OPEN(FNAME, O_RDWR, NULL);

Here as well no need for the SAFE_TOUCH().

Same.

Quoted 7 lines
Quoted 7 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr02.c new file +7 -0
+static struct tst_test test = {
+     .setup = setup,
+     .test = verify_fremovexattr,
+     .cleanup = cleanup,
+     .tcnt = ARRAY_SIZE(tc),
+     .mntpoint = MNTPOINT,
+     .mount_device = 1,
Quoted 8 lines

testcases/kernel/syscalls/fremovexattr/fremovexattr01.c line 102

Quoted 4 lines
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +4 -0
+     .all_filesystems = 1,
+     .needs_tmpdir = 1,
+     .needs_root = 1,
+};

I'm wondering if we need the all_filesystem here, I guess that the ENODATA test will reach down to the filesystem driver, so it's probably relevant here.

Yep.. that is what I though.

Tks a lot Cyril, will send a v3.

o/

#6 lore raw

PATCH v3 1/2 syscalls/fremovexattr: Add fremovexattr() tests

In reply to Cyril Hrubis
Fixes #276

Following the same logic and tests used to test removexattr() syscall, this commit implements tests for fremovexattr(). It only differs from removexattr() on the given arguments: using a file descriptor instead of the filename.

Kernel has different entry points for both, with slightly different execution paths, mainly related to dealing with the passed file descriptor.

---
 runtest/syscalls                              |   3 +
 .../kernel/syscalls/fremovexattr/.gitignore   |   2 +
 .../kernel/syscalls/fremovexattr/Makefile     |   8 ++
 .../syscalls/fremovexattr/fremovexattr01.c    |  99 ++++++++++++++
 .../syscalls/fremovexattr/fremovexattr02.c    | 126 ++++++++++++++++++
 5 files changed, 238 insertions(+)
 create mode 100644 testcases/kernel/syscalls/fremovexattr/.gitignore
 create mode 100644 testcases/kernel/syscalls/fremovexattr/Makefile
 create mode 100644 testcases/kernel/syscalls/fremovexattr/fremovexattr01.c
 create mode 100644 testcases/kernel/syscalls/fremovexattr/fremovexattr02.c
runtest/syscalls +3 -0
index 95bb47b96..24110b623 100644
@@ -319,6 +319,9 @@ fork14 fork14
 
 fpathconf01 fpathconf01
 
+fremovexattr01 fremovexattr01
+fremovexattr02 fremovexattr02
+
 fstat01 fstat01
 fstat01_64 fstat01_64
 fstat02 fstat02
testcases/kernel/syscalls/fremovexattr/.gitignore new file +2 -0
new file mode 100644
index 000000000..455a9db2e
@@ -0,0 +1,2 @@
+fremovexattr01
+fremovexattr02
testcases/kernel/syscalls/fremovexattr/Makefile new file +8 -0
new file mode 100644
index 000000000..f71e4fc25
@@ -0,0 +1,8 @@
+# Copyright (c) 2018 - Linaro Limited. All rights reserved.
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+top_srcdir		?= ../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
\ No newline at end of file
testcases/kernel/syscalls/fremovexattr/fremovexattr01.c new file +99 -0

99 lines not on this page · raw message

testcases/kernel/syscalls/fremovexattr/fremovexattr02.c new file +126 -0

126 lines not on this page · raw message

Signature · 1 line
2.19.1
#7 lore raw

PATCH v3 2/2 syscalls/lremovexattr: Add lremovexattr() test

Fixes #276

This commit implements a test for lremovexattr(). According to attr(5), extended attributes are interpreted differently among files, directories and symbolic links. User attributes are only allowed for regular files and directories, thus the need to test security.* attributes being removed from symbolic links.

---
 runtest/syscalls                              |   2 +
 .../kernel/syscalls/lremovexattr/.gitignore   |   1 +
 .../kernel/syscalls/lremovexattr/Makefile     |   8 ++
 .../syscalls/lremovexattr/lremovexattr01.c    | 132 ++++++++++++++++++
 4 files changed, 143 insertions(+)
 create mode 100644 testcases/kernel/syscalls/lremovexattr/.gitignore
 create mode 100644 testcases/kernel/syscalls/lremovexattr/Makefile
 create mode 100644 testcases/kernel/syscalls/lremovexattr/lremovexattr01.c
runtest/syscalls +2 -0
index 24110b623..26c142bf8 100644
@@ -582,6 +582,8 @@ llseek01 llseek01
 llseek02 llseek02
 llseek03 llseek03
 
+lremovexattr01 lremovexattr01
+
 lseek01 lseek01
 lseek02 lseek02
 lseek07 lseek07
testcases/kernel/syscalls/lremovexattr/.gitignore new file +1 -0
new file mode 100644
index 000000000..810f86214
@@ -0,0 +1 @@
+lremovexattr01
testcases/kernel/syscalls/lremovexattr/Makefile new file +8 -0
new file mode 100644
index 000000000..f71e4fc25
@@ -0,0 +1,8 @@
+# Copyright (c) 2018 - Linaro Limited. All rights reserved.
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+top_srcdir		?= ../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
\ No newline at end of file
testcases/kernel/syscalls/lremovexattr/lremovexattr01.c new file +132 -0

132 lines not on this page · raw message

Signature · 1 line
2.19.1
#8 lore raw

PATCH v3 2/2 syscalls/lremovexattr: Add lremovexattr() test

Hi!
Pushed with minor changes, see below, thanks.

testcases/kernel/syscalls/lremovexattr/lremovexattr01.c +5 -7
index 2cf46ebdf..26194f114 100644
@@ -18,7 +18,7 @@
  * Note:
  * According to attr(5), extended attributes are interpreted differently from
  * regular files, directories and symbolic links. User attributes are only
- * allowed for regular files and directories, thus the need of using security.*
+ * allowed for regular files and directories, thus the need of using trusted.*
  * attributes for this test.
  */
 
@@ -39,7 +39,7 @@
 
 #define ENOATTR ENODATA
 
-#define XATTR_KEY		"security.key1"
+#define XATTR_KEY		"trusted.key1"
 #define XATTR_VALUE		"file and link"
 #define XATTR_VALUE_SIZE	13
 
@@ -79,8 +79,8 @@ static void verify_lremovexattr(void)
 		return;
 	}
 
-	if (TST_RET < 0 && TST_ERR != ENOATTR) {
-		tst_brk(TBROK, "lgetxattr(2) failed unexpectedly");
+	if (TST_ERR != ENOATTR) {
+		tst_brk(TBROK | TTERRNO, "lgetxattr(2) failed unexpectedly");
 		return;
 	}
 
@@ -111,10 +111,8 @@ static void setup(void)
 {
 	SAFE_TOUCH(FILENAME, 0644, NULL);
 
-	if (symlink(FILENAME, SYMLINK) < 0) {
+	if (symlink(FILENAME, SYMLINK) < 0)
 		tst_brk(TCONF, "symlink() not supported");
-		return;
-	}
 }
 
 static struct tst_test test = {

I've found that the trusted attributes works as well and cannot be disabled in kernel (at least for ext3 security attributes have their own CONFIG switches).

The rest is just removed unreachable or always true code.

Signature · 2 lines
Cyril Hrubis
[email protected]
#9 lore raw

PATCH v3 2/2 syscalls/lremovexattr: Add lremovexattr() test

Quoted 2 lines · Cyril Hrubis

Hi!
Pushed with minor changes, see below, thanks.

Thanks a lot Cyril!

Best,

Signature · 2 lines
Rafael D. Tinoco
Linaro Kernel Validation
#10 lore raw

PATCH v3 1/2 syscalls/fremovexattr: Add fremovexattr() tests

In reply to Rafael David Tinoco

Hi!
Pushed with minor simplification, mainly removing unreachable branches from the second test, thanks.

Diff:

testcases/kernel/syscalls/fremovexattr/fremovexattr01.c +3 -4
index 96b92fb24..a3ea1aa2b 100644
@@ -50,9 +50,7 @@ static void verify_fremovexattr(void)
 		return;
 	}
 
-	memset(&got_value, 0, XATTR_TEST_VALUE_SIZE);
-
-	TEST(fgetxattr(fd, XATTR_TEST_KEY, got_value, XATTR_TEST_VALUE_SIZE));
+	TEST(fgetxattr(fd, XATTR_TEST_KEY, got_value, sizeof(got_value)));
 
 	if (TST_RET >= 0) {
 		tst_res(TFAIL, "fremovexattr(2) did not remove attribute");
@@ -60,7 +58,8 @@ static void verify_fremovexattr(void)
 	}
 
 	if (TST_RET < 0 && TST_ERR != ENOATTR) {
-		tst_brk(TBROK, "fremovexattr(2) could not verify removal");
+		tst_brk(TBROK | TTERRNO,
+			"fremovexattr(2) could not verify removal");
 		return;
 	}
 
testcases/kernel/syscalls/fremovexattr/fremovexattr02.c +10 -16
index 8eb1e9a99..534179eae 100644
@@ -42,24 +42,20 @@ static int fd = -1;
 struct test_case {
 	int fd;
 	char *key;
-	int exp_ret;
 	int exp_err;
 };
 
 struct test_case tc[] = {
 	{				/* case 1: attribute does not exist */
 	 .key = XATTR_TEST_KEY,
-	 .exp_ret = -1,
 	 .exp_err = ENODATA,
 	 },
 	{				/* case 2: file descriptor is invalid */
 	 .fd = -1,
 	 .key = XATTR_TEST_KEY,
-	 .exp_ret = -1,
 	 .exp_err = EBADF,
 	 },
 	{				/* case 3: bad name attribute */
-	 .exp_ret = -1,
 	 .exp_err = EFAULT,
 	},
 };
@@ -71,20 +67,19 @@ static void verify_fremovexattr(unsigned int i)
 	if (TST_RET == -1 && TST_ERR == EOPNOTSUPP)
 		tst_brk(TCONF, "fremovexattr(2) not supported");
 
-	if (tc[i].exp_ret == TST_RET) {
-
-		if (tc[i].exp_err) {
-			if (tc[i].exp_err == TST_ERR) {
-				tst_res(TPASS, "fremovexattr(2) passed");
-				return;
-			}
-		} else  {
-			tst_res(TPASS, "fremovexattr(2) passed");
-			return;
+	if (TST_RET == -1) {
+		if (tc[i].exp_err == TST_ERR) {
+			tst_res(TPASS | TTERRNO,
+				"fremovexattr(2) failed expectedly");
+		} else {
+			tst_res(TFAIL | TTERRNO,
+				"fremovexattr(2) should fail with %s",
+				tst_strerrno(tc[i].exp_err));
 		}
+		return;
 	}
 
-	tst_res(TFAIL | TTERRNO, "fremovexattr(2) failed");
+	tst_res(TFAIL, "fremovexattr(2) returned %li", TST_RET);
 }
 
-- 

Cyril Hrubis
[email protected]

#11 lore raw

PATCH v3 1/2 syscalls/fremovexattr: Add fremovexattr() tests

Quoted 4 lines · Cyril Hrubis

Hi!
Pushed with minor simplification, mainly removing unreachable branches from the second test, thanks.

Thanks a lot Cyril!