Sagen wir ab Kernel 2.6.
Ich beobachte alle laufenden Prozesse auf dem System.
Sind die PID der Kinder immer höher als die PID ihrer Eltern?
Ist es möglich, spezielle Fälle von "Inversion" zu haben?
quelle
Sagen wir ab Kernel 2.6.
Ich beobachte alle laufenden Prozesse auf dem System.
Sind die PID der Kinder immer höher als die PID ihrer Eltern?
Ist es möglich, spezielle Fälle von "Inversion" zu haben?
Nein, aus dem einfachen Grund, dass es einen maximalen numerischen Wert gibt, den die PID haben kann. Wenn ein Prozess die höchste PID hat, kann kein untergeordnetes Element, das er gabelt, eine höhere PID haben. Die Alternative, dem Kind eine niedrigere PID zu geben, wäre das Versagen fork()
insgesamt, was nicht sehr produktiv wäre.
Die PIDs werden der Reihe nach zugewiesen, und nachdem die höchste verwendet wurde, verwendet das System die (freien) niedrigeren PIDs erneut, sodass Sie auch in anderen Fällen niedrigere PIDs für ein Kind erhalten können.
Die voreingestellte maximale PID meines Systems ( /proc/sys/kernel/pid_max
) beträgt nur 32768, daher ist es nicht schwer, den Zustand zu erreichen, in dem der Umbruch stattfindet.
$ echo $$
27468
$ bash -c 'echo $$'
1296
$ bash -c 'echo $$'
1297
Wenn Ihr System PIDs nach dem Zufallsprinzip ( wie es OpenBSD zu tun scheint ) anstatt nacheinander (wie bei Linux) zuweist , gibt es zwei Möglichkeiten. Entweder wurde die zufällige Auswahl über den gesamten Bereich möglicher PIDs getroffen. In diesem Fall ist es offensichtlich, dass die PID eines Kindes niedriger sein kann als die der Eltern. Oder die PID des Kindes wird zufällig aus den Werten ausgewählt, die größer sind als die PID des Elternteils, wodurch sie im Durchschnitt auf halbem Wege zwischen der PID des Elternteils und dem Maximum liegt. Das rekursive Verzweigen von Prozessen würde dann schnell das Maximum erreichen und wir wären am selben Punkt wie oben erwähnt: Eine neue Gabel müsste eine niedrigere PID verwenden, um erfolgreich zu sein.
Es besteht auch das Potenzial für Sicherheitslücken bei der Verwendung von Kernel-Benachrichtigungen und dem Verzicht auf die Erkennung durch einen Prozess-Table-Scan. Wenn dies richtig gemacht wird, hat Ihr Prozess eine niedrigere PID und die Prozesstools sehen den fraglichen Prozess nicht.
http://cve.circl.lu/cve/CVE-2018-1121
quelle