Skip to contentSkip to conversation

syscalls/fsetxattr02.c: Fix the failure of opening device files

PATCH Superseded Xiao Yang 3 participants 5 messages Aug 8, 2018 – Aug 10, 2018

lore
Share & tools
lore

Xiao Yang

author
#0 lore raw

PATCH 1/1 syscalls/fsetxattr02.c: Fix the failure of opening device files

If temporary directory(TMPDIR/TEMPDIR) is on the mountpoint which
is mounted with nodev option or temporary directory is mounted with with nodev option directly(e.g. tmpfs is mounted on /tmp), open(2)
has no permission to open device files in the temporary directory
and returned EACCES. as below:
--------------------------------------------------------------------
safe_macros.c:225: BROK: fsetxattr02.c:215: open(fsetxattr02chr,0,00) failed: EACCES
--------------------------------------------------------------------

We try to fix this issue by creating device files in /dev/ instead.

This is the same issue reported by open11, please see the mail:
http://lists.linux.it/pipermail/ltp/2018-July/008641.html

---
 testcases/kernel/syscalls/fsetxattr/fsetxattr02.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)
testcases/kernel/syscalls/fsetxattr/fsetxattr02.c +10 -3
index a1be652..356e527 100644
@@ -52,11 +52,13 @@
 #define FILENAME "fsetxattr02testfile"
 #define DIRNAME  "fsetxattr02testdir"
 #define SYMLINK  "fsetxattr02symlink"
-#define FIFO     "fsetxattr02fifo"
-#define CHR      "fsetxattr02chr"
-#define BLK      "fsetxattr02blk"
+#define FIFO     "/dev/fsetxattr02fifo"
+#define CHR      "/dev/fsetxattr02chr"
+#define BLK      "/dev/fsetxattr02blk"
 #define SOCK     "fsetxattr02sock"
 
+static char *dev_files[3] = {FIFO, CHR, BLK};
+
 struct test_case {
 	char *fname;
 	int fd;
@@ -240,6 +242,11 @@ static void cleanup(void)
 		if (tc[i].fd > 0)
 			SAFE_CLOSE(tc[i].fd);
 	}
+
+	for (i = 0; i < ARRAY_SIZE(dev_files); i++) {
+		if (!access(dev_files[i], F_OK))
+			SAFE_UNLINK(dev_files[i]);
+	}
 }
 
 static struct tst_test test = {
Signature · 1 line
1.8.3.1
#1 lore raw

PATCH 1/1 syscalls/fsetxattr02.c: Fix the failure of opening device files

testcases/kernel/syscalls/fsetxattr/fsetxattr02.c line 57

Quoted 12 lines
testcases/kernel/syscalls/fsetxattr/fsetxattr02.c +3 -3
@@ -52,11 +52,13 @@
 #define FILENAME "fsetxattr02testfile"
 #define DIRNAME  "fsetxattr02testdir"
 #define SYMLINK  "fsetxattr02symlink"
-#define FIFO     "fsetxattr02fifo"
-#define CHR      "fsetxattr02chr"
-#define BLK      "fsetxattr02blk"
+#define FIFO     "/dev/fsetxattr02fifo"
+#define CHR      "/dev/fsetxattr02chr"
+#define BLK      "/dev/fsetxattr02blk"

Thanks for catching this!! Minor issue: This will break OFFSET logic for tst_res() messages. They are skipping 11 chars because all files started with "fsetxattr02".

-Rafael

author
#2 lore raw

PATCH v2 1/1 syscalls/fsetxattr02.c: Fix the failure of opening device files

If temporary directory(TMPDIR/TEMPDIR) is on the mountpoint which
is mounted with nodev option or temporary directory is mounted with with nodev option directly(e.g. tmpfs is mounted on /tmp), open(2)
has no permission to open device files in the temporary directory
and returns EACCES. as below:
--------------------------------------------------------------------
safe_macros.c:225: BROK: fsetxattr02.c:215: open(fsetxattr02chr,0,00) failed: EACCES
--------------------------------------------------------------------

We try to fix this issue by creating device files in /dev/ instead.

This is the same issue reported by open11, please see the mail:
http://lists.linux.it/pipermail/ltp/2018-July/008641.html

Changes in v2:
Acquire basename to avoid breaking OFFSET logic.

---
 testcases/kernel/syscalls/fsetxattr/fsetxattr02.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)
