On Wed, Feb 11, 2015 at 1:58 AM, Rui Paulo rpa...@freebsd.org wrote:
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.cTue Feb 10 23:48:06 2015(r278544)
+++ head/sys/kern/kern_sig.cWed 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;
This check is pointless, as you can see in man 9 malloc:
M_WAITOK
Indicates that it is OK to wait for resources. If the request
cannot be immediately fulfilled, the current process is put to
sleep to wait for resources to be released by other processes.
The malloc(), realloc(), and reallocf() functions cannot return
NULL if M_WAITOK is specified.
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-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to svn-src-head-unsubscr...@freebsd.org
___
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to svn-src-head-unsubscr...@freebsd.org