From owner-svn-src-head@FreeBSD.ORG Thu Nov 24 20:43:37 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C06B1106566B; Thu, 24 Nov 2011 20:43:37 +0000 (UTC) (envelope-from trociny@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 968DA8FC18; Thu, 24 Nov 2011 20:43:37 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pAOKhbiv011950; Thu, 24 Nov 2011 20:43:37 GMT (envelope-from trociny@svn.freebsd.org) Received: (from trociny@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pAOKhbkD011947; Thu, 24 Nov 2011 20:43:37 GMT (envelope-from trociny@svn.freebsd.org) Message-Id: <201111242043.pAOKhbkD011947@svn.freebsd.org> From: Mikolaj Golub Date: Thu, 24 Nov 2011 20:43:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r227955 - in head/sys: kern sys X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Nov 2011 20:43:37 -0000 Author: trociny Date: Thu Nov 24 20:43:37 2011 New Revision: 227955 URL: http://svn.freebsd.org/changeset/base/227955 Log: Add sysctl to get process resource limits. Reviewed by: kib MFC after: 2 weeks Modified: head/sys/kern/kern_proc.c head/sys/sys/sysctl.h Modified: head/sys/kern/kern_proc.c ============================================================================== --- head/sys/kern/kern_proc.c Thu Nov 24 20:37:09 2011 (r227954) +++ head/sys/kern/kern_proc.c Thu Nov 24 20:43:37 2011 (r227955) @@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -2389,6 +2390,48 @@ sysctl_kern_proc_groups(SYSCTL_HANDLER_A return (error); } +/* + * This sysctl allows a process to retrieve the resource limits for + * another process. + */ +static int +sysctl_kern_proc_rlimit(SYSCTL_HANDLER_ARGS) +{ + int *name = (int*) arg1; + u_int namelen = arg2; + struct plimit *limp; + struct proc *p; + int error = 0; + + if (namelen != 1) + return (EINVAL); + + p = pfind((pid_t)name[0]); + if (p == NULL) + return (ESRCH); + + if ((error = p_cansee(curthread, p)) != 0) { + PROC_UNLOCK(p); + return (error); + } + + /* + * Check the request size. We alow sizes smaller rlimit array for + * backward binary compatibility: the number of resource limits may + * grow. + */ + if (sizeof(limp->pl_rlimit) < req->oldlen) { + PROC_UNLOCK(p); + return (EINVAL); + } + + limp = lim_hold(p->p_limit); + PROC_UNLOCK(p); + error = SYSCTL_OUT(req, limp->pl_rlimit, req->oldlen); + lim_free(limp); + return (error); +} + SYSCTL_NODE(_kern, KERN_PROC, proc, CTLFLAG_RD, 0, "Process table"); SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all, CTLFLAG_RD|CTLTYPE_STRUCT| @@ -2484,3 +2527,6 @@ static SYSCTL_NODE(_kern_proc, KERN_PROC static SYSCTL_NODE(_kern_proc, KERN_PROC_GROUPS, groups, CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_kern_proc_groups, "Process groups"); + +static SYSCTL_NODE(_kern_proc, KERN_PROC_RLIMIT, rlimit, CTLFLAG_RD | + CTLFLAG_MPSAFE, sysctl_kern_proc_rlimit, "Process resource limits"); Modified: head/sys/sys/sysctl.h ============================================================================== --- head/sys/sys/sysctl.h Thu Nov 24 20:37:09 2011 (r227954) +++ head/sys/sys/sysctl.h Thu Nov 24 20:43:37 2011 (r227955) @@ -561,6 +561,7 @@ SYSCTL_ALLOWED_TYPES(UINT64, uint64_t *a #define KERN_PROC_GROUPS 34 /* process groups */ #define KERN_PROC_ENV 35 /* get environment */ #define KERN_PROC_AUXV 36 /* get ELF auxiliary vector */ +#define KERN_PROC_RLIMIT 37 /* process resource limits */ /* * KERN_IPC identifiers