From ea2991ea69ca77a60dbfc5a3dcd5a8e6cd074c5e Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Tue, 4 Feb 2020 14:20:15 +0100 Subject: [PATCH] fixed memory leak also, use sc_file_free instead of free fixes https://oss-fuzz.com/testcase-detail/4905082200260608 --- src/libopensc/pkcs15-atrust-acos.c | 3 +-- src/libopensc/pkcs15-dnie.c | 3 +++ src/libopensc/pkcs15-gemsafeV1.c | 3 +-- src/libopensc/pkcs15-pteid.c | 3 +-- src/libopensc/pkcs15-starcert.c | 3 +-- src/libopensc/pkcs15-tccardos.c | 3 +-- src/libopensc/pkcs15.c | 1 + 7 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/libopensc/pkcs15-atrust-acos.c b/src/libopensc/pkcs15-atrust-acos.c index c4b19e80..09a80fa0 100644 --- a/src/libopensc/pkcs15-atrust-acos.c +++ b/src/libopensc/pkcs15-atrust-acos.c @@ -253,8 +253,7 @@ static int sc_pkcs15emu_atrust_acos_init(sc_pkcs15_card_t *p15card) if (r != SC_SUCCESS || !file) return SC_ERROR_INTERNAL; /* set the application DF */ - if (p15card->file_app) - free(p15card->file_app); + sc_file_free(p15card->file_app); p15card->file_app = file; return SC_SUCCESS; diff --git a/src/libopensc/pkcs15-dnie.c b/src/libopensc/pkcs15-dnie.c index f4b144e4..92a602c5 100644 --- a/src/libopensc/pkcs15-dnie.c +++ b/src/libopensc/pkcs15-dnie.c @@ -169,7 +169,10 @@ static int sc_pkcs15emu_dnie_init(sc_pkcs15_card_t * p15card) } /* Set root path of this application */ + sc_file_free(p15card->file_app); p15card->file_app = sc_file_new(); + if (NULL == p15card->file_app) + LOG_FUNC_RETURN(ctx, SC_ERROR_NOT_ENOUGH_MEMORY); sc_format_path("3F00", &p15card->file_app->path); /* Load TokenInfo */ diff --git a/src/libopensc/pkcs15-gemsafeV1.c b/src/libopensc/pkcs15-gemsafeV1.c index 074fedd3..4e945157 100644 --- a/src/libopensc/pkcs15-gemsafeV1.c +++ b/src/libopensc/pkcs15-gemsafeV1.c @@ -425,8 +425,7 @@ static int sc_pkcs15emu_gemsafeV1_init( sc_pkcs15_card_t *p15card) if (r != SC_SUCCESS || !file) return SC_ERROR_INTERNAL; /* set the application DF */ - if (p15card->file_app) - free(p15card->file_app); + sc_file_free(p15card->file_app); p15card->file_app = file; return SC_SUCCESS; diff --git a/src/libopensc/pkcs15-pteid.c b/src/libopensc/pkcs15-pteid.c index 483fc402..e1ca787f 100644 --- a/src/libopensc/pkcs15-pteid.c +++ b/src/libopensc/pkcs15-pteid.c @@ -163,8 +163,7 @@ static int sc_pkcs15emu_pteid_init(sc_pkcs15_card_t * p15card) if (rv != SC_SUCCESS || !file) return SC_ERROR_INTERNAL; /* set the application DF */ - if (p15card->file_app) - free(p15card->file_app); + sc_file_free(p15card->file_app); p15card->file_app = file; /* Load TokenInfo */ diff --git a/src/libopensc/pkcs15-starcert.c b/src/libopensc/pkcs15-starcert.c index f6394faa..e8c670ca 100644 --- a/src/libopensc/pkcs15-starcert.c +++ b/src/libopensc/pkcs15-starcert.c @@ -261,8 +261,7 @@ static int sc_pkcs15emu_starcert_init(sc_pkcs15_card_t *p15card) if (r != SC_SUCCESS || !file) return SC_ERROR_INTERNAL; /* set the application DF */ - if (p15card->file_app) - free(p15card->file_app); + sc_file_free(p15card->file_app); p15card->file_app = file; return SC_SUCCESS; diff --git a/src/libopensc/pkcs15-tccardos.c b/src/libopensc/pkcs15-tccardos.c index f78c9d7c..f1039fd3 100644 --- a/src/libopensc/pkcs15-tccardos.c +++ b/src/libopensc/pkcs15-tccardos.c @@ -345,8 +345,7 @@ static int sc_pkcs15_tccardos_init_func(sc_pkcs15_card_t *p15card) if (r != SC_SUCCESS || file == NULL) return SC_ERROR_INTERNAL; /* set the application DF */ - if (p15card->file_app) - free(p15card->file_app); + sc_file_free(p15card->file_app; p15card->file_app = file; return SC_SUCCESS; diff --git a/src/libopensc/pkcs15.c b/src/libopensc/pkcs15.c index aa541264..e474803d 100644 --- a/src/libopensc/pkcs15.c +++ b/src/libopensc/pkcs15.c @@ -966,6 +966,7 @@ sc_pkcs15_bind_internal(struct sc_pkcs15_card *p15card, struct sc_aid *aid) if (err != SC_SUCCESS) sc_log(ctx, "unable to enumerate apps: %s", sc_strerror(err)); } + sc_file_free(p15card->file_app); p15card->file_app = sc_file_new(); if (p15card->file_app == NULL) { err = SC_ERROR_OUT_OF_MEMORY;