From d9e78eadb76d641fa9bc98a68d9dc9499826ae5d Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Thu, 2 Nov 2023 11:49:14 +0100 Subject: [PATCH] main: create dir in two steps with xattrs permissions if xattrs permissions are used, create the directory in two steps and set the correct ownership before moving it into the target. Signed-off-by: Giuseppe Scrivano --- main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index 1803cfa..f4e7c7c 100644 --- a/main.c +++ b/main.c @@ -2866,7 +2866,7 @@ create_directory (struct ovl_data *lo, int dirfd, const char *name, const struct bool need_rename; mode_t backing_file_mode = mode | (lo->xattr_permissions ? 0755 : 0); - need_rename = set_opaque || times || xattr_sfd >= 0 || uid != lo->uid || gid != lo->gid; + need_rename = set_opaque || times || xattr_sfd >= 0 || uid != lo->uid || gid != lo->gid || get_upper_layer (lo)->stat_override_mode != STAT_OVERRIDE_NONE; if (! need_rename) { /* mkdir can be used directly without a temporary directory in the working directory. */ @@ -2937,6 +2937,7 @@ create_directory (struct ovl_data *lo, int dirfd, const char *name, const struct ret = fstat (dfd, st_out); if (ret < 0) goto out; + st_out->st_mode = (st_out->st_mode & S_IFMT) | (mode & ~S_IFMT); } ret = inherit_acl (lo, parent, dfd, NULL);