[lxc-devel] [lxc/master] tree-wide: remove any variable length arrays

brauner on Github lxc-bot at linuxcontainers.org
Fri Nov 25 21:06:39 UTC 2016


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 419 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20161125/3d182df7/attachment.bin>
-------------- next part --------------
From d8f2dda5a5f137116e7439d7d5c57a5852478797 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Fri, 25 Nov 2016 22:00:45 +0100
Subject: [PATCH 1/2] configure: do not allow variable length arrays

There pointless and marked as optional since C11.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 configure.ac | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/configure.ac b/configure.ac
index cd424c4..337cd48 100644
--- a/configure.ac
+++ b/configure.ac
@@ -663,7 +663,7 @@ LXC_CHECK_TLS
 if test "x$GCC" = "xyes"; then
 	CFLAGS="$CFLAGS -Wall"
 	if test "x$enable_werror" = "xyes"; then
-		CFLAGS="$CFLAGS -Werror"
+		CFLAGS="$CFLAGS -Werror -Werror=vla"
 	fi
 fi
 

From 1440686ef13fb975ff7c15d5f5cd8796a090c79c Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Fri, 25 Nov 2016 22:01:20 +0100
Subject: [PATCH 2/2] tree-wide: remove any variable length arrays

They are pointless and marked optional since C11.

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 src/lxc/tools/lxc_cgroup.c  |  5 ++---
 src/lxc/tools/lxc_unshare.c |  2 +-
 src/lxc/utils.c             | 11 +++++------
 src/tests/concurrent.c      |  2 +-
 src/tests/lxc-test-utils.c  |  9 +++++----
 5 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/src/lxc/tools/lxc_cgroup.c b/src/lxc/tools/lxc_cgroup.c
index 32d333a..4027630 100644
--- a/src/lxc/tools/lxc_cgroup.c
+++ b/src/lxc/tools/lxc_cgroup.c
@@ -121,9 +121,8 @@ int main(int argc, char *argv[])
 			exit(EXIT_FAILURE);
 		}
 	} else {
-		int len = 4096;
-		char buffer[len];
-		int ret = c->get_cgroup_item(c, state_object, buffer, len);
+		char buffer[MAXPATHLEN];
+		int ret = c->get_cgroup_item(c, state_object, buffer, MAXPATHLEN);
 		if (ret < 0) {
 			ERROR("failed to retrieve value of '%s' for '%s:%s'",
 			      state_object, my_args.lxcpath[0], my_args.name);
diff --git a/src/lxc/tools/lxc_unshare.c b/src/lxc/tools/lxc_unshare.c
index 72ea00c..82c8244 100644
--- a/src/lxc/tools/lxc_unshare.c
+++ b/src/lxc/tools/lxc_unshare.c
@@ -82,7 +82,7 @@ static void usage(char *cmd)
 
 static bool lookup_user(const char *optarg, uid_t *uid)
 {
-	char name[sysconf(_SC_LOGIN_NAME_MAX)];
+	char name[MAXPATHLEN];
 	struct passwd *pwent = NULL;
 
 	if (!optarg || (optarg[0] == '\0'))
diff --git a/src/lxc/utils.c b/src/lxc/utils.c
index 200f5cd..7ddf1db 100644
--- a/src/lxc/utils.c
+++ b/src/lxc/utils.c
@@ -1896,6 +1896,8 @@ int lxc_strmunmap(void *addr, size_t length)
 }
 
 /* Check whether a signal is blocked by a process. */
+/* /proc/pid-to-str/status\0 = (5 + 21 + 7 + 1) */
+#define __PROC_STATUS_LEN (5 + 21 + 7 + 1)
 bool task_blocking_signal(pid_t pid, int signal)
 {
 	bool bret = false;
@@ -1905,13 +1907,10 @@ bool task_blocking_signal(pid_t pid, int signal)
 	int ret;
 	FILE *f;
 
-	/* The largest integer that can fit into long int is 2^64. This is a
-	 * 20-digit number. */
-	size_t len = /* /proc */ 5 + /* /pid-to-str */ 21 + /* /status */ 7 + /* \0 */ 1;
-	char status[len];
+	char status[__PROC_STATUS_LEN];
 
-	ret = snprintf(status, len, "/proc/%d/status", pid);
-	if (ret < 0 || ret >= len)
+	ret = snprintf(status, __PROC_STATUS_LEN, "/proc/%d/status", pid);
+	if (ret < 0 || ret >= __PROC_STATUS_LEN)
 		return bret;
 
 	f = fopen(status, "r");
diff --git a/src/tests/concurrent.c b/src/tests/concurrent.c
index e6899ad..1d59a51 100644
--- a/src/tests/concurrent.c
+++ b/src/tests/concurrent.c
@@ -85,7 +85,7 @@ static void do_function(void *arguments)
     }
 
     if (debug) {
-        c->set_config_item(c, "lxc.loglevel", "DEBUG");
+        c->set_config_item(c, "lxc.loglevel", "WARN");
         c->set_config_item(c, "lxc.logfile", name);
     }
 
diff --git a/src/tests/lxc-test-utils.c b/src/tests/lxc-test-utils.c
index e32415b..800c029 100644
--- a/src/tests/lxc-test-utils.c
+++ b/src/tests/lxc-test-utils.c
@@ -70,13 +70,14 @@ void test_lxc_deslashify(void)
 	free(s);
 }
 
+/* /proc/int_as_str/ns/mnt\0 = (5 + 21 + 7 + 1) */
+#define __MNTNS_LEN (5 + 21 + 7 + 1)
 void test_detect_ramfs_rootfs(void)
 {
 	size_t i;
 	int ret;
 	int fret = EXIT_FAILURE;
-	size_t len = 5 /* /proc */ + 21 /* /int_as_str */ + 7 /* /ns/mnt */ + 1 /* \0 */;
-	char path[len];
+	char path[__MNTNS_LEN];
 	int init_ns = -1;
 	char tmpf1[] = "lxc-test-utils-XXXXXX";
 	char tmpf2[] = "lxc-test-utils-XXXXXX";
@@ -118,8 +119,8 @@ void test_detect_ramfs_rootfs(void)
 		"78 24 8:1 / /boot/efi rw,relatime shared:30 - vfat /dev/sda1 rw,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro",
 	};
 
-	ret = snprintf(path, len, "/proc/self/ns/mnt");
-	if (ret < 0 || (size_t)ret >= len) {
+	ret = snprintf(path, __MNTNS_LEN, "/proc/self/ns/mnt");
+	if (ret < 0 || (size_t)ret >= __MNTNS_LEN) {
 		lxc_error("%s\n", "Failed to create path with snprintf().");
 		goto non_test_error;
 	}


More information about the lxc-devel mailing list