• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Gelöst Braucht man "Indirect Branch Tracking"? VirtualBox hat Probleme damit.

wbwb

Hacker
Im 6.3.6 Kernel, der von Backport Repo als letztes auf meiner openSuse Leap 15.4 Maschine eingespielt wurde ist "indirect branch tracking" in der config erstmalig ge-set-ted
Code:
>grep IBT /boot/config-6.3.6-lp154.3.ga688083-default
CONFIG_CC_HAS_IBT=y
CONFIG_X86_KERNEL_IBT=y
Bisher 'dachte' ich immer das sein ein schon länger implementiertes Sicherheits-Feature (seit letztem Jahr), aber im letzten Kernel den ich davor hatte, dem 6.3.4er war IBT in der Suse noch nicht gesetzt
Code:
grep IBT /boot/config-6.3.4-lp154.5.gbfc9f93-default
CONFIG_CC_HAS_IBT=y
# CONFIG_X86_KERNEL_IBT is not set

Soweit wäre mir das fast alles egal, wenn nicht nach dem Update auf den 6.3.6 Kern plötzlich die VirtualBox nicht mehr funktioniert hätte. Nach ein bisschen hin-und-her auf dem VirtualBox-Forum habe ich lernen müssen, dass die VirtualBox mit IBT nicht umgehen kann und man IBT deshalb im (eben gerade neuen 6.3.6) Kernel per Bootparameter im Grub abschalten muss.

Deshalb die Frage: Darf man IBT in einem Kernel einfach so abschalten, nur damit die VirtualBox wieder funktioniert? Oder gibt das ein böses Erwachen an anderer Stelle?
 

spoensche

Moderator
Teammitglied
Bei IBT handelt es sich um zwei neue CPU Befehle. Wenn deine CPU die beiden Befehle nicht kennt, werden sie als NOP (No Operation) gehandhabt. Wenn deine CPU kein IBT unterstützt kannst du es deaktivieren.

Ich nutze Arch Linux und IBT ist bei mir für den Kernel 6.3.1 aktiviert. VirtualBox 7.0.8-2 läuft ohne Probleme. Welche VirtualBox Version verwendest du?
 
OP
W

wbwb

Hacker
Ich nutze Arch Linux und IBT ist bei mir für den Kernel 6.3.1 aktiviert. VirtualBox 7.0.8-2 läuft ohne Probleme.

Das wird ja immer seltsamer.

Ich sorge mich um meine "Netiquette" :oops: wenn ich wg. einer Sache in zwei Foren unterwegs bin ... spricht meinen Post im VirtualBox-Forum. Deshalb wollte ich hier eigentlich nur wissen ob ich IBT ungestraft im Grub auf "ibt=off" setzten darf. Aber wie dem jetzt auch sei:
  • Dass VirtualBox Probleme mit IBT hat, scheint für die Leute im VirtualBox Forum so eine Art Binsenweisheit zu sein(?) Insbesondere scheint VirtualBox bis heute IBT fehlerhaft/gar nicht implementiert zu haben(?) Deshalb ist das Netz auch voll mit Hinweisen darauf, dass "ibt=off" die von mir im VirtualBox Forum beschriebenen Startprobleme lösen kann.
  • Auf meiner Kiste läuft eine ziemlich neue 12th Gen Intel(R) Core(TM) i7-1265U CPU. Ich könnte den instruction set auch noch auftreiben, aber ich würde mal raten, dass diese das IBT unterstützt. Dazu passt ja zumindest auch, dass das Verhalten meiner VirtualBox mit oder ohne "ibt=off" in den Grub Bootparamtern dezidiert anders ist.
  • Meine VirtualBox Version ist das neueste, was man von openSuse und von Oracle haben kann 7.0.8_SUSE r156879 (also dasselbe wie bei Dir)
Das erste was mir jetzt deshalb zu Deiner Situation einfällt wäre, dass die CPU Deiner besagten Maschine IBT nicht/unvollständig implementiert hat und dass es deshalb in Deinem Fall egal ist was in der Kernel-config steht(?) ... aber wie immer ist wahrscheinlich alles komplizierter ... vielleicht funktioniert VirtualBox ja doch mit IBT, nur die openSuse hat es falsch implementiert(?) ... oder was auch immer.

Deshalb nochmal zurück zur Ausgangsfrage: Darf ich - außer dem Verlust von ein wenig Sicherheit - ungestraft "ibt=off" setzen?
 
... aber wie immer ist wahrscheinlich alles komplizierter ...

In der Informatik ist wenig kompliziert.

