Author: markj
Date: Tue Jul 28 15:26:19 2020
New Revision: 363649
URL: https://svnweb.freebsd.org/changeset/base/363649

Log:
  ps(1): Fix formatting of the "command" field for kernel threads.
  
  When -H is specified, for kernel threads the command is formatted as
  "<proc name>/<td name>" and truncated to MAXCOMLEN.  But each of the
  proc name and td name may be up to MAXCOMLEN bytes in length.
  
  Also handle the ki_moretdname field to ensure that the full thread name
  gets printed.  This is already handled correctly when formatting for
  "-o tdname".
  
  Reported by:  freqlabs
  Reviewed by:  freqlabs
  MFC after:    1 week
  Differential Revision:        https://reviews.freebsd.org/D25840

Modified:
  head/bin/ps/ps.c

Modified: head/bin/ps/ps.c
==============================================================================
--- head/bin/ps/ps.c    Tue Jul 28 15:16:29 2020        (r363648)
+++ head/bin/ps/ps.c    Tue Jul 28 15:26:19 2020        (r363649)
@@ -1264,6 +1264,7 @@ fmt(char **(*fn)(kvm_t *, const struct kinfo_proc *, i
 static void
 saveuser(KINFO *ki)
 {
+       char tdname[COMMLEN + 1];
        char *argsp;
 
        if (ki->ki_p->ki_flag & P_INMEM) {
@@ -1280,12 +1281,14 @@ saveuser(KINFO *ki)
         * save arguments if needed
         */
        if (needcomm) {
-               if (ki->ki_p->ki_stat == SZOMB)
+               if (ki->ki_p->ki_stat == SZOMB) {
                        ki->ki_args = strdup("<defunct>");
-               else if (UREADOK(ki) || (ki->ki_p->ki_args != NULL))
+               } else if (UREADOK(ki) || (ki->ki_p->ki_args != NULL)) {
+                       (void)snprintf(tdname, sizeof(tdname), "%s%s",
+                           ki->ki_p->ki_tdname, ki->ki_p->ki_moretdname);
                        ki->ki_args = fmt(kvm_getargv, ki,
-                           ki->ki_p->ki_comm, ki->ki_p->ki_tdname, MAXCOMLEN);
-               else {
+                           ki->ki_p->ki_comm, tdname, COMMLEN * 2 + 1);
+               } else {
                        asprintf(&argsp, "(%s)", ki->ki_p->ki_comm);
                        ki->ki_args = argsp;
                }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to