Mentre stavo leggendo il codice sorgente di Linux, e più precisamente il codice delle chiamate di sistema, mi sono imbattuto sys_reboot
nell'implementazione: http://lxr.free-electrons.com/source/kernel/reboot.c#L199 .
199 SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
200 void __user *, arg)
201 {
202 ...
...
286 }
Nel mezzo, c'è questo specifico pezzo di codice:
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;
Mi chiedo che tipo di "sicurezza" in realtà fornisce. Voglio dire, è per prevenire l'abuso? In questo caso, poiché i parametri sono pubblici, qualsiasi libreria o applicazione potrebbe utilizzare in modo improprio la chiamata di sistema anche se sono tenuti a passare i parametri. Cosa mi sono perso?
getpid
e simili ovviamente, possono avere conseguenze imprevedibili se utilizzate in modo improprio. O forse, tutti gli altri syscall hanno già abbastanza parametri per essere controllati per renderli innocui se vengono erroneamente chiamati. Mi sembra una strana idea di "sicurezza" per me ...