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