Unverified Commit b49c4e2d by Wolfgang Bumiller Committed by GitHub

Merge pull request #2836 from brauner/2019-02-10/fix_cgfsng_driver

cgroup: bugfixes
parents 41f808b2 c74da4ab
...@@ -1329,7 +1329,7 @@ static void remove_path_for_hierarchy(struct hierarchy *h, char *cgname, bool mo ...@@ -1329,7 +1329,7 @@ static void remove_path_for_hierarchy(struct hierarchy *h, char *cgname, bool mo
} }
__cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops,
struct lxc_handler *handler) struct lxc_handler *handler)
{ {
__do_free char *monitor_cgroup = NULL; __do_free char *monitor_cgroup = NULL;
char *offset, *tmp; char *offset, *tmp;
...@@ -1367,10 +1367,14 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops, ...@@ -1367,10 +1367,14 @@ __cgfsng_ops static inline bool cgfsng_monitor_create(struct cgroup_ops *ops,
} }
for (i = 0; ops->hierarchies[i]; i++) { for (i = 0; ops->hierarchies[i]; i++) {
if (!monitor_create_path_for_hierarchy(ops->hierarchies[i], monitor_cgroup)) { if (!monitor_create_path_for_hierarchy(ops->hierarchies[i],
ERROR("Failed to create cgroup \"%s\"", ops->hierarchies[i]->monitor_full_path); monitor_cgroup)) {
ERROR("Failed to create cgroup \"%s\"",
ops->hierarchies[i]->monitor_full_path);
for (int j = 0; j < i; j++) for (int j = 0; j < i; j++)
remove_path_for_hierarchy(ops->hierarchies[j], monitor_cgroup, true); remove_path_for_hierarchy(ops->hierarchies[j],
monitor_cgroup,
true);
idx++; idx++;
break; break;
...@@ -1422,29 +1426,32 @@ __cgfsng_ops static inline bool cgfsng_payload_create(struct cgroup_ops *ops, ...@@ -1422,29 +1426,32 @@ __cgfsng_ops static inline bool cgfsng_payload_create(struct cgroup_ops *ops,
offset = container_cgroup + len - 5; offset = container_cgroup + len - 5;
do { do {
int ret = snprintf(offset, 5, "-%d", idx); if (idx) {
if (ret < 0 || (size_t)ret >= 5) int ret = snprintf(offset, 5, "-%d", idx);
return false; if (ret < 0 || (size_t)ret >= 5)
return false;
}
for (i = 0; ops->hierarchies[i]; i++) { for (i = 0; ops->hierarchies[i]; i++) {
if (!container_create_path_for_hierarchy(ops->hierarchies[i], container_cgroup)) { if (!container_create_path_for_hierarchy(ops->hierarchies[i],
ERROR("Failed to create cgroup \"%s\"", ops->hierarchies[i]->container_full_path); container_cgroup)) {
ERROR("Failed to create cgroup \"%s\"",
ops->hierarchies[i]->container_full_path);
for (int j = 0; j < i; j++) for (int j = 0; j < i; j++)
remove_path_for_hierarchy(ops->hierarchies[j], container_cgroup, false); remove_path_for_hierarchy(ops->hierarchies[j],
container_cgroup,
false);
idx++; idx++;
break; break;
} }
} }
ops->container_cgroup = container_cgroup;
container_cgroup = NULL;
INFO("The container uses \"%s\" as cgroup", ops->container_cgroup);
} while (ops->hierarchies[i] && idx > 0 && idx < 1000); } while (ops->hierarchies[i] && idx > 0 && idx < 1000);
if (idx == 1000) if (idx == 1000)
return false; return false;
INFO("The container process uses \"%s\" as cgroup", ops->container_cgroup); INFO("The container process uses \"%s\" as cgroup", container_cgroup);
ops->container_cgroup = steal_ptr(container_cgroup);
return true; return true;
} }
......
...@@ -392,4 +392,11 @@ enum { ...@@ -392,4 +392,11 @@ enum {
/* Maximum number of bytes sendfile() is able to send in one go. */ /* Maximum number of bytes sendfile() is able to send in one go. */
#define LXC_SENDFILE_MAX 0x7ffff000 #define LXC_SENDFILE_MAX 0x7ffff000
#define steal_ptr(ptr) \
({ \
typeof(ptr) _ptr_ = (ptr); \
(ptr) = NULL; \
_ptr_; \
})
#endif /* __LXC_MACRO_H */ #endif /* __LXC_MACRO_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment