The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxc/pull/2391

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
bug detail: [issue 2335](https://github.com/lxc/lxc/issues/2335)

simply run **run_script_argv()** in **lxc_create_network_unpriv_exec()** should work, however in **start.c**, **lxc_spawn()** didn't pass **hook_version** to **lxc_create_network_unpriv()**, which is needed by **run_script_argv()**.

so I add a argument **unsigned int hook_version** to **lxc_create_network_unpriv()** and thus need to modify the header **network.h**.

From b37084f12b861f7a1ce6c4076d42ad409732291c Mon Sep 17 00:00:00 2001
From: harryoooooooooo <[email protected]>
Date: Sat, 9 Jun 2018 16:51:38 +0800
Subject: [PATCH] fix bug: unpriv lxc will run lxc.net.[i].script.up now

---
 src/lxc/network.c | 20 +++++++++++++++++---
 src/lxc/network.h |  2 +-
 src/lxc/start.c   |  2 +-
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/src/lxc/network.c b/src/lxc/network.c
index b6aaa4621..5563b2bed 100755
--- a/src/lxc/network.c
+++ b/src/lxc/network.c
@@ -2097,7 +2097,7 @@ int lxc_find_gateway_addresses(struct lxc_handler 
*handler)
 
 #define LXC_USERNIC_PATH LIBEXECDIR "/lxc/lxc-user-nic"
 static int lxc_create_network_unpriv_exec(const char *lxcpath, const char 
*lxcname,
-                                         struct lxc_netdev *netdev, pid_t pid)
+                                         struct lxc_netdev *netdev, pid_t pid, 
unsigned int hooks_version)
 {
        int ret;
        pid_t child;
@@ -2242,6 +2242,20 @@ static int lxc_create_network_unpriv_exec(const char 
*lxcpath, const char *lxcna
                return -1;
        }
 
+       if (netdev->upscript) {
+               char *argv[] = {
+                       "veth",
+                       netdev->link,
+                       netdev->priv.veth_attr.veth1,
+                       NULL,
+               };
+
+               ret = run_script_argv(lxcname,
+                               hooks_version, "net",
+                               netdev->upscript, "up", argv);
+               if (ret < 0) return -1;
+    }
+
        return 0;
 }
 
@@ -2499,7 +2513,7 @@ int lxc_network_move_created_netdev_priv(const char 
*lxcpath, const char *lxcnam
 }
 
 int lxc_create_network_unpriv(const char *lxcpath, const char *lxcname,
-                             struct lxc_list *network, pid_t pid)
+                             struct lxc_list *network, pid_t pid, unsigned int 
hooks_version)
 {
        struct lxc_list *iterator;
 
@@ -2525,7 +2539,7 @@ int lxc_create_network_unpriv(const char *lxcpath, const 
char *lxcname,
                if (netdev->mtu)
                        INFO("mtu ignored due to insufficient privilege");
 
-               if (lxc_create_network_unpriv_exec(lxcpath, lxcname, netdev, 
pid))
+               if (lxc_create_network_unpriv_exec(lxcpath, lxcname, netdev, 
pid, hooks_version))
                        return -1;
        }
 
diff --git a/src/lxc/network.h b/src/lxc/network.h
index 9b9858a52..415d13502 100644
--- a/src/lxc/network.h
+++ b/src/lxc/network.h
@@ -263,7 +263,7 @@ extern int lxc_network_move_created_netdev_priv(const char 
*lxcpath,
 extern void lxc_delete_network(struct lxc_handler *handler);
 extern int lxc_find_gateway_addresses(struct lxc_handler *handler);
 extern int lxc_create_network_unpriv(const char *lxcpath, const char *lxcname,
-                                    struct lxc_list *network, pid_t pid);
+                                    struct lxc_list *network, pid_t pid, 
unsigned int hook_version);
 extern int lxc_requests_empty_network(struct lxc_handler *handler);
 extern int lxc_restore_phys_nics_to_netns(struct lxc_handler *handler);
 extern int lxc_setup_network_in_child_namespaces(const struct lxc_conf *conf,
diff --git a/src/lxc/start.c b/src/lxc/start.c
index b222c847a..9477f2ce4 100644
--- a/src/lxc/start.c
+++ b/src/lxc/start.c
@@ -1707,7 +1707,7 @@ static int lxc_spawn(struct lxc_handler *handler)
                }
 
                ret = lxc_create_network_unpriv(handler->lxcpath, handler->name,
-                                               &conf->network, handler->pid);
+                                               &conf->network, handler->pid, 
conf->hooks_version);
                if (ret < 0) {
                        ERROR("Failed to create the configured network");
                        goto out_delete_net;
_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to