%%% @copyright 2012-2020 Michael Santos %%% 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. %%% %%% 3. Neither the name of the copyright holder 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 COPYRIGHT HOLDERS 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 COPYRIGHT %%% HOLDER 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. -module(perc_prctl). -include("perc.hrl"). -include("perc_prctl.hrl"). -export([ arch/0, arch/1, define/1, seccomp_data/1 ]). arch() -> case erlang:system_info(system_architecture) of "x86_64" ++ _ -> arch(x86_64); "i386" ++ _ -> arch(i386); _ -> {error, unsupported} end. % linux/audit.h arch(x86_64) -> 16#C000003E; arch(i386) -> 16#40000003. define(pr_get_seccomp) -> ?PR_GET_SECCOMP; define(pr_set_seccomp) -> ?PR_SET_SECCOMP. % struct seccomp_data { % int nr; % __u32 arch; % __u64 instruction_pointer; % __u64 args[6]; % }; seccomp_data(#seccomp_data{ nr = NR, arch = Arch, instruction_pointer = Ptr, args = Args }) -> <>; seccomp_data(<>) -> #seccomp_data{ nr = NR, arch = Arch, instruction_pointer = Ptr, args = Args }.