Autor Thema: [solved] Deskriptor Confirm-Bit  (Gelesen 3987 mal)

ika

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« am: 06. October 2009, 16:32 »
Hallo leute,

ich bin grade dabei mir die Theorie anzueignen, und lese deswegen alles mögliche welches mit dem Thema os zutun hat (glaube manches sogar zu verstehen).
Meine Frage bezieht sich auf das Confirm-Bit welches im Code Deskriptor zu finden ist: http://www.fh-zwickau.de/doc/prmo/pmtutor/text/p_all3.htm

Laut: http://www.jay-code.de/
Zitat:
" Conforming Codesegment
Normalerweise ist es so, das ein Programm das eine Privilegstufe 3 (niedrigste) über ein sog. Call-Gate in ein Codesegment springen kann, das eigentlich nur für ein Programm der Privilegstufe 0 (höchste) gedacht ist. Sollte nun dieser Sprung erfolgen, so erhält das Programm für die Dauer, in der es sich in diesem Codesegment befindet um dort Code auszuführen, die Privilegstufe 0. In einem Conforming Codesegment ist das nicht so. Es ist zwar auch hier möglich durch ein Call-Gate in dieses Codesegment zu springen, jedoch wird das Program weiterhin mit der Privilegstufe 3 ausgeführt. Wozu das im einzelnen dienlich sein kann, kann ich im Moment noch nicht sagen ,weshalb ich dazu rate sich erst einmal mit den normalen Codesegmenten zu begnügen. " Zitat Ende.
Somit weiss ich ja schon mal wofür es da ist.

1. Weis jemand vielleicht wozu das dienlich sein kann bzw. wo man das nachlesen könnte?

2. Wenn das Programm zu einem Codesegment springt welches die Privilegstufe 0 hat, wer/was ist dann dafür zuständig dass das Programm vorübergehend eine andere Privilegstufe bekommt: Prozessor oder explizit der Kernel?

mfg ika
« Letzte Änderung: 06. October 2009, 21:20 von ika »

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #1 am: 06. October 2009, 17:37 »
2. Normalerweise liest die CPU die Privilegstufe des aktuell ausgeführten Codes aus dem aktuellen Codesegment aus. Es ist also der Prozessor. Wobei der Kernel dafür sorgen muss, welcher Code in welchem Codesegment und damit mit welchen Privilegstufen ausgeführt wird.

ika

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 06. October 2009, 18:06 »
Das bedeutet also es im groben so läuft:
1. Ein Programm der Stufe 3 will ein Code aus dem Kernel ausführen der ist natürlich Sicherheitsstufe 0 deswegen springt das Prog durch ein Call Gate (klingt wie die Zahnpasta^^) zu diesem Code
2. Der Prozessor prüft das Confirm-Bit, wenn es auf:
  * 1 ist ("Confirming"-Codesegment) -> Prog bleibt auf der Stufe 3
  * 0 ist (=Codesegment), dann erhält das Programm vorrübergehend die Stufe 0.
Ändert der Prozessor die Sicherheitsstufe des Programms in diesem Moment, oder der Kernel?

[edit]
wahrscheinlich ist diese frage trivial, und wird noch erklärt wenn ich das Thema Deskriptoren zuende gelesen habe. Wenn ja, werde ich den Vorgang des Sprungs durch son Gate hier nochmal wiedergeben (ich vermute da die antwort auf meine frage).
Was aber noch bleibt ist die Frage 1 (-> siehe ganz oben), die aber keine einfache zu sein scheint.
PS: ups, habe auf benachrichtigen geklickt, sry =D
[/edit]
« Letzte Änderung: 06. October 2009, 18:15 von ika »

SHyx0rmZ

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 06. October 2009, 19:10 »
Also, nach meinem Wissensstand ist das Comforming Bit für folgendes geschaffen:

Wenn in ein Noncomforming Codesegment gewechselt wird und zwar OHNE Call Gate, dann geht das NUR gut, wenn CPL == DPL.

