Sebuah proses terisolasi dapat mencapai syscall yang akan ditolak kernel berdasarkan kredensialnya saat ini, sementara supervisor terpisah memiliki privilege yang cukup untuk menjalankan operasi ekuivalen secara aman atas nama proses tersebut. Notifikasi pengguna seccomp Linux membentuk kanal mediasi untuk susunan ini: filter dapat menghentikan thread pemanggil, mengirim notifikasi ke listener, lalu menunggu respons dari userspace.

Mekanisme ini lebih spesifik daripada memperlakukan supervisor sebagai proxy syscall umum. Notifikasi membawa data syscall pada tingkat register dan identifier yang terikat pada permintaan yang masih tertunda. Supervisor dapat membentuk nilai balik, menyuntikkan file descriptor, atau pada kondisi tertentu meminta kernel melanjutkan syscall asli. Setiap pilihan menempatkan batas kepercayaan pada lokasi yang berbeda.

USER_NOTIF menahan eksekusi tanpa memberikan otoritas

Filter seccomp yang mengembalikan SECCOMP_RET_USER_NOTIF tidak menjalankan syscall yang dicegat. Dengan listener yang dibuat melalui SECCOMP_FILTER_FLAG_NEW_LISTENER, kernel mengantrekan permintaan pada notification file descriptor dan memblokir thread pemicu selama permintaan itu masih tertunda.

Listener menerima struct seccomp_notif yang berisi id, identifier task sebagaimana terlihat dari PID namespace milik listener, dan struct seccomp_data. Struktur terakhir memuat nomor syscall, arsitektur, instruction pointer, serta nilai mentah argumen.

Nilai tersebut bukan snapshot memori yang dirujuk argumen pointer. Argumen pathname, misalnya, muncul sebagai alamat. Jika supervisor membaca byte dari address space target, byte itu tetap berasal dari memori yang dikendalikan target kecuali desain menetapkan invariant lain.

Perbedaan ini menentukan batas utama: seccomp menangkap argumen register saat intersepsi, tetapi tidak membekukan memori userspace arbitrer yang dapat dijangkau dari register tersebut.

ID notifikasi mengikat respons ke permintaan tertunda

Field id bukan sekadar nomor korelasi aplikasi. Kernel mengaitkannya dengan notifikasi yang masih tertunda. Supervisor dapat memakai SECCOMP_IOCTL_NOTIF_ID_VALID untuk memeriksa apakah permintaan masih valid sebelum melakukan pekerjaan yang hasilnya harus dilekatkan pada permintaan tersebut.

Target dapat berakhir atau syscall yang terblokir dapat terinterupsi sebelum supervisor membalas. Kode yang hanya memakai PID sebagai identitas permintaan yang tahan lama juga dapat berbenturan dengan perubahan siklus hidup proses. ID notifikasi memberi protokol identitas per permintaan yang terpisah dari penggunaan ulang PID numerik.

Pemeriksaan validitas yang berhasil tidak membekukan memori target atau menjamin permintaan akan terus tertunda tanpa batas. Pemeriksaan itu mempersempit satu race: apakah notifikasi masih menunjuk syscall tertunda yang aktif pada saat pemeriksaan.

Emulasi mencegah syscall asli dijalankan

Supervisor dapat menjawab melalui SECCOMP_IOCTL_NOTIF_SEND dan memberikan hasil atau error. Dalam mode ini, syscall asli tidak dijalankan oleh target. Kernel mengembalikan hasil yang disediakan supervisor kepada thread yang terblokir.

Pola ini berguna saat sisi berprivilege dapat menjalankan operasi atas nama target di bawah kebijakan yang dibatasi secara sengaja. Kredensial, namespace, descriptor terbuka, dan tampilan filesystem milik supervisor dapat berbeda dari target, sehingga ekuivalensi tidak terjadi secara otomatis. Kode emulasi harus menetapkan konteks mana yang memasok setiap properti yang relevan bagi keamanan.

