12af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin/* 277c3ff8e0644f1e120e4b2ebc7222150b0446f3bElliott Hughes * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org> 32af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * All rights reserved. 42af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * 52af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * Redistribution and use in source and binary forms, with or without 62af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * modification, are permitted provided that the following conditions 72af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * are met: 82af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * 1. Redistributions of source code must retain the above copyright 92af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * notice, this list of conditions and the following disclaimer. 102af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * 2. Redistributions in binary form must reproduce the above copyright 112af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * notice, this list of conditions and the following disclaimer in the 122af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * documentation and/or other materials provided with the distribution. 132af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * 3. The name of the author may not be used to endorse or promote products 142af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * derived from this software without specific prior written permission. 152af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * 162af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 172af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 182af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 192af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 202af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 212af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 222af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 232af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 242af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 252af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 262af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin */ 272af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin 282af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin#include "defs.h" 292af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin 302af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin#ifdef HAVE_LINUX_SECCOMP_H 312af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin# include <linux/seccomp.h> 322af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin#endif 332af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin#include "xlat/seccomp_ops.h" 342af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin#include "xlat/seccomp_filter_flags.h" 352af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin 36a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(seccomp) 372af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin{ 381252d26db8cf2eddb5acb8b62b1aba8f903b7827Dmitry V. Levin unsigned int op = tcp->u_arg[0]; 39bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes unsigned int flags = tcp->u_arg[1]; 40bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes unsigned int act; 412af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin 421252d26db8cf2eddb5acb8b62b1aba8f903b7827Dmitry V. Levin printxval(seccomp_ops, op, "SECCOMP_SET_MODE_???"); 431252d26db8cf2eddb5acb8b62b1aba8f903b7827Dmitry V. Levin tprints(", "); 442af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin 45bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes switch (op) { 46bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes case SECCOMP_GET_ACTION_AVAIL: 47bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes tprintf("%u, ", flags); 48bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes if (!umove_or_printaddr(tcp, tcp->u_arg[2], &act)) { 49bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes tprints("["); 50bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes printxval(seccomp_ret_action, act, "SECCOMP_RET_???"); 51bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes tprints("]"); 52bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes } 53bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes break; 54bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes 55bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes case SECCOMP_SET_MODE_FILTER: 56bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes printflags(seccomp_filter_flags, flags, 571252d26db8cf2eddb5acb8b62b1aba8f903b7827Dmitry V. Levin "SECCOMP_FILTER_FLAG_???"); 581252d26db8cf2eddb5acb8b62b1aba8f903b7827Dmitry V. Levin tprints(", "); 5977c3ff8e0644f1e120e4b2ebc7222150b0446f3bElliott Hughes decode_seccomp_fprog(tcp, tcp->u_arg[2]); 60bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes break; 61bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes 62bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes case SECCOMP_SET_MODE_STRICT: 63bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes default: 64bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes tprintf("%u, ", flags); 65bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes printaddr(tcp->u_arg[2]); 66bbf97dc20c4ee0e36b4628fe03e0e7db5a11d469Elliott Hughes break; 672af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin } 681252d26db8cf2eddb5acb8b62b1aba8f903b7827Dmitry V. Levin 691252d26db8cf2eddb5acb8b62b1aba8f903b7827Dmitry V. Levin return RVAL_DECODED; 702af6903f456b549fd57ba8beceddec961803cb3dDmitry V. Levin} 71