Signed-off-by: Tyler Hicks <tyhi...@canonical.com>
---
 libraries/libapparmor/include/sys/apparmor.h |  4 ++--
 libraries/libapparmor/src/kernel_interface.c | 13 +++++++------
 libraries/libapparmor/src/policy_cache.c     |  2 +-
 parser/parser_main.c                         |  4 ++--
 4 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/libraries/libapparmor/include/sys/apparmor.h 
b/libraries/libapparmor/include/sys/apparmor.h
index 2643cde..435fb09 100644
--- a/libraries/libapparmor/include/sys/apparmor.h
+++ b/libraries/libapparmor/include/sys/apparmor.h
@@ -127,13 +127,13 @@ void aa_kernel_interface_unref(aa_kernel_interface 
*kernel_interface);
 int aa_kernel_interface_load_policy(aa_kernel_interface *kernel_interface,
                                    const char *buffer, size_t size);
 int aa_kernel_interface_load_policy_from_file(aa_kernel_interface 
*kernel_interface,
-                                             const char *path);
+                                             int dirfd, const char *path);
 int aa_kernel_interface_load_policy_from_fd(aa_kernel_interface 
*kernel_interface,
                                            int fd);
 int aa_kernel_interface_replace_policy(aa_kernel_interface *kernel_interface,
                                       const char *buffer, size_t size);
 int aa_kernel_interface_replace_policy_from_file(aa_kernel_interface 
*kernel_interface,
-                                                const char *path);
+                                                int dirfd, const char *path);
 int aa_kernel_interface_replace_policy_from_fd(aa_kernel_interface 
*kernel_interface,
                                               int fd);
 int aa_kernel_interface_remove_policy(aa_kernel_interface *kernel_interface,
diff --git a/libraries/libapparmor/src/kernel_interface.c 
b/libraries/libapparmor/src/kernel_interface.c
index 15b171f..293c93d 100644
--- a/libraries/libapparmor/src/kernel_interface.c
+++ b/libraries/libapparmor/src/kernel_interface.c
@@ -183,11 +183,12 @@ static int write_policy_fd_to_iface(aa_kernel_interface 
*kernel_interface,
 }
 
 static int write_policy_file_to_iface(aa_kernel_interface *kernel_interface,
-                                     const char *iface_file, const char *path)
+                                     const char *iface_file,
+                                     int dirfd, const char *path)
 {
        autoclose int fd;
 
-       fd = open(path, O_RDONLY);
+       fd = openat(dirfd, path, O_RDONLY);
        if (fd == -1)
                return -1;
 
@@ -312,10 +313,10 @@ int aa_kernel_interface_load_policy(aa_kernel_interface 
*kernel_interface,
  * Returns: 0 on success, -1 on error with errno set
  */
 int aa_kernel_interface_load_policy_from_file(aa_kernel_interface 
*kernel_interface,
-                                             const char *path)
+                                             int dirfd, const char *path)
 {
        return write_policy_file_to_iface(kernel_interface, AA_IFACE_FILE_LOAD,
-                                         path);
+                                         dirfd, path);
 }
 
 /**
@@ -356,10 +357,10 @@ int 
aa_kernel_interface_replace_policy(aa_kernel_interface *kernel_interface,
  * Returns: 0 on success, -1 on error with errno set
  */
 int aa_kernel_interface_replace_policy_from_file(aa_kernel_interface 
*kernel_interface,
-                                                const char *path)
+                                                int dirfd, const char *path)
 {
        return write_policy_file_to_iface(kernel_interface,
-                                         AA_IFACE_FILE_REPLACE, path);
+                                         AA_IFACE_FILE_REPLACE, dirfd, path);
 }
 
 /**
diff --git a/libraries/libapparmor/src/policy_cache.c 
b/libraries/libapparmor/src/policy_cache.c
index 515e2d0..a5eff24 100644
--- a/libraries/libapparmor/src/policy_cache.c
+++ b/libraries/libapparmor/src/policy_cache.c
@@ -119,7 +119,7 @@ static int replace_all_cb(int dirfd unused, const char 
*name, struct stat *st,
                        return -1;
                }
                retval = 
aa_kernel_interface_replace_policy_from_file(data->kernel_interface,
-                                                                     path);
+                                                                     -1, path);
        }
 
        return retval;
diff --git a/parser/parser_main.c b/parser/parser_main.c
index 428c3ea..555620d 100644
--- a/parser/parser_main.c
+++ b/parser/parser_main.c
@@ -600,7 +600,7 @@ int process_binary(int option, aa_kernel_interface 
*kernel_interface,
        if (kernel_load) {
                if (option == OPTION_ADD) {
                        retval = profilename ?
-                                
aa_kernel_interface_load_policy_from_file(kernel_interface, profilename) :
+                                
aa_kernel_interface_load_policy_from_file(kernel_interface, AT_FDCWD, 
profilename) :
                                 
aa_kernel_interface_load_policy_from_fd(kernel_interface, 0);
                        if (retval == -1) {
                                retval = errno;
@@ -610,7 +610,7 @@ int process_binary(int option, aa_kernel_interface 
*kernel_interface,
                        }
                } else if (option == OPTION_REPLACE) {
                        retval = profilename ?
-                                
aa_kernel_interface_replace_policy_from_file(kernel_interface, profilename) :
+                                
aa_kernel_interface_replace_policy_from_file(kernel_interface, AT_FDCWD, 
profilename) :
                                 
aa_kernel_interface_replace_policy_from_fd(kernel_interface, 0);
                        if (retval == -1) {
                                retval = errno;
-- 
2.1.4


-- 
AppArmor mailing list
AppArmor@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/apparmor

Reply via email to