Skip to contentSkip to conversation

Listxattr related calls: new tests and testcase

PATCH Superseded Dejan Jovicevic 2 participants 11 messages Nov 2, 2016 Library code

v3 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

v3 cover Listxattr related calls: new tests and testcase

v2 -> v3:
- Removed unnecessary null-termination for longpathname in llistxattr02 new testcase.
- Modified the code to be more readable and maintainable, this resulted in creating a new patch that pretty much does the same thing for llistxattr() tests.
- Started usign corresponding safe macros in the setup of all of the listxattr related tests. This resulted in a new patch that implements these safe macros.

v1 -> v2:
- Modified the setup for the new testcase in llistxattr02 and a testcase in listxattr02.
- Modified commit messages.

This series introduces new testcase for llistxattr02 and tests for flistxattr() and listxattr(). Safe macros are added for functions that set extended attribute values, and are being used in appropriate tests. The code in tests for llistxattr() was slightly modified to be more readable and easier to maintain, this practice was followed in creating new tests for flistxattr() and listxattr().

Dejan Jovicevic (5):
safe_macros: add safe_setxattr(), safe_lsetxattr() and
safe_fsetxattr()
llistxattr: moved to using safe macros
llistxattr: improved code readability and stability
llistxattr: new testcase for long path name flistxattr and listxattr: added tests

 include/tst_safe_macros.h                          |  12 +++
 lib/safe_macros.c                                  |  66 +++++++++++++
 runtest/syscalls                                   |   8 ++
 testcases/kernel/syscalls/.gitignore               |   6 ++
 testcases/kernel/syscalls/flistxattr/Makefile      |  23 +++++
 .../kernel/syscalls/flistxattr/flistxattr01.c      | 102 ++++++++++++++++++++
 .../kernel/syscalls/flistxattr/flistxattr02.c      | 104 ++++++++++++++++++++
 .../kernel/syscalls/flistxattr/flistxattr03.c      |  97 +++++++++++++++++++
 testcases/kernel/syscalls/listxattr/Makefile       |  23 +++++
 testcases/kernel/syscalls/listxattr/listxattr01.c  |  94 ++++++++++++++++++
 testcases/kernel/syscalls/listxattr/listxattr02.c  | 105 +++++++++++++++++++++
 testcases/kernel/syscalls/listxattr/listxattr03.c  |  89 +++++++++++++++++
 .../kernel/syscalls/llistxattr/llistxattr01.c      |  46 +++------
 .../kernel/syscalls/llistxattr/llistxattr02.c      |  53 +++++------
 .../kernel/syscalls/llistxattr/llistxattr03.c      |  24 ++---
 15 files changed, 773 insertions(+), 79 deletions(-)
 create mode 100644 testcases/kernel/syscalls/flistxattr/Makefile
 create mode 100644 testcases/kernel/syscalls/flistxattr/flistxattr01.c
 create mode 100644 testcases/kernel/syscalls/flistxattr/flistxattr02.c
 create mode 100644 testcases/kernel/syscalls/flistxattr/flistxattr03.c
 create mode 100644 testcases/kernel/syscalls/listxattr/Makefile
 create mode 100644 testcases/kernel/syscalls/listxattr/listxattr01.c
 create mode 100644 testcases/kernel/syscalls/listxattr/listxattr02.c
 create mode 100644 testcases/kernel/syscalls/listxattr/listxattr03.c
Signature · 1 line
1.9.1
#1 lore raw

PATCH v3 1/5 safe_macros: add safe_setxattr(),

Added SAFE_SETXATTR(), SAFE_LSETXATTR() and SAFE_FSETXATTR() macros to simplify error checking in test preparation. Instead of calling the system function, checking for their return value and aborting the test if the operation has failed, just use corresponding safe macro.

---
 include/tst_safe_macros.h | 12 +++++++++
 lib/safe_macros.c         | 66 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 78 insertions(+)
include/tst_safe_macros.h +12 -0
index d1519f9..936f4dc 100644
@@ -433,4 +433,16 @@ static inline sighandler_t safe_signal(const char *file, const int lineno,
 	         "execlp(%s, %s, ...) failed", file, arg); \
 	} while (0)
 
