Langsung ke konten

Arsip

System Call

56 artikel
Rekayasa Perangkat Lunak 18 Sep 2026 3 min read

signalfd Menyalurkan Signal Tertunda melalui I/O Descriptor

Sebuah signalfd Linux menjadi readable ketika signal yang dipilih oleh mask-nya berada dalam state pending untuk konteks yang membaca. read(2) yang berhasil mengonsumsi state signal tertunda dan mengembalikan satu atau beberapa record signalfd_siginfo berukuran tetap. Penanganan signal dengan demikian dapat masuk ke event loop berbasis descriptor tanpa menjadikan handler asinkron sebagai mekanisme dispatch utama. Mask descriptor tidak memblokir signal Mask yang diberikan ke signalfd(2) memilih signal yang dapat diterima descriptor. Mask tersebut tidak mengubah signal mask milik thread pemanggil. Penggunaan normal memblokir signal itu secara terpisah dengan sigprocmask(2) atau pthread_sigmask(3) agar disposition biasa tidak berjalan sebelum signal dikonsumsi melalui descriptor.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

seccomp User Notification Mendelegasikan Syscall Terpilih ke Supervisor

seccomp User Notification Mendelegasikan Syscall Terpilih ke Supervisor Filter seccomp dapat menghentikan system call terpilih sebelum kernel mengeksekusinya, lalu mengirim notifikasi ke supervisor di user space. Thread target tetap terblokir saat supervisor menerima event dan mengirim disposisi. Perilaku ini mengubah hasil filter menjadi handoff terkontrol pada batas kernel dan user space. Mekanismenya adalah SECCOMP_RET_USER_NOTIF. Berbeda dari action seccomp biasa, filter BPF tidak menyelesaikan keputusan sendirian. Sebuah listener file descriptor menjadi titik koordinasi untuk menerima notifikasi, mengirim respons, dan secara opsional menginjeksi file descriptor.

Linux 18 Sep 2026 5 min read

Ruleset Landlock Menambahkan Kontrol Akses Lokal pada Proses

Sebuah proses Linux dapat secara sukarela mengurangi akses yang sebenarnya masih diizinkan oleh UID, capability, mount namespace, dan lapisan keamanan lain. Landlock menerapkan mekanisme ini sebagai Linux Security Module yang dapat ditumpuk: proses membuat ruleset, menambahkan objek yang diizinkan, lalu menempatkan dirinya ke dalam domain Landlock. Policy yang dihasilkan merupakan pembatasan tambahan. Landlock tidak memberikan akses yang sudah ditolak oleh DAC, ACL, SELinux, AppArmor, permission mount, atau kontrol aktif lainnya. Setelah diterapkan, lapisan Landlock tidak dapat dilepas dari thread tersebut; domain Landlock berikutnya hanya dapat menambah pembatasan.

Linux 18 Sep 2026 4 min read

process_madvise Menerapkan Saran Reklamasi Memori Lintas Proses

process_madvise() memungkinkan satu proses Linux meminta tindakan manajemen memori untuk rentang virtual address milik proses lain. Target diidentifikasi melalui pidfd, sedangkan array iovec menentukan rentang pada target. Mekanisme ini memisahkan keputusan kebijakan memori dari proses yang mapping-nya menerima saran. Interface ini relevan bagi controller yang sudah memiliki informasi eksternal mengenai status workload. Runtime manager dapat menandai memori yang tidak aktif sebagai cold atau meminta reklamasi page tanpa menyisipkan kode ke proses yang dikelola. Kemampuan tersebut dibatasi oleh pemeriksaan permission, jenis advice yang didukung, dan semantik progres parsial.

Linux 18 Sep 2026 5 min read

pidfd_getfd Menduplikasi File Descriptor Proses Lain ke Proses Pemanggil

Nomor file descriptor hanya memiliki arti di dalam tabel descriptor suatu proses, tetapi objek kernel di balik nomor tersebut dapat dipakai bersama oleh beberapa proses. Linux pidfd_getfd() menjembatani dua ruang itu: syscall ini menerima PID file descriptor beserta nomor descriptor dari proses yang dirujuk, lalu memasang descriptor duplikat pada proses pemanggil. Descriptor baru tersebut merujuk ke open file description yang sama dengan descriptor target. Properti terakhir itu merupakan batas utama. pidfd_getfd() tidak membuka ulang pathname, menyalin byte, atau membuat posisi file yang independen. Operasi ini menduplikasi referensi kernel yang sudah ada sehingga semantik state bersama dapat memengaruhi kedua proses.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

openat2 Membatasi Resolusi Path di Dalam Batas Direktori

Pathname bukan referensi objek yang stabil. Di antara direktori awal dan komponen akhir, resolusi path Linux dapat mengikuti symbolic link, melewati mount point, memproses .., atau menjumpai link khusus dari pseudo-filesystem. openat2() memungkinkan caller memasang batas pada operasi resolusi tersebut sehingga kernel dapat menolak lookup yang keluar dari boundary yang ditetapkan. Perbedaannya lebih kuat daripada memeriksa string yang sudah dinormalisasi sebelum open(). Validasi string memeriksa sintaks. openat2() dapat membatasi traversal aktual oleh kernel ketika objek filesystem dan topologi mount ikut menentukan hasil lookup.

Linux 18 Sep 2026 5 min read

Notifikasi User Seccomp Mendelegasikan System Call Terpilih ke Supervisor

Filter seccomp dapat menghentikan system call terpilih sebelum dieksekusi lalu mengubahnya menjadi request pada listener file descriptor. Thread pemanggil tetap terblokir saat supervisor userspace memeriksa notifikasi dan mengembalikan hasil. Mekanisme ini membentuk batas mediasi yang lebih sempit daripada tracing setiap system call dan lebih dinamis daripada menanam seluruh keputusan langsung di classic BPF. Mekanismenya adalah SECCOMP_RET_USER_NOTIF. Filter mengembalikan action tersebut untuk operasi yang memerlukan mediasi eksternal. Filter yang dipasang dengan SECCOMP_FILTER_FLAG_NEW_LISTENER menghasilkan listener file descriptor, lalu supervisor memakai ioctl notifikasi seccomp pada descriptor tersebut.

Linux 18 Sep 2026 5 min read

mseal Mengunci Tata Letak dan Permission Mapping Memori

Sebuah proses dapat membentuk mapping memori dengan alamat, ukuran, dan protection bit tertentu, lalu mengubah mapping itu melalui operasi seperti munmap(), mprotect(), atau mremap(). Linux mseal() menambahkan transisi state satu arah: virtual memory area terpilih dapat disegel sehingga sejumlah perubahan mapping berikutnya ditolak oleh kernel. Mekanisme ini melindungi struktur mapping, bukan byte yang tersimpan di dalamnya. Mapping writable yang disegel tetap dapat ditulis melalui store biasa. Sealing membatasi operasi yang dapat menghapus mapping, memindahkannya, menggantinya, atau mengubah atribut yang tercakup oleh aturan sealing.

Linux 18 Sep 2026 6 min read

membarrier Memindahkan Biaya Pengurutan Memori ke Jalur Koordinasi yang Jarang

Full hardware memory barrier pada jalur yang sangat sering dieksekusi dapat membebankan biaya pada setiap operasi, meskipun koordinasi lintas thread hanya terjadi sesekali. Linux membarrier() menyediakan penempatan biaya yang berbeda: jalur koordinasi yang jarang dapat meminta event pengurutan pada sekumpulan thread tertentu, sementara jalur yang sering dapat cukup memakai pengurutan pada level compiler dalam desain yang sesuai. Mekanisme ini bukan pengganti umum untuk atomic, lock, atau memory model suatu bahasa pemrograman. membarrier() adalah primitive sinkronisasi khusus Linux untuk desain yang correctness-nya sudah memiliki pasangan yang presisi antara jalur yang sering dan jalur koordinasi yang jarang.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux userfaultfd Memindahkan Penanganan Page Fault Terpilih ke User Space

