diff options
-rw-r--r-- | src/shared/label-util.c | 9 | ||||
-rw-r--r-- | src/shared/label-util.h | 6 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/shared/label-util.c b/src/shared/label-util.c index 308fbff761..2c482daaf6 100644 --- a/src/shared/label-util.c +++ b/src/shared/label-util.c @@ -81,22 +81,23 @@ int symlink_atomic_full_label(const char *from, const char *to, bool make_relati return mac_smack_fix(to, 0); } -int mknod_label(const char *pathname, mode_t mode, dev_t dev) { +int mknodat_label(int dirfd, const char *pathname, mode_t mode, dev_t dev) { int r; + assert(dirfd >= 0 || dirfd == AT_FDCWD); assert(pathname); - r = mac_selinux_create_file_prepare(pathname, mode); + r = mac_selinux_create_file_prepare_at(dirfd, pathname, mode); if (r < 0) return r; - r = RET_NERRNO(mknod(pathname, mode, dev)); + r = RET_NERRNO(mknodat(dirfd, pathname, mode, dev)); mac_selinux_create_file_clear(); if (r < 0) return r; - return mac_smack_fix(pathname, 0); + return mac_smack_fix_full(dirfd, pathname, NULL, 0); } int btrfs_subvol_make_label(const char *path) { diff --git a/src/shared/label-util.h b/src/shared/label-util.h index 7fb98c7656..5a19a4cd43 100644 --- a/src/shared/label-util.h +++ b/src/shared/label-util.h @@ -21,7 +21,11 @@ int symlink_atomic_full_label(const char *from, const char *to, bool make_relati static inline int symlink_atomic_label(const char *from, const char *to) { return symlink_atomic_full_label(from, to, false); } -int mknod_label(const char *pathname, mode_t mode, dev_t dev); + +int mknodat_label(int dirfd, const char *pathname, mode_t mode, dev_t dev); +static inline int mknod_label(const char *pathname, mode_t mode, dev_t dev) { + return mknodat_label(AT_FDCWD, pathname, mode, dev); +} int btrfs_subvol_make_label(const char *path); |