aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvanhauser-thc <vh@thc.org>2024-05-14 12:34:51 +0200
committervanhauser-thc <vh@thc.org>2024-05-14 12:34:51 +0200
commitb6c4f3775a229a5c760052cad1580358f5c44f56 (patch)
treee23c36a44584f8398ab80dad2dfdfcad8e312992
parent0892a2245e9a7188e33c16444499c47942d1e56f (diff)
downloadAFLplusplus-b6c4f3775a229a5c760052cad1580358f5c44f56.tar.gz
disable xml/curl/g_ string transform compare
-rw-r--r--docs/Changelog.md2
-rw-r--r--instrumentation/compare-transform-pass.so.cc36
2 files changed, 29 insertions, 9 deletions
diff --git a/docs/Changelog.md b/docs/Changelog.md
index 818010a7..79594e38 100644
--- a/docs/Changelog.md
+++ b/docs/Changelog.md
@@ -15,6 +15,8 @@
- re-enable i386 support that was accidently disabled
- fixes for LTO and outdated afl-gcc mode
- fix COMPCOV split compare for old LLVMs
+ - disable xml/curl/g_ string transform functions because we do not check
+ for null pointers ... TODO
- ensure shared memory variables are visible in weird build setups
* afl-cmin
- work with input files that have a space
diff --git a/instrumentation/compare-transform-pass.so.cc b/instrumentation/compare-transform-pass.so.cc
index f8ba9de5..ebab9cbb 100644
--- a/instrumentation/compare-transform-pass.so.cc
+++ b/instrumentation/compare-transform-pass.so.cc
@@ -230,38 +230,38 @@ bool CompareTransform::transformCmps(Module &M, const bool processStrcmp,
if (callInst->getCallingConv() != llvm::CallingConv::C) continue;
StringRef FuncName = Callee->getName();
isStrcmp &=
- (!FuncName.compare("strcmp") || !FuncName.compare("xmlStrcmp") ||
+ (!FuncName.compare("strcmp") /*|| !FuncName.compare("xmlStrcmp") ||
!FuncName.compare("xmlStrEqual") ||
!FuncName.compare("curl_strequal") ||
!FuncName.compare("strcsequal") ||
- !FuncName.compare("g_strcmp0"));
+ !FuncName.compare("g_strcmp0")*/);
isMemcmp &=
(!FuncName.compare("memcmp") || !FuncName.compare("bcmp") ||
!FuncName.compare("CRYPTO_memcmp") ||
!FuncName.compare("OPENSSL_memcmp") ||
!FuncName.compare("memcmp_const_time") ||
!FuncName.compare("memcmpct"));
- isStrncmp &= (!FuncName.compare("strncmp") ||
+ isStrncmp &= (!FuncName.compare("strncmp")/* ||
!FuncName.compare("curl_strnequal") ||
- !FuncName.compare("xmlStrncmp"));
+ !FuncName.compare("xmlStrncmp")*/);
isStrcasecmp &= (!FuncName.compare("strcasecmp") ||
!FuncName.compare("stricmp") ||
!FuncName.compare("ap_cstr_casecmp") ||
!FuncName.compare("OPENSSL_strcasecmp") ||
- !FuncName.compare("xmlStrcasecmp") ||
+ /*!FuncName.compare("xmlStrcasecmp") ||
!FuncName.compare("g_strcasecmp") ||
!FuncName.compare("g_ascii_strcasecmp") ||
!FuncName.compare("Curl_strcasecompare") ||
- !FuncName.compare("Curl_safe_strcasecompare") ||
+ !FuncName.compare("Curl_safe_strcasecompare") ||*/
!FuncName.compare("cmsstrcasecmp"));
isStrncasecmp &= (!FuncName.compare("strncasecmp") ||
!FuncName.compare("strnicmp") ||
!FuncName.compare("ap_cstr_casecmpn") ||
- !FuncName.compare("OPENSSL_strncasecmp") ||
+ !FuncName.compare("OPENSSL_strncasecmp") /*||
!FuncName.compare("xmlStrncasecmp") ||
!FuncName.compare("g_ascii_strncasecmp") ||
!FuncName.compare("Curl_strncasecompare") ||
- !FuncName.compare("g_strncasecmp"));
+ !FuncName.compare("g_strncasecmp")*/);
isIntMemcpy &= !FuncName.compare("llvm.memcpy.p0i8.p0i8.i64");
if (!isStrcmp && !isMemcmp && !isStrncmp && !isStrcasecmp &&
@@ -465,8 +465,19 @@ bool CompareTransform::transformCmps(Module &M, const bool processStrcmp,
bool isCaseInsensitive = false;
bool needs_null = false;
bool success_is_one = false;
+ bool nullCheck = false;
Function *Callee = callInst->getCalledFunction();
+ fprintf(stderr, "%s - %s - %s\n",
+ callInst->getParent()
+ ->getParent()
+ ->getParent()
+ ->getName()
+ .str()
+ .c_str(),
+ callInst->getParent()->getParent()->getName().str().c_str(),
+ Callee ? Callee->getName().str().c_str() : "NULL");
+
if (Callee) {
if (!Callee->getName().compare("memcmp") ||
@@ -520,6 +531,11 @@ bool CompareTransform::transformCmps(Module &M, const bool processStrcmp,
}
if (!isSizedcmp) needs_null = true;
+ if (Callee->getName().startswith("g_") ||
+ Callee->getName().startswith("curl_") ||
+ Callee->getName().startswith("Curl_") ||
+ Callee->getName().startswith("xml"))
+ nullCheck = true;
Value *sizedValue = isSizedcmp ? callInst->getArgOperand(2) : NULL;
bool isConstSized = sizedValue && isa<ConstantInt>(sizedValue);
@@ -604,8 +620,10 @@ bool CompareTransform::transformCmps(Module &M, const bool processStrcmp,
/* split before the call instruction */
BasicBlock *bb = callInst->getParent();
BasicBlock *end_bb = bb->splitBasicBlock(BasicBlock::iterator(callInst));
-
BasicBlock *next_lenchk_bb = NULL;
+
+ if (nullCheck) { fprintf(stderr, "TODO: null check\n"); }
+
if (isSizedcmp && !isConstSized) {
next_lenchk_bb =