diff options
author | mckusick <mckusick@FreeBSD.org> | 2010-05-06 17:37:23 +0000 |
---|---|---|
committer | mckusick <mckusick@FreeBSD.org> | 2010-05-06 17:37:23 +0000 |
commit | b25e55dcc52d6203a9ae995ca470a66b6483f71d (patch) | |
tree | 781f2c991a11a3806fdb0891b7a615cb77ebe3ab /sys/kern/kern_sig.c | |
parent | 3a0f5972a0de87aebef1af257922515700da4217 (diff) | |
parent | f3856c6cf2fb115757967b7e32bdeb21bd27d1ee (diff) | |
download | FreeBSD-src-b25e55dcc52d6203a9ae995ca470a66b6483f71d.zip FreeBSD-src-b25e55dcc52d6203a9ae995ca470a66b6483f71d.tar.gz |
Final update to current version of head in preparation for reintegration.
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r-- | sys/kern/kern_sig.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 706433d..789bb61 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -3004,8 +3004,9 @@ expand_name(const char *name, uid_t uid, pid_t pid, struct thread *td, char *temp; size_t i; int indexpos; - char hostname[MAXHOSTNAMELEN]; + char *hostname; + hostname = NULL; format = corefilename; temp = malloc(MAXPATHLEN, M_TEMP, M_NOWAIT | M_ZERO); if (temp == NULL) @@ -3021,8 +3022,21 @@ expand_name(const char *name, uid_t uid, pid_t pid, struct thread *td, sbuf_putc(&sb, '%'); break; case 'H': /* hostname */ + if (hostname == NULL) { + hostname = malloc(MAXHOSTNAMELEN, + M_TEMP, M_NOWAIT); + if (hostname == NULL) { + log(LOG_ERR, + "pid %ld (%s), uid (%lu): " + "unable to alloc memory " + "for corefile hostname\n", + (long)pid, name, + (u_long)uid); + goto nomem; + } + } getcredhostname(td->td_ucred, hostname, - sizeof(hostname)); + MAXHOSTNAMELEN); sbuf_printf(&sb, "%s", hostname); break; case 'I': /* autoincrementing index */ @@ -3048,15 +3062,17 @@ expand_name(const char *name, uid_t uid, pid_t pid, struct thread *td, sbuf_putc(&sb, format[i]); } } + free(hostname, M_TEMP); #ifdef COMPRESS_USER_CORES if (compress) { sbuf_printf(&sb, GZ_SUFFIX); } #endif if (sbuf_overflowed(&sb)) { - sbuf_delete(&sb); log(LOG_ERR, "pid %ld (%s), uid (%lu): corename is too " "long\n", (long)pid, name, (u_long)uid); +nomem: + sbuf_delete(&sb); free(temp, M_TEMP); return (NULL); } |