seccomp-tools 1.5.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,6 +21,7 @@ module SeccompTools
21
21
  when /x86_64/ then :amd64
22
22
  when /i386/ then :i386
23
23
  when /aarch64/ then :aarch64
24
+ when /s390x/ then :s390x
24
25
  else :unknown
25
26
  end
26
27
  end
@@ -78,7 +79,7 @@ module SeccompTools
78
79
  # @return [String]
79
80
  # Content of the file.
80
81
  def template(filename)
81
- IO.binread(File.join(__dir__, 'templates', filename))
82
+ File.binread(File.join(__dir__, 'templates', filename))
82
83
  end
83
84
  end
84
85
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module SeccompTools
4
4
  # Gem version.
5
- VERSION = '1.5.0'
5
+ VERSION = '1.6.1'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seccomp-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - david942j
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-07 00:00:00.000000000 Z
11
+ date: 2023-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -58,34 +58,28 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '1.1'
61
+ version: '1'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '1.1'
68
+ version: '1'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.17'
76
- - - "<"
77
- - !ruby/object:Gem::Version
78
- version: '0.18'
75
+ version: '0.21'
79
76
  type: :development
80
77
  prerelease: false
81
78
  version_requirements: !ruby/object:Gem::Requirement
82
79
  requirements:
83
80
  - - "~>"
84
81
  - !ruby/object:Gem::Version
85
- version: '0.17'
86
- - - "<"
87
- - !ruby/object:Gem::Version
88
- version: '0.18'
82
+ version: '0.21'
89
83
  - !ruby/object:Gem::Dependency
90
84
  name: yard
91
85
  requirement: !ruby/object:Gem::Requirement
@@ -138,7 +132,12 @@ files:
138
132
  - lib/seccomp-tools.rb
139
133
  - lib/seccomp-tools/asm/asm.rb
140
134
  - lib/seccomp-tools/asm/compiler.rb
141
- - lib/seccomp-tools/asm/tokenizer.rb
135
+ - lib/seccomp-tools/asm/sasm.tab.rb
136
+ - lib/seccomp-tools/asm/sasm.y
137
+ - lib/seccomp-tools/asm/scalar.rb
138
+ - lib/seccomp-tools/asm/scanner.rb
139
+ - lib/seccomp-tools/asm/statement.rb
140
+ - lib/seccomp-tools/asm/token.rb
142
141
  - lib/seccomp-tools/bpf.rb
143
142
  - lib/seccomp-tools/cli/asm.rb
144
143
  - lib/seccomp-tools/cli/base.rb
@@ -151,10 +150,12 @@ files:
151
150
  - lib/seccomp-tools/consts/sys_nr/aarch64.rb
152
151
  - lib/seccomp-tools/consts/sys_nr/amd64.rb
153
152
  - lib/seccomp-tools/consts/sys_nr/i386.rb
153
+ - lib/seccomp-tools/consts/sys_nr/s390x.rb
154
154
  - lib/seccomp-tools/disasm/context.rb
155
155
  - lib/seccomp-tools/disasm/disasm.rb
156
156
  - lib/seccomp-tools/dumper.rb
157
157
  - lib/seccomp-tools/emulator.rb
158
+ - lib/seccomp-tools/error.rb
158
159
  - lib/seccomp-tools/instruction/alu.rb
159
160
  - lib/seccomp-tools/instruction/base.rb
160
161
  - lib/seccomp-tools/instruction/instruction.rb
@@ -170,6 +171,7 @@ files:
170
171
  - lib/seccomp-tools/templates/asm.amd64.asm
171
172
  - lib/seccomp-tools/templates/asm.c
172
173
  - lib/seccomp-tools/templates/asm.i386.asm
174
+ - lib/seccomp-tools/templates/asm.s390x.asm
173
175
  - lib/seccomp-tools/util.rb
174
176
  - lib/seccomp-tools/version.rb
175
177
  homepage:
@@ -188,14 +190,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
188
190
  requirements:
189
191
  - - ">="
190
192
  - !ruby/object:Gem::Version
191
- version: '2.4'
193
+ version: '2.6'
192
194
  required_rubygems_version: !ruby/object:Gem::Requirement
193
195
  requirements:
194
196
  - - ">="
195
197
  - !ruby/object:Gem::Version
196
198
  version: '0'
197
199
  requirements: []
198
- rubygems_version: 3.1.4
200
+ rubygems_version: 3.1.6
199
201
  signing_key:
200
202
  specification_version: 4
201
203
  summary: seccomp-tools
