From de3ca2ceebe9b03ea4b783d9c2a803adff10ad80 Mon Sep 17 00:00:00 2001
From: Jason Hiser <jdhiser@gmail.com>
Date: Tue, 27 Apr 2021 10:16:46 -0700
Subject: [PATCH] Have FII skip .gnu_version* to avoid false positives in IBT
 detection

---
 irdb-libs/ir_builders/fill_in_indtargs.cpp | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/irdb-libs/ir_builders/fill_in_indtargs.cpp b/irdb-libs/ir_builders/fill_in_indtargs.cpp
index e56507994..24c6717f0 100644
--- a/irdb-libs/ir_builders/fill_in_indtargs.cpp
+++ b/irdb-libs/ir_builders/fill_in_indtargs.cpp
@@ -485,8 +485,16 @@ void infer_targets(FileIR_t *firp, section* shdr)
 	if(shdr->isBSS() ) 
 		return;
 	// skip .dynsym section -- process-dynsym does this.
-	if(shdr->get_name()==".dynsym")
+	// skip version sections -- no code pointers here.
+	if(
+		shdr->get_name()==".gnu.version" || 
+		shdr->get_name()==".gnu.version_r" || 
+		shdr->get_name()==".dynsym"
+	)
+	{
 		return;
+	}
+
 
 
 	cout<<"Checking section "<<shdr->get_name() <<endl;
@@ -3960,7 +3968,7 @@ void fill_in_indtargs(FileIR_t* firp, exeio* exeiop, int64_t do_unpin_opt)
 
 	/* look through each section and look for target possibilities */
         for (secndx=0; secndx<secnum; secndx++)
-		infer_targets(firp, exeiop->sections[secndx]);
+			infer_targets(firp, exeiop->sections[secndx]);
 
 	handle_scoop_scanning(firp);
 	
-- 
GitLab