Remove kvm_getfiles(3)

This libcall has been broken since (at least) r174989/8.0-RELEASE.

Bump SHLIB_MAJOR for the change

Differential Revision: https://reviews.freebsd.org/D6052
Relnotes: yes
Reviewed by: jhb, markj
Sponsored by: EMC / Isilon Storage Division
This commit is contained in:
Enji Cooper 2016-04-30 09:21:13 +00:00
parent 68b68bf55d
commit 7aad67e9ca
6 changed files with 7 additions and 319 deletions

View File

@ -38,6 +38,9 @@
# xargs -n1 | sort | uniq -d;
# done
# 20160430: kvm_getfiles(3) removed from kvm(3)
OLD_LIBS+=usr/lib/libkvm.so.6
OLD_FILES+=usr/share/man/man3/kvm_getfiles.3.gz
# 20160423: remove mroute6d
OLD_FILES+=etc/rc.d/mroute6d
# 20160419: rename units.lib -> definitions.units

View File

@ -5,12 +5,12 @@ PACKAGE=lib${LIB}
LIB= kvm
SHLIBDIR?= /lib
SHLIB_MAJOR= 6
SHLIB_MAJOR= 7
CFLAGS+=-DLIBC_SCCS -I${.CURDIR}
WARNS?= 3
SRCS= kvm.c kvm_cptime.c kvm_file.c kvm_getloadavg.c \
SRCS= kvm.c kvm_cptime.c kvm_getloadavg.c \
kvm_getswapinfo.c kvm_pcpu.c kvm_proc.c kvm_vnet.c \
kvm_minidump_aarch64.c \
kvm_amd64.c kvm_minidump_amd64.c \
@ -23,7 +23,7 @@ INCS= kvm.h
LIBADD= elf
MAN= kvm.3 kvm_getcptime.3 kvm_geterr.3 kvm_getfiles.3 kvm_getloadavg.3 \
MAN= kvm.3 kvm_getcptime.3 kvm_geterr.3 kvm_getloadavg.3 \
kvm_getpcpu.3 kvm_getprocs.3 kvm_getswapinfo.3 kvm_native.3 \
kvm_nlist.3 kvm_open.3 kvm_read.3

View File

@ -32,7 +32,7 @@
.\" @(#)kvm.3 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
.Dd November 27, 2015
.Dd April 30, 2016
.Dt KVM 3
.Os
.Sh NAME
@ -144,7 +144,6 @@ and
.Xr kvm_getargv 3 ,
.Xr kvm_getenvv 3 ,
.Xr kvm_geterr 3 ,
.Xr kvm_getfiles 3 ,
.Xr kvm_getloadavg 3 ,
.Xr kvm_getprocs 3 ,
.Xr kvm_getswapinfo 3 ,

View File

@ -82,7 +82,6 @@ char **kvm_getargv(kvm_t *, const struct kinfo_proc *, int);
int kvm_getcptime(kvm_t *, long *);
char **kvm_getenvv(kvm_t *, const struct kinfo_proc *, int);
char *kvm_geterr(kvm_t *);
char *kvm_getfiles(kvm_t *, int, int, int *);
int kvm_getloadavg(kvm_t *, double [], int);
int kvm_getmaxcpu(kvm_t *);
int kvm_getncpus(kvm_t *);

View File