Page fault biasanya membawa eksekusi dari proses ke kernel dan baru kembali setelah kernel menyelesaikan kondisi virtual-memory atau mengirim error. Linux userfaultfd dapat menyisipkan komponen user-space ke jalur tersebut untuk rentang alamat yang didaftarkan secara eksplisit. Kernel melaporkan fault terpilih melalui file descriptor, memblokir execution context yang mengalami fault saat mode mengharuskannya, lalu menerima ioctl yang menyelesaikan fault tersebut. Ini adalah antarmuka virtual-memory Linux, bukan jaminan memori dari C atau POSIX. Perilakunya bergantung pada fitur kernel yang dinegosiasikan, rentang terdaftar, jenis mapping, dan mode registrasi.

Rekayasa Perangkat Lunak 18 Sep 2026 6 min read

Linux splice Menjadikan Kapasitas Pipe Bagian dari Semantik Transfer Data

Linux splice() dapat memindahkan byte antar-file descriptor tanpa mengalirkan byte tersebut melalui buffer user space, tetapi interface ini bukan primitive penyalinan generik dari sembarang descriptor ke descriptor lain. Sedikitnya satu endpoint harus berupa pipe. Syarat tersebut membuat state pipe menjadi bagian dari kontrak transfer: kapasitas, data yang dapat dibaca, keberadaan writer, mode blocking, dan progres parsial dapat memengaruhi jalur data yang tampak sederhana. Batas yang relevan bukan sekadar “salinan kernel versus salinan user.” splice() mengubah bentuk ownership dan flow control. Kode aplikasi tidak lagi memiliki array byte perantara, tetapi tetap memiliki control loop yang menghitung byte yang sudah dipindahkan, menangani readiness, dan mempertahankan semantik offset.

Rekayasa Perangkat Lunak 18 Sep 2026 6 min read

Linux signalfd Mengubah Sinyal Pending menjadi Read Descriptor

Linux signalfd memberi sinyal terpilih jalur konsumsi berbasis descriptor. Alih-alih memindahkan kontrol ke handler asinkron, proses dapat memblokir sinyal tersebut, mengaitkannya dengan objek signalfd, lalu mengonsumsi instance yang pending melalui read(). Descriptor ini juga dapat masuk ke poll(), select(), dan epoll, sehingga penerimaan sinyal dapat berada bersama socket, timer, dan sumber readiness lain. Antarmuka ini khusus Linux. Signal mask, aturan pending signal, dan operasi descriptor berasal dari semantik sinyal Linux serta POSIX pada bagian yang relevan; semuanya bukan properti bahasa C itu sendiri.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux signalfd Mengubah Signal Terpilih Menjadi Read Descriptor

Signal yang masuk ke mask signalfd dapat muncul sebagai state readable pada file descriptor alih-alih menjalankan asynchronous signal handler, selama signal tersebut diblokir dari delivery biasa pada thread yang relevan. Batas interface pun berubah: kedatangan signal dapat ikut dalam event loop berbasis descriptor yang sama dengan socket, pipe, dan objek pollable lain. Mekanisme ini tidak mengganti semantik signal Linux. Pembentukan signal, signal mask pada proses dan thread, state pending, penggabungan standard signal, antrean real-time signal, serta aturan delivery tetap berlaku. signalfd mengubah interface konsumsi untuk signal yang dipilih oleh mask-nya.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux renameat2 Membuat Kebijakan Penggantian Path Bersifat Atomik

Rename pathname mengubah entri direktori sementara file descriptor yang sudah terbuka tetap merujuk ke objek dasar yang sama. Linux renameat2() menambahkan kebijakan pada pembaruan namespace tersebut: pemanggil dapat menolak penggantian, menukar dua nama yang sudah ada, atau meminta whiteout untuk operasi union filesystem. Kebijakan ini dijalankan sebagai bagian dari operasi rename, bukan sebagai pemeriksaan terpisah di userspace. Interface ini khusus Linux. Argumen flags bernilai nol memberikan perilaku renameat(), sedangkan flag nonnol menambahkan semantik Linux yang juga bergantung pada dukungan filesystem yang di-mount.

Rekayasa Perangkat Lunak 18 Sep 2026 4 min read

Linux pidfd Mengikat Operasi Proses ke Identitas Kernel yang Stabil

