Linux kaynak kodunu ve daha özel olarak sistem kodunu okurken, sys_reboot
uygulama ile karşılaştım: 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 }
Ortada, bu özel kod parçası vardır:
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;
Gerçekten ne tür bir "güvenlik" sağladığını merak ediyorum. Yani, yanlış kullanımı önlemek mi? Bu durumda, parametreler herkese açık olduğundan, herhangi bir kütüphane veya uygulama, parametreleri iletmeleri gerekse bile sistem çağrısını kötüye kullanabilir. Ne kaçırdım?
getpid
Elbette ve benzerleri dışında , yanlış kullanıldıklarında hepsinin öngörülemeyen sonuçları olabilir. Ya da belki diğer tüm sistem çağrıları, yanlış çağrıldıklarında zararsız hale getirmek için kontrol edilecek yeterli parametreye sahiptir. Bana garip bir "güvenlik" fikri gibi geliyor ...