From patchwork Tue Mar 29 22:26:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Wielaard X-Patchwork-Id: 52461 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9BA013858025 for ; Tue, 29 Mar 2022 22:27:11 +0000 (GMT) X-Original-To: elfutils-devel@sourceware.org Delivered-To: elfutils-devel@sourceware.org Received: from gnu.wildebeest.org (gnu.wildebeest.org [45.83.234.184]) by sourceware.org (Postfix) with ESMTPS id C677B3858C50 for ; Tue, 29 Mar 2022 22:27:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C677B3858C50 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=klomp.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=klomp.org Received: from reform (deer0x11.wildebeest.org [172.31.17.147]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by gnu.wildebeest.org (Postfix) with ESMTPSA id E6C1E30008BD; Wed, 30 Mar 2022 00:27:03 +0200 (CEST) Received: by reform (Postfix, from userid 1000) id 523BF2E8218D; Wed, 30 Mar 2022 00:27:03 +0200 (CEST) From: Mark Wielaard To: elfutils-devel@sourceware.org Subject: [PATCH] libelf: Also copy/convert partial datastructures in xlate functions Date: Wed, 30 Mar 2022 00:26:42 +0200 Message-Id: <20220329222642.436873-1-mark@klomp.org> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , Cc: Mark Wielaard Errors-To: elfutils-devel-bounces+patchwork=sourceware.org@sourceware.org Sender: "Elfutils-devel" The generated xlate functions can only convert full datastructures, dropping any trailing partial data on the floor. That means some of the data might be undefined. Just copy over the trailing bytes as is. That data isn't really usable. But at least it is defined data. https://sourceware.org/bugzilla/show_bug.cgi?id=29000 Signed-off-by: Mark Wielaard --- libelf/ChangeLog | 5 +++++ libelf/gelf_xlate.c | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 7fd6202b..299179cb 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,8 @@ +2022-03-29 Mark Wielaard + + * gelf_xlate.c (START): Define and use sz variable. + (END): Use sz variable to decide whether to do a memmove. + 2022-03-24 Mark Wielaard * elf.h: Update from glibc. diff --git a/libelf/gelf_xlate.c b/libelf/gelf_xlate.c index b9e7fd65..6f8c57b7 100644 --- a/libelf/gelf_xlate.c +++ b/libelf/gelf_xlate.c @@ -1,5 +1,6 @@ /* Transformation functions for ELF data types. Copyright (C) 1998,1999,2000,2002,2004,2005,2006,2007,2015 Red Hat, Inc. + Copyright (C) 2022 Mark J. Wielaard This file is part of elfutils. Written by Ulrich Drepper , 1998. @@ -138,9 +139,14 @@ union unaligned int encode __attribute__ ((unused))) \ { ElfW2(Bits, Name) *tdest = (ElfW2(Bits, Name) *) dest; \ ElfW2(Bits, Name) *tsrc = (ElfW2(Bits, Name) *) src; \ + size_t sz = sizeof (ElfW2(Bits, Name)); \ size_t n; \ - for (n = len / sizeof (ElfW2(Bits, Name)); n > 0; ++tdest, ++tsrc, --n) { -#define END(Bits, Name) } } + for (n = len / sz; n > 0; ++tdest, ++tsrc, --n) { +#define END(Bits, Name) \ + } \ + if (len % sz > 0) /* Cannot convert partial structures, just copy. */ \ + memmove (dest, src, len % sz); \ + } #define TYPE_EXTRA(Code) #define TYPE_XLATE(Code) Code #define TYPE_NAME(Type, Name) TYPE_NAME2 (Type, Name)