aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJens Wiklander <jens.wiklander@linaro.org>2018-10-29 11:41:35 +0100
committerTom Rini <trini@konsulko.com>2018-11-01 10:02:43 -0400
commitc091dc7dad8cd64c7e185d8af267ed2ef40af8dc (patch)
treebe88e01a66d114155bac6065d30fa7faf081d851 /test
parentbe6eb2393131b3c0668df3f04868c56c3bb39702 (diff)
downloadu-boot-c091dc7dad8cd64c7e185d8af267ed2ef40af8dc.zip
u-boot-c091dc7dad8cd64c7e185d8af267ed2ef40af8dc.tar.gz
u-boot-c091dc7dad8cd64c7e185d8af267ed2ef40af8dc.tar.bz2
test: tee: fix resource leak in dm_test_tee()
Fixes possible resource leak in dm_test_tee() reported by Coverity. Reported-by: Coverity (CID: 184175) Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
Diffstat (limited to 'test')
-rw-r--r--test/dm/tee.c35
1 files changed, 26 insertions, 9 deletions
diff --git a/test/dm/tee.c b/test/dm/tee.c
index 13e3f40..22f05a4 100644
--- a/test/dm/tee.c
+++ b/test/dm/tee.c
@@ -49,7 +49,12 @@ static int match(struct tee_version_data *vers, const void *data)
return vers->gen_caps & TEE_GEN_CAP_GP;
}
-static int dm_test_tee(struct unit_test_state *uts)
+struct test_tee_vars {
+ struct tee_shm *reg_shm;
+ struct tee_shm *alloc_shm;
+};
+
+static int test_tee(struct unit_test_state *uts, struct test_tee_vars *vars)
{
struct tee_version_data vers;
struct udevice *dev;
@@ -57,8 +62,6 @@ static int dm_test_tee(struct unit_test_state *uts)
u32 session = 0;
int rc;
u8 data[128];
- struct tee_shm *reg_shm;
- struct tee_shm *alloc_shm;
dev = tee_find_device(NULL, match, NULL, &vers);
ut_assert(dev);
@@ -77,22 +80,36 @@ static int dm_test_tee(struct unit_test_state *uts)
ut_assert(!state->session);
ut_assert(!state->num_shms);
- rc = tee_shm_register(dev, data, sizeof(data), 0, &reg_shm);
+ rc = tee_shm_register(dev, data, sizeof(data), 0, &vars->reg_shm);
ut_assert(!rc);
ut_assert(state->num_shms == 1);
- rc = tee_shm_alloc(dev, 256, 0, &alloc_shm);
+ rc = tee_shm_alloc(dev, 256, 0, &vars->alloc_shm);
ut_assert(!rc);
ut_assert(state->num_shms == 2);
- ut_assert(tee_shm_is_registered(reg_shm, dev));
- ut_assert(tee_shm_is_registered(alloc_shm, dev));
+ ut_assert(tee_shm_is_registered(vars->reg_shm, dev));
+ ut_assert(tee_shm_is_registered(vars->alloc_shm, dev));
- tee_shm_free(reg_shm);
- tee_shm_free(alloc_shm);
+ tee_shm_free(vars->reg_shm);
+ vars->reg_shm = NULL;
+ tee_shm_free(vars->alloc_shm);
+ vars->alloc_shm = NULL;
ut_assert(!state->num_shms);
return 0;
}
+static int dm_test_tee(struct unit_test_state *uts)
+{
+ struct test_tee_vars vars = { NULL, NULL };
+ int rc = test_tee(uts, &vars);
+
+ /* In case test_tee() asserts these may still remain allocated */
+ tee_shm_free(vars.reg_shm);
+ tee_shm_free(vars.alloc_shm);
+
+ return rc;
+}
+
DM_TEST(dm_test_tee, DM_TESTF_SCAN_FDT);