Digamos, desde el kernel 2.6 en adelante.
Miro todos los procesos en ejecución en el sistema.
¿Los PID de los niños son siempre mayores que los PID de sus padres?
¿Es posible tener casos especiales de "inversión"?
fuente
Digamos, desde el kernel 2.6 en adelante.
Miro todos los procesos en ejecución en el sistema.
¿Los PID de los niños son siempre mayores que los PID de sus padres?
¿Es posible tener casos especiales de "inversión"?
No, por la sencilla razón de que el PID puede tener un valor numérico máximo. Si un proceso tiene el PID más alto, ningún hijo que bifurca puede tener un PID mayor. La alternativa a darle al niño un PID más bajo sería fallar por fork()
completo, lo que no sería muy productivo.
Los PID se asignan en orden, y después de usar el más alto, el sistema se ajusta para reutilizar los más bajos (gratuitos), por lo que también puede obtener PID más bajos para un niño en otros casos.
El PID máximo predeterminado en mi sistema ( /proc/sys/kernel/pid_max
) es solo 32768, por lo que no es difícil alcanzar la condición en la que ocurre la envoltura.
$ echo $$
27468
$ bash -c 'echo $$'
1296
$ bash -c 'echo $$'
1297
Si su sistema asignara PID aleatoriamente ( como parece hacer OpenBSD ) en lugar de consecutivamente (como Linux), habría dos opciones. O bien, la elección aleatoria se realizó en todo el espacio de posibles PID, en cuyo caso sería obvio que el PID de un niño puede ser más bajo que el de los padres. O, el PID del niño se elegiría al azar de los valores mayores que el PID del padre, lo que en promedio lo ubicaría a la mitad del PID del padre y el máximo. Los procesos de bifurcación recursiva alcanzarían rápidamente el máximo y estaríamos en el mismo punto que se mencionó anteriormente: una nueva bifurcación necesitaría usar un PID más bajo para tener éxito.
También existe el potencial de vulnerabilidades de seguridad utilizando notificaciones del núcleo y bifurcando para evitar ser detectado por un escaneo de la tabla de procesos; esto si se hace correctamente da como resultado que su proceso tenga un PID más bajo y las herramientas de proceso no vean el proceso en cuestión.
http://cve.circl.lu/cve/CVE-2018-1121
fuente