]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
UBUNTU: [Packaging] retpoline -- widen indirect call/jmp detection
authorAndy Whitcroft <apw@canonical.com>
Fri, 23 Mar 2018 11:11:18 +0000 (11:11 +0000)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Thu, 5 Apr 2018 08:41:58 +0000 (10:41 +0200)
BugLink: http://bugs.launchpad.net/bugs/1758856
Signed-off-by: Andy Whitcroft <apw@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
Signed-off-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
debian/scripts/retpoline-extract-one

index daf877ea6465f25cb88c7acec56ae5522b5d2c11..09d7585a16ebb0d32e5d793049c216f2dbe0e657 100755 (executable)
@@ -211,27 +211,39 @@ rel()
 
 tmp="/tmp/retpoline-extract.$$"
 
+disassemble()
+{
+       local object="$1"
+       local src="$2"
+       local options="$3"
+       local selector="$4"
+
+       objdump $options --disassemble --no-show-raw-insn "$object" | \
+       awk -F' ' '
+               BEGIN                           { file="'"$object"'"; src="'"$src"'"; }
+               /Disassembly of section/        { segment=$4; sub(":", "", segment); }
+               /^[0-9a-f][0-9a-f]* <.*>:/      { tag=$0; sub(".*<", "", tag); sub(">.*", "", tag); }
+               $0 ~ /(call|jmp)q?  *\*.*%/ {
+                       sub(":", "", $1);
+                       if ('"$selector"') {
+                               offset=$1
+                               $1=tag
+                               print(file "-" segment "-" offset " " src " " segment " " $0);
+                       }
+               }
+       '
+}
+
 # Accumulate potentially vunerable indirect call/jmp sequences.  We do this
 # by examining the raw disassembly for affected forms, recording the location
 # of each.
 case "$bit16" in
-'')    ;;
-*)     disassemble_as='--disassembler-options=i8086' ;;
-esac
-objdump $disassemble_as --disassemble --no-show-raw-insn "$object" | \
-awk -F' ' '
-       BEGIN                           { file="'"$object"'"; src="'"$src"'"; }
-       /Disassembly of section/        { segment=$4; sub(":", "", segment); }
-       /^[0-9a-f][0-9a-f]* <.*>:/      { tag=$0; sub(".*<", "", tag); sub(">.*", "", tag); }
-       $0 ~ /(call|jmp)q?  *\*.*%/ {
-               sub(":", "", $1);
-               if (segment != ".init.text") {
-                       offset=$1
-                       $1=tag
-                       print(file "-" segment "-" offset " " src " " segment " " $0);
-               }
-       }
-' | sort -k 1b,1 >"$object.ur-detected"
+'')    disassemble "$object" "$src" '' 'segment != ".init.text"' ;;
+*)     disassemble "$object" "$src" '--disassembler-options=i8086' 'segment != ".init.text" && segment != ".text32" && segment != ".text64"'
+       disassemble "$object" "$src" '--disassembler-options=i386' 'segment == ".text32"'
+       disassemble "$object" "$src" '--disassembler-options=x86-64' 'segment == ".text64"'
+       ;;
+esac | sort -k 1b,1 >"$object.ur-detected"
 [ ! -s "$object.ur-detected" ] && rm -f "$object.ur-detected"
 
 # Load up the symbol table and section mappings.