config-loader-expat: Tell Expat not to defend against hash collisions
authorSimon McVittie <smcv@debian.org>
Fri, 21 Jul 2017 09:46:39 +0000 (10:46 +0100)
committerSimon McVittie <smcv@debian.org>
Fri, 28 Jul 2017 10:17:04 +0000 (11:17 +0100)
commit8d8b5eb8a409031e224d088c1e3385bc2874c873
treee5d65c5a9012ec0f6b09c4d0ff62f564ed18e0a7
parent962bfdd9929918e298c7640c4434f4697ed5bbea
config-loader-expat: Tell Expat not to defend against hash collisions

By default, Expat uses cryptographic-quality random numbers as a salt for
its hash algorithm, and since 2.2.1 it gets them from the getrandom
syscall on Linux. That syscall refuses to return any entropy until the
kernel's CSPRNG (random pool) has been initialized. Unfortunately, this
can take as long as 40 seconds on embedded devices with few entropy
sources, which is too long: if the system dbus-daemon blocks for that
length of time, important D-Bus clients like systemd and systemd-logind
time out and fail to connect to it.

We're parsing small configuration files here, and we trust them
completely, so we don't need to defend against hash collisions: nobody
is going to be crafting them to cause pathological performance.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=101858
Tested-by: Christopher Hewitt <hewitt@ieee.org>
[smcv: Adjust build-system changes for 1.11.x]
Signed-off-by: Simon McVittie <smcv@debian.org>
Reviewed-by: Philip Withnall <withnall@endlessm.com>
bus/config-loader-expat.c
configure.ac