PID numerik menamai proses melalui lookup dalam namespace. Nomor tersebut dapat dipakai kembali setelah proses berakhir dan sudah di-reap. PID file descriptor pada Linux mengubah batas ini: sebuah pidfd adalah file descriptor yang merujuk ke task tertentu, sehingga operasi berikutnya dapat menargetkan referensi tersebut tanpa melakukan resolusi PID numerik lagi. Perilaku manajemen proses ini khusus Linux. Perilaku tersebut bukan properti identifier proses POSIX ataupun bahasa C. PID numerik adalah nama, bukan handle permanen Jalur kontrol yang umum menyimpan PID, menunggu kondisi eksternal, lalu memanggil kill(pid, sig). Kedua operasi itu terpisah oleh waktu. Jika proses awal telah berakhir dan PID-nya sudah didaur ulang sebelum operasi signal, lookup numerik baru dapat menunjuk proses yang berbeda.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux openat2 Membatasi Resolusi Path di Dalam Batas Direktori

Pathname yang diberikan ke openat2() dapat diresolusikan relatif terhadap file descriptor direktori sambil meminta kernel menegakkan batas pada proses resolusi itu sendiri. Perbedaan ini penting saat proses menerima komponen path dari sumber dengan tingkat kepercayaan lebih rendah. Pemeriksaan string dapat memeriksa teks pathname, tetapi pemeriksaan itu sendiri tidak dapat membekukan namespace filesystem selama lookup berlangsung. openat2() menempatkan kebijakan bersama operasi lookup. struct open_how memisahkan flag open biasa dari flag resolve yang membatasi traversal. Batas yang dihasilkan berkaitan dengan semantik resolusi, bukan sekadar bentuk teks sebuah path.

Rekayasa Perangkat Lunak 18 Sep 2026 4 min read

Linux eventfd Merepresentasikan State Counter melalui Readiness Descriptor

Objek eventfd menyimpan counter unsigned 64-bit di kernel dan mengekspos state tersebut melalui file descriptor. Operasi write menambah counter dalam batas yang ditentukan; operasi read mengonsumsi state counter; antarmuka readiness menunjukkan apakah suatu operasi dapat berjalan tanpa blocking. Hasilnya adalah batas sinkronisasi ringkas yang cocok dengan event loop berbasis descriptor tanpa mengubah counter menjadi byte stream. Antarmuka ini khusus Linux. Jaminannya berasal dari kontrak system call eventfd dan semantik descriptor kernel, bukan dari bahasa C atau POSIX.

Rekayasa Perangkat Lunak 18 Sep 2026 4 min read

Linux close_range Menjadikan Pembersihan Descriptor sebagai Operasi Tabel

Proses yang bersiap menjalankan execve() sering memerlukan invariant sederhana: descriptor di atas allowlist kecil tidak boleh bertahan ke program baru. Menutup nomor descriptor satu per satu mengubah invariant tersebut menjadi masalah enumerasi. Linux close_range() menyatakannya langsung sebagai operasi pada interval inklusif di tabel file descriptor milik task pemanggil. Interface ini khusus Linux. Perilakunya berasal dari semantik file table dan system call Linux, bukan dari bahasa C atau jaminan POSIX yang portabel.

Linux 18 Sep 2026 5 min read

Flag Resolve openat2 Membatasi Traversal Path per Operasi Open

Sebuah pathname yang diberikan ke openat2() dapat ditolak walaupun pathname yang sama berhasil diresolusikan melalui openat(). Perbedaannya berasal dari open_how.resolve: Linux dapat menerapkan batas traversal ketika setiap komponen path diresolusikan untuk satu operasi open. Batas penanganan path pun berubah. File descriptor direktori dapat berfungsi lebih dari sekadar titik awal; flag resolve dapat membatasi escape, traversal symbolic link, perpindahan mount, dan lookup yang membutuhkan pekerjaan di luar state cache. Kebijakan resolusi melekat pada satu operasi openat2() memperluas model openat() dengan struct open_how yang dapat diperluas:

Keamanan Siber 18 Sep 2026 4 min read

Flag Resolusi openat2 Membatasi Traversal Path pada Batas Kernel

