Skip to content

Commit 42984e8

Browse files
committed
config-linux: Make linux.seccomp.syscalls OPTIONAL
Before this commit, linux.seccomp.sycalls was required, but we didn't require an entry in the array. That means '"syscalls": []' would be technically valid, and I'm pretty sure that's not what we want. If it makes sense to have a seccomp property that does not need syscalls entries, then syscalls should be optional (which is what this commit is doing). If it does not makes sense to have an empty/unset syscalls then it should be required and have a minimum length of one. Before 652323c (improve seccomp format to be more expressive, 2017-01-13, opencontainers#657), syscalls was omitempty (and therefore more optional-feeling, although there was no real Markdown spec for seccomp before 3ca5c6c, config-linux.md: fix seccomp, 2017-03-02, opencontainers#706, so it's hard to know). This commit has gone with OPTIONAL, because a seccomp config which only sets defaultAction seems potentially valid. The SCMP_ACT_KILL example is prompted by: On Tue, Apr 25, 2017 at 01:32:26PM -0700, David Lyle wrote [1]: > Technically, OPTIONAL is the right value, but unless you specify the > default action for seccomp to be SCMP_ACT_ALLOW the result will be > an error at run time. > > I would suggest an additional clarification to this fact in > config-linux.md would be very helpful if marking syscall as > OPTIONAL. I've phrased the example more conservatively, because I'm not sure that SCMP_ACT_ALLOW is the only possible value to avoid an error. For example, perhaps a SCMP_ACT_TRACE default with an empty syscalls array would not die on the first syscall. The point of the example is to remind config authors that without a useful syscalls array, the default value is very important ;). Also add the previously-missing 'required' property to the seccomp JSON Schema entry. [1]: opencontainers#768 (comment) Signed-off-by: W. Trevor King <wking@tremily.us>
1 parent cfc95a5 commit 42984e8

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

config-linux.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,10 @@ The following parameters can be specified to setup seccomp:
610610
* `SCMP_ARCH_PARISC`
611611
* `SCMP_ARCH_PARISC64`
612612

613-
* **`syscalls`** *(array of objects, REQUIRED)* - match a syscall in seccomp.
613+
* **`syscalls`** *(array of objects, OPTIONAL)* - match a syscall in seccomp.
614+
615+
While this property is OPTIONAL, some values of `defaultAction` are not useful without `syscalls` entries.
616+
For example, if `defaultAction` is `SCMP_ACT_KILL` and `syscalls` is empty or unset, the kernel will kill the container process on its first syscall.
614617

615618
Each entry has the following structure:
616619

schema/config-linux.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,10 @@
251251
"$ref": "defs-linux.json#/definitions/Syscall"
252252
}
253253
}
254-
}
254+
},
255+
"required": [
256+
"defaultAction"
257+
]
255258
},
256259
"sysctl": {
257260
"id": "https://opencontainers.org/schema/bundle/linux/sysctl",

specs-go/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ type WindowsNetworkResources struct {
484484
type LinuxSeccomp struct {
485485
DefaultAction LinuxSeccompAction `json:"defaultAction"`
486486
Architectures []Arch `json:"architectures,omitempty"`
487-
Syscalls []LinuxSyscall `json:"syscalls"`
487+
Syscalls []LinuxSyscall `json:"syscalls,omitempty"`
488488
}
489489

490490
// Arch used for additional architectures

0 commit comments

Comments
 (0)