[lxc-devel] [PATCH] close correct side of the pipe and increase buffer size by one to handle \n

S.Çağlar Onur caglar at 10ur.org
Mon Feb 17 20:08:18 UTC 2014


Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
---
 src/lxc/conf.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index 10f46ae..175a82f 100644
--- a/src/lxc/conf.c
+++ b/src/lxc/conf.c
@@ -3011,13 +3011,14 @@ void lxc_delete_network(struct lxc_handler *handler)
 
 #define LXC_USERNIC_PATH LIBEXECDIR "/lxc/lxc-user-nic"
 
+/* lxc-user-nic returns "interface_name:interface_name\n" */
+#define MAX_BUFFER_SIZE IFNAMSIZ*2 + 2
 static int unpriv_assign_nic(struct lxc_netdev *netdev, pid_t pid)
 {
 	pid_t child;
 	int bytes, pipefd[2];
 	char *token, *saveptr = NULL;
-	/* lxc-user-nic returns "interface_name:interface_name" format */
-	char buffer[IFNAMSIZ*2 + 1];
+	char buffer[MAX_BUFFER_SIZE];
 
 	if (netdev->type != LXC_NET_VETH) {
 		ERROR("nic type %d not support for unprivileged use",
@@ -3043,7 +3044,7 @@ static int unpriv_assign_nic(struct lxc_netdev *netdev, pid_t pid)
 		/* redirect the stdout to write-end of the pipe */
 		dup2(pipefd[1], STDOUT_FILENO);
 		/* close the write-end of the pipe */
-		close(pipefd[0]);
+		close(pipefd[1]);
 
 		// Call lxc-user-nic pid type bridge
 		char pidstr[20];
@@ -3058,7 +3059,7 @@ static int unpriv_assign_nic(struct lxc_netdev *netdev, pid_t pid)
 	/* close the write-end of the pipe */
 	close(pipefd[1]);
 
-	bytes = read(pipefd[0], &buffer, IFNAMSIZ*2 + 1);
+	bytes = read(pipefd[0], &buffer, MAX_BUFFER_SIZE);
 	if (bytes < 0) {
 		SYSERROR("read failed");
 	}
-- 
1.8.3.2



More information about the lxc-devel mailing list