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`.

Differential Revision:	D10022
MFC after:	1 week
Reviewed by:	vangyzen
Sponsored by:	Dell EMC Isilon
This commit is contained in:
ngie 2017-03-21 19:02:17 +00:00
parent 7d488f1e47
commit df2e194601
2 changed files with 15 additions and 1 deletions

View File

@ -66,9 +66,14 @@ static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94";
SET_DECLARE(kvm_arch, struct kvm_arch);
static char _kd_is_null[] = "";
char *
kvm_geterr(kvm_t *kd)
{
if (kd == NULL)
return (_kd_is_null);
return (kd->errbuf);
}

View File

@ -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 ,