DFUZZER(1)
π¦ DFUZZER β the D-Bus fuzzer, bestie edition π
okay so this is the manual for dfuzzer (that's the tool name, it's a command, it lives in section 1 of the manual, iykyk). It's a D-Bus fuzzer and it is genuinely so much fun. Let's get into it.
β¨ SYNOPSIS β¨
dfuzzer {--bus=BUS_NAME} [OPTIONS...]
πΈ DESCRIPTION πΈ
dfuzzer is the D-Bus fuzzer β it's the tool for fuzz testing processes that talk to each other through D-Bus. It works on processes connected to both the session bus and the system bus daemon, so no matter which vibe your service is on, you're covered. π
The fuzzer works as a client: first it connects to the bus daemon, then it traverses and fuzz tests all the methods a D-Bus service provides. Which service? The one you name with the -n/--bus-name= option, obviously. π«Ά
By default it only prints failures and warnings (very demure, very mindful). Want the whole story? Use -v/--verbose for verbose mode. β¨
So the fuzz tests happen on methods of a chosen interface(s) and object(s) for the given bus name. The fuzzer generates random arguments for each method of an interface and calls those methods every single time with different generated arguments. It's giving chaos, but make it productive. π
dfuzzer is also monitoring the tested process state the entire time it's fuzzing. If the tested process crashes, that gets printed on dfuzzer's output. And the fuzzer always prints the exit status (see the "Exit status" section below) before it exits. No sneaky exits here. π
ngl, if you're getting exceptions likeorg.freedesktop.DBus.Error.AccessDeniedororg.freedesktop.DBus.Error.AuthFailedduring testing (these only print in verbose mode, so with the-v/--verboseoption), try runningdfuzzeras root. β οΈ warning: this is dangerous, proceed with caution. fr fr, be careful.
π OPTIONS π
Here's everything it understands, bestie:
-b NAME,--bus-name=NAMEβ the D-Bus name you want to test. π¦-o PATH,--object=PATHβ the D-Bus object path you want to test. All children objects get traversed too, so it goes deep. π-i NAME,--interface=NAMEβ the D-Bus interface name to test. Heads up: this one needs-o/--object=to be set as well. π-t NAME,--method=NAMEβ if you give this, only the method namedNAMEgets tested. Requires-o/--object=and-i/--interface=to be set as well. Implies--skip-properties. π-p NAME,--property=NAMEβ if you give this, only the property namedNAMEgets tested. Requires-o/--object=and-i/--interface=to be set as well. Implies--skip-methods. β¨--skip-methodsβ skip method testing entirely, test only properties. π--skip-propertiesβ skip property testing entirely, test only methods. π§-e COMMAND,--command=COMMANDβ a command to execute after each method call. If the given command finishes unsuccessfully, a fail message is printed along with its return value. π--show-command-outputβ don't suppressstdout/stderrof aCOMMANDspecified via--command=. Let it yap. π’-f FILENAME,--dictionary=FILENAMEβ name of a file with a custom dictionary, which is used as input for fuzzed methods before generating random data. Currently supports only strings (one per line). πΈ-x ITERATIONS,--max-iterations=ITERATIONSβ set the upper limit for the number of iterations done for each method. This limit only kicks in if the automatically calculated number of iterations would exceed it. At least 1 iteration is required, periodt.-y ITERATIONS,--min-iterations=ITERATIONSβ same as-x/--max-iterations=but for the lower limit. Again, the limit only comes into effect if the automatically calculated number of iterations would fall belowITERATIONS. π«Ά-I ITERATIONS,--iterations=ITERATIONSβ sets both-y/--min-iterations=and-x/--max-iterations=toITERATIONS, which effectively sets the number of iterations for each method toITERATIONS. One option, both jobs. iconic. π-L DIRNAME,--log-dir=DIRNAMEβ if set,dfuzzerwrites a machine-readable CSV log intoDIRNAME/BUSNAME. The directory must exist. ποΈ-b SIZE,--buffer-limit=DIRNAMEβ maximum buffer size for generated strings, in bytes. Defaults to50000. Minimal accepted value is256. π§΅-l,--listβ list all available services on both the system and the session buses. window shopping, basically. ποΈ-s,--no-suppressionsβ do not load suppression file(s). Default behavior is to locate and load suppression files in standard locations, in this order:./dfuzzer.conf~/.dfuzzer.conf/etc/dfuzzer.conf
For info about the format of the suppression file, see the "Suppression file format" section. π
-v,--verboseβ enable verbose logging. π£οΈ-d,--debugβ enable debug logging. Implies-v/--verbose. This option should not normally be used during testing. π§-V,--versionβ printdfuzzerversion and exit. β-h,--helpβ print a short help text and exit. π
π EXIT STATUS π
dfuzzer may return these codes:
0β testing ended successfully π1β an error occured (either an internall error, or a D-Bus related error) π2β testing detected failures (including warnings) π₯3β testing detected only warnings β οΈ
π· SUPPRESSION FILE FORMAT π·
The suppression file is divided into sections, one for each service. Each section contains a path to the suppressed method and an optional description β and that description gets printed to the output when such a method is suppressed. cute, right?
[org.foo.bar]
hello potentially destructive
world also destructive
In this example, methods hello and world will be suppressed on the org.foo.bar bus, no matter under which object/interface they appear. π¦
For more granular suppression, the method name can be given in the format
object_path:interface_name:method
where each part can be omited (omitted parts behave like a wildcard, i.e. they match any object/interface/method). For example:
[org.foo.baz]
hello suppress the method 'hello' on any interface
::hello ditto, since object and interface are empty
:hello ditto
/org::world suppress the method 'world' on any interface under the object '/org'
/org:boo:world suppress the methdo 'world' on interface 'boo' and under object '/org'
:org.freedesktop.Foo: suppress all methods on interface 'org.freedesktop.Foo' under any object
/org:: suppress all methods on any interface under object '/org'
β¨ EXAMPLES β¨
List all services on system/session bus:
dfuzzer -l
Test all methods of GNOME Shell. Be verbose:
dfuzzer -v -n org.gnome.Shell
Test only a specific method on given bus name, object path, and interface:
dfuzzer -n org.freedesktop.Avahi -o / -i org.freedesktop.Avahi.Server -t GetAlternativeServiceName
Test all methods of Avahi and be verbose. Redirect all log messages including failures and warnings into avahi.log:
dfuzzer -v -n org.freedesktop.Avahi |& tee avahi.log
Test name org.freedesktop.Avahi, be verbose, and do not use suppression file:
dfuzzer -v -s -n org.freedesktop.Avahi
π AUTHOR π
Matus Marhefka (mmarhefk@redhat.com)
π BUGS π
Please report all bugs to the upstream tracker at https://github.com/dbus-fuzzer/dfuzzer. π
π SEE ALSO π
π NOTES π
and that's the whole page, bestie π this dfuzzer manual page came to you courtesy of the dfuzzer source, version dated 01/21/2026, and yeah, it's DFUZZER(1) β the same name up top and down here, symmetry slay β¨π¦π
π¦ where this page comes from
- epel 10: dfuzzer 2.6-1.el10_2 Β· GPL-3.0-or-later
- epel 9: dfuzzer 2.6-1.el9 Β· GPL-3.0-or-later
- fedora 43: dfuzzer 2.6-1.fc43 Β· GPL-3.0-or-later
- fedora 44: dfuzzer 2.6-1.fc44 Β· GPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms