• [HustOJ] Forbidden system call:275 [4294967059] 오류 해결하기
    유틸리티/HustOJ 2022. 8. 25. 10:44
    728x90

    가끔 HustOJ로 구축된 사이트를 운영하다보면 '실행중 에러 AC:0%'라고 표시되며 아래와 같은 오류를 출력하는 경우가 있다.

     

    /1706/0601.in:[ERROR] solution_id:14111 called a Forbidden system call:275 [4294967059]
     TO FIX THIS , ask admin to add the CALLID into corresponding LANG_XXV[] located at okcalls32/64.h ,
    and recompile judge_client. 
    if you are admin and you don't know what to do ,
    中文解释查看知乎 https://zhuanlan.zhihu.com/p/24498599

     

    이를 해석하면, 고치기 위해서는 관리자에게 연락하여 core/judge_client 경로에 존재하는 okcalls32/64.h에 LANG_XXV[] 부분에 275를 추가하고 재 컴파일 후 judge_client를 재시작하라고 한다.

     

    하지만 이는 오래된 해결법으로 해결 방법은 다음과 같다.

     

    1. 사용자가 제출한 언어와 system call 번호를 파악한다.

        ※위의 상황은 파이썬에서 특정 소스코드를 제출했을 때 발생한 문제이다.

     

    2. HustOJ가 설치된 경로에서 ./core/judge_client 경로로 이동한다.

    cd ../../
    cd /home/judge/src/core/judge_client

     

    3. okcalls32.h를 열어 수정한다. (맨 뒤에 오류를 일으켰던 275를 추가했다.)

    //python
    
    int LANG_YV[CALL_ARRAY_SIZE]={3,4,5,6,11,20,22,33,41,45,54,85,91,116,122,125,140,174,175,183,
    		191,192,195,196,197,199,200,201,202,220,221,243,252,258,265,295,
    		311,13,41,91,102,186,221,240,295,355,0,275};

     

    4. okcalls64.h를 열어 수정한다. (맨 뒤에 오류를 일으켰던 275를 추가했다.)

    //python
    
    int LANG_YV[CALL_ARRAY_SIZE] = {
            0,1,2,3,4,5,6,8,9,10,11,12,13,14,16,17,21,32,39,41,42,49,59,72,78,79,89,97,99,102,104,106,107,108,131,137,158,186,202,217,218,228,231,257,262,273,302,318,334,
            SYS_write, SYS_mprotect, SYS_getuid, SYS_getgid, SYS_geteuid, SYS_getegid, SYS_munmap, SYS_brk,
            SYS_rt_sigaction, SYS_sigaltstack, SYS_rt_sigprocmask, SYS_sched_get_priority_max, SYS_arch_prctl, SYS_ioctl,
            SYS_pread64, SYS_getxattr, SYS_open, SYS_futex, SYS_access, SYS_getdents64, SYS_set_tid_address, SYS_clock_gettime,
            SYS_exit_group, SYS_mremap, SYS_openat, SYS_unshare, SYS_set_robust_list, SYS_close, SYS_prlimit64,
            SYS_dup, SYS_getpid, SYS_stat, SYS_socket, SYS_connect, SYS_fstat, SYS_execve, SYS_lstat,
            SYS_exit, SYS_fcntl, SYS_getdents, SYS_getcwd, SYS_lseek, SYS_readlink, SYS_mmap, SYS_getrlimit,
            SYS_sysinfo, 0, 275 };

     

    5. 수정이 끝났으면 hustoj 서비스를 중지한다.

    service hustoj stop

     

    6. 이제 hustoj judge_client를 재 컴파일한다.

    cd ../
    bash make.sh

     

    7. 재 컴파일했으므로 hustoj 서비스를 재시작한다.

    service hustoj start

     

    8. 이후 재제출하면 제대로 컴파일되어 채점이 된다.


     

    728x90

    댓글

Copyright ⓒ syudal.tistory.com