Untuk operasi yang menghasilkan file descriptor, hanya mengembalikan integer tidak memadai karena nomor descriptor bersifat lokal pada descriptor table. SECCOMP_IOCTL_NOTIF_ADDFD memungkinkan supervisor memasang descriptor ke target dan mengaitkan transfer itu dengan ID notifikasi yang tertunda. O_CLOEXEC dapat diminta untuk descriptor yang dipasang, dan API juga mendukung pemilihan nomor descriptor melalui flag yang ditentukan.

Properti keamanannya adalah transfer objek, bukan peniruan angka. Target menerima referensi ke objek kernel yang dipilih supervisor.

CONTINUE memindahkan enforcement kembali ke jalur syscall asli

SECCOMP_USER_NOTIF_FLAG_CONTINUE mengubah model. Alih-alih membentuk hasil syscall, supervisor meminta kernel melanjutkan syscall asli milik target. Pemeriksaan kernel normal kemudian berlaku pada eksekusi tersebut.

Opsi ini membawa bahaya time-of-check/time-of-use yang terdokumentasi. Jika supervisor memeriksa memori target yang dirujuk argumen pointer sebelum mengirim CONTINUE, thread lain pada target dapat mengubah memori itu sebelum syscall yang dilanjutkan melakukan dereference. Keputusan kebijakan berdasarkan byte sebelumnya dapat berbeda dari byte yang akhirnya dikonsumsi kernel.

Karena itu, notifikasi pengguna dengan CONTINUE bukan lokasi yang tepat untuk menerapkan keputusan keamanan atas data pointer yang mutable. Mekanisme ini ditujukan untuk skenario delegasi ketika supervisor dengan privilege lebih tinggi membantu target dengan privilege lebih rendah dan lapisan enforcement lain tetap membatasi syscall yang dilanjutkan.

Menyalin memori target ke penyimpanan milik supervisor dapat menstabilkan data yang dipakai untuk keputusan emulasi. Tindakan itu tidak membuat pointer asli target merujuk ke salinan tersebut saat CONTINUE melanjutkan syscall.

Presedensi filter menjadi bagian dari batas mediasi

Filter seccomp dapat ditumpuk, dan presedensi action memengaruhi perilaku yang akhirnya mencapai target. Desain yang bergantung pada notifikasi pengguna harus memperhitungkan filter lain, bukan mengasumsikan setiap syscall yang cocok selalu mencapai listener.

Listener itu sendiri juga merupakan capability. Kepemilikan notification file descriptor memungkinkan penerimaan permintaan tertunda dan pengiriman respons yang diterima untuk filter tersebut. Siklus hidup, pewarisan, dan transfer descriptor itu merupakan bagian dari arsitektur keamanan, bukan sekadar detail event loop.

Jika tidak ada listener yang terpasang untuk hasil SECCOMP_RET_USER_NOTIF, kernel tidak dapat mendelegasikan permintaan sesuai rancangan. Kode deployment harus memperlakukan pembuatan dan kepemilikan listener sebagai bagian dari pembentukan batas isolasi.

Delegasi lebih sempit daripada reference monitor di userspace

Notifikasi pengguna seccomp menyediakan lintasan terkendali antara syscall yang terblokir dan supervisor. Mekanisme ini dapat mendukung emulasi berprivilege, injeksi descriptor per permintaan, serta continuation selektif sambil mempertahankan isolasi target melalui mekanisme kernel lain.

Batasannya juga bersifat struktural. Argumen register tidak membekukan memori yang ditunjuk, validitas permintaan bukan lock atas state target, dan CONTINUE masuk kembali ke syscall asli dengan argumen userspace yang mutable. Supervisor juga dapat beroperasi dalam konteks namespace dan kredensial yang berbeda dari target.

Arsitektur yang kuat menjaga fakta tersebut tetap eksplisit: gunakan ID notifikasi untuk mengikat pekerjaan ke permintaan tertunda, salin data mutable sebelum membuat keputusan emulasi, transfer objek kernel melalui interface descriptor khusus, dan batasi continuation pada kondisi ketika enforcement kernel berikutnya masih memadai. Batas yang dihasilkan adalah delegasi dengan asumsi yang dinyatakan, bukan mesin kebijakan keamanan umum di userspace.