Qual é o uso de “argumentos mágicos” na chamada do sistema de reinicialização do Linux?

10

Como eu estava lendo o código-fonte do Linux, e mais especificamente o código de chamadas do sistema, me deparei com sys_reboot implementation: link .

199 SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
200                 void __user *, arg)
201 {
202        ...
...    
286 }

No meio, há este pedaço de código específico:

209 
210         /* For safety, we require "magic" arguments. */
211         if (magic1 != LINUX_REBOOT_MAGIC1 ||
212                         (magic2 != LINUX_REBOOT_MAGIC2 &&
213                         magic2 != LINUX_REBOOT_MAGIC2A &&
214                         magic2 != LINUX_REBOOT_MAGIC2B &&
215                         magic2 != LINUX_REBOOT_MAGIC2C))
216                 return -EINVAL;

Eu me pergunto que tipo de "segurança" ela realmente oferece. Quero dizer, é para evitar o uso indevido? Nesse caso, como os parâmetros são públicos, qualquer biblioteca ou aplicativo pode usar de forma incorreta a chamada do sistema, mesmo que seja necessário passar os parâmetros. O que eu senti falta?

    
por lgeorget 19.07.2014 / 22:29

1 resposta

10

Esta pergunta foi respondida nesta pergunta de superusuário:

Basicamente, um pequeno flip em um endereço pode fazer com que um programa pense que está chamando uma chamada de sistema quando, na verdade, está chamando a chamada de sistema reboot() . Porque reboot() é uma operação muito destrutiva, sem sincronização, que apaga o estado do sistema - apagando assim a evidência do problema do bit-flip que seria exposto como um erro de programa ou pânico - o Linux inclui proteções extras ao redor seu uso bem sucedido.

Curiosamente, o segundo conjunto de números mágicos corresponde aos aniversários de Linus e suas três filhas:

por 20.07.2014 / 01:17