Package: xauth
Version: 1:1.0.10-1
Architecture: arm64
Running 'startx' on a machine named 'myhost' (aarch64), with a sub-directory
named 'myhost' in my home directory: X starts very slowly, and I see the
message:
xauth: timeout in locking authority file /home/john/.Xauthority
Here's what happens: the 'startx' script calls 'xauth list' in a loop (line
199) and the first call crashes after receiving SIG_SEGV; this leaves its lock
files in place, and the next instance of xauth times out waiting for them to go
away.
I think I've traced the reason for 'xauth list' crashing: my .Xauthority file
contains a line like this:
myhost:0 MIT-MAGIC-COOKIE-1 <some value>
and while processing this for printing, there's some code in parsedpy.c (line
178) that does this:
if (0 == stat(path, &sbuf))
family = FamilyLocal;
and this test succeeds because 'myhost' is the name of a valid file (actually a
directory)
Then later on in gethost.c we have:
switch (family) {
case FamilyLocal: /* hostname/unix:0 */
...
if (0 == stat(path, &sbuf))
is_path_to_socket = 1;
...
if (is_path_to_socket)
strncpy(buf, strrchr(fulldpyname, '/') + 1,
sizeof(buf));
But there is no '/' in the name, so we end up passing a null pointer to
strncpy(), which crashes the whole program.