1
Das Wiki / Re:Priviledge Level bei CPU Anweisesungen angeben
« am: 30. August 2011, 15:51 »Wenn es in Ring 3 ginge, könntest du den ganzen Speicherschutz vergessen, weil der Userspace sich selber definieren dürfte, was er benutzen darf und was nicht...
Da der LLDT nur einen Selector für die GDT lädt und nicht selber eine beliebige (selbst erstellte) LDT laden kann ist das eventuell nicht ganz so drastisch, trotzdem besteht natürlich das Risiko das ein Prozess so die LDT eines anderen Prozesses laden könnte und damit wäre der Speicherschutz (zwischen den Prozessen) auf jeden Fall komplett ausgehebelt.
Wahrscheinlich schon. Wobei, es hat da noch die "priviledge bits" welche man vielleicht irgendwie nutzen könnte und es hat auch 4 Ringe, von denen nur zwei gebraucht sind, es ist also konzeptuel vorstellbar Userspace, sagen wir Mal, im Ring 1 laufen zu lassen und dann noch 2 weitere Ringe im Userspace zur Verfügung zu haben.
Der Kontext aus dem ich das schreibe sind meine Recherchen zu Speicherschutz für Threads - LDTs würden sich als geeigneter Mechanismus anbieten
Du möchtest die erreichbaren Adressräume von Threads aus einem Prozess individuell einschränken können? Dass das dem üblichen Programmiermodel für Threads widerspricht ist Dir bewusst?
Jein. Das Thread-Programmiermodel hat enthält diverse Elemente, einige davon möchte ich beibehalten:
- das API
- kein zwingendes Kontextswitching
- keine eigene PID
- miteinander geteilte Kernelseitige Ressourcen (Filedeskriptoren, Semaphoren, Shared Memory, Permissions etc.)
andere sind stärker problembehaftet, wie eben:
- kein Speicherschutz
letzteres führt zu diversen Problemen:
- Programmierfehler sind schwerwiegender, da sie nicht nur auf den fehlerhaften Thread beschränkt sind, sondern potentiell auch andere "unschuldige" Threads runterreissen können
- von Sicherheitsproblemen sind alle Threads betroffen
Dass es im x86-Long-Mode (64Bit-Mode) keine LDT mehr gibt (und auf allen anderen CPUs auch nie gab) ist sicher auch bewusst, oder?
Ah nein, das wusste ich nicht.
Trotzdem würde mich dazu ein klein wenig mehr interessieren. Was genau hast Du denn vor?
Eventuell gibt es für Dein Vorhaben noch andere Wege ohne die LDT.
Siehe oben. Eventuell kann ich mit Linux' "clone" Befehl erreichen, was ich möchte, der hat sehr feingranularige Optionen. Ausserdem können viele der PThread Funktionen auch Cross-Prozess verwendet werden. Mal schauen, wie weit ich da komme.
(Danke für die Antworten btw!)
*t