Khi tôi đang đọc mã nguồn Linux, và cụ thể hơn là mã gọi hệ thống, tôi đã bắt gặp sys_reboot
triển khai: 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 }
Ở giữa, có đoạn mã cụ thể này:
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;
Tôi tự hỏi loại "an toàn" mà nó thực sự cung cấp. Ý tôi là, nó là để ngăn chặn việc sử dụng sai? Trong trường hợp này, vì các tham số là công khai, bất kỳ thư viện hoặc ứng dụng nào cũng có thể sử dụng sai cuộc gọi hệ thống mặc dù chúng được yêu cầu chuyển các tham số. Tôi đã bỏ lỡ cái gì?
getpid
và tương tự tất nhiên, tất cả chúng đều có thể có những hậu quả khó lường nếu sử dụng sai. Hoặc có thể, tất cả các tòa nhà cao tầng khác đã có đủ thông số cần kiểm tra để làm cho chúng vô hại nếu chúng được gọi sai. Nó cảm thấy giống như một ý tưởng kỳ lạ về "sự an toàn" đối với tôi, mặc dù ...