diff mbox series

[v1,1/3] syscalls/dup202: Also check mode whethter change when calling chmod after dup2

Message ID 1632289182-2191-1-git-send-email-xuyang2018.jy@fujitsu.com
State Accepted
Headers show
Series [v1,1/3] syscalls/dup202: Also check mode whethter change when calling chmod after dup2 | expand

Commit Message

Yang Xu \(Fujitsu\) Sept. 22, 2021, 5:39 a.m. UTC
Since the two file descriptors refer to the same open file description, they should
share the file status. So change mode for file after creat, then check whether oldfd
mode equals newfd mode.

Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com>
---
 testcases/kernel/syscalls/dup2/dup202.c | 30 +++++++++++++++++++------
 1 file changed, 23 insertions(+), 7 deletions(-)

Comments

Cyril Hrubis Oct. 7, 2021, 12:53 p.m. UTC | #1
Hi!
>   * Test whether the access mode are the same for both file descriptors.
> + * Style: creat mode, dup2, [change mode], check mode
>   *
> - * - 0: read only ? "0444"
> - * - 1: write only ? "0222"
> - * - 2: read/write ? "0666"
> + * - 0: read only, dup2, null, read only ? "0444"
> + * - 1: write only, dup2, null, write only ? "0222"
> + * - 2: read/write, dup2, null, read/write ? "0666"
> + * - 3: read/write/execute, dup2, read only, read only ? "0444"
> + * - 4: read/write/execute, dup2, write only, write only ? "0222"
> + * - 5: read/write/execute, dup2, read/write, read/write ? "0666"
>   */

I've changed this description slightly so that it renders nicely in
asciidoc and pushed, thanks.
diff mbox series

Patch

diff --git a/testcases/kernel/syscalls/dup2/dup202.c b/testcases/kernel/syscalls/dup2/dup202.c
index 94bedcf18..c50b56ba0 100644
--- a/testcases/kernel/syscalls/dup2/dup202.c
+++ b/testcases/kernel/syscalls/dup2/dup202.c
@@ -8,10 +8,14 @@ 
  * [Description]
  *
  * Test whether the access mode are the same for both file descriptors.
+ * Style: creat mode, dup2, [change mode], check mode
  *
- * - 0: read only ? "0444"
- * - 1: write only ? "0222"
- * - 2: read/write ? "0666"
+ * - 0: read only, dup2, null, read only ? "0444"
+ * - 1: write only, dup2, null, write only ? "0222"
+ * - 2: read/write, dup2, null, read/write ? "0666"
+ * - 3: read/write/execute, dup2, read only, read only ? "0444"
+ * - 4: read/write/execute, dup2, write only, write only ? "0222"
+ * - 5: read/write/execute, dup2, read/write, read/write ? "0666"
  */
 
 #include <errno.h>
@@ -29,10 +33,15 @@  static int duprdo = 10, dupwro = 20, duprdwr = 30;
 static struct tcase {
 	int *nfd;
 	mode_t mode;
+	/* 0 - set mode before dup2, 1 - change mode after dup2 */
+	int flag;
 } tcases[] = {
-	{&duprdo, 0444},
-	{&dupwro, 0222},
-	{&duprdwr, 0666},
+	{&duprdo, 0444, 0},
+	{&dupwro, 0222, 0},
+	{&duprdwr, 0666, 0},
+	{&duprdo, 0444, 1},
+	{&dupwro, 0222, 1},
+	{&duprdwr, 0666, 1},
 };
 
 static void setup(void)
@@ -52,7 +61,10 @@  static void run(unsigned int i)
 	struct stat oldbuf, newbuf;
 	struct tcase *tc = tcases + i;
 
-	ofd = SAFE_CREAT(testfile, tc->mode);
+	if (tc->flag)
+		ofd = SAFE_CREAT(testfile, 0777);
+	else
+		ofd = SAFE_CREAT(testfile, tc->mode);
 	nfd = *tc->nfd;
 
 	TEST(dup2(ofd, nfd));
@@ -60,6 +72,10 @@  static void run(unsigned int i)
 		tst_res(TFAIL | TTERRNO, "call failed unexpectedly");
 		goto free;
 	}
+	if (tc->flag) {
+		SAFE_CHMOD(testfile, tc->mode);
+		tst_res(TINFO, "original mode 0777, new mode 0%o after chmod", tc->mode);
+	}
 
 	SAFE_FSTAT(ofd, &oldbuf);