Wenn in ein Codesegment gewechselt wird MIT Call Gate (egal ob Conforming oder nicht), dann geht das ganze nur wenn CPL >= DPL (Weniger Rechte als Segment).

Der CPL wird meines Wissens nach NORMALERWEISE durch die CPU geändert, allerdings gibt es da Ausnahmen, wie das Comforming Codesegment. (Ich vermute fast, dass das auch im Long Mode eine Rolle spielt.)


Quelle:
Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3A System Programming Guide
Zitat
Current privilege level (CPL) — The CPL is the privilege level of the currently
executing program or task. It is stored in bits 0 and 1 of the CS and SS segment
registers. Normally, the CPL is equal to the privilege level of the code segment
from which instructions are being fetched. The processor changes the CPL when
program control is transferred to a code segment with a different privilege level.
The CPL is treated slightly differently when accessing conforming code segments.
Conforming code segments can be accessed from any privilege level that is equal
to or numerically greater (less privileged) than the DPL of the conforming code
segment. Also, the CPL is not changed when the processor accesses a conforming
code segment that has a different privilege level than the CPL.

Zitat
Nonconforming code segment (without using a call gate) — The DPL
indicates the privilege level that a program or task must be at to access the
segment. For example, if the DPL of a nonconforming code segment is 0, only
programs running at a CPL of 0 can access the segment.

Zitat
Conforming code segment and nonconforming code segment
accessed through a call gate — The DPL indicates the numerically lowest
privilege level that a program or task can have to be allowed to access the
segment. For example, if the DPL of a conforming code segment is 2,
programs running at a CPL of 0 or 1 cannot access the segment.
@X="krJhbuaesrytre c a cnR.ohut";while@X[/(..)(.)/];@X=@X[3..-1]+$1;print$2;end
"Scheiß auf Perl, wir haben Kekse" - Emperor Ruby

ika

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 06. October 2009, 19:56 »
danke, insbesondere für die zitate (ah einen zitat tag gibts auch^^)
Wenn in ein Codesegment gewechselt wird MIT Call Gate (egal ob Conforming oder nicht), dann geht das ganze nur wenn CPL >= DPL (Weniger Rechte als Segment).

hier heisst es also:
Zitat
Conforming code segments can be accessed from any privilege level that is equal
to or numerically greater (less privileged) than the DPL of the conforming code
segment. Also, the CPL is not changed when the processor accesses a conforming
code segment that has a different privilege level than the CPL.
"Auf ein "Conforming code segment" kann vom jeden  privileglevel zugegriffen werden, der entweder gleich oder nummerisch grösser ist (weniger privilegien hat) als der DPL [Zielsegment]."
Für mich bedeutet das also das auf Codesegment(Ring 0) von jedem anderen Ring ->ohne<- weiteres zugegriffen werden kann, dabei ist nicht notwendig das CPL zu ändern es kann 1 oder 2 oder 3 sein und es bleiben während des zugriffs.
Wenn ich etwas durcheinander gebracht habe, bitte berichtigen.

Zitat
Conforming code segment and nonconforming code segment
accessed through a call gate — The DPL indicates the numerically lowest
privilege level that a program or task can have to be allowed to access the
segment. For example, if the DPL of a conforming code segment is 2,
programs running at a CPL of 0 or 1 cannot access the segment.
<- zu meiner Schande muss ich zugeben, dass ich das nicht ganz vestehe, heisst es: "Zum Beispiel: wenn das DPL[Ziel Privileg Level] eines Codesegments 2 ist, dann können programme die auf CPL[Aktueller Privileg Level] 0 oder 1 laufen NICHT auf dieses Codesegment zugreifen"
Das find ich ja nun eine sehr interessante aussage (fall es richtig übersetzt ist) oO

