[PATCH] api: fix seccomp_export_bpf_mem out-of-bounds read
authorAlyssa Ross <hi@alyssa.is>
Thu, 13 Feb 2025 11:05:17 +0000 (12:05 +0100)
committerFelix Geyer <fgeyer@debian.org>
Thu, 20 Mar 2025 21:12:14 +0000 (22:12 +0100)
*len is the length of the destination buffer, but program->blks is
probably not anywhere near that long.  It's already been checked above
that BPF_PGM_SIZE(program) is less than or equal to *len, so that's
the correct value to use here to avoid either reading or writing too
much.

I noticed this because tests/11-basic-basic_errors started failing on
musl after e797591 ("all: add seccomp_precompute() functionality").

Signed-off-by: Alyssa Ross <hi@alyssa.is>
Acked-by: Tom Hromatka <tom.hromatka@oracle.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
Gbp-Pq: Name api_fix_seccomp_export_bpf_mem_out-of-bounds_read.patch

src/api.c

index adccef32c15b5022fce1fd92d2f95cd6beb5c12f..65a277a4515170336f1a260e1fce11cfb239245c 100644 (file)
--- 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);