package rosa

import "hakurei.app/internal/pkg"

func (t Toolchain) newLibseccomp() (pkg.Artifact, string) {
	const (
		version  = "2.6.0"
		checksum = "mMu-iR71guPjFbb31u-YexBaanKE_nYPjPux-vuBiPfS_0kbwJdfCGlkofaUm-EY"
	)
	return t.NewPackage("libseccomp", version, newFromGitHubRelease(
		"seccomp/libseccomp",
		"v"+version,
		"libseccomp-"+version+".tar.gz",
		checksum,
		pkg.TarGzip,
	), &PackageAttr{
		ScriptEarly: `
ln -s ../system/bin/bash /bin/
`,

		Patches: []KV{
			{"fix-export-oob-read", `diff --git a/src/api.c b/src/api.c
index adccef3..65a277a 100644
--- a/src/api.c
+++ b/src/api.c
@@ -786,7 +786,7 @@ API int seccomp_export_bpf_mem(const scmp_filter_ctx ctx, void *buf,
                if (BPF_PGM_SIZE(program) > *len)
                        rc = _rc_filter(-ERANGE);
                else
-                       memcpy(buf, program->blks, *len);
+                       memcpy(buf, program->blks, BPF_PGM_SIZE(program));
        }
        *len = BPF_PGM_SIZE(program);
 
`},
		},
	}, (*MakeHelper)(nil),
		Bash,
		Diffutils,
		Gperf,

		KernelHeaders,
	), version
}
func init() {
	artifactsM[Libseccomp] = Metadata{
		f: Toolchain.newLibseccomp,

		Name:        "libseccomp",
		Description: "an interface to the Linux Kernel's syscall filtering mechanism",
		Website:     "https://github.com/seccomp/libseccomp/",

		ID: 13823,
	}
}
