diff options
author | Lennart Poettering <lennart@poettering.net> | 2017-12-27 16:59:44 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2018-01-05 13:55:08 +0100 |
commit | 706d7c27ad12098a44d83330eab1aef8f8ed12dc (patch) | |
tree | 6b85916543139934b059df7a4dc6321c8ea79c2a /src/basic/socket-label.c | |
parent | 294d46f138e67f9e1bfb18f5ec1b009a4a9d5292 (diff) | |
download | systemd-706d7c27ad12098a44d83330eab1aef8f8ed12dc.tar.gz |
socket-label: tweak socket_address_listen() a bit
This changes two things when binding to AF_UNIX file system sockets:
1. When wethe socket already exists in the fs, and unlink() on it fails,
don't bother to bind() a second time: since nothing changed it won't
work either.
2. Also use SELinux-aware bind() for the second attempt.
Diffstat (limited to 'src/basic/socket-label.c')
-rw-r--r-- | src/basic/socket-label.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/basic/socket-label.c b/src/basic/socket-label.c index 448265b1cd..e67a5cfe6a 100644 --- a/src/basic/socket-label.c +++ b/src/basic/socket-label.c @@ -124,10 +124,13 @@ int socket_address_listen( r = mac_selinux_bind(fd, &a->sockaddr.sa, a->size); if (r == -EADDRINUSE) { /* Unlink and try again */ - (void) unlink(p); - if (bind(fd, &a->sockaddr.sa, a->size) < 0) - return -errno; - } else if (r < 0) + + if (unlink(p) < 0) + return r; /* didn't work, return original error */ + + r = mac_selinux_bind(fd, &a->sockaddr.sa, a->size); + } + if (r < 0) return r; } } else { |