[edit] mal kurz offtopic: sind schon igendjemanden hier intel manuals auf deutsch in die hände gekommen, nur melden wenn ja^^ und wenn nicht umso besser: passiv meine englisch verbessern wird sicherlich nicht schaden.
« Letzte Änderung: 06. October 2009, 20:03 von ika »

SHyx0rmZ

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 06. October 2009, 20:04 »
Richtig übersetzt ist es schon, aber ich finds auch verwirrend xD

Ich bitte die "Profis" um ein wenig mehr Erleuchtung, ich find die Taschenlampe grad nicht...
@X="krJhbuaesrytre c a cnR.ohut";while@X[/(..)(.)/];@X=@X[3..-1]+$1;print$2;end
"Scheiß auf Perl, wir haben Kekse" - Emperor Ruby

ika

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 06. October 2009, 20:14 »
hmm das ganze könnte sogar sinn machen, man setzt das confirm-bit wenn man genau diesen code allen progs sowieso zugängig machen will und die ohne weiteres darauf zugreifen können sollen (war das ein satz <.<). Und dem kernel soll es aus sicherheitsgründen nicht möglich sein, zum programm code von apps zu springen, denn so müsste entweder der kerner auf ring 3 wechseln, was schwachsinn ist oder er müsste den code mit Sicherheitsstufe 0 ausführen (und das bedeutet gefahr). Werde mir mal bei gelegenheit dieses manual laden und die erwähnten stellen gründlich durchlesen. Heute wird es erstmal wohl nix, aber ganz sicher in den nächsten tagen, falls nicht jemand da auf anhieb weiterhelfen kann

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 06. October 2009, 20:37 »
Hi,

ich denke auch, dass conforming code segments einfach Code verschiedenen Privilegsstufen zugänglich machen sollen. Es heißt übrigens nicht confirm, sondern conform, was hier wohl übersetzt sowas wie "übereinstimmen" bedeutet.

Das Intel Manual (Vol 3., 4.8.1.2 Accessing Conforming Code Segments) sagt diese Segmente werden für "Module wie z.B. Mathe-Bibliotheken und Ausnahmebehandlungen" (vermutlich so sachen wie Divide Error) verwendet. Diese Idee stammt vermutlich aus 286er Zeiten, als es noch kein Paging gab.

Intel Manuals gibts übrigens nicht auf Deutsch.
Dieser Text wird unter jedem Beitrag angezeigt.

ika

  • Beiträge: 27
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 06. October 2009, 21:05 »
das bringt schon mal mehr licht in die sache^^ finde es für meinen jetzigen stand vorerst ausreichend, danke! Mal sehen ob ich mal nen Artikel "Das Geheimnis des Conforming Codesegments" schreibe.

eine kleinigkeit noch:
Es heißt übrigens nicht confirm, sondern conform, was hier wohl übersetzt sowas wie "übereinstimmen" bedeutet.
Hmm, ich bin mir da nicht sicher aber: "confirm-bit" und "comforning code segment" aber nicht "conform-bit". confirm (Verb) ="übereinstimmen", conform (Adj.) ="übereinstimmend".
Wie gesagt, ich lasse mich gern eines besseren belehren. Habe immer "confirm-bit" geschrieben, weil ich das hier gelesen habe: http://www.fh-zwickau.de/doc/prmo/pmtutor/text/p_all3.htm (Abb. 2.5).

[edit] wie dem auch sei, ich finde meine beiden fragen sind beantwortet, an dieser stelle nochmal danke an alle :)
« Letzte Änderung: 06. October 2009, 21:21 von ika »

SHyx0rmZ

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 06. October 2009, 21:29 »
Ich kann dich da auch beruhigen, es heißt DEFINITIV "Conforming-Bit". Schließlich steht das so im Manual.
@X="krJhbuaesrytre c a cnR.ohut";while@X[/(..)(.)/];@X=@X[3..-1]+$1;print$2;end
"Scheiß auf Perl, wir haben Kekse" - Emperor Ruby

 

Einloggen