Hey,
On Tue, Jun 19, 2018 at 15:30, Simon McVittie  wrote:
On Tue, 19 Jun 2018 at 12:32:19 +0000, mag...@minimum.se 
(mailto:mag...@minimum.se) wrote:
The system is on a quite old kernel (3.18.44)
...
At this point, things go wrong when
recvmsg() is called on bus->input_fd with flags MSG_DONTWAIT|MSG_NOSIGNAL|
MSG_CMSG_CLOEXEC. This syscall returns -22 (Invalid argument) which propagates
all the way up to the user.

(I hate the way kernel/syscall/libc error-reporting isn't accompanied
by a human-readable message that could tell you *which* argument is
invalid... compare with GLib/D-Bus errors)

MSG_NOSIGNAL is meaningless for recvmsg()
 so it's possible
that your older kernel doesn't allow it, but newer kernels allow and
ignore it? sd-bus should probably only use that flag for sendmsg()
and the rest of the send(2) family.

You are right, if I remove the MSG_NOSIGNAL flag to recvmsg() everything works 
(systemd-logind, busctl etc). I was unable to locate the place in my kernel 
code where it actually rejects MSG_NOSIGNAL for recvmsg(), but I think your 
theory is sane: 3.18.44 rejects it, newer kernels ignore it.
I can send a patch that removes use of MSG_NOSIGNAL in recvmsg() if you are 
willing to accept it. I think there should be no side effects for users of 
newer kernels.

smcv
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org (mailto:systemd-devel@lists.freedesktop.org)
https://lists.freedesktop.org/mailman/listinfo/systemd-devel 
(https://lists.freedesktop.org/mailman/listinfo/systemd-devel)
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to