May close() return any error code?

From: Takashi Iwai
Date: Wed Jul 29 2015 - 06:47:07 EST


Hi,

while debugging a problem of X and gdm with the old systemd-210, we
encountered a sudden death of systemd-logind, and this turned out to
be an unexpected errno from close(). The close() call for input
devices returns ENODEV error. The logind in systemd-210 treats this
error code as fatal, triggers assert() and eventually kills itself.
The details are found in an openSUSE bugzilla thread:
https://bugzilla.opensuse.org/show_bug.cgi?id=939571

This seems coming from evdev_flush(). As there is no fd leak, it's no
big problem per se. But, now the question is whether returning such
an error code is correct behavior at all. At least, it doesn't seem
defined in POSIX:
http://pubs.opengroup.org/onlinepubs/009695399/functions/close.html

I myself have no strong opinion here, so would like just to ask others
suggestions / comments.

thanks,


Takashi
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/