Accommodate a basename(3) that takes a non-const parameter and may
in fact modify the string buffer.

Between access(file, ...) and execl(file, ...), no check for
truncation should be necessary.

ok?

Index: usr.sbin/hotplugd/hotplugd.c
===================================================================
RCS file: /cvs/src/usr.sbin/hotplugd/hotplugd.c,v
retrieving revision 1.15
diff -u -p -r1.15 hotplugd.c
--- usr.sbin/hotplugd/hotplugd.c        30 Apr 2019 17:05:15 -0000      1.15
+++ usr.sbin/hotplugd/hotplugd.c        13 Oct 2020 16:19:43 -0000
@@ -28,6 +28,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <libgen.h>
+#include <limits.h>
 #include <signal.h>
 #include <stdarg.h>
 #include <stdio.h>
@@ -163,7 +164,10 @@ exec_script(const char *file, int class,
        }
        if (pid == 0) {
                /* child process */
-               execl(file, basename(file), strclass, name, (char *)NULL);
+               char filebuf[PATH_MAX];
+
+               strlcpy(filebuf, file, sizeof(filebuf));
+               execl(file, basename(filebuf), strclass, name, (char *)NULL);
                syslog(LOG_ERR, "execl %s: %m", file);
                _exit(1);
                /* NOTREACHED */
-- 
Christian "naddy" Weisgerber                          na...@mips.inka.de

Reply via email to