uci: fix session delta isolation
authorJo-Philipp Wich <jo@mein.io>
Thu, 15 Mar 2018 10:46:54 +0000 (11:46 +0100)
committerJo-Philipp Wich <jo@mein.io>
Thu, 15 Mar 2018 11:29:15 +0000 (12:29 +0100)
The libuci `uci_set_savedir()` function does not replace, but appends the
requested delta directory to the search path, this causes information leaks
between sessions.

Due to a lack of an official api for this, clear the uci contexts private
delta path before setting the save directory.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
uci.c

diff --git a/uci.c b/uci.c
index 72ae5a67f99ae8f00784be8e2aa94eff5d3116e4..bad9e16491af15a606a9906c04c8eeaa1ea36662 100644 (file)
--- a/uci.c
+++ b/uci.c
@@ -210,8 +210,15 @@ rpc_uci_status(void)
 static void
 rpc_uci_set_savedir(struct blob_attr *sid)
 {
+       struct uci_element *e, *tmp;
        char path[PATH_MAX];
 
+       uci_foreach_element_safe(&cursor->delta_path, tmp, e)
+               free(e);
+
+       cursor->delta_path.prev = &cursor->delta_path;
+       cursor->delta_path.next = &cursor->delta_path;
+
        if (!sid)
        {
                uci_set_savedir(cursor, "/tmp/.uci");