Backport mkdirat mode test

Resolves: RHEL-56743
This commit is contained in:
Frédéric Bérat 2025-01-08 17:15:50 +01:00
parent 0f8a066654
commit de2aa73d68
2 changed files with 81 additions and 0 deletions

79
glibc-RHEL-56743.patch Normal file
View File

@ -0,0 +1,79 @@
commit 55cd51d971b84fbb2cc0fe8140cc8581f98582c7
Author: Joseph Myers <josmyers@redhat.com>
Date: Thu Aug 22 11:25:14 2024 +0000
Test mkdirat use of mode argument
The test io/tst-mkdirat doesn't verify the permissions on the created
directory (thus, doesn't verify at all anything about how mkdirat uses
the mode argument). Add checks of this to the existing test.
Tested for x86_64.
diff --git a/io/tst-mkdirat.c b/io/tst-mkdirat.c
index 605e51ef1e966b42..b97bc3ca6d0cdf23 100644
--- a/io/tst-mkdirat.c
+++ b/io/tst-mkdirat.c
@@ -53,6 +53,10 @@ prepare (void)
static int
do_test (void)
{
+ /* Find the current umask. */
+ mode_t mask = umask (022);
+ umask (mask);
+
/* fdopendir takes over the descriptor, make a copy. */
int dupfd = dup (dir_fd);
if (dupfd == -1)
@@ -107,6 +111,13 @@ do_test (void)
puts ("mkdirat did not create a directory");
return 1;
}
+ if ((st1.st_mode & 01777) != (~mask & 0777))
+ {
+ printf ("mkdirat created directory with wrong mode %o, expected %o\n",
+ (unsigned int) (st1.st_mode & 01777),
+ (unsigned int) (~mask & 0777));
+ return 1;
+ }
dupfd = dup (dir_fd);
if (dupfd == -1)
@@ -156,6 +167,37 @@ do_test (void)
return 1;
}
+ /* Test again with a different mode. */
+ umask (0);
+ e = mkdirat (dir_fd, "some-dir", 01755);
+ umask (mask);
+ if (e == -1)
+ {
+ puts ("directory creation (different mode) failed");
+ return 1;
+ }
+ if (fstatat64 (dir_fd, "some-dir", &st1, 0) != 0)
+ {
+ puts ("fstat64 (different mode) failed");
+ return 1;
+ }
+ if (!S_ISDIR (st1.st_mode))
+ {
+ puts ("mkdirat (different mode) did not create a directory");
+ return 1;
+ }
+ if ((st1.st_mode & 01777) != 01755)
+ {
+ printf ("mkdirat (different mode) created directory with wrong mode %o\n",
+ (unsigned int) (st1.st_mode & 01777));
+ return 1;
+ }
+ if (unlinkat (dir_fd, "some-dir", AT_REMOVEDIR) != 0)
+ {
+ puts ("unlinkat (different mode) failed");
+ return 1;
+ }
+
close (dir_fd);
return 0;

View File

@ -1036,6 +1036,7 @@ Patch728: glibc-RHEL-65356-2.patch
Patch729: glibc-RHEL-38225-1.patch
Patch730: glibc-RHEL-38225-2.patch
Patch731: glibc-RHEL-54250.patch
Patch732: glibc-RHEL-56743.patch
##############################################################################
# Continued list of core "glibc" package information:
@ -3034,6 +3035,7 @@ update_gconv_modules_cache ()
references. (RHEL-65356)
- Backport verbosity patches for glibc math (RHEL-38225)
- Backport getdelim test coverage improvements (RHEL-54250)
- Backport mkdirat mode test (RHEL-56743)
* Thu Dec 19 2024 DJ Delorie <dj@redhat.com> - 2.34-148
- Increase ungetc test coverage, guarantee single char pushback (RHEL-46738)