/* // AUTHOR // James Quick // N. Nielsen // // LICENSE // This software is in the public domain. // // The software is provided "as is", without warranty of any kind, // express or implied, including but not limited to the warranties // of merchantability, fitness for a particular purpose, and // noninfringement. In no event shall the author(s) be liable for any // claim, damages, or other liability, whether in an action of // contract, tort, or otherwise, arising from, out of, or in connection // with the software or the use or other dealings in the software. // // SUPPORT // Send bug reports to: // // injail // A utility function to determine if a process is running in a FreeBSD jail. // // This code was written by James E. Quick mailto:jq@quick.com // The code may be freely re-used under the terms of the BSD copyright, // as long as this comment remains intact. */ #include #include #include #include #include #include #include #include #include #if __FreeBSD_version > 500000 #define P_FLAG ki_flag #else #define P_FLAG kp_proc.p_flag #endif /* int injail() * Return 1 if running in a jail, 0 if not, -1 on error * jq 05/28/2002 */ int injail () { int count = 0; kvm_t* kd = 0; struct kinfo_proc* kp; char *memf, *nlistf, *swapf, errbuf[_POSIX2_LINE_MAX]; int result = -1; memf = nlistf = swapf = _PATH_DEVNULL; kd = kvm_openfiles(nlistf, memf, swapf, O_RDONLY, errbuf); if(kd) { kp = kvm_getprocs(kd, KERN_PROC_PID, getpid(), &count); if(kp) result = (kp->P_FLAG & P_JAILED) ? 1 : 0; kvm_close(kd); } return result; }