diff -up libcgroup-0.41/src/api.c.coverity libcgroup-0.41/src/api.c
--- libcgroup-0.41/src/api.c.coverity	2014-01-13 20:52:49.853838149 +0100
+++ libcgroup-0.41/src/api.c	2014-01-13 20:52:49.854838142 +0100
@@ -2791,7 +2791,6 @@ static int cgroup_create_template_group(
 	if (group_name == NULL) {
 		ret = ECGOTHER;
 		last_errno = errno;
-		free(template_name);
 		goto end;
 	}
 
diff -up libcgroup-0.41/src/config.c.coverity libcgroup-0.41/src/config.c
--- libcgroup-0.41/src/config.c.coverity	2014-01-13 15:05:56.000000000 +0100
+++ libcgroup-0.41/src/config.c	2014-01-13 20:52:49.854838142 +0100
@@ -323,7 +323,7 @@ int config_group_task_perm(char *perm_ty
 	long val = atoi(value);
 	char buffer[CGROUP_BUFFER_LEN];
 	struct cgroup *config_cgroup;
-	int table_index;
+	int table_index, ret;
 
 	switch (flag) {
 	case CGROUP:
@@ -367,10 +367,10 @@ int config_group_task_perm(char *perm_ty
 			if (!group)
 				goto group_task_error;
 
-			getgrnam_r(value, group, buffer,
+			ret = getgrnam_r(value, group, buffer,
 					CGROUP_BUFFER_LEN, &group_buffer);
 
-			if (group_buffer == NULL) {
+			if (ret != 0 || group_buffer == NULL) {
 				free(group);
 				goto group_task_error;
 			}
@@ -436,7 +436,7 @@ int config_group_admin_perm(char *perm_t
 	struct cgroup *config_cgroup;
 	long val = atoi(value);
 	char buffer[CGROUP_BUFFER_LEN];
-	int table_index;
+	int table_index, ret;
 
 	switch (flag) {
 	case CGROUP:
@@ -479,10 +479,10 @@ int config_group_admin_perm(char *perm_t
 			if (!group)
 				goto admin_error;
 
-			getgrnam_r(value, group, buffer,
+			ret = getgrnam_r(value, group, buffer,
 					CGROUP_BUFFER_LEN, &group_buffer);
 
-			if (group_buffer == NULL) {
+			if (ret != 0 || group_buffer == NULL) {
 				free(group);
 				goto admin_error;
 			}
diff -up libcgroup-0.41/src/daemon/cgrulesengd.c.coverity libcgroup-0.41/src/daemon/cgrulesengd.c
--- libcgroup-0.41/src/daemon/cgrulesengd.c.coverity	2014-01-13 15:05:56.000000000 +0100
+++ libcgroup-0.41/src/daemon/cgrulesengd.c	2014-01-13 20:52:49.854838142 +0100
@@ -646,7 +646,7 @@ close:
 
 static int cgre_create_netlink_socket_process_msg(void)
 {
-	int sk_nl = 0, sk_unix = 0, sk_max;
+	int sk_nl = -1, sk_unix = -1, sk_max;
 	struct sockaddr_nl my_nla;
 	char buff[BUFF_SIZE];
 	int rc = -1;
@@ -784,9 +784,9 @@ static int cgre_create_netlink_socket_pr
 	}
 
 close_and_exit:
-	if (sk_nl > 0)
+	if (sk_nl > -1)
 		close(sk_nl);
-	if (sk_unix > 0)
+	if (sk_unix > -1)
 		close(sk_unix);
 	return rc;
 }
diff -upr libcgroup-0.40.rc1.orig/src/tools/lscgroup.c libcgroup-0.40.rc1/src/tools/lscgroup.c
--- libcgroup-0.40.rc1.orig/src/tools/lscgroup.c	2013-05-21 15:36:04.000000000 +0200
+++ libcgroup-0.40.rc1/src/tools/lscgroup.c	2013-11-04 14:26:53.400473523 +0100
@@ -97,11 +97,11 @@ static int display_controller_data(char
 	if (ret != 0)
 		return ret;
 
-	strncpy(cgroup_dir_path, info.full_path, FILENAME_MAX);
+	strncpy(cgroup_dir_path, info.full_path, FILENAME_MAX - 1);
 	/* remove problematic  '/' characters from cgroup directory path*/
 	trim_filepath(cgroup_dir_path);
 
-	strncpy(input_dir_path, input_path, FILENAME_MAX);
+	strncpy(input_dir_path, input_path, FILENAME_MAX - 1);
 
 	/* remove problematic  '/' characters from input directory path*/
 	trim_filepath(input_dir_path);
