10
"github.com/stretchr/testify/assert"
11
"github.com/stretchr/testify/require"
14
// parseBinfmtMisc parses a binfmt_misc registry entry. It returns the offset,
15
// magic, and mask values, or an error if there was an error parsing the data.
16
// If the returned offset is negative, the entry was disabled or should be
17
// non-fatally ignored for some other reason.
18
func TestParseBinfmtMisc(t *testing.T) {
20
platform, contents string
26
interpreter /usr/bin/qemu-i386-static
29
magic 7f454c4601010100000000000000000002000300
30
mask fffffffffffefe00fffffffffffffffffeffffff
37
interpreter /usr/bin/qemu-x86_64-static
40
magic 7f454c4602010100000000000000000002003e00
41
mask fffffffffffefe00fffffffffffffffffeffffff
48
interpreter /usr/bin/qemu-arm-static
51
magic 7f454c4601010100000000000000000002002800
52
mask ffffffffffffff00fffffffffffffffffeffffff
59
interpreter /usr/bin/qemu-aarch64-static
62
magic 7f454c460201010000000000000000000200b700
63
mask ffffffffffffff00fffffffffffffffffeffffff
70
interpreter /usr/bin/qemu-ppc64le-static
73
magic 7f454c4602010100000000000000000002001500
74
mask ffffffffffffff00fffffffffffffffffeffff00
81
interpreter /usr/bin/qemu-s390x-static
84
magic 7f454c4602020100000000000000000000020016
85
mask ffffffffffffff00fffffffffffffffffffeffff
89
for i := range vectors {
91
t.Run(v.platform, func(t *testing.T) {
92
offset, magic, mask, err := parseBinfmtMisc(fmt.Sprintf("test vector %d", i), strings.NewReader(v.contents))
93
require.NoError(t, err, "parseBinfmtMisc: %v", err)
94
require.GreaterOrEqual(t, offset, 0, "%q shouldn't have been disabled", v.platform)
95
headers := getKnownELFPlatformHeaders()[v.platform]
97
for _, header := range headers {
98
if magicMatch(header, offset, mask, magic) {
102
assert.True(t, matched, "%q did not match an expected header match", v.platform)