Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - tpo

Seiten: [1]
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
2
Das Wiki / Priviledge Level bei CPU Anweisesungen angeben
« am: 29. August 2011, 09:46 »
Hallo Lowleveler/Wikianer,

war http://www.lowlevel.eu/wiki/LDT am lesen. Da steht, dass man den Befehl "lldt" ausführen kann um eine LDT zu laden. Nur steht da nicht, wann man den Befehl benutzen darf. Wäre es nicht empfehlenswert allgemein bei solchen und ähnlichen Artikeln jeweils anzugeben, dass die Befehle nur im Ring 0 ausgeführt werden können?

Der Kontext aus dem ich das schreibe sind meine Recherchen zu Speicherschutz für Threads - LDTs würden sich als geeigneter Mechanismus anbieten ... wenn sie denn aus dem Userspace heraus manipulierbar wären. Sind sie aber nicht...

Die Tatsache, dass Artikel - nicht nur auf Lowlevel - zu lowlevel Themen oft "vergessen" anzugeben, ob die jeweils diskutierte Aktion nur im Ring 0 ausgeführt werden kann oder nicht, scheint verbreitet. Diese Art von Auslassung scheint mir zu vernachlässigen, dass sich das Betriebssystem ja z.T. auch im Ring 3 "abspielt". Viel "OS" Funktionalität läuft heute ja im Userspace z.B. in Bibliotheken und System Diensten/Daemons ab. Und eben dort ist es auch interessant auf "Low Level" Funktionalität zugreifen zu können.

Mein Vorschlag wäre also, wenn es nicht total offensichtlich ist, bei Artikeln anzugeben, ob die Funktionalität exklusiv nur für Ring 0 ist.
*t
Seiten: [1]

Einloggen