Author: rpaulo
Date: Wed Feb 11 00:58:15 2015
New Revision: 278545
URL: https://svnweb.freebsd.org/changeset/base/278545

Log:
  Restore the data array in coredump(), but use a different style to
  calculate the length.
  
  Requested by: kib

Modified:
  head/sys/kern/kern_sig.c

Modified: head/sys/kern/kern_sig.c
==============================================================================
--- head/sys/kern/kern_sig.c    Tue Feb 10 23:48:06 2015        (r278544)
+++ head/sys/kern/kern_sig.c    Wed Feb 11 00:58:15 2015        (r278545)
@@ -3261,9 +3261,11 @@ coredump(struct thread *td)
        void *rl_cookie;
        off_t limit;
        int compress;
-       char data[MAXPATHLEN * 2 + 16]; /* space for devctl notification */
+       char *data = NULL;
        char *fullpath, *freepath = NULL;
        size_t len;
+       static const char comm_name[] = "comm=";
+       static const char core_name[] = "core=";
 
 #ifdef COMPRESS_USER_CORES
        compress = compress_user_cores;
@@ -3357,25 +3359,31 @@ close:
         */
        if (coredump_devctl == 0)
                goto out;
+       len = MAXPATHLEN * 2 + sizeof(comm_name) - 1 +
+           sizeof(' ') + sizeof(core_name) - 1;
+       data = malloc(len, M_TEMP, M_WAITOK);
+       if (data == NULL)
+               goto out;
        if (vn_fullpath_global(td, p->p_textvp, &fullpath, &freepath) != 0)
                goto out;
        if (!coredump_sanitise_path(fullpath))
                goto out;
-       snprintf(data, sizeof(data), "comm=%s ", fullpath);
+       snprintf(data, len, "%s%s ", comm_name, fullpath);
        free(freepath, M_TEMP);
        freepath = NULL;
        if (vn_fullpath_global(td, vp, &fullpath, &freepath) != 0)
                goto out;
        if (!coredump_sanitise_path(fullpath))
                goto out;
-       strlcat(data, "core=", sizeof(data));
-       len = strlcat(data, fullpath, sizeof(data));
+       strlcat(data, core_name, len);
+       strlcat(data, fullpath, len);
        devctl_notify("kernel", "signal", "coredump", data);
 out:
 #ifdef AUDIT
        audit_proc_coredump(td, name, error);
 #endif
        free(freepath, M_TEMP);
+       free(data, M_TEMP);
        free(name, M_TEMP);
        return (error);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to