Risposte:
No, per la semplice ragione che esiste un valore numerico massimo che il PID può avere. Se un processo ha il PID più alto, nessun figlio forchettato può avere un PID maggiore. L'alternativa a dare al bambino un PID inferiore sarebbe quella di fallire del fork()
tutto, il che non sarebbe molto produttivo.
I PID sono assegnati in ordine e, dopo aver utilizzato quello più alto, il sistema si avvolge per riutilizzare quelli (gratuiti) inferiori, in modo da poter ottenere PID più bassi per un bambino anche in altri casi.
Il PID massimo predefinito sul mio sistema ( /proc/sys/kernel/pid_max
) è solo 32768, quindi non è difficile raggiungere la condizione in cui si verifica il wraparound.
$ echo $$
27468
$ bash -c 'echo $$'
1296
$ bash -c 'echo $$'
1297
Se il tuo sistema dovesse allocare PID casualmente ( come sembra fare OpenBSD ) invece che consecutivamente (come Linux), ci sarebbero due opzioni. O la scelta casuale è stata fatta sull'intero spazio dei possibili PID, nel qual caso sarebbe ovvio che il PID di un bambino può essere inferiore a quello del genitore. In alternativa, il PID del bambino verrebbe scelto in modo casuale tra i valori maggiori del PID del genitore, che in media lo metterebbe a metà tra il PID del genitore e il massimo. I processi di biforcazione ricorsivamente raggiungerebbero quindi rapidamente il massimo e saremmo allo stesso punto di cui sopra: un nuovo fork avrebbe bisogno di utilizzare un PID inferiore per avere successo.
Esiste anche il potenziale per le vulnerabilità della sicurezza che utilizzano le notifiche del kernel e si biforcano per evitare il rilevamento tramite una scansione della tabella dei processi; questo, se fatto correttamente, il tuo processo avrà un PID inferiore e gli strumenti di processo non vedono il processo in questione.
http://cve.circl.lu/cve/CVE-2018-1121
procps-ng, procps è vulnerabile a un processo nascosto attraverso le condizioni della razza. Poiché proc_pid_readdir () del kernel restituisce le voci PID in ordine numerico crescente, un processo che occupa un PID alto può utilizzare eventi inotify per determinare quando viene analizzato l'elenco dei processi e fork / exec per ottenere un PID inferiore, evitando così l'enumerazione. Un utente malintenzionato senza privilegi può nascondere un processo dalle utilità di procps-ng sfruttando una condizione di competizione nella lettura delle voci / proc / PID. Questa vulnerabilità interessa procps e procps-ng fino alla versione 3.3.15, anche le versioni più recenti potrebbero essere interessate.