vDSO

From HandWiki

vDSO (virtual dynamic shared object) is a Linux kernel mechanism for exporting a carefully selected set of kernel space routines to user space applications so that applications can call these kernel space routines in-process, without incurring the performance penalty of a mode switch from user to kernel mode that is inherent when calling these same kernel space routines by means of the system call interface.[1]

vDSO has been developed to offer the vsyscall features while overcoming its limitations: a small amount of statically allocated memory, which allows only 4 system calls, and the same addresses ABI in each process, which compromises security. This security issue has been mitigated by emulating a virtual system call, but the emulation introduces additional latency.[2]

vDSO uses standard mechanisms for linking and loading i.e. standard Executable and Linkable Format (ELF) format.[3][4]

vDSO is a memory area allocated in user space which exposes some kernel functionalities. vDSO is dynamically allocated, offers improved safety through memory space randomization, and supports more than 4 system calls. vDSO links are provided via the glibc library. If the kernel does not have vDSO support, a traditional syscall is made.[2]

vDSO helps to reduce the calling overhead on simple kernel routines, and it also can work as a way to select the best system-call method on some computer architectures such as IA-32.[5]

An advantage over other methods is that such exported routines can provide proper DWARF (Debug With Attributed Record Format) debugging information.

Implementation generally implies hooks in the dynamic linker to find the vDSOs.

See also

References