Quais são as desvantagens de dividir /proc/pid/stat
no Linux por espaço em branco? Por exemplo, usando bash
um pode acessar a terceira coluna via
$ cat /proc/$$/stat
14198 (bash) S 14195 14198 14198 34816 ...
$ x=($(< /proc/$$/stat)); echo ${x[2]}
S
$
e tudo parece bem?
O principal problema é que o caractere de espaço (
0x20
) é usado tanto para o delimitador entre registros quanto também pode aparecer dentro de um registro; um usuário local deve ser capaz de definir o nome do processoentão a divisão de análise por espaço em branco falhará
pois o nome do comando contém um espaço.
Quão ruim isso poderia ser? De acordo com
proc(5)
o "terminal de controle do processo" é interessanteportanto, se um processo usar indevidamente as informações do terminal de controle analisadas incorretamente
/proc/pid/stat
porque alguém alterou essas informações, bem, você pode obter uma vulnerabilidade de segurança .A análise é adicionalmente complicada pelo fato de que um
)
pode ser colocado no nome do processo embora haja um limite de 15 caracteresIdéias para analisar esta verruga de uma interface
Como o nome do processo pode variar em algum lugar entre a string vazia e 15 bytes de quase qualquer conteúdo
uma ideia seria dividir no primeiro espaço para obter o pid e, em seguida, trabalhar de trás para frente a partir do final dessa string para encontrar o primeiro
)
; o material antes do primeiro)
da direita deve ser o nome do processo e à esquerda os campos regulares. Testes de unidade para o código seriam altamente aconselháveis...Se você precisa pensar sobre isso, por que não apenas ler
/proc/$pid/status
? Ele fornece as mesmas informações em linhas bem rotuladas e escapa de novas linhas e barras invertidas que aparecem no nome do processo: