3

seccomp フィルターについて学び始めたばかりで、libseccomp v2.4.4 を使用しています。という名前のファイルへの書き込みのみを許可する基本的なホワイトリスト フィルタを作成しようとしましたfile1が、「システム コールが正しくありません」というメッセージがSTDOUT. これが私のコードです:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <seccomp.h>
#include <stdlib.h>
#include <errno.h>

int main(void)
{
        FILE *fil = fopen("file1", "w");
        scmp_filter_ctx filter = seccomp_init(SCMP_ACT_KILL);

        if (filter==NULL || NULL==fil)
                goto End1;

        int chk1 = seccomp_rule_add(filter, SCMP_ACT_ALLOW, SCMP_SYS(write), 1,
                                    SCMP_A0(SCMP_CMP_EQ, fileno(fil)));
        int chk2 = seccomp_load(filter);
        if (chk1<0 || chk2<0)
                goto End;

        fprintf(stdout,"Filter did not work correctly\n");
        fprintf(fil,"Filter worked correctly\n");

End:
        seccomp_release(filter); //releasing filter before closing file
        fclose(fil);

End1:
        return 0;
}

さらに、出力が表示されませんfile1。私は初心者であり、参照からではなく、私の理解からコードを書いているため、ここで多くのことについて確信が持てません。問題は何ですか?


編集:フィルターを完全に削除し、単純に実行しました

int main(void)
{
        FILE *fil = fopen("file1", "w");

        fprintf(stdout,"Filter did not work correctly\n");
        fprintf(fil,"Filter worked correctly\n");

End:
        fclose(fil);

End1:
        return 0;
}

これをたどると、 @pchaignofstatcloseよる以下の回答で言及されているように、さらに syscallsが呼び出されていることがわかりました。したがって、期待される動作のためにこれらのシステムコールを許可する必要があります。mmapmunmap

4

1 に答える 1