summaryrefslogtreecommitdiff
path: root/src/shared/rm-rf.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2023-03-19 02:33:29 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2023-03-25 04:50:27 +0900
commitda19c07198167946d35be9fdf908bb683da49cfe (patch)
treee5ef0d84b103507c1d0c65ccd2126a043e22ce7c /src/shared/rm-rf.c
parentcd2cd095db6f26bf9889ef26f1b105843220b803 (diff)
downloadsystemd-da19c07198167946d35be9fdf908bb683da49cfe.tar.gz
rm-rf: mask file mode with 07777 when passed to chmod()
No functional change hopefully, just for safety.
Diffstat (limited to 'src/shared/rm-rf.c')
-rw-r--r--src/shared/rm-rf.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/shared/rm-rf.c b/src/shared/rm-rf.c
index 1695e1555a..55858c7ed1 100644
--- a/src/shared/rm-rf.c
+++ b/src/shared/rm-rf.c
@@ -71,11 +71,11 @@ int unlinkat_harder(int dfd, const char *filename, int unlink_flags, RemoveFlags
if (unlinkat(dfd, filename, unlink_flags) < 0) {
r = -errno;
/* Try to restore the original access mode if this didn't work */
- (void) fchmod(dfd, old_mode);
+ (void) fchmod(dfd, old_mode & 07777);
return r;
}
- if (FLAGS_SET(remove_flags, REMOVE_CHMOD_RESTORE) && fchmod(dfd, old_mode) < 0)
+ if (FLAGS_SET(remove_flags, REMOVE_CHMOD_RESTORE) && fchmod(dfd, old_mode & 07777) < 0)
return -errno;
/* If this worked, we won't reset the old mode by default, since we'll need it for other entries too,
@@ -105,11 +105,11 @@ int fstatat_harder(int dfd,
if (fstatat(dfd, filename, ret, fstatat_flags) < 0) {
r = -errno;
- (void) fchmod(dfd, old_mode);
+ (void) fchmod(dfd, old_mode & 07777);
return r;
}
- if (FLAGS_SET(remove_flags, REMOVE_CHMOD_RESTORE) && fchmod(dfd, old_mode) < 0)
+ if (FLAGS_SET(remove_flags, REMOVE_CHMOD_RESTORE) && fchmod(dfd, old_mode & 07777) < 0)
return -errno;
return 0;