diff -upr libcgroup-0.40.rc1.orig/src/api.c libcgroup-0.40.rc1/src/api.c
--- libcgroup-0.40.rc1.orig/src/api.c 2013-08-27 18:20:40.399333000 +0200
+++ libcgroup-0.40.rc1/src/api.c 2013-08-27 19:34:07.569670729 +0200
@@ -1003,6 +1003,10 @@ int cgroup_init(void)
if (mntopt) {
mntopt = strtok_r(mntopt, ",", &strtok_buffer);
+ if (!mntopt) {
+ continue;
+ }
+
/*
* Check if it is a duplicate
*/
@@ -2719,10 +2723,10 @@ char *cgroup_copy_with_slash(char *input
int len = strlen(input);
/* if input does not end with '/', allocate one more space for it */
- if ((input[len-2]) != '/')
+ if ((input[len-1]) != '/')
len = len+1;
- output = (char *)malloc(sizeof(char)*(len));
+ output = (char *)malloc(sizeof(char)*(len + 1));
if (output == NULL)
return NULL;
@@ -2796,7 +2800,6 @@ static int cgroup_create_template_group(
if (group_name == NULL) {
ret = ECGOTHER;
last_errno = errno;
- free(template_name);
goto end;
}
@@ -3318,7 +3321,7 @@ int cgroup_get_current_controller_path(p
}
token = strtok_r(controllers, ",", &savedptr);
- do {
+ while (token) {
if (strncmp(controller, token, strlen(controller) + 1)
== 0) {
*current_path = strdup(cgroup_path);
@@ -3331,7 +3334,7 @@ int cgroup_get_current_controller_path(p
goto done;
}
token = strtok_r(NULL, ",", &savedptr);
- } while (token);
+ }
}
done:
diff -upr libcgroup-0.40.rc1.orig/src/config.c libcgroup-0.40.rc1/src/config.c
--- libcgroup-0.40.rc1.orig/src/config.c 2013-05-21 15:36:04.000000000 +0200
+++ libcgroup-0.40.rc1/src/config.c 2013-08-27 19:31:54.193828164 +0200
@@ -313,7 +313,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:
@@ -357,10 +357,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;
}
@@ -426,7 +426,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:
@@ -469,10 +469,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;
}
@@ -1576,14 +1576,14 @@ int cgroup_config_create_template_group(
/* name and controller match template found */
/* variables substituted in template */
strncpy(buffer, t_cgroup->name,
- FILENAME_MAX);
+ FILENAME_MAX - 1);
strncpy(t_cgroup->name, cgroup->name,
- FILENAME_MAX);
+ FILENAME_MAX - 1);
ret = cgroup_create_cgroup(t_cgroup, flags);
strncpy(t_cgroup->name, buffer,
- FILENAME_MAX);
+ FILENAME_MAX - 1);
if (ret) {
cgroup_dbg("creating group %s, error %d\n",
cgroup->name, ret);
@@ -1600,7 +1600,7 @@ int cgroup_config_create_template_group(
/* no template is present for given name x controller pair
* add controller to result cgroup */
aux_cgroup = cgroup_new_cgroup(cgroup->name);
- if (ret) {
+ if (!aux_cgroup) {
ret = ECGINVAL;
fprintf(stderr, "cgroup %s can't be created\n",
cgroup->name);
diff -upr libcgroup-0.40.rc1.orig/src/daemon/cgrulesengd.c libcgroup-0.40.rc1/src/daemon/cgrulesengd.c
--- libcgroup-0.40.rc1.orig/src/daemon/cgrulesengd.c 2013-05-21 15:36:04.000000000 +0200
+++ libcgroup-0.40.rc1/src/daemon/cgrulesengd.c 2013-08-27 18:56:41.000674181 +0200
@@ -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;
}