seccomp-tools 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -1
- data/ext/ptrace/extconf.rb +2 -0
- data/ext/ptrace/ptrace.c +43 -0
- data/lib/seccomp-tools/asm/asm.rb +1 -1
- data/lib/seccomp-tools/asm/compiler.rb +9 -2
- data/lib/seccomp-tools/asm/tokenizer.rb +3 -2
- data/lib/seccomp-tools/bpf.rb +1 -1
- data/lib/seccomp-tools/cli/asm.rb +5 -5
- data/lib/seccomp-tools/cli/base.rb +3 -2
- data/lib/seccomp-tools/cli/dump.rb +27 -2
- data/lib/seccomp-tools/dumper.rb +55 -2
- data/lib/seccomp-tools/emulator.rb +1 -1
- data/lib/seccomp-tools/logger.rb +40 -0
- data/lib/seccomp-tools/util.rb +6 -3
- data/lib/seccomp-tools/version.rb +1 -1
- metadata +13 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2726a64dc089ec7c492cedad9a98d500c656dce84ca593a505d95a42cd07906c
|
4
|
+
data.tar.gz: c8d3eec04aa38ead5bac1727bb4a1a29199283e648b902edb38df2a7fc4e539f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2639ed20158afda2cc96dfeb16899f417d50180da548b4a45a0024c12119d0b9908649979fb9ab00287d41478f507eb6740ffda855aa238cd82755d774ca82de
|
7
|
+
data.tar.gz: 6e6df86398ee4bde9ff9c54647dc5af95eb03e40001cf6117077afeecf20ecaed12f6e3f53b47bda1e2908094632c12e9d7faee3ee72c2422d7665016e583eff
|
data/README.md
CHANGED
@@ -68,6 +68,8 @@ $ seccomp-tools dump --help
|
|
68
68
|
# If multiple seccomp syscalls have been invoked (see --limit),
|
69
69
|
# results will be written to FILE, FILE_1, FILE_2.. etc.
|
70
70
|
# For example, "--output out.bpf" and the output files are out.bpf, out_1.bpf, ...
|
71
|
+
# -p, --pid PID Dump installed seccomp filters of the existing process.
|
72
|
+
# You must have CAP_SYS_ADMIN (e.g. be root) in order to use this option.
|
71
73
|
|
72
74
|
```
|
73
75
|
|
@@ -79,7 +81,7 @@ This work is done by the `ptrace` syscall.
|
|
79
81
|
NOTICE: beware of the execution file will be executed.
|
80
82
|
```bash
|
81
83
|
$ file spec/binary/twctf-2016-diary
|
82
|
-
# spec/binary/twctf-2016-diary: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/
|
84
|
+
# spec/binary/twctf-2016-diary: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=3648e29153ac0259a0b7c3e25537a5334f50107f, not stripped
|
83
85
|
|
84
86
|
$ seccomp-tools dump spec/binary/twctf-2016-diary
|
85
87
|
# line CODE JT JF K
|
@@ -168,6 +170,7 @@ $ seccomp-tools asm
|
|
168
170
|
# Default: inspect
|
169
171
|
# -a, --arch ARCH Specify architecture.
|
170
172
|
# Supported architectures are <amd64|i386>.
|
173
|
+
# Default: amd64
|
171
174
|
|
172
175
|
# Input file for asm
|
173
176
|
$ cat spec/data/libseccomp.asm
|
@@ -265,6 +268,7 @@ $ seccomp-tools emu --help
|
|
265
268
|
# Usage: seccomp-tools emu [options] BPF_FILE [sys_nr [arg0 [arg1 ... arg5]]]
|
266
269
|
# -a, --arch ARCH Specify architecture.
|
267
270
|
# Supported architectures are <amd64|i386>.
|
271
|
+
# Default: amd64
|
268
272
|
# -q, --[no-]quiet Run quietly, only show emulation result.
|
269
273
|
|
270
274
|
$ seccomp-tools emu spec/data/libseccomp.bpf write 0x3
|
data/ext/ptrace/extconf.rb
CHANGED
data/ext/ptrace/ptrace.c
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
+
#include <errno.h>
|
2
|
+
#include <linux/filter.h>
|
1
3
|
#include <sys/ptrace.h>
|
2
4
|
#include <sys/signal.h>
|
5
|
+
#include <sys/wait.h>
|
3
6
|
|
4
7
|
#include "ruby.h"
|
5
8
|
|
@@ -50,6 +53,40 @@ ptrace_traceme_and_stop(VALUE mod) {
|
|
50
53
|
return Qnil;
|
51
54
|
}
|
52
55
|
|
56
|
+
static VALUE
|
57
|
+
ptrace_attach_and_wait(VALUE _mod, VALUE pid) {
|
58
|
+
long val = ptrace(PTRACE_ATTACH, NUM2LONG(pid), 0, 0);
|
59
|
+
if(val < 0)
|
60
|
+
rb_sys_fail("ptrace attach failed");
|
61
|
+
waitpid(NUM2LONG(pid), NULL, 0);
|
62
|
+
return Qnil;
|
63
|
+
}
|
64
|
+
|
65
|
+
static VALUE
|
66
|
+
ptrace_seccomp_get_filter(VALUE _mod, VALUE pid, VALUE index) {
|
67
|
+
long count = ptrace(PTRACE_SECCOMP_GET_FILTER, NUM2LONG(pid), NUM2LONG(index), NULL);
|
68
|
+
struct sock_filter *filter;
|
69
|
+
VALUE result;
|
70
|
+
if(count < 0)
|
71
|
+
rb_sys_fail("ptrace seccomp_get_filter failed");
|
72
|
+
filter = ALLOC_N(struct sock_filter, count);
|
73
|
+
if(ptrace(PTRACE_SECCOMP_GET_FILTER, NUM2LONG(pid), NUM2LONG(index), filter) != count) {
|
74
|
+
xfree(filter);
|
75
|
+
rb_sys_fail("ptrace seccomp_get_filter failed");
|
76
|
+
}
|
77
|
+
result = rb_str_new((const char *)filter, sizeof(struct sock_filter) * count);
|
78
|
+
xfree(filter);
|
79
|
+
return result;
|
80
|
+
}
|
81
|
+
|
82
|
+
static VALUE
|
83
|
+
ptrace_detach(VALUE _mod, VALUE pid) {
|
84
|
+
long val = ptrace(PTRACE_DETACH, NUM2LONG(pid), 0, 0);
|
85
|
+
if(val < 0)
|
86
|
+
rb_sys_fail(0);
|
87
|
+
return Qnil;
|
88
|
+
}
|
89
|
+
|
53
90
|
|
54
91
|
void Init_ptrace(void) {
|
55
92
|
VALUE mSeccompTools = rb_define_module("SeccompTools");
|
@@ -79,5 +116,11 @@ void Init_ptrace(void) {
|
|
79
116
|
rb_define_module_function(mPtrace, "traceme", ptrace_traceme, 0);
|
80
117
|
/* stop itself before parent attaching */
|
81
118
|
rb_define_module_function(mPtrace, "traceme_and_stop", ptrace_traceme_and_stop, 0);
|
119
|
+
/* attach to an existing process */
|
120
|
+
rb_define_module_function(mPtrace, "attach_and_wait", ptrace_attach_and_wait, 1);
|
121
|
+
/* retrieve seccomp filter */
|
122
|
+
rb_define_module_function(mPtrace, "seccomp_get_filter", ptrace_seccomp_get_filter, 2);
|
123
|
+
/* detach from an existing process */
|
124
|
+
rb_define_module_function(mPtrace, "detach", ptrace_detach, 1);
|
82
125
|
}
|
83
126
|
|
@@ -28,7 +28,7 @@ module SeccompTools
|
|
28
28
|
# EOS
|
29
29
|
# #=> <raw binary bytes>
|
30
30
|
def asm(str, arch: nil)
|
31
|
-
arch = Util.system_arch if arch.nil?
|
31
|
+
arch = Util.system_arch if arch.nil?
|
32
32
|
compiler = Compiler.new(arch)
|
33
33
|
str.lines.each { |l| compiler.process(l) }
|
34
34
|
compiler.compile!.map(&:asm).join
|
@@ -39,6 +39,7 @@ module SeccompTools
|
|
39
39
|
when /\?/ then cmp
|
40
40
|
when /^#{Tokenizer::LABEL_REGEXP}:/ then define_label
|
41
41
|
when /^return/ then ret
|
42
|
+
when /^A\s*=\s*-A/ then alu_neg
|
42
43
|
when /^(A|X)\s*=[^=]/ then assign
|
43
44
|
when /^mem\[\d+\]\s*=\s*(A|X)/ then store
|
44
45
|
when /^A\s*.{1,2}=/ then alu
|
@@ -127,6 +128,8 @@ module SeccompTools
|
|
127
128
|
end
|
128
129
|
|
129
130
|
def compile_alu(op, val)
|
131
|
+
return emit(:alu, :neg) if op == :neg
|
132
|
+
|
130
133
|
val = evaluate(val)
|
131
134
|
src = val == :x ? :x : :k
|
132
135
|
val = 0 if val == :x
|
@@ -146,7 +149,7 @@ module SeccompTools
|
|
146
149
|
emit(:jmp, :ja, k: targ)
|
147
150
|
end
|
148
151
|
|
149
|
-
# Compiles
|
152
|
+
# Compiles comparison.
|
150
153
|
def compile_cmp(op, val, jt, jf)
|
151
154
|
jt = label_offset(jt)
|
152
155
|
jf = label_offset(jf)
|
@@ -267,7 +270,6 @@ module SeccompTools
|
|
267
270
|
end
|
268
271
|
|
269
272
|
# A op= sys_num_x
|
270
|
-
# TODO: support A = -A
|
271
273
|
def alu
|
272
274
|
token.fetch!('A')
|
273
275
|
op = token.fetch!(:alu_op)
|
@@ -276,6 +278,11 @@ module SeccompTools
|
|
276
278
|
[:alu, op, src]
|
277
279
|
end
|
278
280
|
|
281
|
+
# A = -A
|
282
|
+
def alu_neg
|
283
|
+
%i[alu neg]
|
284
|
+
end
|
285
|
+
|
279
286
|
def remove_comment(line)
|
280
287
|
line = line.to_s.dup
|
281
288
|
line.slice!(/#.*\Z/m)
|
@@ -5,8 +5,9 @@ require 'seccomp-tools/instruction/alu'
|
|
5
5
|
|
6
6
|
module SeccompTools
|
7
7
|
module Asm
|
8
|
-
# Fetch tokens from string.
|
9
|
-
#
|
8
|
+
# Fetch tokens from a string.
|
9
|
+
#
|
10
|
+
# Internal used by {Compiler}.
|
10
11
|
# @private
|
11
12
|
class Tokenizer
|
12
13
|
# a valid label
|
data/lib/seccomp-tools/bpf.rb
CHANGED
@@ -80,7 +80,7 @@ module SeccompTools
|
|
80
80
|
# @param [Context] context
|
81
81
|
# Current context.
|
82
82
|
# @yieldparam [Integer] pc
|
83
|
-
# Program
|
83
|
+
# Program counter after this instruction.
|
84
84
|
# @yieldparam [Context] ctx
|
85
85
|
# Context after this instruction.
|
86
86
|
# @return [void]
|
@@ -51,11 +51,11 @@ module SeccompTools
|
|
51
51
|
when :raw then res
|
52
52
|
when :c_array, :carray then "unsigned char bpf[] = {#{res.bytes.join(',')}};\n"
|
53
53
|
when :c_source then SeccompTools::Util.template('asm.c').sub('<TO_BE_REPLACED>', res.bytes.join(','))
|
54
|
-
when :assembly
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
54
|
+
when :assembly
|
55
|
+
SeccompTools::Util.template("asm.#{option[:arch]}.asm").sub(
|
56
|
+
'<TO_BE_REPLACED>',
|
57
|
+
res.bytes.map { |b| format('\\\%03o', b) }.join
|
58
|
+
)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -82,7 +82,7 @@ module SeccompTools
|
|
82
82
|
File.join(File.dirname(file), base + suffix) + ext
|
83
83
|
end
|
84
84
|
|
85
|
-
# For
|
85
|
+
# For descendants to define usage message easily.
|
86
86
|
# @return [String]
|
87
87
|
# Usage information.
|
88
88
|
def usage
|
@@ -92,7 +92,8 @@ module SeccompTools
|
|
92
92
|
def option_arch(opt)
|
93
93
|
supported = Util.supported_archs
|
94
94
|
opt.on('-a', '--arch ARCH', supported, 'Specify architecture.',
|
95
|
-
"Supported architectures are <#{supported.join('|')}>."
|
95
|
+
"Supported architectures are <#{supported.join('|')}>.",
|
96
|
+
"Default: #{Util.system_arch}") do |a|
|
96
97
|
option[:arch] = a
|
97
98
|
end
|
98
99
|
end
|
@@ -1,8 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'shellwords'
|
4
|
+
|
3
5
|
require 'seccomp-tools/cli/base'
|
4
6
|
require 'seccomp-tools/disasm/disasm'
|
5
7
|
require 'seccomp-tools/dumper'
|
8
|
+
require 'seccomp-tools/logger'
|
6
9
|
|
7
10
|
module SeccompTools
|
8
11
|
module CLI
|
@@ -17,6 +20,7 @@ module SeccompTools
|
|
17
20
|
super
|
18
21
|
option[:format] = :disasm
|
19
22
|
option[:limit] = 1
|
23
|
+
option[:pid] = nil
|
20
24
|
end
|
21
25
|
|
22
26
|
# Define option parser.
|
@@ -48,6 +52,12 @@ module SeccompTools
|
|
48
52
|
'For example, "--output out.bpf" and the output files are out.bpf, out_1.bpf, ...') do |o|
|
49
53
|
option[:ofile] = o
|
50
54
|
end
|
55
|
+
|
56
|
+
opt.on('-p', '--pid PID', 'Dump installed seccomp filters of the existing process.',
|
57
|
+
'You must have CAP_SYS_ADMIN (e.g. be root) in order to use this option.',
|
58
|
+
Integer) do |p|
|
59
|
+
option[:pid] = p
|
60
|
+
end
|
51
61
|
end
|
52
62
|
end
|
53
63
|
|
@@ -56,14 +66,29 @@ module SeccompTools
|
|
56
66
|
def handle
|
57
67
|
return unless super
|
58
68
|
|
59
|
-
|
60
|
-
SeccompTools::Dumper.dump('/bin/sh', '-c', option[:command], limit: option[:limit]) do |bpf, arch|
|
69
|
+
block = lambda do |bpf, arch|
|
61
70
|
case option[:format]
|
62
71
|
when :inspect then output { '"' + bpf.bytes.map { |b| format('\\x%02X', b) }.join + "\"\n" }
|
63
72
|
when :raw then output { bpf }
|
64
73
|
when :disasm then output { SeccompTools::Disasm.disasm(bpf, arch: arch) }
|
65
74
|
end
|
66
75
|
end
|
76
|
+
if option[:pid].nil?
|
77
|
+
option[:command] = argv.shift unless argv.empty?
|
78
|
+
SeccompTools::Dumper.dump('/bin/sh', '-c', option[:command], limit: option[:limit], &block)
|
79
|
+
else
|
80
|
+
begin
|
81
|
+
SeccompTools::Dumper.dump_by_pid(option[:pid], option[:limit], &block)
|
82
|
+
rescue Errno::EPERM, Errno::EACCES => e
|
83
|
+
Logger.error(<<~EOS)
|
84
|
+
#{e}
|
85
|
+
PTRACE_SECCOMP_GET_FILTER requires CAP_SYS_ADMIN
|
86
|
+
Try:
|
87
|
+
sudo env "PATH=$PATH" #{(%w[seccomp-tools] + ARGV).shelljoin}
|
88
|
+
EOS
|
89
|
+
exit(1)
|
90
|
+
end
|
91
|
+
end
|
67
92
|
end
|
68
93
|
end
|
69
94
|
end
|
data/lib/seccomp-tools/dumper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'seccomp-tools/logger'
|
3
4
|
require 'seccomp-tools/ptrace'
|
4
5
|
require 'seccomp-tools/syscall'
|
5
6
|
|
@@ -79,6 +80,7 @@ module SeccompTools
|
|
79
80
|
!limit.zero?
|
80
81
|
end
|
81
82
|
syscalls.each_key { |cpid| Process.kill('KILL', cpid) if alive?(cpid) }
|
83
|
+
Process.waitall
|
82
84
|
collect
|
83
85
|
end
|
84
86
|
|
@@ -124,10 +126,61 @@ module SeccompTools
|
|
124
126
|
Ptrace.traceme_and_stop
|
125
127
|
exec(*args)
|
126
128
|
rescue # rubocop:disable Style/RescueStandardError # exec fail
|
127
|
-
|
128
|
-
warn("Failed to execute #{args.join(' ')}")
|
129
|
+
Logger.error("Failed to execute #{args.join(' ')}")
|
129
130
|
exit(1)
|
130
131
|
end
|
131
132
|
end
|
133
|
+
|
134
|
+
# Dump installed seccomp-bpf of an existing process using PTRACE_SECCOMP_GET_FILTER.
|
135
|
+
#
|
136
|
+
# Dump the installed seccomp-bpf from a running process. This is achieved by the ptrace command
|
137
|
+
# PTRACE_SECCOMP_GET_FILTER, which needs CAP_SYS_ADMIN capability.
|
138
|
+
#
|
139
|
+
# @param [Integer] pid
|
140
|
+
# Target process identifier.
|
141
|
+
# @param [Integer] limit
|
142
|
+
# Number of filters to dump. Negative number for unlimited.
|
143
|
+
# @yieldparam [String] bpf
|
144
|
+
# Seccomp bpf in raw bytes.
|
145
|
+
# @yieldparam [Symbol] arch
|
146
|
+
# Architecture of the target process (always nil right now).
|
147
|
+
# @return [Array<Object>, Array<String>]
|
148
|
+
# Return the block returned. If block is not given, array of raw bytes will be returned.
|
149
|
+
# @raise [Errno::ESRCH]
|
150
|
+
# Raises when the target process does not exist.
|
151
|
+
# @raise [Errno::EPERM]
|
152
|
+
# Raises the error if not allowed to attach.
|
153
|
+
# @raise [Errno::EACCES]
|
154
|
+
# Raises the error if not allowed to dump (e.g. no CAP_SYS_ADMIN).
|
155
|
+
# @example
|
156
|
+
# pid1 = Process.spawn('sleep inf')
|
157
|
+
# dump_by_pid(pid1, 1)
|
158
|
+
# # empty because there is no seccomp installed
|
159
|
+
# #=> []
|
160
|
+
# @example
|
161
|
+
# pid2 = Process.spawn('spec/binary/twctf-2016-diary')
|
162
|
+
# # give it some time to install the filter
|
163
|
+
# sleep(1)
|
164
|
+
# dump_by_pid(pid2, 1) { |c| c[0, 10] }
|
165
|
+
# #=> [" \x00\x00\x00\x00\x00\x00\x00\x15\x00"]
|
166
|
+
def dump_by_pid(pid, limit, &block)
|
167
|
+
collect = []
|
168
|
+
Ptrace.attach_and_wait(pid)
|
169
|
+
begin
|
170
|
+
i = 0
|
171
|
+
while limit.negative? || i < limit
|
172
|
+
begin
|
173
|
+
bpf = Ptrace.seccomp_get_filter(pid, i)
|
174
|
+
rescue Errno::ENOENT, Errno::EINVAL
|
175
|
+
break
|
176
|
+
end
|
177
|
+
collect << (block.nil? ? bpf : yield(bpf, nil))
|
178
|
+
i += 1
|
179
|
+
end
|
180
|
+
ensure
|
181
|
+
Ptrace.detach(pid)
|
182
|
+
end
|
183
|
+
collect
|
184
|
+
end
|
132
185
|
end
|
133
186
|
end
|
@@ -42,7 +42,7 @@ module SeccompTools
|
|
42
42
|
when :ld then ld(args[0], args[1]) # ld/ldx
|
43
43
|
when :st then st(args[0], args[1]) # st/stx
|
44
44
|
when :jmp then jmp(args[0]) # directly jmp
|
45
|
-
when :cmp then cmp(*args[0, 4]) # jmp with
|
45
|
+
when :cmp then cmp(*args[0, 4]) # jmp with comparison
|
46
46
|
when :alu then alu(args[0], args[1]) # alu
|
47
47
|
when :misc then misc(args[0]) # misc: txa/tax
|
48
48
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
|
5
|
+
require 'seccomp-tools/util'
|
6
|
+
|
7
|
+
module SeccompTools
|
8
|
+
# A logger for internal use.
|
9
|
+
#
|
10
|
+
# @private
|
11
|
+
module Logger
|
12
|
+
module_function
|
13
|
+
|
14
|
+
# Returns a +::Logger+ object for internal logging.
|
15
|
+
#
|
16
|
+
# @return [::Logger]
|
17
|
+
def logger
|
18
|
+
::Logger.new($stdout).tap do |log|
|
19
|
+
log.formatter = proc do |severity, _datetime, _progname, msg|
|
20
|
+
prep = ' ' * (severity.size + 3)
|
21
|
+
message = msg.lines.map.with_index do |str, i|
|
22
|
+
next str if i.zero?
|
23
|
+
|
24
|
+
str.strip.empty? ? str : prep + str
|
25
|
+
end
|
26
|
+
color = severity.downcase.to_sym
|
27
|
+
msg = +"[#{SeccompTools::Util.colorize(severity, t: color)}] #{message.join}"
|
28
|
+
msg << "\n" unless msg.end_with?("\n")
|
29
|
+
msg
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
%i[error].each do |sym|
|
35
|
+
define_method(sym) do |msg|
|
36
|
+
logger.__send__(sym, msg)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/seccomp-tools/util.rb
CHANGED
@@ -42,13 +42,16 @@ module SeccompTools
|
|
42
42
|
!@disable_color && $stdout.tty?
|
43
43
|
end
|
44
44
|
|
45
|
+
# color code of light yellow
|
46
|
+
LIGHT_YELLOW = "\e[38;5;230m"
|
45
47
|
# Color codes for pretty print.
|
46
48
|
COLOR_CODE = {
|
47
49
|
esc_m: "\e[0m",
|
48
50
|
syscall: "\e[38;5;120m", # light green
|
49
|
-
arch:
|
50
|
-
args:
|
51
|
-
gray: "\e[2m"
|
51
|
+
arch: LIGHT_YELLOW,
|
52
|
+
args: LIGHT_YELLOW,
|
53
|
+
gray: "\e[2m",
|
54
|
+
error: "\e[38;5;196m" # heavy red
|
52
55
|
}.freeze
|
53
56
|
# Wrapper color codes.
|
54
57
|
# @param [String] s
|
metadata
CHANGED
@@ -1,43 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seccomp-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- david942j
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: pry
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.10'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.10'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rake
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
17
|
- - "~>"
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
19
|
+
version: '13.0'
|
34
20
|
type: :development
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
24
|
- - "~>"
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
26
|
+
version: '13.0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: rake-compiler
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,42 +44,42 @@ dependencies:
|
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3.
|
47
|
+
version: '3.9'
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: '3.
|
54
|
+
version: '3.9'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: rubocop
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - "~>"
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0.
|
61
|
+
version: '0.79'
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0.
|
68
|
+
version: '0.79'
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: simplecov
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
73
|
- - "~>"
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
75
|
+
version: 0.17.0
|
90
76
|
type: :development
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
80
|
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
82
|
+
version: 0.17.0
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: yard
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,6 +138,7 @@ files:
|
|
152
138
|
- lib/seccomp-tools/instruction/ret.rb
|
153
139
|
- lib/seccomp-tools/instruction/st.rb
|
154
140
|
- lib/seccomp-tools/instruction/stx.rb
|
141
|
+
- lib/seccomp-tools/logger.rb
|
155
142
|
- lib/seccomp-tools/syscall.rb
|
156
143
|
- lib/seccomp-tools/templates/asm.amd64.asm
|
157
144
|
- lib/seccomp-tools/templates/asm.c
|
@@ -174,14 +161,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
174
161
|
requirements:
|
175
162
|
- - ">="
|
176
163
|
- !ruby/object:Gem::Version
|
177
|
-
version: '2.
|
164
|
+
version: '2.4'
|
178
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
166
|
requirements:
|
180
167
|
- - ">="
|
181
168
|
- !ruby/object:Gem::Version
|
182
169
|
version: '0'
|
183
170
|
requirements: []
|
184
|
-
rubygems_version: 3.0.
|
171
|
+
rubygems_version: 3.0.3
|
185
172
|
signing_key:
|
186
173
|
specification_version: 4
|
187
174
|
summary: seccomp-tools
|