| From 207aa88bdc27999aaf8d662776ac70d1de9fcc8a Mon Sep 17 00:00:00 2001 |
| From: Roman Gushchin <guro@fb.com> |
| Date: Mon, 8 Apr 2019 15:12:30 -0700 |
| Subject: selftests: cgroup: fix cleanup path in test_memcg_subtree_control() |
| |
| [ Upstream commit e14d314c7a489f060d6d691866fef5f131281718 ] |
| |
| Dan reported, that cleanup path in test_memcg_subtree_control() |
| triggers a static checker warning: |
| ./tools/testing/selftests/cgroup/test_memcontrol.c:76 \ |
| test_memcg_subtree_control() |
| error: uninitialized symbol 'child2'. |
| |
| Fix this by initializing child2 and parent2 variables and |
| split the cleanup path into few stages. |
| |
| Signed-off-by: Roman Gushchin <guro@fb.com> |
| Fixes: 84092dbcf901 ("selftests: cgroup: add memory controller self-tests") |
| Reported-by: Dan Carpenter <dan.carpenter@oracle.com> |
| Cc: Dan Carpenter <dan.carpenter@oracle.com> |
| Cc: Shuah Khan (Samsung OSG) <shuah@kernel.org> |
| Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> |
| Signed-off-by: Shuah Khan <shuah@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| .../selftests/cgroup/test_memcontrol.c | 38 ++++++++++--------- |
| 1 file changed, 21 insertions(+), 17 deletions(-) |
| |
| diff --git a/tools/testing/selftests/cgroup/test_memcontrol.c b/tools/testing/selftests/cgroup/test_memcontrol.c |
| index 28d321ba311b4..6f339882a6ca1 100644 |
| --- a/tools/testing/selftests/cgroup/test_memcontrol.c |
| +++ b/tools/testing/selftests/cgroup/test_memcontrol.c |
| @@ -26,7 +26,7 @@ |
| */ |
| static int test_memcg_subtree_control(const char *root) |
| { |
| - char *parent, *child, *parent2, *child2; |
| + char *parent, *child, *parent2 = NULL, *child2 = NULL; |
| int ret = KSFT_FAIL; |
| char buf[PAGE_SIZE]; |
| |
| @@ -34,50 +34,54 @@ static int test_memcg_subtree_control(const char *root) |
| parent = cg_name(root, "memcg_test_0"); |
| child = cg_name(root, "memcg_test_0/memcg_test_1"); |
| if (!parent || !child) |
| - goto cleanup; |
| + goto cleanup_free; |
| |
| if (cg_create(parent)) |
| - goto cleanup; |
| + goto cleanup_free; |
| |
| if (cg_write(parent, "cgroup.subtree_control", "+memory")) |
| - goto cleanup; |
| + goto cleanup_parent; |
| |
| if (cg_create(child)) |
| - goto cleanup; |
| + goto cleanup_parent; |
| |
| if (cg_read_strstr(child, "cgroup.controllers", "memory")) |
| - goto cleanup; |
| + goto cleanup_child; |
| |
| /* Create two nested cgroups without enabling memory controller */ |
| parent2 = cg_name(root, "memcg_test_1"); |
| child2 = cg_name(root, "memcg_test_1/memcg_test_1"); |
| if (!parent2 || !child2) |
| - goto cleanup; |
| + goto cleanup_free2; |
| |
| if (cg_create(parent2)) |
| - goto cleanup; |
| + goto cleanup_free2; |
| |
| if (cg_create(child2)) |
| - goto cleanup; |
| + goto cleanup_parent2; |
| |
| if (cg_read(child2, "cgroup.controllers", buf, sizeof(buf))) |
| - goto cleanup; |
| + goto cleanup_all; |
| |
| if (!cg_read_strstr(child2, "cgroup.controllers", "memory")) |
| - goto cleanup; |
| + goto cleanup_all; |
| |
| ret = KSFT_PASS; |
| |
| -cleanup: |
| - cg_destroy(child); |
| - cg_destroy(parent); |
| - free(parent); |
| - free(child); |
| - |
| +cleanup_all: |
| cg_destroy(child2); |
| +cleanup_parent2: |
| cg_destroy(parent2); |
| +cleanup_free2: |
| free(parent2); |
| free(child2); |
| +cleanup_child: |
| + cg_destroy(child); |
| +cleanup_parent: |
| + cg_destroy(parent); |
| +cleanup_free: |
| + free(parent); |
| + free(child); |
| |
| return ret; |
| } |
| -- |
| 2.20.1 |
| |