Do not try to unlink the control socket in an unprivileged child
authorflorian <florian@openbsd.org>
Thu, 28 May 2015 17:08:08 +0000 (17:08 +0000)
committerflorian <florian@openbsd.org>
Thu, 28 May 2015 17:08:08 +0000 (17:08 +0000)
process on shutdown.
Found while working on tame(2).
OK benno@

usr.sbin/httpd/control.c
usr.sbin/httpd/httpd.c
usr.sbin/relayd/control.c
usr.sbin/relayd/relayd.c
usr.sbin/snmpd/control.c
usr.sbin/snmpd/snmpd.c

index fe60375..5c71545 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: control.c,v 1.6 2015/01/21 22:21:05 reyk Exp $        */
+/*     $OpenBSD: control.c,v 1.7 2015/05/28 17:08:08 florian Exp $     */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -126,7 +126,6 @@ control_cleanup(struct control_sock *cs)
                return;
        event_del(&cs->cs_ev);
        event_del(&cs->cs_evt);
-       (void)unlink(cs->cs_name);
 }
 
 /* ARGSUSED */
index c6f183f..5019fce 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: httpd.c,v 1.35 2015/02/23 18:43:18 reyk Exp $ */
+/*     $OpenBSD: httpd.c,v 1.36 2015/05/28 17:08:09 florian Exp $      */
 
 /*
  * Copyright (c) 2014 Reyk Floeter <reyk@openbsd.org>
@@ -210,7 +210,7 @@ main(int argc, char *argv[])
                errx(1, "unknown user %s", HTTPD_USER);
 
        /* Configure the control socket */
-       ps->ps_csock.cs_name = HTTPD_SOCKET;
+       ps->ps_csock.cs_name = NULL;
 
        log_init(debug);
        log_verbose(verbose);
@@ -404,6 +404,8 @@ parent_shutdown(struct httpd *env)
 
        proc_kill(env->sc_ps);
        control_cleanup(&env->sc_ps->ps_csock);
+       if (env->sc_ps->ps_csock.cs_name != NULL)
+               (void)unlink(env->sc_ps->ps_csock.cs_name);
 
        free(env->sc_ps);
        free(env);
index 8c72b78..ee742aa 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: control.c,v 1.48 2015/01/22 17:42:09 reyk Exp $       */
+/*     $OpenBSD: control.c,v 1.49 2015/05/28 17:08:09 florian Exp $    */
 
 /*
  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -126,7 +126,6 @@ control_cleanup(struct control_sock *cs)
                return;
        event_del(&cs->cs_ev);
        event_del(&cs->cs_evt);
-       (void)unlink(cs->cs_name);
 }
 
 /* ARGSUSED */
index 729af4b..9e0a348 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: relayd.c,v 1.139 2015/05/02 13:15:24 claudio Exp $    */
+/*     $OpenBSD: relayd.c,v 1.140 2015/05/28 17:08:09 florian Exp $    */
 
 /*
  * Copyright (c) 2007 - 2014 Reyk Floeter <reyk@openbsd.org>
@@ -408,6 +408,7 @@ parent_shutdown(struct relayd *env)
 
        proc_kill(env->sc_ps);
        control_cleanup(&env->sc_ps->ps_csock);
+       (void)unlink(env->sc_ps->ps_csock.cs_name);
        carp_demote_shutdown();
 
        free(env->sc_ps);
index ca47f5e..43468ab 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: control.c,v 1.28 2015/01/16 00:05:13 deraadt Exp $    */
+/*     $OpenBSD: control.c,v 1.29 2015/05/28 17:08:09 florian Exp $    */
 
 /*
  * Copyright (c) 2010-2013 Reyk Floeter <reyk@openbsd.org>
@@ -135,7 +135,6 @@ control_cleanup(struct control_sock *cs)
                return;
        event_del(&cs->cs_ev);
        event_del(&cs->cs_evt);
-       (void)unlink(cs->cs_name);
 }
 
 /* ARGSUSED */
index 37bcf23..b88154b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: snmpd.c,v 1.27 2015/02/08 23:28:48 tedu Exp $ */
+/*     $OpenBSD: snmpd.c,v 1.28 2015/05/28 17:08:09 florian Exp $      */
 
 /*
  * Copyright (c) 2007, 2008, 2012 Reyk Floeter <reyk@openbsd.org>
@@ -241,6 +241,9 @@ snmpd_shutdown(struct snmpd *env)
 {
        proc_kill(&env->sc_ps);
 
+       if (env->sc_ps.ps_csock.cs_name != NULL)
+               (void)unlink(env->sc_ps.ps_csock.cs_name);
+
        free(env);
 
        log_info("terminating");