@@ -1,169 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'seccomp-tools/const'
4
- require 'seccomp-tools/instruction/alu'
5
-
6
- module SeccompTools
7
- module Asm
8
- # Fetch tokens from a string.
9
- #
10
- # Internal used by {Compiler}.
11
- # @private
12
- class Tokenizer
13
- # a valid label
14
- LABEL_REGEXP = /[A-Za-z_]\w*/.freeze
15
- attr_accessor :cur
16
-
17
- # @param [String] str
18
- # @example
19
- # Tokenizer.new('return ALLOW')
20
- def initialize(str)
21
- @str = str
22
- @cur = @str.dup
23
- end
24
-
25
- # Fetch a token without raising errors.
26
- def fetch(type)
27
- fetch!(type)
28
- rescue ArgumentError
29
- nil
30
- end
31
-
32
- # Fetch a token. When expected token is not found,
33
- # error with proper message would be raised.
34
- #
35
- # @param [String, Symbol] type
36
- # @example
37
- # tokenizer = Tokenizer.new('return ALLOW')
38
- # tokenfizer.fetch!('return')
39
- # #=> "return"
40
- # tokenizer.fetch!(:ret)
41
- # #=> 2147418112
42
- def fetch!(type)
43
- @last_match_size = 0
44
- res = case type
45
- when String then fetch_str(type) || raise_expected("token #{type.inspect}")
46
- when :comparison then fetch_strs(COMPARISON).to_sym || raise_expected('a comparison operator')
47
- when :sys_num_x then fetch_sys_num_arch_x || raise_expected("a syscall number or 'X'")
48
- when :goto then fetch_number || fetch_label || raise_expected('a number or label name')
49
- when :ret then fetch_return || raise(ArgumentError, <<-EOS)
50
- Invalid return type: #{cur.inspect}.
51
- EOS
52
- when :ax then fetch_ax || raise_expected("'A' or 'X'")
53
- when :ary then fetch_ary || raise_expected('data[<num>], mem[<num>], or args[<num>]')
54
- when :alu_op then fetch_alu || raise_expected('an ALU operator')
55
- else raise ArgumentError, "Unsupported type: #{type.inspect}"
56
- end
57
- slice!
58
- res
59
- end
60
-
61
- private
62
-
63
- COMPARISON = %w[== != <= >= < >].freeze
64
-
65
- def fetch_strs(strs)
66
- strs.find(&method(:fetch_str))
67
- end
68
-
69
- def fetch_str(str)
70
- return nil unless cur.start_with?(str)
71
- return nil if str =~ /\A[A-Za-z0-9_]+\Z/ && cur[str.size] =~ /[A-Za-z0-9_]/
72
-
73
- @last_match_size = str.size
74
- str
75
- end
76
-
77
- def fetch_ax
78
- return :a if fetch_str('A')
79
- return :x if fetch_str('X')
80
-
81
- nil
82
- end
83
-
84
- def fetch_sys_num_arch_x
85
- return :x if fetch_str('X')
86
-
87
- fetch_number || fetch_syscall || fetch_arch
88
- end
89
-
90
- # Currently only supports 10-based decimal numbers.
91
- def fetch_number
92
- res = fetch_regexp(/^0x[0-9a-f]+/) || fetch_regexp(/^[0-9]+/)
93
- return nil if res.nil?
94
-
95
- Integer(res)
96
- end
97
-
98
- def fetch_syscall
99
- sys = Const::Syscall::AMD64
100
- sys = sys.merge(Const::Syscall::I386)
101
- fetch_strs(sys.keys.map(&:to_s).sort_by(&:size).reverse)
102
- end
103
-
104
- def fetch_arch
105
- fetch_strs(Const::Audit::ARCH.keys)
106
- end
107
-
108
- def fetch_regexp(regexp)
109
- idx = cur =~ regexp
110
- return nil if idx.nil? || idx != 0
111
-
112
- match = cur.match(regexp)[0]
113
- @last_match_size = match.size
114
- match
115
- end
116
-
117
- def fetch_label
118
- fetch_regexp(LABEL_REGEXP)
119
- end
120
-
121
- # Convert <type>(num) into return value according to {Const::ACTION}
122
- # @return [Integer, :a]
123
- def fetch_return
124
- regexp = /(#{Const::BPF::ACTION.keys.join('|')})(\([0-9]{1,5}\))?/
125
- action = fetch_regexp(regexp)
126
- return fetch_str('A') && :a if action.nil?
127
-
128
- # check if action contains '('the next bytes are (<num>)
129
- ret_val = 0
130
- if action.include?('(')
131
- action, val = action.split('(')
132
- ret_val = val.to_i
133
- end
134
- Const::BPF::ACTION[action.to_sym] | ret_val
135
- end
136
-
137
- def fetch_ary
138
- support_name = %w[data mem args args_h]
139
- regexp = /(#{support_name.join('|')})\[[0-9]{1,2}\]/
140
- match = fetch_regexp(regexp)
141
- return nil if match.nil?
142
-
143
- res, val = match.split('[')
144
- val = val.to_i
145
- [res.to_sym, val]
146
- end
147
-
148
- def fetch_alu
149
- ops = %w[+ - * / | & ^ << >>]
150
- op = fetch_strs(ops)
151
- return nil if op.nil?
152
-
153
- Instruction::ALU::OP_SYM.invert[op.to_sym]
154
- end
155
-
156
- def slice!
157
- ret = cur.slice!(0, @last_match_size)
158
- cur.strip!
159
- ret
160
- end
161
-
162
- def raise_expected(msg)
163
- raise ArgumentError, <<-EOS
164
- Expected #{msg} but found #{cur.split[0].inspect}.
165
- EOS
166
- end
167
- end
168
- end
169
- end