Sebuah layanan dapat memvalidasi pathname tetapi tetap membuka objek yang berbeda jika namespace berubah antara validasi dan pemakaian. Symbolic link, topologi mount, operasi rename, dan link khusus procfs membuat resolusi pathname menjadi operasi kernel dengan state yang dapat berubah secara konkuren. Linux openat2() menangani sebagian batas ini dengan melekatkan batasan resolusi pada lookup yang menghasilkan file descriptor. Properti keamanannya lebih sempit daripada sanitasi path secara umum. openat2() tidak menyatakan bahwa sebuah pathname aman. Syscall ini memungkinkan pemanggil meminta kernel menolak perilaku resolusi tertentu saat kernel menjalankan path walk.

Linux 18 Sep 2026 4 min read

eventfd Mengagregasi Notifikasi dalam Counter Kernel

Sebuah eventfd dapat menyerap beberapa write notifikasi sebelum userspace melayani descriptor. Kernel menyimpan write tersebut dalam counter 64-bit, sehingga readiness merepresentasikan state counter yang tertunda, bukan antrean dengan satu record untuk setiap notifikasi. Perbedaan ini penting di event loop. Producer dapat menambah nilai saat consumer sedang sibuk, lalu read berikutnya dapat melebur state yang terakumulasi menjadi satu hasil. Dengan EFD_SEMAPHORE, objek yang sama menyediakan aturan konsumsi berbeda tanpa mengubah model readiness-nya.

Linux 18 Sep 2026 5 min read

close_range Mengontrol Pewarisan Descriptor pada Batas exec

Sebuah proses yang bersiap memanggil execve() dapat memiliki ratusan atau ribuan file descriptor terbuka, sementara program baru hanya seharusnya mewarisi beberapa descriptor tertentu. Menutup descriptor satu per satu menimbulkan biaya pencatatan sekaligus masalah concurrency: thread lain dapat mengalokasikan descriptor ketika loop pembersihan masih berjalan. Linux close_range() memindahkan operasi tersebut ke batas tabel descriptor. Caller menentukan rentang angka inklusif dan meminta kernel menutup descriptor dalam rentang itu atau menandainya close-on-exec. Dengan CLOSE_RANGE_UNSHARE, caller dapat lebih dahulu memisahkan tabel descriptornya dari thread atau proses yang berbagi tabel tersebut.

Rekayasa Perangkat Lunak 17 Sep 2026 5 min read

Seccomp User Notification Mendelegasikan System Call Terpilih ke Supervisor

Sebuah system call yang dipilih oleh seccomp filter dapat berhenti sebelum dieksekusi kernel lalu muncul sebagai request pada notification file descriptor. Dengan SECCOMP_RET_USER_NOTIF, Linux mengubah call tersebut menjadi titik koordinasi antara target yang terblokir dan supervisor userspace. Supervisor dapat mengemulasikan hasil, menginjeksi file descriptor untuk operasi yang sesuai, atau mengizinkan kernel melanjutkan call asli. Mekanisme ini sengaja lebih sempit daripada security policy engine umum di userspace. Batas terkuatnya adalah protokol suspensi dan respons yang dimediasi kernel. Data yang diakses melalui pointer ke memori target tetap dapat berubah di sekitar proses inspeksi supervisor, dan respons yang melanjutkan call asli kembali masuk ke eksekusi kernel biasa dengan race tersebut tetap relevan.

Rekayasa Perangkat Lunak 17 Sep 2026 4 min read

Seal memfd Mengubah File Bersama Menjadi Objek Monotonik

Sebuah memfd Linux dapat bermula sebagai file anonim yang writable, lalu memperoleh pembatasan yang tidak dapat dihapus. Pembatasan tersebut melekat pada inode, sehingga transfer atau duplikasi descriptor tidak menghasilkan tampilan yang lebih longgar. Setelah sebuah seal berhasil ditambahkan, setiap descriptor yang merujuk inode itu tunduk pada seal tersebut. Sifat ini berbeda dari access mode pada descriptor. Descriptor dapat membawa flag lokal, sedangkan seal mengubah batas mutasi pada objek file bersama itu sendiri.