diff --git a/client/src/cmdhfmf.c b/client/src/cmdhfmf.c index 13dcf5557..a6136ff25 100644 --- a/client/src/cmdhfmf.c +++ b/client/src/cmdhfmf.c @@ -3776,6 +3776,7 @@ int CmdHF14AMfELoad(const char *Cmd) { } case DICTIONARY: { PrintAndLogEx(ERR, "Error: Only BIN/JSON/EML formats allowed"); + free(data); return PM3_EINVARG; } } @@ -4447,6 +4448,7 @@ static int CmdHF14AMfCLoad(const char *Cmd) { } case DICTIONARY: { PrintAndLogEx(ERR, "Error: Only BIN/JSON/EML formats allowed"); + free(data); return PM3_EINVARG; } } @@ -4886,7 +4888,7 @@ static int CmdHF14AMfCView(const char *Cmd) { //needs nt, ar, at, Data to decrypt static int CmdHf14AMfDecryptBytes(const char *Cmd) { - CLIParserContext *ctx; + CLIParserContext *ctx; CLIParserInit(&ctx, "hf mf decrypt", "Decrypt Crypto-1 encrypted bytes given some known state of crypto. See tracelog to gather needed values", "hf mf decrypt --nt b830049b --ar 9248314a --at 9280e203 -d 41e586f9\n" @@ -4906,6 +4908,7 @@ static int CmdHf14AMfDecryptBytes(const char *Cmd) { uint32_t nt = 0; int res = arg_get_u32_hexstr_def(ctx, 1, 0, &nt); if (res != 1) { + CLIParserFree(ctx); PrintAndLogEx(WARNING, "check `nt` parameter"); return PM3_EINVARG; } @@ -4913,6 +4916,7 @@ static int CmdHf14AMfDecryptBytes(const char *Cmd) { uint32_t ar_enc = 0; res = arg_get_u32_hexstr_def(ctx, 2, 0, &ar_enc); if (res != 1) { + CLIParserFree(ctx); PrintAndLogEx(WARNING, "check `ar` parameter"); return PM3_EINVARG; } @@ -4920,6 +4924,7 @@ static int CmdHf14AMfDecryptBytes(const char *Cmd) { uint32_t at_enc = 0; res = arg_get_u32_hexstr_def(ctx, 3, 0, &at_enc); if (res != 1) { + CLIParserFree(ctx); PrintAndLogEx(WARNING, "check `at` parameter"); return PM3_EINVARG; } @@ -5939,6 +5944,7 @@ static int CmdHF14AMfView(const char *Cmd) { } case DICTIONARY: { PrintAndLogEx(ERR, "Error: Only BIN/JSON/EML formats allowed"); + free(dump); return PM3_EINVARG; } } diff --git a/client/src/cmdlfhitag.c b/client/src/cmdlfhitag.c index 912ea4665..af984ce61 100644 --- a/client/src/cmdlfhitag.c +++ b/client/src/cmdlfhitag.c @@ -550,12 +550,19 @@ static int CmdLFHitagReader(const char *Cmd) { uint8_t key[6]; int keylen = 0; - CLIParamHexToBuf(arg_get_str(ctx, 8), key, sizeof(key), &keylen); + int res = CLIParamHexToBuf(arg_get_str(ctx, 8), key, sizeof(key), &keylen); + if (res != 0) { + CLIParserFree(ctx); + return PM3_EINVARG; + } uint8_t nrar[8]; int nalen = 0; - CLIParamHexToBuf(arg_get_str(ctx, 9), nrar, sizeof(nrar), &nalen); + res = CLIParamHexToBuf(arg_get_str(ctx, 9), nrar, sizeof(nrar), &nalen); CLIParserFree(ctx); + if (res != 0) { + return PM3_EINVARG; + } // sanity checks if (keylen != 0 && keylen != 6) { @@ -719,17 +726,30 @@ static int CmdLFHitagWriter(const char *Cmd) { uint8_t data[4]; int dlen = 0; - CLIParamHexToBuf(arg_get_str(ctx, 6), data, sizeof(data), &dlen); + int res = CLIParamHexToBuf(arg_get_str(ctx, 6), data, sizeof(data), &dlen); + if (res != 0) { + CLIParserFree(ctx); + return PM3_EINVARG; + } uint8_t key[6]; int keylen = 0; - CLIParamHexToBuf(arg_get_str(ctx, 7), key, sizeof(key), &keylen); + res = CLIParamHexToBuf(arg_get_str(ctx, 7), key, sizeof(key), &keylen); + if (res != 0) { + CLIParserFree(ctx); + return PM3_EINVARG; + } uint8_t nrar[8]; int nalen = 0; - CLIParamHexToBuf(arg_get_str(ctx, 8), nrar, sizeof(nrar), &nalen); + res = CLIParamHexToBuf(arg_get_str(ctx, 8), nrar, sizeof(nrar), &nalen); + CLIParserFree(ctx); + if (res != 0) { + return PM3_EINVARG; + } + // sanity checks if (dlen != sizeof(data)) { PrintAndLogEx(WARNING, "Wrong DATA len expected 4, got %d", dlen); @@ -814,17 +834,27 @@ static int CmdLFHitag2Dump(const char *Cmd) { CLIExecWithReturn(ctx, Cmd, argtable, false); uint8_t filename[FILE_PATH_SIZE] = {0}; int fnlen = 0; - CLIParamHexToBuf(arg_get_str(ctx, 1), filename, sizeof(filename), &fnlen); + int res = CLIParamHexToBuf(arg_get_str(ctx, 1), filename, sizeof(filename), &fnlen); + if (res != 0) { + CLIParserFree(ctx); + return PM3_EINVARG; + } uint8_t key[6]; int keylen = 0; - CLIParamHexToBuf(arg_get_str(ctx, 2), key, sizeof(key), &keylen); + res = CLIParamHexToBuf(arg_get_str(ctx, 2), key, sizeof(key), &keylen); + if (res != 0) { + CLIParserFree(ctx); + return PM3_EINVARG; + } uint8_t nrar[8]; int nalen = 0; - CLIParamHexToBuf(arg_get_str(ctx, 3), nrar, sizeof(nrar), &nalen); + res = CLIParamHexToBuf(arg_get_str(ctx, 3), nrar, sizeof(nrar), &nalen); CLIParserFree(ctx); - + if (res != 0) { + return PM3_EINVARG; + } PrintAndLogEx(WARNING, "to be implememted...");