+#define SAFE_SETXATTR(path, name, value, size, flags) \
+	safe_setxattr(__FILE__, __LINE__, NULL, (path), (name), (value), (size), \
+				(flags))
+
+#define SAFE_LSETXATTR(path, name, value, size, flags) \
+	safe_lsetxattr(__FILE__, __LINE__, NULL, (path), (name), (value), (size), \
+				(flags))
+
+#define SAFE_FSETXATTR(fd, name, value, size, flags) \
+	safe_fsetxattr(__FILE__, __LINE__, NULL, (fd), (name), (value), (size), \
+				(flags))
+
 #endif /* SAFE_MACROS_H__ */
lib/safe_macros.c +66 -0

69 lines not on this page · raw message

Signature · 1 line
1.9.1
#2 lore raw

PATCH v3 1/5 safe_macros: add safe_setxattr(),

Hi!

include/tst_safe_macros.h static inline sighandler_t safe_signal(const char *file, const int lineno, · line 446

Quoted 11 lines
include/tst_safe_macros.h +11 -0
+#define SAFE_SETXATTR(path, name, value, size, flags) \
+	safe_setxattr(__FILE__, __LINE__, NULL, (path), (name), (value), (size), \
+				(flags))
+
+#define SAFE_LSETXATTR(path, name, value, size, flags) \
+	safe_lsetxattr(__FILE__, __LINE__, NULL, (path), (name), (value), (size), \
+				(flags))
+
+#define SAFE_FSETXATTR(fd, name, value, size, flags) \
+	safe_fsetxattr(__FILE__, __LINE__, NULL, (fd), (name), (value), (size), \
+				(flags))

You are missing the function prototype for the safe_*setxattr() functions. And since these functions will not be exported to the old library you should add them here instead of the safe_macros_fn.h header. And, for the same reason, you don't have to pass NULL as a cleanup callback to these functions. You can just pass NULL to the tst_brkm() in the safe_macros.c.

Quoted 65 lines

#endif /* SAFE_MACROS_H__ */

lib/safe_macros.c +56 -0
index 5a05c84..e1d01b9 100644
@@ -794,3 +794,69 @@ struct dirent *safe_readdir(const char *file, const int lineno, void (cleanup_fn
 	errno = err;
 	return rval;
 }
+
+int safe_setxattr(const char *file, const int lineno, void (cleanup_fn)(void),
+				const char *path, const char *name, const void *value,
+				size_t size, int flags)
+{
+	int rval;
+
+	rval = setxattr(path, name, value, size, flags);
+
+	if (rval) {
+		if (errno == ENOTSUP) {
+			tst_brkm(TCONF, cleanup_fn,
+				 "%s:%d: no xattr support in fs or mounted "
+				 "without user_xattr option", file, lineno);
+		}
+
+		tst_brkm(TBROK | TERRNO, cleanup_fn, "%s:%d: setxattr() failed",
+			     file, lineno);
+	}
+
+	return rval;
+}
+
+int safe_lsetxattr(const char *file, const int lineno, void (cleanup_fn)(void),
+				const char *path, const char *name, const void *value,
+				size_t size, int flags)
+{
+	int rval;
+
+	rval = lsetxattr(path, name, value, size, flags);
+
+	if (rval) {
+		if (errno == ENOTSUP) {
+			tst_brkm(TCONF, cleanup_fn,
+				 "%s:%d: no xattr support in fs or mounted "
+				 "without user_xattr option", file, lineno);
+		}
+
+		tst_brkm(TBROK | TERRNO, cleanup_fn, "%s:%d: lsetxattr() failed",
+			     file, lineno);
+	}
+
+	return rval;
+}
+
+int safe_fsetxattr(const char *file, const int lineno, void (cleanup_fn)(void),
+				int fd, const char *name, const void *value, size_t size,
+				int flags)
+{
+	int rval;
+
+	rval = fsetxattr(fd, name, value, size, flags);
+
+	if (rval) {
+		if (errno == ENOTSUP) {
+			tst_brkm(TCONF, cleanup_fn,

lib/safe_macros.c struct dirent *safe_readdir(const char *file, const int lineno, void (cleanup_fn · line 862

Quoted 10 lines
lib/safe_macros.c +10 -0
+				 "%s:%d: no xattr support in fs or mounted "
+				 "without user_xattr option", file, lineno);
+		}
+
+		tst_brkm(TBROK | TERRNO, cleanup_fn, "%s:%d: fsetxattr() failed",
+			     file, lineno);
+	}
+
+	return rval;
+}

Otherwise these safe macros looks like a good idea to me.

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

PATCH v3 2/5 llistxattr: moved to using safe macros

In reply to Dejan Jovicevic

Apply newly created SAFE_LSETXATTR() macro to all files that test llistxattr().

---
 .../kernel/syscalls/llistxattr/llistxattr01.c      | 25 ++--------------------
 .../kernel/syscalls/llistxattr/llistxattr02.c      | 10 +--------
 .../kernel/syscalls/llistxattr/llistxattr03.c      | 10 +--------
 3 files changed, 4 insertions(+), 41 deletions(-)
testcases/kernel/syscalls/llistxattr/llistxattr01.c +2 -23
index 03d7f85..ef27991 100644
@@ -43,27 +43,6 @@
 #define VALUE_SIZE	4
 #define KEY_SIZE    17
 
-static void set_xattr(const char *path, const char *key)
-{
-	int n;
-
-	n = lsetxattr(path, key, VALUE, VALUE_SIZE, XATTR_CREATE);
-	if (n == -1) {
-		if (errno == ENOTSUP) {
-			tst_brk(TCONF,
-				 "no xattr support in fs or mounted "
-				 "without user_xattr option");
-		}
-
-		if (errno == EEXIST) {
-			tst_brk(TBROK, "exist attribute %s", key);
-		} else {
-			tst_brk(TBROK | TERRNO,
-				 "lsetxattr() failed");
-		}
-	}
-}
-
 static int has_attribute(const char *list, int llen, const char *attr)
 {
 	int i;
@@ -106,9 +85,9 @@ static void setup(void)
 
 	SAFE_SYMLINK("testfile", "symlink");
 
-	set_xattr("testfile", SECURITY_KEY1);
+	SAFE_LSETXATTR("testfile", SECURITY_KEY1, VALUE, VALUE_SIZE, XATTR_CREATE);
 
-	set_xattr("symlink", SECURITY_KEY2);
+	SAFE_LSETXATTR("symlink", SECURITY_KEY2, VALUE, VALUE_SIZE, XATTR_CREATE);
 }
 
 static struct tst_test test = {
testcases/kernel/syscalls/llistxattr/llistxattr02.c +1 -9
index ec4ba6e..7c09b5b 100644
@@ -86,15 +86,7 @@ static void setup(void)
 
 	SAFE_SYMLINK("testfile", "symlink");
 
-	n = lsetxattr("symlink", SECURITY_KEY, VALUE, VALUE_SIZE, XATTR_CREATE);
-	if (n == -1) {
-		if (errno == ENOTSUP) {
-			tst_brk(TCONF, "no xattr support in fs or "
-				 "mounted without user_xattr option");
-		} else {
-			tst_brk(TBROK | TERRNO, "lsetxattr() failed");
-		}
-	}
+	SAFE_LSETXATTR("symlink", SECURITY_KEY, VALUE, VALUE_SIZE, XATTR_CREATE);
 }
 
 static struct tst_test test = {
testcases/kernel/syscalls/llistxattr/llistxattr03.c +1 -9
index 9b65de9..da16048 100644
@@ -77,15 +77,7 @@ static void setup(void)
 
 	SAFE_TOUCH(filename[1], 0644, NULL);
 
-	ret = lsetxattr(filename[1], SECURITY_KEY, VALUE, VALUE_SIZE, XATTR_CREATE);
-	if (ret == -1) {
-		if (errno == ENOTSUP) {
-			tst_brk(TCONF, "no xattr support in fs or "
-				 "mounted without user_xattr option");
-		} else {
-			tst_brk(TBROK | TERRNO, "lsetxattr() failed");
-		}
-	}
+	SAFE_LSETXATTR(filename[1], SECURITY_KEY, VALUE, VALUE_SIZE, XATTR_CREATE);
 }
 
 static struct tst_test test = {
Signature · 1 line
1.9.1
#5 lore raw

PATCH v3 3/5 llistxattr: improved code readability and

In reply to Dejan Jovicevic

Changed bits of code, such as hardcoded magic constants, unnecessary else branches, way of passing array size to a function, removed unnecessary comments, moved to using macros instead of string literals where seemed to be fit.

This was done to make the code easier to read and understand, and make it easier to maintain in case of changes

---
 .../kernel/syscalls/llistxattr/llistxattr01.c      | 25 +++++++-------
 .../kernel/syscalls/llistxattr/llistxattr02.c      | 38 ++++++++++------------
 .../kernel/syscalls/llistxattr/llistxattr03.c      | 14 +++-----
 3 files changed, 36 insertions(+), 41 deletions(-)
testcases/kernel/syscalls/llistxattr/llistxattr01.c +13 -12
index ef27991..9161b94 100644
@@ -40,8 +40,10 @@
 #define SECURITY_KEY1	"security.ltptest1"
 #define SECURITY_KEY2	"security.ltptest2"
 #define VALUE	"test"
-#define VALUE_SIZE	4
-#define KEY_SIZE    17
+#define VALUE_SIZE	(sizeof(VALUE) - 1)
+#define KEY_SIZE    (sizeof(SECURITY_KEY1) - 1)
+#define TESTFILE    "testfile"
+#define SYMLINK    "symlink"
 
 static int has_attribute(const char *list, int llen, const char *attr)
 {
@@ -56,22 +58,21 @@ static int has_attribute(const char *list, int llen, const char *attr)
 
 static void verify_llistxattr(void)
 {
-	int size = 64;
-	char buf[size];
+	char buf[64];
 
-	TEST(llistxattr("symlink", buf, size));
+	TEST(llistxattr(SYMLINK, buf, sizeof(buf)));
 	if (TEST_RETURN == -1) {
-		tst_res(TFAIL | TERRNO, "llistxattr() failed");
+		tst_res(TFAIL | TTERRNO, "llistxattr() failed");
 		return;
 	}
 
-	if (has_attribute(buf, size, SECURITY_KEY1)) {
+	if (has_attribute(buf, sizeof(buf), SECURITY_KEY1)) {
 		tst_res(TFAIL, "get file attribute %s unexpectlly",
 			 SECURITY_KEY1);
 		return;
 	}
 
-	if (!has_attribute(buf, size, SECURITY_KEY2)) {
+	if (!has_attribute(buf, sizeof(buf), SECURITY_KEY2)) {
 		tst_res(TFAIL, "missing attribute %s", SECURITY_KEY2);
 		return;
 	}
@@ -81,13 +82,13 @@ static void verify_llistxattr(void)
 
 static void setup(void)
 {
-	SAFE_TOUCH("testfile", 0644, NULL);
+	SAFE_TOUCH(TESTFILE, 0644, NULL);
 
-	SAFE_SYMLINK("testfile", "symlink");
+	SAFE_SYMLINK(TESTFILE, SYMLINK);
 
-	SAFE_LSETXATTR("testfile", SECURITY_KEY1, VALUE, VALUE_SIZE, XATTR_CREATE);
+	SAFE_LSETXATTR(TESTFILE, SECURITY_KEY1, VALUE, VALUE_SIZE, XATTR_CREATE);
 
-	SAFE_LSETXATTR("symlink", SECURITY_KEY2, VALUE, VALUE_SIZE, XATTR_CREATE);
+	SAFE_LSETXATTR(SYMLINK, SECURITY_KEY2, VALUE, VALUE_SIZE, XATTR_CREATE);
 }
 
 static struct tst_test test = {
testcases/kernel/syscalls/llistxattr/llistxattr02.c +18 -20
index 7c09b5b..191ec36 100644
@@ -43,18 +43,17 @@
 
 #define SECURITY_KEY	"security.ltptest"
 #define VALUE	"test"
-#define VALUE_SIZE	4
+#define VALUE_SIZE	(sizeof(VALUE) - 1)
+#define TESTFILE   "testfile"
+#define SYMLINK    "symlink"
 
 static struct test_case {
 	const char *path;
 	size_t size;
 	int exp_err;
 } tc[] = {
-	/* test1 */
-	{"symlink", 1, ERANGE},
-	/* test2 */
+	{SYMLINK, 1, ERANGE},
 	{"", 20, ENOENT},
-	/* test3 */
 	{(char *)-1, 20, EFAULT}
 };
 
@@ -63,30 +62,29 @@ static void verify_llistxattr(unsigned int n)
 	struct test_case *t = tc + n;
 	char buf[t->size];
 
-	TEST(llistxattr(t->path, buf, t->size));
-	if (TEST_RETURN != -1) {
+	TEST(llistxattr(t->path, buf, sizeof(buf)));
+	if (TEST_RETURN == 0) {
 		tst_res(TFAIL, "llistxattr() succeeded unexpectedly");
+		return;
+	}
+
+	if (TEST_ERRNO != t->exp_err) {
+		tst_res(TFAIL | TTERRNO, "llistxattr() failed "
+			 "unexpectedlly, expected %s",
+			 tst_strerrno(t->exp_err));
 	} else {
-		if (TEST_ERRNO != t->exp_err) {
-			tst_res(TFAIL | TTERRNO, "llistxattr() failed "
-				 "unexpectedlly, expected %s",
-				 tst_strerrno(t->exp_err));
-		} else {
-			tst_res(TPASS | TTERRNO,
-				 "llistxattr() failed as expected");
-		}
+		tst_res(TPASS | TTERRNO,
+			 "llistxattr() failed as expected");
 	}
 }
 
 static void setup(void)
 {
-	int n;
-
-	SAFE_TOUCH("testfile", 0644, NULL);
+	SAFE_TOUCH(TESTFILE, 0644, NULL);
 
-	SAFE_SYMLINK("testfile", "symlink");
+	SAFE_SYMLINK(TESTFILE, SYMLINK);
 
-	SAFE_LSETXATTR("symlink", SECURITY_KEY, VALUE, VALUE_SIZE, XATTR_CREATE);
+	SAFE_LSETXATTR(SYMLINK, SECURITY_KEY, VALUE, VALUE_SIZE, XATTR_CREATE);
 }
 
 static struct tst_test test = {
testcases/kernel/syscalls/llistxattr/llistxattr03.c +5 -9
index da16048..e2c651e 100644
@@ -37,7 +37,7 @@
 
 #define SECURITY_KEY	"security.ltptest"
 #define VALUE	"test"
-#define VALUE_SIZE	4
+#define VALUE_SIZE	(sizeof(VALUE) - 1)
 
 static const char *filename[] = {"testfile1", "testfile2"};
 
@@ -46,11 +46,9 @@ static int check_suitable_buf(const char *name, long size)
 	int n;
 	char buf[size];
 
-	n = llistxattr(name, buf, size);
-	if (n == -1)
-		return 0;
-	else
-		return 1;
+	n = llistxattr(name, buf, sizeof(buf));
+
+	return n != -1;
 }
 
 static void verify_llistxattr(unsigned int n)
@@ -59,7 +57,7 @@ static void verify_llistxattr(unsigned int n)
 
 	TEST(llistxattr(name, NULL, 0));
 	if (TEST_RETURN == -1) {
-		tst_res(TFAIL | TERRNO, "llistxattr() failed");
+		tst_res(TFAIL | TTERRNO, "llistxattr() failed");
 		return;
 	}
 
@@ -71,8 +69,6 @@ static void verify_llistxattr(unsigned int n)
 
 static void setup(void)
 {
-	int ret;
-
 	SAFE_TOUCH(filename[0], 0644, NULL);
 
 	SAFE_TOUCH(filename[1], 0644, NULL);
Signature · 1 line
1.9.1
#6 lore raw

PATCH v3 3/5 llistxattr: improved code readability and

Hi!

testcases/kernel/syscalls/llistxattr/llistxattr03.c static void verify_llistxattr(unsigned int n) · line 60

Quoted 7 lines

static void verify_llistxattr(unsigned int n)

testcases/kernel/syscalls/llistxattr/llistxattr03.c +1 -1
@@ -59,7 +57,7 @@ static void verify_llistxattr(unsigned int n)
 
 	TEST(llistxattr(name, NULL, 0));
 	if (TEST_RETURN == -1) {
-		tst_res(TFAIL | TERRNO, "llistxattr() failed");
+		tst_res(TFAIL | TTERRNO, "llistxattr() failed");

The TERRNO -> TTERRNO has been fixed by:

https://github.com/linux-test-project/ltp/commit/00b4cdeed78d43e3f9dca769ef444f68cbb681c1

Please rebase this patch.

testcases/kernel/syscalls/llistxattr/llistxattr03.c static void verify_llistxattr(unsigned int n) · line 75

Quoted 9 lines
testcases/kernel/syscalls/llistxattr/llistxattr03.c +0 -2
 		return;
 	}
 
@@ -71,8 +69,6 @@ static void verify_llistxattr(unsigned int n)
 
 static void setup(void)
 {
-	int ret;
-

This removal should have been part of the prevous patch, right?

testcases/kernel/syscalls/llistxattr/llistxattr03.c static void verify_llistxattr(unsigned int n) · line 74

Quoted 3 lines
testcases/kernel/syscalls/llistxattr/llistxattr03.c +0 -0
 	SAFE_TOUCH(filename[0], 0644, NULL);
 
 	SAFE_TOUCH(filename[1], 0644, NULL);

Otherwise it looks good.

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

PATCH v3 4/5 llistxattr: new testcase for long path name

In reply to Dejan Jovicevic

Added a test case that checks if the path name, given by the first argument of the function, is too long. If that is the case, the function should return -1 and errno should be set to ENAMETOOLONG.

---
 testcases/kernel/syscalls/llistxattr/llistxattr02.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
testcases/kernel/syscalls/llistxattr/llistxattr02.c +8 -1
index 191ec36..04d8c97 100644
@@ -22,11 +22,13 @@
 * to hold the result.
 * 2) llistxattr(2) fails if path is an empty string.
 * 3) llistxattr(2) fails when attempted to read from a invalid address.
+* 4) llistxattr(2) fails if path is longer than allowed.
 *
 * Expected Result:
 * 1) llistxattr(2) should return -1 and set errno to ERANGE.
 * 2) llistxattr(2) should return -1 and set errno to ENOENT.
 * 3) llistxattr(2) should return -1 and set errno to EFAULT.
+* 4) llistxattr(2) should return -1 and set errno to ENAMETOOLONG.
 */
 
 #include "config.h"
@@ -47,6 +49,8 @@
 #define TESTFILE   "testfile"
 #define SYMLINK    "symlink"
 
+char longpathname[PATH_MAX + 2];
+
 static struct test_case {
 	const char *path;
 	size_t size;
@@ -54,7 +58,8 @@ static struct test_case {
 } tc[] = {
 	{SYMLINK, 1, ERANGE},
 	{"", 20, ENOENT},
-	{(char *)-1, 20, EFAULT}
+	{(char *)-1, 20, EFAULT},
+	{longpathname, 20, ENAMETOOLONG}
 };
 
 static void verify_llistxattr(unsigned int n)
@@ -85,6 +90,8 @@ static void setup(void)
 	SAFE_SYMLINK(TESTFILE, SYMLINK);
 
 	SAFE_LSETXATTR(SYMLINK, SECURITY_KEY, VALUE, VALUE_SIZE, XATTR_CREATE);
+
+	memset(&longpathname, 'a', sizeof(longpathname) - 1);
 }
 
 static struct tst_test test = {
Signature · 1 line
1.9.1
#8 lore raw

PATCH v3 4/5 llistxattr: new testcase for long path name

Quoted 1 line

+char longpathname[PATH_MAX + 2];

Should be static char.

Quoted 14 lines

static struct test_case {

testcases/kernel/syscalls/llistxattr/llistxattr02.c +2 -1
 	const char *path;
 	size_t size;
@@ -54,7 +58,8 @@ static struct test_case {
 } tc[] = {
 	{SYMLINK, 1, ERANGE},
 	{"", 20, ENOENT},
-	{(char *)-1, 20, EFAULT}
+	{(char *)-1, 20, EFAULT},
+	{longpathname, 20, ENAMETOOLONG}
 };
 
 static void verify_llistxattr(unsigned int n)

testcases/kernel/syscalls/llistxattr/llistxattr02.c static void setup(void) · line 94

Quoted 5 lines
testcases/kernel/syscalls/llistxattr/llistxattr02.c +2 -0
@@ -85,6 +90,8 @@ static void setup(void)
 	SAFE_SYMLINK(TESTFILE, SYMLINK);
 
 	SAFE_LSETXATTR(SYMLINK, SECURITY_KEY, VALUE, VALUE_SIZE, XATTR_CREATE);
+
+	memset(&longpathname, 'a', sizeof(longpathname) - 1);

No need for the & here (in C array is a pointer to a first member and &array == array).

Otherwise it's fine.

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

PATCH v3 5/5 flistxattr and listxattr: added tests

In reply to Dejan Jovicevic

Tests for these two system calls were not present.

flistxattr(), listxattr() and llistxattr() are identical, the only difference is in the first argument:
- in listxattr() it refers to the file in the path.
- in llistxattr() in the case of a symbolic link, the list of names of extended attributes associated with the link itself is retrieved, not the file that it refers to.
- in flistxattr() the open file referred to by fd is interrogated in place of path.

Because of these similarities, implemented tests for flistxattr() and listxattr() are based on the existing tests for llistxattr(), with some adjustments to fit the appropriate system call.

---
 runtest/syscalls                                   |   8 ++
 testcases/kernel/syscalls/.gitignore               |   6 ++
 testcases/kernel/syscalls/flistxattr/Makefile      |  23 +++++
 .../kernel/syscalls/flistxattr/flistxattr01.c      | 102 ++++++++++++++++++++
 .../kernel/syscalls/flistxattr/flistxattr02.c      | 104 ++++++++++++++++++++
 .../kernel/syscalls/flistxattr/flistxattr03.c      |  97 +++++++++++++++++++
 testcases/kernel/syscalls/listxattr/Makefile       |  23 +++++
 testcases/kernel/syscalls/listxattr/listxattr01.c  |  94 ++++++++++++++++++
 testcases/kernel/syscalls/listxattr/listxattr02.c  | 105 +++++++++++++++++++++
 testcases/kernel/syscalls/listxattr/listxattr03.c  |  89 +++++++++++++++++
 10 files changed, 651 insertions(+)
 create mode 100644 testcases/kernel/syscalls/flistxattr/Makefile
 create mode 100644 testcases/kernel/syscalls/flistxattr/flistxattr01.c
 create mode 100644 testcases/kernel/syscalls/flistxattr/flistxattr02.c
 create mode 100644 testcases/kernel/syscalls/flistxattr/flistxattr03.c
 create mode 100644 testcases/kernel/syscalls/listxattr/Makefile
 create mode 100644 testcases/kernel/syscalls/listxattr/listxattr01.c
 create mode 100644 testcases/kernel/syscalls/listxattr/listxattr02.c
 create mode 100644 testcases/kernel/syscalls/listxattr/listxattr03.c
runtest/syscalls +8 -0
index 7c84296..c56d49d 100644
@@ -272,6 +272,10 @@ fcntl34_64 fcntl34_64
 fdatasync01 fdatasync01
 fdatasync02 fdatasync02
 
+flistxattr01 flistxattr01
+flistxattr02 flistxattr02
+flistxattr03 flistxattr03
+
 flock01 flock01
 flock02 flock02
 flock03 flock03
@@ -523,6 +527,10 @@ linkat02 linkat02
 
 listen01 listen01
 
+listxattr01 listxattr01
+listxattr02 listxattr02
+listxattr03 listxattr03
+
 llistxattr01 llistxattr01
 llistxattr02 llistxattr02
 llistxattr03 llistxattr03
testcases/kernel/syscalls/.gitignore +6 -0
index f53cc05..aaccbfe 100644
@@ -233,6 +233,9 @@
 /fcntl/fcntl34_64
 /fdatasync/fdatasync01
 /fdatasync/fdatasync02
+/flistxattr/flistxattr01
+/flistxattr/flistxattr02
+/flistxattr/flistxattr03
 /flock/flock01
 /flock/flock02
 /flock/flock03
@@ -482,6 +485,9 @@
 /linkat/linkat01
 /linkat/linkat02
 /listen/listen01
+/listxattr/listxattr01
+/listxattr/listxattr02
+/listxattr/listxattr03
 /llistxattr/llistxattr01
 /llistxattr/llistxattr02
 /llistxattr/llistxattr03
testcases/kernel/syscalls/flistxattr/Makefile new file +23 -0
new file mode 100644
index 0000000..b794ec0
@@ -0,0 +1,23 @@
+#
+#  Copyright (c) 2016 RT-RK Institute for Computer Based Systems
+#  Author: Dejan Jovicevic <[email protected]>
+#
+#  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
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY;  without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+#  the GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program.
+#
+
+top_srcdir		?= ../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
testcases/kernel/syscalls/flistxattr/flistxattr01.c new file +102 -0

102 lines not on this page · raw message

testcases/kernel/syscalls/flistxattr/flistxattr02.c new file +104 -0

104 lines not on this page · raw message

testcases/kernel/syscalls/flistxattr/flistxattr03.c new file +97 -0

97 lines not on this page · raw message

testcases/kernel/syscalls/listxattr/Makefile new file +23 -0
new file mode 100644
index 0000000..b794ec0
@@ -0,0 +1,23 @@
+#
+#  Copyright (c) 2016 RT-RK Institute for Computer Based Systems
+#  Author: Dejan Jovicevic <[email protected]>
+#
+#  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
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY;  without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+#  the GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program.
+#
+
+top_srcdir		?= ../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
testcases/kernel/syscalls/listxattr/listxattr01.c new file +94 -0

94 lines not on this page · raw message

testcases/kernel/syscalls/listxattr/listxattr02.c new file +105 -0

105 lines not on this page · raw message

testcases/kernel/syscalls/listxattr/listxattr03.c new file +89 -0

89 lines not on this page · raw message

Signature · 1 line
1.9.1
#10 lore raw

PATCH v3 5/5 flistxattr and listxattr: added tests

Hi!

Quoted 29 lines
testcases/kernel/syscalls/flistxattr/Makefile new file +23 -0
+#
+#  Copyright (c) 2016 RT-RK Institute for Computer Based Systems
+#  Author: Dejan Jovicevic <[email protected]>
+#
+#  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
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY;  without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+#  the GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program.
+#
+
+top_srcdir		?= ../../../..
+
+include $(top_srcdir)/include/mk/testcases.mk
+
+include $(top_srcdir)/include/mk/generic_leaf_target.mk
testcases/kernel/syscalls/flistxattr/flistxattr01.c new file +0 -0
new file mode 100644
index 0000000..5084f7d

testcases/kernel/syscalls/flistxattr/flistxattr01.c line 7

Quoted 7 lines
testcases/kernel/syscalls/flistxattr/flistxattr01.c new file +7 -0
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2016 RT-RK Institute for Computer Based Systems
+* Author: Dejan Jovicevic <[email protected]>
+*
+* 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.

FYI the GPLv2+ (any later version) is slightly prefered (that is the one in the Makefile above).

Signature · 2 lines
Cyril Hrubis
[email protected]