From ed7492d5090a249c50c49501e8865c05de481c94 Mon Sep 17 00:00:00 2001 From: renoseven Date: Fri, 22 Dec 2023 15:22:03 +0800 Subject: [PATCH 10/15] daemon: fix check build id logic Signed-off-by: renoseven --- upatch/upatch-tool/upatch-elf.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/upatch/upatch-tool/upatch-elf.c b/upatch/upatch-tool/upatch-elf.c index def536c..730c3bd 100644 --- a/upatch/upatch-tool/upatch-elf.c +++ b/upatch/upatch-tool/upatch-elf.c @@ -201,11 +201,18 @@ out: bool check_build_id(struct elf_info *uelf, struct elf_info *relf) { - return uelf->shdrs[uelf->num_build_id].sh_size == - relf->shdrs[relf->num_build_id].sh_size && - !memcmp(uelf->hdr + uelf->shdrs[uelf->num_build_id].sh_offset, - relf->hdr + relf->shdrs[relf->num_build_id].sh_offset, - uelf->shdrs[uelf->num_build_id].sh_size); + if (uelf->shdrs[uelf->num_build_id].sh_size != relf->shdrs[relf->num_build_id].sh_size) { + return false; + } + + void* uelf_build_id = (void *)uelf->hdr + uelf->shdrs[uelf->num_build_id].sh_offset; + void* relf_build_id = (void *)relf->hdr + relf->shdrs[relf->num_build_id].sh_offset; + size_t build_id_len = uelf->shdrs[uelf->num_build_id].sh_size; + + if (memcmp(uelf_build_id, relf_build_id, build_id_len) != 0) { + return false; + } + return true; } void binary_close(struct running_elf *relf) -- 2.33.0