@ -1,226 +0,0 @@
/*-
* Copyright (c) 1989, 1992, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#if defined(LIBC_SCCS) && !defined(lint)
#if 0
static char sccsid[] = "@(#)kvm_file.c 8.1 (Berkeley) 6/4/93";
#endif
#endif /* LIBC_SCCS and not lint */
/*
* File list interface for kvm. pstat, fstat and netstat are
* users of this code, so we've factored it out into a separate module.
* Thus, we keep this grunge out of the other kvm applications (i.e.,
* most other applications are interested only in open/close/read/nlist).
*/
#include <sys/param.h>
#include <sys/user.h>
#include <sys/proc.h>
#define _WANT_FILE /* make file.h give us 'struct file' */
#include <sys/file.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <nlist.h>
#include <kvm.h>
#include <vm/vm.h>
#include <vm/vm_param.h>
#include <sys/sysctl.h>
#include <limits.h>
#include <ndbm.h>
#include <paths.h>
#include <stdlib.h>
#include "kvm_private.h"
#define KREAD(kd, addr, obj) \
(kvm_read(kd, addr, obj, sizeof(*obj)) != sizeof(*obj))
#define KREADN(kd, addr, obj, cnt) \
(kvm_read(kd, addr, obj, (cnt)) != (ssize_t)(cnt))
/*
* Get file structures.
*/
static int
kvm_deadfiles(kvm_t *kd, int op __unused, int arg __unused, long allproc_o,
int nprocs __unused)
{
struct proc proc;
struct filedesc filed;
int buflen = kd->arglen, ocnt = 0, n = 0, once = 0, i;
struct file **ofiles;
struct file *fp;
struct proc *p;
char *where = kd->argspc;
if (buflen < (int)(sizeof(struct file *) + sizeof(struct file)))
return (0);
if (KREAD(kd, allproc_o, &p)) {
_kvm_err(kd, kd->program, "cannot read allproc");
return (0);
}
for (; p != NULL; p = LIST_NEXT(&proc, p_list)) {
if (KREAD(kd, (u_long)p, &proc)) {
_kvm_err(kd, kd->program, "can't read proc at %p", p);
goto fail;
}
if (proc.p_state == PRS_NEW)
continue;
if (proc.p_fd == NULL)
continue;
if (KREAD(kd, (u_long)p->p_fd, &filed)) {
_kvm_err(kd, kd->program, "can't read filedesc at %p",
p->p_fd);
goto fail;
}
if (filed.fd_lastfile + 1 > ocnt) {
ocnt = filed.fd_lastfile + 1;
free(ofiles);
ofiles = (struct file **)_kvm_malloc(kd,
ocnt * sizeof(struct file *));
if (ofiles == 0)
return (0);
}
if (KREADN(kd, (u_long)filed.fd_ofiles, ofiles,
ocnt * sizeof(struct file *))) {
_kvm_err(kd, kd->program, "can't read ofiles at %p",
filed.fd_ofiles);
return (0);
}
for (i = 0; i <= filed.fd_lastfile; i++) {
if ((fp = ofiles[i]) == NULL)
continue;
/*
* copyout filehead (legacy)
*/
if (!once) {
*(struct file **)kd->argspc = fp;
*(struct file **)where = fp;
buflen -= sizeof (fp);
where += sizeof (fp);
once = 1;
}
if (buflen < (int)sizeof(struct file))
goto fail;
if (KREAD(kd, (long)fp, ((struct file *)where))) {
_kvm_err(kd, kd->program, "can't read kfp");
goto fail;
}
buflen -= sizeof (struct file);
fp = (struct file *)where;
where += sizeof (struct file);
n++;
}
}
free(ofiles);
return (n);
fail:
free(ofiles);
return (0);
}
char *
kvm_getfiles(kvm_t *kd, int op, int arg, int *cnt)
{
int mib[2], st, n, nfiles, nprocs;
size_t size;
_kvm_syserr(kd, kd->program, "kvm_getfiles has been broken for years");
return (0);
if (ISALIVE(kd)) {
size = 0;
mib[0] = CTL_KERN;
mib[1] = KERN_FILE;
st = sysctl(mib, 2, NULL, &size, NULL, 0);
if (st == -1) {
_kvm_syserr(kd, kd->program, "kvm_getfiles");
return (0);
}
if (kd->argspc == 0)
kd->argspc = (char *)_kvm_malloc(kd, size);
else if (kd->arglen < (int)size)
kd->argspc = (char *)_kvm_realloc(kd, kd->argspc, size);
if (kd->argspc == 0)
return (0);
kd->arglen = size;
st = sysctl(mib, 2, kd->argspc, &size, NULL, 0);
if (st != 0) {
_kvm_syserr(kd, kd->program, "kvm_getfiles");
return (0);
}
nfiles = size / sizeof(struct xfile);
} else {
struct nlist nl[4], *p;
nl[0].n_name = "_allproc";
nl[1].n_name = "_nprocs";
nl[2].n_name = "_nfiles";
nl[3].n_name = 0;
if (kvm_nlist(kd, nl) != 0) {
for (p = nl; p->n_type != 0; ++p)
;
_kvm_err(kd, kd->program,
"%s: no such symbol", p->n_name);
return (0);
}
if (KREAD(kd, nl[1].n_value, &nprocs)) {
_kvm_err(kd, kd->program, "can't read nprocs");
return (0);
}
if (KREAD(kd, nl[2].n_value, &nfiles)) {
_kvm_err(kd, kd->program, "can't read nfiles");
return (0);
}
size = sizeof(void *) + (nfiles + 10) * sizeof(struct file);
if (kd->argspc == 0)
kd->argspc = (char *)_kvm_malloc(kd, size);
else if (kd->arglen < (int)size)
kd->argspc = (char *)_kvm_realloc(kd, kd->argspc, size);
if (kd->argspc == 0)
return (0);
kd->arglen = size;
n = kvm_deadfiles(kd, op, arg, nl[0].n_value, nprocs);
if (n != nfiles) {
_kvm_err(kd, kd->program, "inconsistant nfiles");
return (0);
}
nfiles = n;
}
*cnt = nfiles;
return (kd->argspc);
}

View File

@ -1,87 +0,0 @@
.\" Copyright (c) 1992, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
.\" This code is derived from software developed by the Computer Systems
.\" Engineering group at Lawrence Berkeley Laboratory under DARPA contract
.\" BG 91-66 and contributed to Berkeley.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 4. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" @(#)kvm_getfiles.3 8.2 (Berkeley) 4/19/94
.\" $FreeBSD$
.\"
.Dd April 19, 1994
.Dt KVM_GETFILES 3
.Os
.Sh NAME
.Nm kvm_getfiles
.Nd survey open files
.Sh LIBRARY
.Lb libkvm
.Sh SYNOPSIS
.In kvm.h
.In sys/types.h
.Fd #define _KERNEL
.In sys/file.h
.Fd #undef _KERNEL
.\" .Fa kvm_t *kd
.Ft char *
.Fn kvm_getfiles "kvm_t *kd" "int op" "int arg" "int *cnt"
.Sh DESCRIPTION
The
.Fn kvm_getfiles
function returns a (sub-)set of the open files in the kernel indicated by
.Fa kd .
The
.Fa op
and
.Fa arg
arguments constitute a predicate which limits the set of files
returned.
No predicates are currently defined.
.Pp
The number of files found is returned in the reference parameter
.Fa cnt .
The files are returned as a contiguous array of file structures,
preceded by the address of the first file entry in the kernel.
This memory is owned by kvm and is not guaranteed to be persistent across
subsequent kvm library calls.
Data should be copied out if it needs to be
saved.
.Sh RETURN VALUES
The
.Fn kvm_getfiles
function will return NULL on failure.
.Sh SEE ALSO
.Xr kvm 3 ,
.Xr kvm_close 3 ,
.Xr kvm_geterr 3 ,
.Xr kvm_nlist 3 ,
.Xr kvm_open 3 ,
.Xr kvm_openfiles 3 ,
.Xr kvm_read 3 ,
.Xr kvm_write 3
.Sh BUGS
This routine does not belong in the kvm interface.