]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
libbpf: Fix invalid write loop logic in bpf_linker__add_buf()
authorAmery Hung <ameryhung@gmail.com>
Mon, 9 Feb 2026 23:01:34 +0000 (15:01 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 13 Feb 2026 22:14:27 +0000 (14:14 -0800)
Fix bpf_linker__add_buf()'s logic of copying data from memory buffer into
memfd. In the event of short write not writing entire buf_sz bytes into memfd
file, we'll append bytes from the beginning of buf *again* (corrupting ELF
file contents) instead of correctly appending the rest of not-yet-read buf
contents.

Closes: https://github.com/libbpf/libbpf/issues/945
Fixes: 6d5e5e5d7ce1 ("libbpf: Extend linker API to support in-memory ELF files")
Signed-off-by: Amery Hung <ameryhung@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: https://lore.kernel.org/bpf/20260209230134.3530521-1-ameryhung@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/lib/bpf/linker.c

index f4403e3cf99464b0c0883b76a5eeb0b9020d3ed5..78f92c39290af59d31ad75084800889dd4e720bb 100644 (file)
@@ -581,7 +581,7 @@ int bpf_linker__add_buf(struct bpf_linker *linker, void *buf, size_t buf_sz,
 
        written = 0;
        while (written < buf_sz) {
-               ret = write(fd, buf, buf_sz);
+               ret = write(fd, buf + written, buf_sz - written);
                if (ret < 0) {
                        ret = -errno;
                        pr_warn("failed to write '%s': %s\n", filename, errstr(ret));