From nobody Thu May 2 10:33:59 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1652979055; cv=none; d=zohomail.com; s=zohoarc; b=arGn4Emvx82PDUYrHgzQzB0yHto/xyexgISm0IJdCpURP2/Uf4QGI9xO69qRWJY1PGQP0oKK8WjY8JesxppRTEAhnlY2UN6Sg9FozyItHq9w8ek5aOiRqGX4K2jmJ1PqYN6kP9gpQll5bTyLhvCSbil17feZZGqF2NVeagDS9EE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1652979055; h=Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=fkYaPJZ5+Qd9CDGHA3uqtT/cDtvXW/OfvbFVg6Bs+G0=; b=ANqKI1JjixnDfdDJ3cNXRA4B7lSAUlsuXDYUnl35Wt1gmAv6YMElX5N0RyBCOOuZw3V5set4j2Ht2m2hIqV2JyUGqau7YBP44KYMWJjAgWtyNtfA+AxDf1OEVz33NGxgiuBCVFpooKNAIfZYOH/elBZubreDQ2uBO0rEJRqT6ak= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1652979055720111.75122759291685; Thu, 19 May 2022 09:50:55 -0700 (PDT) Received: from localhost ([::1]:39786 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nrjMU-0001oQ-3E for importer2@patchew.org; Thu, 19 May 2022 12:50:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:50144) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nrjKg-00008B-Va for qemu-devel@nongnu.org; Thu, 19 May 2022 12:49:02 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:26178) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nrjKd-0002QK-5V for qemu-devel@nongnu.org; Thu, 19 May 2022 12:49:01 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-625-p_F39id4MxuhShEa9_eMgw-1; Thu, 19 May 2022 12:48:53 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 38368800882; Thu, 19 May 2022 16:48:53 +0000 (UTC) Received: from vp-pc.redhat.com (unknown [10.40.192.115]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 68AB940C1438; Thu, 19 May 2022 16:48:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1652978937; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=fkYaPJZ5+Qd9CDGHA3uqtT/cDtvXW/OfvbFVg6Bs+G0=; b=YdjAaRUpCCzvdh+7PnzWJPEDfrYSO/oUrTgQ0+Uh7njqCHZZBUiqlDIteBfhn7+xSKcV4W aM1AeRUGdJDxx2KTlnQck67IVltHjzDfhsG7ulfT3k5K0vXXfhguZAXJe+BgYA+ROi7oDt yfZMRNedE5bAe7+e8D/PCtroHoUeRnQ= X-MC-Unique: p_F39id4MxuhShEa9_eMgw-1 From: Viktor Prutyanov To: thuth@redhat.com, pbonzini@redhat.com, f4bug@amsat.org, peter.maydell@linaro.org Cc: qemu-devel@nongnu.org, yan@daynix.com, viktor.prutyanov@phystech.edu Subject: [PATCH] contrib/elf2dmp: add ELF dump header checking Date: Thu, 19 May 2022 19:48:49 +0300 Message-Id: <20220519164849.112847-1-viktor.prutyanov@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.84 on 10.11.54.2 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=viktor.prutyanov@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1652979056633100001 Content-Type: text/plain; charset="utf-8" Add ELF header checking to prevent processing input file which is not QEMU guest memory dump or even not ELF. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1013 Signed-off-by: Viktor Prutyanov --- contrib/elf2dmp/qemu_elf.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/contrib/elf2dmp/qemu_elf.c b/contrib/elf2dmp/qemu_elf.c index b601b6d7ba..941b573f17 100644 --- a/contrib/elf2dmp/qemu_elf.c +++ b/contrib/elf2dmp/qemu_elf.c @@ -118,6 +118,39 @@ static void exit_states(QEMU_Elf *qe) free(qe->state); } =20 +static bool check_ehdr(QEMU_Elf *qe) +{ + Elf64_Ehdr *ehdr =3D qe->map; + + if (sizeof(Elf64_Ehdr) > qe->size) { + eprintf("Invalid input dump file size\n"); + return false; + } + + if (memcmp(ehdr->e_ident, ELFMAG, SELFMAG)) { + eprintf("Invalid ELF signature, input file is not ELF\n"); + return false; + } + + if (ehdr->e_ident[EI_CLASS] !=3D ELFCLASS64 || + ehdr->e_ident[EI_DATA] !=3D ELFDATA2LSB) { + eprintf("Invalid ELF class or byte order, must be 64-bit LE\n"); + return false; + } + + if (ehdr->e_type !=3D ET_CORE) { + eprintf("Invalid ELF type, must be core file\n"); + return false; + } + + if (!ehdr->e_phnum) { + eprintf("Invalid number of ELF program headers\n"); + return false; + } + + return true; +} + int QEMU_Elf_init(QEMU_Elf *qe, const char *filename) { GError *gerr =3D NULL; @@ -133,6 +166,11 @@ int QEMU_Elf_init(QEMU_Elf *qe, const char *filename) qe->map =3D g_mapped_file_get_contents(qe->gmf); qe->size =3D g_mapped_file_get_length(qe->gmf); =20 + if (!check_ehdr(qe)) { + err =3D 1; + goto out_unmap; + } + if (init_states(qe)) { eprintf("Failed to extract QEMU CPU states\n"); err =3D 1; --=20 2.35.1