내 프로그램은 사용자가 지정한 디렉토리에 기록 된 바이너리에서 exec()를 호출합니다. 디렉토리가 "noexec"로 마운트 된 트리에 있으면 EACCES로 exec()가 실패합니다.파일에 exec()를 호출하기 전에 마운트 지점에 noexec가 설정되어 있는지 검색 하시겠습니까?
exec()가 실패하는 대신에 noexec으로 디렉토리가 마운트되었지만 fcntl(), stat() 또는 mount() 중 아무 것도이 정보를 읽지 못하는 것을 알아낼 수 있기를 원합니다. 맨 페이지). exec 시스템 호출을위한 커널 소스를 보면,이 정보가 inode의 메타 데이터에 저장되어있는 것처럼 보입니다. 그리고이 정보가 시스템 호출로부터 반환되는 것을 볼 수 없습니다.
673 struct nameidata nd;
(..)
677 err = path_lookup_open(AT_FDCWD, name, LOOKUP_FOLLOW, &nd, FMODE_READ|FMODE_EXEC);
678 file = ERR_PTR(err);
(..)
682 file = ERR_PTR(-EACCES);
683 if (!(nd.mnt->mnt_flags & MNT_NOEXEC) &&
684 S_ISREG(inode->i_mode)) {
누구든지이 작업을 수행 할 수있는 방법을 알고 있습니까?
감사합니다.
검사 뭐가 잘못() exec가 EACCES에 실패하면? –
실제로, 작업을 수행하기 전에 작업이 실패하는지 확인하려고 시도하는 대신 오류를 확인하는 대신 ** 거의 항상 버그 **입니다. –
@JesusRamos : 아무 문제가 없으므로 오류를 일찍 신고하고 싶습니다. – Mayank