Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Mar 2017 06:03:43 +0000 (UTC)
From:      Ngie Cooper <ngie@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r316071 - stable/11/lib/libkvm
Message-ID:  <201703280603.v2S63hlk006713@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ngie
Date: Tue Mar 28 06:03:43 2017
New Revision: 316071
URL: https://svnweb.freebsd.org/changeset/base/316071

Log:
  MFC r315686,r315688:
  
  r315686:
  
  kvm_geterr: handle `kd` == NULL in a deterministic/graceful manner
  
  Return a NUL string instead of just working by accident with kvm_geterr(3)
  when MALLOC_PRODUCTION is disabled (I didn't confirm the MALLOC_PRODUCTION
  being enabled path).
  
  Document the new explicit return behavior for kvm_geterr(3), as well
  as the previous implicit behavior, i.e., the buffer attached to
  returned via kvm_geterr(3) would be empty if a previous error hadn't been
  stored in `kd`.
  
  r315688:
  
  kvm_write: fix -Wcast-qual warning in pointer arithmetic argument
  
  Cast buf to `const char *` when doing arithmetic operation to match
  `cp`'s type [1].

Modified:
  stable/11/lib/libkvm/kvm.c
  stable/11/lib/libkvm/kvm_geterr.3
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/lib/libkvm/kvm.c
==============================================================================
--- stable/11/lib/libkvm/kvm.c	Tue Mar 28 05:57:20 2017	(r316070)
+++ stable/11/lib/libkvm/kvm.c	Tue Mar 28 06:03:43 2017	(r316071)
@@ -66,6 +66,8 @@ static char sccsid[] = "@(#)kvm.c	8.2 (B
 
 SET_DECLARE(kvm_arch, struct kvm_arch);
 
+static char _kd_is_null[] = "";
+
 /* from src/lib/libc/gen/nlist.c */
 int __fdnlist(int, struct nlist *);
 
@@ -113,6 +115,9 @@ kvm_fdnlist(kvm_t *kd, struct kvm_nlist 
 char *
 kvm_geterr(kvm_t *kd)
 {
+
+	if (kd == NULL)
+		return (_kd_is_null);
 	return (kd->errbuf);
 }
 
@@ -932,7 +937,7 @@ kvm_write(kvm_t *kd, u_long kva, const v
 		len -= cw;
 	}
 
-	return (cp - (char *)buf);
+	return (cp - (const char *)buf);
 }
 
 int

Modified: stable/11/lib/libkvm/kvm_geterr.3
==============================================================================
--- stable/11/lib/libkvm/kvm_geterr.3	Tue Mar 28 05:57:20 2017	(r316070)
+++ stable/11/lib/libkvm/kvm_geterr.3	Tue Mar 28 06:03:43 2017	(r316071)
@@ -32,7 +32,7 @@
 .\"     @(#)kvm_geterr.3	8.1 (Berkeley) 6/4/93
 .\" $FreeBSD$
 .\"
-.Dd June 4, 1993
+.Dd March 21, 2017
 .Dt KVM_GETERR 3
 .Os
 .Sh NAME
@@ -54,6 +54,15 @@ library call did not produce an error.
 The string returned is stored in memory owned by
 .Xr kvm 3
 so the message should be copied out and saved elsewhere if necessary.
+.Sh RETURN VALUES
+The function
+.Fn kvm_geterr
+will return "" if
+.Fa kd
+is
+.Dv NULL
+or an error has not been captured for
+.Fa kd .
 .Sh SEE ALSO
 .Xr kvm 3 ,
 .Xr kvm_close 3 ,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201703280603.v2S63hlk006713>