Linux 재시작 시스템 호출에서 "매직 매개변수"의 용도는 무엇입니까?

Linux 재시작 시스템 호출에서 "매직 매개변수"의 용도는 무엇입니까?

Linux 소스 코드, 특히 시스템 호출 코드를 읽을 때 sys_reboot구현 내용을 발견했습니다.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 }

중간에 특정 코드 조각이 있습니다.

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;

실제로 어떤 종류의 "보안"을 제공하는지 궁금합니다. 내 말은, 이것이 학대를 방지하기 위한 것입니까? 이 경우 매개변수가 공개되어 있으므로 모든 라이브러리나 애플리케이션이 매개변수를 전달해야 하는 경우에도 시스템 호출을 남용할 수 있습니다. 내가 놓친 게 무엇입니까?

답변1

이 질문은 이 슈퍼유저 질문에서 답변되었습니다.

기본적으로 주소를 약간 바꾸면 프로그램이 실제로 호출할 때 시스템 호출을 호출한다고 생각할 수 있습니다 reboot(). 이는 매우 파괴적인 비동기 작업 이므로 reboot()시스템 상태를 삭제하여 프로그램 버그나 패닉으로 노출될 수 있는 비트플립 문제의 증거를 삭제합니다. Linux에서는 이를 성공적으로 추가 보호 기능을 제공합니다.

흥미롭게도 두 번째 마법 숫자 세트는 Linus와 그의 세 딸의 생일에 해당합니다.

관련 정보