summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorngie <ngie@FreeBSD.org>2017-03-28 06:05:26 +0000
committerngie <ngie@FreeBSD.org>2017-03-28 06:05:26 +0000
commit36550dd2e20ed117f797918355be27e85e62fd49 (patch)
tree396d36f084ac882eb6cb2f99cf3c9c8ec3bed8f5
parent8832cc10cf95a896d6fb7d0054fbb5f6f0d154cd (diff)
downloadFreeBSD-src-36550dd2e20ed117f797918355be27e85e62fd49.zip
FreeBSD-src-36550dd2e20ed117f797918355be27e85e62fd49.tar.gz
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].
-rw-r--r--lib/libkvm/kvm.c7
-rw-r--r--lib/libkvm/kvm_geterr.311
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/libkvm/kvm.c b/lib/libkvm/kvm.c
index b814e8c..e731a29 100644
--- a/lib/libkvm/kvm.c
+++ b/lib/libkvm/kvm.c
@@ -76,9 +76,14 @@ static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94";
/* from src/lib/libc/gen/nlist.c */
int __fdnlist(int, struct nlist *);
+static char _kd_is_null[] = "";
+
char *
kvm_geterr(kvm_t *kd)
{
+
+ if (kd == NULL)
+ return (_kd_is_null);
return (kd->errbuf);
}
@@ -623,5 +628,5 @@ kvm_write(kvm_t *kd, u_long kva, const void *buf, size_t len)
len -= cw;
}
- return (cp - (char *)buf);
+ return (cp - (const char *)buf);
}
diff --git a/lib/libkvm/kvm_geterr.3 b/lib/libkvm/kvm_geterr.3
index 3ce5c72..4aa9cc8 100644
--- a/lib/libkvm/kvm_geterr.3
+++ b/lib/libkvm/kvm_geterr.3
@@ -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 ,
OpenPOWER on IntegriCloud