diff options
author | Jens Wiklander <jens.wiklander@linaro.org> | 2018-10-29 13:41:35 +0300 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-11-01 17:02:43 +0300 |
commit | c091dc7dad8cd64c7e185d8af267ed2ef40af8dc (patch) | |
tree | be88e01a66d114155bac6065d30fa7faf081d851 /test | |
parent | be6eb2393131b3c0668df3f04868c56c3bb39702 (diff) | |
download | u-boot-c091dc7dad8cd64c7e185d8af267ed2ef40af8dc.tar.xz |
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.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/test/dm/tee.c b/test/dm/tee.c index 13e3f4003a..22f05a4219 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, ®_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); |