IBT:
Jeder Prozessor hat einen oder mehrere Instruktionszeiger (Instruction Pointer) kurz IP.
Der arbeitet das Programm Zeile für Zeile ab.
Nun kann man diesen IP laden,
1. entweder mit einer fixen Adresse, d.h. der IP geht dorthin und arbeitet dort weiter, das wäre ein absoluter Sprung (jump)
2. oder man sagt ihm, gehe von der aktuellen Stelle 12 Instruktionen nach vorne, das wäre dann ein indirekter Sprung (branch)
Hacker könnten an dieser Stelle manipulieren, also die Anzahl verändern und den IP an eine andere,böse Stelle springen lassen.
Deshalb wurde das IBT eingeführt. "Indirect Branch Tracking", also "nachvollziehen, ob dieser branch valide ist".
Das wird realisiert mit einer kleinen Hardwareeinheit (Status Maschine oder state machine) im Prozessor,
ibt=off oder on schaltet diese state machine aus oder ein.
Ob IBT ein/aus ist, spielt also für die Abarbeitung des Programmcodes keine Rolle.
Deshalb ist mir auch nicht klar, wie sich das auf VirtualBox auswirken sollte.
Existierende Programme müssen IBT ja nicht unterstützen oder berücksichtigen, IBT darf ihnen egal sein.
 
OP
W

wbwb

Hacker
In der Informatik ist wenig kompliziert.

IBT: ... Deshalb ist mir auch nicht klar, wie sich das auf VirtualBox auswirken sollte.

Na ja, wie sich "ibt=off/on" auf VirtualBox auf meinem Rechner auswirkt habe ich ja eben genau hier und im VirtualBox-Forum beschrieben.
Dann also wohl eher doch:

... aber wie immer ist wahrscheinlich alles komplizierter ...

Danke trotzdem für den sicher sehr ernstgemeinten Spruch.
Wenn ich mal wieder in einer 737Max sitze oder unser RZ seit Stunden die Server nicht zum Laufen bringt, baut mich das auf.
 
OP
W

wbwb

Hacker
Ob IBT ein/aus ist, spielt also für die Abarbeitung des Programmcodes keine Rolle.
Deshalb ist mir auch nicht klar, wie sich das auf VirtualBox auswirken sollte.
Ein wenig Suche fördert übrigens leicht etwas Hintergrund zu diesen Aussagen zu Tage: Vboxdrv module triggers IBT protection. VM's fail to start inkl. der div. dort weiterführenden Links auf Kernel Bug-Listen. Wenn das alles so wenig kompliziert wäre, dann hätten die Devs das sicher schon alles gefixt.

Aber das war ja nicht meine ursprüngliche Frage, nämlich, ob ich "ibt=off" setzen darf. Worauf ich ja auch eine Antwort bekommen habe. Deshalb schalte ich auf "gelöst".
 
Ein wenig Suche fördert übrigens leicht etwas Hintergrund zu diesen Aussagen zu Tage: Vboxdrv module triggers IBT protection. VM's fail to start inkl. der div. dort weiterführenden Links auf Kernel Bug-Listen. Wenn das alles so wenig kompliziert wäre, dann hätten die Devs das sicher schon alles gefixt.
Du denkst in eine falsche Richtung. Die Entwickler der Software haben mit diesem Problem nichts zu tun.
Was also sollten die "fixen"? Ohne Vboxdrv module triggers IBT protection gelesen zu haben, bin ich mir sicher,
dass im code die neuen Instruktionen ENDBR32 oder ENDBR64 fehlen. Wenn die state machine bei IBT=on
diese Instruktionen nicht finden kann, dann sendet der Prozessor ein "control protection fault" an den kernel und dieser
unterbricht mit einem "trap" den Ablauf der Applikation. Wie das funktioniert, kann man bei Intel nachlesen:
https://cdrdv2.intel.com/v1/dl/getContent/631121 - die haben das "Indirect Branch Tracking" erfunden.
Nun stellt sich natürlich die Frage, wer fügt eigentlich die neuen Instruktionen ENDBR32 bzw. ENDBR64 ein, die bei jedem
indirekten branch vorhanden sein müssen?
Dafür verantwortlich sind nicht die Softwareentwickler, sondern der Compiler.
Eine Ausnahme wäre nur, wenn die Entwickler Bereiche in Assembler programmiert hätten, was sehr unwahrscheinlich ist.
Ich gehe deshalb davon aus, dass irgendein module in VirtualBox nicht mit dem neuesten Compiler kompiliert wurde
oder ein compiler_switch falsch gesetzt worden ist. Das ist kein BUG, sondern fällt eher unter Schlampigkeit.
Daran ist nichts kompliziert.
 
Zuletzt bearbeitet:
Oben