Skip to content

Commit

Permalink
detect/tls: Use pcre_copy_substring to avoid leak
Browse files Browse the repository at this point in the history
This commit eliminates a memory leak while parsing TLS version
information. The leak was identified through fuzzing.
  • Loading branch information
jlucovsky authored and victorjulien committed Mar 30, 2020
1 parent 3d969a1 commit 2823bc5
Showing 1 changed file with 4 additions and 12 deletions.
16 changes: 4 additions & 12 deletions src/detect-tls-version.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,12 +160,11 @@ static DetectTlsVersionData *DetectTlsVersionParse (const char *str)
}

if (ret > 1) {
const char *str_ptr;
char *orig;
char ver_ptr[64];
char *tmp_str;
res = pcre_get_substring((char *)str, ov, MAX_SUBSTRINGS, 1, &str_ptr);
res = pcre_copy_substring((char *)str, ov, MAX_SUBSTRINGS, 1, ver_ptr, sizeof(ver_ptr));
if (res < 0) {
SCLogError(SC_ERR_PCRE_GET_SUBSTRING, "pcre_get_substring failed");
SCLogError(SC_ERR_PCRE_GET_SUBSTRING, "pcre_copy_substring failed");
goto error;
}

Expand All @@ -174,11 +173,7 @@ static DetectTlsVersionData *DetectTlsVersionParse (const char *str)
if (unlikely(tls == NULL))
goto error;

orig = SCStrdup((char*)str_ptr);
if (unlikely(orig == NULL)) {
goto error;
}
tmp_str=orig;
tmp_str = ver_ptr;

/* Let's see if we need to scape "'s */
if (tmp_str[0] == '"')
Expand All @@ -200,14 +195,11 @@ static DetectTlsVersionData *DetectTlsVersionParse (const char *str)
tls->flags |= DETECT_TLS_VERSION_FLAG_RAW;
} else {
SCLogError(SC_ERR_INVALID_VALUE, "Invalid value");
SCFree(orig);
goto error;
}

tls->ver = temp;

SCFree(orig);

SCLogDebug("will look for tls %"PRIu16"", tls->ver);
}

Expand Down

0 comments on commit 2823bc5

Please sign in to comment.