0.0.26 (Released March 11th, 2024)¶
These are some of the highlights of drgn 0.0.26. See the GitHub release for the full release notes, including more improvements and bug fixes.
Miscellaneous Helpers¶
This release added several new Linux kernel helpers with no particular theme:
print_dmesg()
, a shortcut for printing the kernel log buffer.idr_for_each_entry()
, a shortcut for iterating over an IDR and casting its entries to a specific type.stack_depot_fetch()
for getting stack traces from the storage used by KASAN and other kernel debugging tools. This was contributed by Peter Collingbourne.plist_head_empty()
,plist_node_empty()
,plist_first_entry()
,plist_last_entry()
,plist_for_each()
, andplist_for_each_entry()
, helpers for working with the kernel’s priority-sorted lists.
fsrefs.py
Tool¶
The fsrefs.py
tool was added to the tools
directory. It prints
information about everything that is referencing a file or filesystem. This is
similar to fuser(1) and lsof(8), but it can find more
since it has access to kernel internals.
$ ./tools/fsrefs.py --inode /dev/urandom
pid 1349 (bluetoothd) fd 16 (struct file *)0xffff8881458cf000
pid 1368 (udisksd) fd 15 (struct file *)0xffff888145c13100
...
$ ./tools/fsrefs.py --super-block /run
mount /run (struct mount *)0xffff8881015cc140
pid 1 (systemd) fd 256 (struct file *)0xffff8881012f3d00 /run/initctl
pid 1 (systemd) fd 380 (struct file *)0xffff88810bf88800 /run/dmeventd-server
pid 1 (systemd) fd 385 (struct file *)0xffff88810bf88f00 /run/dmeventd-client
mount /run (mount namespace 4026532545) (struct mount *)0xffff8881474028c0
pid 2135770 (systemd-journal) vma 0x7f7d94f2a000-0x7f7d94f2b000 (struct file *)0xffff88813925bf00 /run/systemd/journal/kernel-seqnum
pid 2135770 (systemd-journal) vma 0x7f7d94f2b000-0x7f7d94f2c000 (struct file *)0xffff88813925a100 /run/systemd/journal/seqnum
...
fsrefs.py
currently checks:
File descriptors
Task working directories
Task root directories
Memory mappings
Filesystem mounts
loop(4) devices
Swap files
It will be extended to check more as the need arises, so feel free to report anything it missed.
(Note that as opposed to the contrib
directory, scripts in the tools
directory are regularly maintained and tested.)
DWARF Package Files¶
drgn now supports split DWARF package (.dwp) files. These are generated by the
dwp
and llvm-dwp
tools.
Linux 6.8 Support¶
Linux 6.8 changed some filesystem internals in a way that broke a couple of drgn helpers. Here are some errors you might see with older versions of drgn that are fixed in this release.
From path_lookup()
or
for_each_mount()
(fixed by Johannes Thumshirn):
AttributeError: 'struct mnt_namespace' has no member 'list'
From path_lookup()
:
AttributeError: 'struct dentry' has no member 'd_subdirs'
Python 3.13 Support¶
Python 3.13, currently in alpha, removed or changed some private APIs
(_PyDict_GetItemIdWithError()
, _PyDict_SetItemId()
, and
_PyLong_AsByteArray()
) that drgn depended on, which caused build failures.
This was fixed by using public APIs instead.