Langsung ke konten

Arsip

System Call

56 artikel
Linux 17 Sep 2026 4 min read

rename Mengganti Directory Entry Secara Atomik di Linux

Pemanggilan rename() yang berhasil dapat mengganti pathname tujuan yang sudah ada tanpa memperlihatkan keadaan perantara ketika nama tujuan tersebut hilang. Proses yang melakukan resolusi terhadap tujuan akan melihat directory entry lama atau penggantinya, dengan tetap tunduk pada batasan filesystem dan mount. Transisi namespace atomik tersebut lebih sempit daripada sejumlah sifat yang sering diasosiasikan dengan penggantian file. Operasi ini tidak membuat write sebelumnya menjadi durable, tidak memaksa metadata direktori ke penyimpanan stabil, dan tidak membatalkan file descriptor yang sudah merujuk ke file yang diganti.

Linux 17 Sep 2026 4 min read

O_CLOEXEC Menutup Descriptor Secara Atomik Saat exec

File descriptor yang dibuat tanpa status close-on-exec dapat ikut terbawa ke program baru selama celah konkurensi yang sangat sempit. Pada proses Linux multithread, mengatur FD_CLOEXEC lewat pemanggilan fcntl() setelah descriptor dibuat meninggalkan interval antara pembuatan descriptor dan pembaruan flag tersebut. O_CLOEXEC menghilangkan operasi dua tahap itu. Kernel membuat descriptor dengan flag close-on-exec yang sudah aktif sejak awal, sehingga thread lain tidak dapat melihat kondisi antara ketika descriptor sudah ada tetapi masih bisa diwariskan melalui execve() yang berhasil.

Linux 17 Sep 2026 5 min read

O_APPEND Menggabungkan Posisi Akhir dengan Setiap Write

O_APPEND mengubah write dari dua tindakan yang dapat dipisahkan menjadi satu operasi terpadu: Linux menempatkan open file description pada akhir file saat ini lalu melakukan write sebagai satu langkah atomik. Sifat ini penting ketika beberapa writer menulis ke regular file yang sama. Urutan lseek(fd, 0, SEEK_END) lalu write(fd, ...) tidak memiliki semantik append yang sama karena writer lain dapat mengubah file di antara kedua system call tersebut. Status append berada pada open file description O_APPEND adalah file status flag. File status flag disimpan pada open file description, bukan pada integer file descriptor itu sendiri.

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

Notifikasi seccomp Linux Memisahkan Entri Syscall dari Respons Supervisor

Filter seccomp dapat menghentikan sebuah task pada entri syscall dan mengubah kejadian itu menjadi pesan untuk process lain. Dengan SECCOMP_RET_USER_NOTIF, kernel tidak langsung menjalankan syscall yang dipilih. Kernel membuat notifikasi untuk listener, memblokir task pemanggil, lalu menunggu respons yang dapat memberikan nilai balik, menginjeksi file descriptor, atau mengizinkan syscall berlanjut. Batas ini lebih sempit daripada emulasi syscall umum. Notifikasi membawa metadata syscall dan nilai argumen register, sedangkan memori yang dirujuk argumen pointer tetap berada di process target. Target juga dapat berhenti atau notifikasinya menjadi tidak valid saat supervisor sedang mengambil keputusan. Sifat tersebut menjadikan identitas, kepemilikan memori, dan waktu respons sebagai bagian dari kontrak interface.

Keamanan Siber 17 Sep 2026 6 min read

Notifikasi Pengguna Seccomp Memindahkan Keputusan Syscall Terpilih ke Supervisor

Sebuah proses terisolasi menerbitkan system call yang tidak dapat direduksi secara aman oleh kebijakan seccomp biasa menjadi keputusan statis izinkan atau tolak. Argumennya mungkin merujuk ke memori proses yang dapat berubah, atau operasi tersebut memerlukan pekerjaan berprivilege yang dilakukan di luar proses terisolasi. Mengembalikan errno tetap terlalu membatasi, sedangkan mengizinkan panggilan secara langsung memberi target otoritas lebih besar daripada yang dimaksudkan deployment. Notifikasi pengguna seccomp Linux membentuk jalur mediasi untuk kondisi ini. Filter dapat mengembalikan SECCOMP_RET_USER_NOTIF, sehingga kernel memblokir task pemicu dan mengirim permintaan melalui listener file descriptor. Supervisor userspace menerima permintaan tersebut lalu memasok hasil. Mekanisme ini memindahkan lokasi keputusan untuk syscall terpilih, tetapi tidak menjadikan seccomp sebagai reference monitor umum tanpa kebijakan dan kontrol race tambahan.

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

Linux openat2 Menjadikan Kebijakan Resolusi Path Bagian dari Operasi Open

Pathname bukan referensi objek. Pathname merupakan instruksi untuk menelusuri namespace yang dapat berubah, sementara task lain dapat mengubah directory entry, symbolic link, atau mount pada saat traversal tersebut relevan bagi aplikasi. Linux openat2() menangani batas ini dengan menempatkan constraint resolusi path di dalam operasi kernel yang sama dengan operasi yang mengembalikan file descriptor. Penempatan tersebut penting ketika program menerima pathname tetapi bermaksud membatasi resolusi pada sebuah tree direktori. Urutan di user space yang memeriksa komponen lalu memanggil open() memisahkan validasi dari penggunaan. openat2() dapat menjadikan aturan traversal terpilih sebagai bagian dari lookup itu sendiri.

Linux 17 Sep 2026 4 min read

File Descriptor yang Diduplikasi Berbagi Satu Open File Description

Dua nomor file descriptor dapat mengubah file offset yang sama. Di Linux, hal ini terjadi ketika kedua descriptor merujuk pada satu open file description, seperti setelah dup() atau pada descriptor yang diwariskan setelah fork(). Perbedaan ini penting karena file descriptor adalah integer yang terlihat oleh process, sedangkan open file description adalah objek kernel yang menyimpan state untuk satu instance file yang dibuka. Menganggap kedua lapisan ini sama dapat menyebabkan interferensi offset, perubahan status flag yang melintasi batas descriptor, dan perilaku mengejutkan setelah process dibuat.

Keamanan Siber 17 Sep 2026 5 min read

close_range dengan UNSHARE Memisahkan Tabel Descriptor Sebelum Penutupan Massal

Proses Linux multithread dapat mencapai batas yang rumit tepat sebelum execve(): satu thread hendak membuang setiap file descriptor di atas standard input, output, dan error, sementara thread lain masih dapat membuat descriptor pada tabel yang sama. Loop pemanggilan close() menangani nomor descriptor satu per satu, tetapi tidak dengan sendirinya mengubah fakta bahwa tabel tersebut dibagi. close_range() dengan CLOSE_RANGE_UNSHARE menangani race spesifik itu. Kernel terlebih dahulu memberi caller tabel file descriptor yang tidak lagi dibagi dengan pengguna lain dari tabel lama, lalu menerapkan penutupan massal yang diminta pada tabel milik caller. Properti keamanannya berkaitan dengan kepemilikan tabel selama pembersihan, bukan sekadar pengurangan jumlah system call.