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