lib/async_req/async_sock.c set socket close on exec
authorGary Lockyer <gary@catalyst.net.nz>
Sun, 10 Dec 2017 20:31:33 +0000 (09:31 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 18 Dec 2017 03:38:19 +0000 (04:38 +0100)
Set SOCKET_CLOEXEC on the sockets returned by accept.  This ensures that
the socket is unavailable to any child process created by system().
Making it harder for malicious code to set up a command channel,
as seen in the exploit for CVE-2015-0240

Signed-off-by: Gary Lockyer <gary@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/async_req/async_sock.c
lib/tevent/echo_server.c

index db3916e07e7a2f718d8ec0d9fdfd2f50fc4e890d..0a8a333f4f34152dedb6f3d423be3f4c3135144b 100644 (file)
@@ -738,6 +738,7 @@ static void accept_handler(struct tevent_context *ev, struct tevent_fd *fde,
                tevent_req_error(req, errno);
                return;
        }
+       smb_set_close_on_exec(ret);
        state->sock = ret;
        tevent_req_done(req);
 }
index 3b2122dac114a21eb14ae5216d587e8216be4e68..f93d8bcdee7200ca66bac11a3a2b202c55678acc 100644 (file)
@@ -118,7 +118,7 @@ static void accept_handler(struct tevent_context *ev, struct tevent_fd *fde,
                tevent_req_error(req, errno);
                return;
        }
-       smb_set_close_on_exec(state->listen_sock);
+       smb_set_close_on_exec(ret);
        state->sock = ret;
        tevent_req_done(req);
 }