From 7ec96ee972957b2997330ecef51aad0ca1235448 Mon Sep 17 00:00:00 2001 From: wargio Date: Mon, 22 Aug 2022 20:18:17 +0200 Subject: [PATCH] fix #2964 - double-free in bin_qnx.c --- librz/bin/p/bin_qnx.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/librz/bin/p/bin_qnx.c b/librz/bin/p/bin_qnx.c index d44319a9b29..ba09529f8d1 100644 --- a/librz/bin/p/bin_qnx.c +++ b/librz/bin/p/bin_qnx.c @@ -191,7 +191,24 @@ static RzBinInfo *info(RzBinFile *bf) { static RzList *relocs(RzBinFile *bf) { rz_return_val_if_fail(bf && bf->o, NULL); QnxObj *qo = bf->o->bin_obj; - return rz_list_clone(qo->fixups); + RzBinReloc *reloc = NULL; + RzListIter *it = NULL; + RzList *relocs = rz_list_newf(free); + if (!relocs) { + return NULL; + } + + rz_list_foreach (qo->fixups, it, reloc) { + RzBinReloc *copy = RZ_NEW0(RzBinReloc); + if (!copy) { + break; + } + copy->vaddr = reloc->vaddr; + copy->paddr = reloc->paddr; + copy->type = reloc->type; + rz_list_append(relocs, copy); + } + return relocs; } static void header(RzBinFile *bf) {