]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
smack make mac_smack_fix_at() useful when called with dir_fd=AT_FDCWD
authorLennart Poettering <lennart@poettering.net>
Fri, 12 Nov 2021 14:12:23 +0000 (15:12 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 16 Nov 2021 16:01:58 +0000 (17:01 +0100)
src/shared/smack-util.c

index d7fbbdc913aa1784fff46bdd060dc73dbc8270d8..b8434b068ca9af79187571e8e0ecbcc80422d846 100644 (file)
@@ -176,7 +176,7 @@ static int smack_fix_fd(int fd, const char *abspath, LabelFixFlags flags) {
         return 0;
 }
 
-int mac_smack_fix_at(int dirfd, const char *path, LabelFixFlags flags) {
+int mac_smack_fix_at(int dir_fd, const char *path, LabelFixFlags flags) {
         _cleanup_free_ char *p = NULL;
         _cleanup_close_ int fd = -1;
         int r;
@@ -186,7 +186,14 @@ int mac_smack_fix_at(int dirfd, const char *path, LabelFixFlags flags) {
         if (!mac_smack_use())
                 return 0;
 
-        fd = openat(dirfd, path, O_NOFOLLOW|O_CLOEXEC|O_PATH);
+        if (dir_fd < 0) {
+                if (dir_fd != AT_FDCWD)
+                        return -EBADF;
+
+                return mac_smack_fix(path, flags);
+        }
+
+        fd = openat(dir_fd, path, O_NOFOLLOW|O_CLOEXEC|O_PATH);
         if (fd < 0) {
                 if ((flags & LABEL_IGNORE_ENOENT) && errno == ENOENT)
                         return 0;