Looking at yourself: Linux Introspection tales

Introspection information, used originally by debuggers, has come a long way into playing a greater role in the functioning of Linux. Now its used by tracers, profilers, and then by eBPF, in libbpf, in the verifier and other parts of the kernel, being always available...

Powerful and Programmable Kernel Debugging with drgn

Kernel bugs that sneak past testing into production tend to be tricky, convoluted, and hard to reproduce. When investigating such bugs, you often want to explore various data structures, look for patterns, and check your assumptions. After falling victim to some...

Gaining bounds-checking on trailing arrays

Having a dynamically-sized trailing array at the end of a structure is a popular code construct in the Linux kernel. However, trailing arrays can also be of a fixed size, which means that their size is well-defined at compile-time and remains fixed throughout their...

Panic Attack

The crash/panic path and all its related machinery were always subject to polemics; it’s an area naturally full of trade-offs, conflicting views and antagonistic goals. From one side we have kdump (also called crash_kexec), that requires a minimum touching before the...

stress-ng: finding kernel bugs through stress testing

Stress-ng is a tool that stress tests kernels using deliberately intense testing to shake out various kernel (and hardware) bugs. This talk describes the different stress test methods available in stress-ng, typical kernel test coverage and the future direction of the...