testcases/kernel/syscalls/fsetxattr/fsetxattr02.c +13 -3
index a1be652..13e1735 100644
@@ -52,11 +52,13 @@
 #define FILENAME "fsetxattr02testfile"
 #define DIRNAME  "fsetxattr02testdir"
 #define SYMLINK  "fsetxattr02symlink"
-#define FIFO     "fsetxattr02fifo"
-#define CHR      "fsetxattr02chr"
-#define BLK      "fsetxattr02blk"
+#define FIFO     "/dev/fsetxattr02fifo"
+#define CHR      "/dev/fsetxattr02chr"
+#define BLK      "/dev/fsetxattr02blk"
 #define SOCK     "fsetxattr02sock"
 
+static char *dev_files[3] = {FIFO, CHR, BLK};
+
 struct test_case {
 	char *fname;
 	int fd;
@@ -139,6 +141,9 @@ static struct test_case tc[] = {
 
 static void verify_fsetxattr(unsigned int i)
 {
+	/* acquire basename to avoid breaking OFFSET logic*/
+	tc[i].fname = strstr(tc[i].fname, "fsetxattr02");
+
 	/* some tests might require existing keys for each iteration */
 	if (tc[i].needskeyset) {
 		SAFE_FSETXATTR(tc[i].fd, tc[i].key, tc[i].value, tc[i].size,
@@ -240,6 +245,11 @@ static void cleanup(void)
 		if (tc[i].fd > 0)
 			SAFE_CLOSE(tc[i].fd);
 	}
+
+	for (i = 0; i < ARRAY_SIZE(dev_files); i++) {
+		if (!access(dev_files[i], F_OK))
+			SAFE_UNLINK(dev_files[i]);
+	}
 }
 
 static struct tst_test test = {
Signature · 1 line
1.8.3.1
#3 lore raw

PATCH v2 1/1 syscalls/fsetxattr02.c: Fix the failure of opening device files

Hi!

Quoted 1 line

We try to fix this issue by creating device files in /dev/ instead.

I do not like much that we are messing up with the system directories.

Maybe we could mount a tmpfs over a directory in the test temporary directory if we detect that the test temporary directory is mounted with nodev. The downsinde is that it will be a bit more complicated than this solution.

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

PATCH 1/1 syscalls/fsetxattr02.c: Fix the failure of opening device files

In reply to Rafael David Tinoco
Quoted 7 lines · Rafael David Tinoco
Quoted 7 lines
testcases/kernel/syscalls/fsetxattr/fsetxattr02.c +0 -1
@@ -52,11 +52,13 @@
  #define FILENAME "fsetxattr02testfile"
  #define DIRNAME  "fsetxattr02testdir"
  #define SYMLINK  "fsetxattr02symlink"
-#define FIFO     "fsetxattr02fifo"
Quoted 8 lines

testcases/kernel/syscalls/fsetxattr/fsetxattr02.c line 57

Quoted 5 lines
testcases/kernel/syscalls/fsetxattr/fsetxattr02.c +3 -2
-#define CHR      "fsetxattr02chr"
-#define BLK      "fsetxattr02blk"
+#define FIFO     "/dev/fsetxattr02fifo"
+#define CHR      "/dev/fsetxattr02chr"
+#define BLK      "/dev/fsetxattr02blk"

Thanks for catching this!! Minor issue: This will break OFFSET logic for tst_res() messages. They are skipping 11 chars because all files started with "fsetxattr02".

Hi Rafael,

Sorry for this rough fix, and i will send v2 patch as you suggested.

Thanks,
Xiao Yang

Quoted 4 lines

-Rafael