Re: svn commit: r278545 - head/sys/kern

2015-02-10 Thread Oliver Pinter
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


svn commit: r278545 - head/sys/kern

2015-02-10 Thread Rui Paulo
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;
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