mybin

my ~/bin
git clone https://a3nm.net/git/mybin/
Log | Files | Refs | README

commit 6ec6a33a51fc4275345d0614334fd8ed863a572c
parent 6c91a13f731e4c9e1fded7f6cbcdff41af13556a
Author: Antoine Amarilli <a3nm@a3nm.net>
Date:   Sun, 25 Jun 2017 21:27:36 +0200

detect_hyperthreading_bug

Diffstat:
detect_hyperthreading_bug | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 65 insertions(+), 0 deletions(-)

diff --git a/detect_hyperthreading_bug b/detect_hyperthreading_bug @@ -0,0 +1,65 @@ +#!/usr/bin/perl +# Copyright 2017 Uwe Kleine-K├Ânig +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License version 2 as published by the +# Free Software Foundation. +# +# https://lists.debian.org/debian-user/2017/06/msg01011.html + +open(my $cpuinfo, "</proc/cpuinfo") or die "failed to open cpuinfo\n"; + +my $cpunum, $vendor, $family, $model, $stepping, $microcoderev, $hyperthreading; + +while (<$cpuinfo>) { + if (/^$/) { + print "cpu $cpunum: "; + if ($vendor eq "GenuineIntel" and $family == 6) { + if ($model == 78 or $model == 94) { + if ($stepping eq "3") { + print "Your CPU is affected, "; + if (hex($microcoderev) >= 0xb9) { + print "but your microcode is new enough\n"; + } elsif ($hyperthreading ne "on") { + print "but hyper threading is off, which works around the problem\n"; + } else { + print "you should install the latest intel-microcode\n"; + } + } else { + print "You may need a BIOS/UEFI update (unknown Skylake-Y/H/U/S stepping)\n"; + } + } elsif ($model == 85 or $model == 142 or $model == 158) { + print "You may need a BIOS/UEFI update (Kaby Lake, or Skylake-X processor)\n"; + } else { + print "You're likely not affected\n"; + } + } else { + print "You're not affected\n"; + } + + $cpunum = undef; + $vendor = undef; + $family = undef; + $stepping = undef; + $microcoderev = undef; + $hyperthreading = undef; + + next; + } + + $cpunum = $1 if /^processor\s*:\s(.*)/; + $vendor = $1 if /^vendor_id\s*:\s(.*)/; + $family = $1 if /^cpu family\s*:\s(.*)/; + $model = $1 if /^model\s*:\s(.*)/; + $stepping = $1 if /^stepping\s*:\s(.*)/; + $microcoderev = $1 if /^microcode\s*:\s(.*)/; + + if (/^flags\s*:/) { + if (/^flags\s*:.*\bht\b/) { + $hyperthreading = "on"; + } else { + $hyperthreading = "off"; + } + } +} +