From patchwork Mon Nov 13 22:58:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Pluzhnikov X-Patchwork-Id: 79785 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 42357392C293 for ; Mon, 13 Nov 2023 23:00:18 +0000 (GMT) X-Original-To: elfutils-devel@sourceware.org Delivered-To: elfutils-devel@sourceware.org Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by sourceware.org (Postfix) with ESMTPS id 398C238560B9 for ; Mon, 13 Nov 2023 23:00:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 398C238560B9 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=flex--ppluzhnikov.bounces.google.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 398C238560B9 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::549 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699916411; cv=none; b=pQS7S2SMoiF9a3IbsVdZQQ4kzgc8o9OqtbAJQpsv7Wgi7Tg+Wpwqr3SYUUVLVi/iZ/lRtofPT/+8i3EwhJPciInJzosW56BOHtOBS2AXfO6pcahMso2e8tBUxsIBRQbxj2vl0+7hd6lB61C1MScfz2TGYZQag23UzBukITyUzok= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699916411; c=relaxed/simple; bh=EMtay5NLksyMflkJSbcNHOuL/mU4LMyo87Wtkd48v/I=; h=DKIM-Signature:Date:Mime-Version:Message-ID:Subject:From:To; b=DqqMP6r4CwToX/SncPF3l0hNp4Fvh4tuEtUn7REGYh5daA/UHP6Ndc7TWddFKPZvrzmvPFWXLDLtJEVptONT7hqZdZNyrqzdaZLd91CVTJlIAf/yK2QtC0MtXH546XFsTMLbKYP8fbB3QvA+Dex9TebztynJ9fBMS86jkQRpaHQ= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pg1-x549.google.com with SMTP id 41be03b00d2f7-5b914c0b7c8so4534347a12.2 for ; Mon, 13 Nov 2023 15:00:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1699916409; x=1700521209; darn=sourceware.org; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=E3N8WVoRLOkhjBrZv4IOmgMW6wphPHeM3tdZaQUJCDA=; b=AwYTNWJjVIUAvu3F7VGQMZw+C5hwcXJ7nNsIuMEs9iGsFD0JhIDQn5z8XKFIb3bFAH 8ncDcXTYUHGG8vDNA7nlKc2fDTTEjI2O+nCrNoE3obfyZtPtcZbug4jRS/5xWWxCUgim 9dO3RaL71IdSdb0ClidPk5HGfCfdDSvKocRs5MxnyHiyItSWjRGx9kxWxfXcBSEwuYPW tXHOEF7E+Droo0GtxN9pu1n87xGwayZW1Mhip2Qd2zNjejBtG09IRKMzCPgrpghvPbuK OV0Mupx1ofHipTv/gjDK7Pn5A8M1evnR4YImUUlvVU6u0Y1uze3/o20lWsg97LkxwS6v Pkbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699916409; x=1700521209; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=E3N8WVoRLOkhjBrZv4IOmgMW6wphPHeM3tdZaQUJCDA=; b=P0XqKqe96IsRSmgqqSBf3Iqe8czUSgIkgO+fy3hMtbLQ/y8PcIHhw9UDx2zjvcgl7D 7CDxNpI5G4kj6TIkh7rz2c/ut1IsB3NgZ9K91XwyY+YQczXTpZ9WlWkH60oUE+eNinuE Nkbj+w3RjDdYs5w9hAmXtG+r2mAwoM01qC0/ycl538bV1CYaVt2k4fbJlRw7OyQ7m3iM x6P/CnZFyDxTUepPoeXp3Tsz3jCT06jw5BkIj0g4CNSrWmRF9sC2NVsDNEW3919z9lSR JA7bXJKao6dHgb+VL3MMaSFdhwJuBZ1lSV6PjbD9cpdkYW9s0OrBkRUHEd0dBhkb1g2l LPMw== X-Gm-Message-State: AOJu0Yxc9SstBd5GKhDG8USM/NQg7jrT+/aWMnebaGg+2Ja1lzg42igC re7C8i/HSNTcNNT4PY8KNdX6RzYmm3SytjkjgmpKTxDC4Kq8IQYM83yK3fb87PCqdsD1PMUStu6 YAwgnfo4S2jU5DASQI98dpvJ1iY+r62JLmJ1qDbeaCzNsSDJizn7RaEIJfM8/mYPOR+fMdEyC3i vaaRglvb5V X-Google-Smtp-Source: AGHT+IFusA4mF/hZh2tJVABJsGETayafIZ/DUZUHxUochAoQeeoZ/d6IpzZwzcPj9+gH5sv2LHtFkuhDez1CJRslUQ== X-Received: from elbrus.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:12e9]) (user=ppluzhnikov job=sendgmr) by 2002:a05:6a02:490:b0:5bd:64f8:ca66 with SMTP id bw16-20020a056a02049000b005bd64f8ca66mr140688pgb.1.1699916409105; Mon, 13 Nov 2023 15:00:09 -0800 (PST) Date: Mon, 13 Nov 2023 22:58:36 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.42.0.869.gea05f2083d-goog Message-ID: <20231113225835.4083255-2-ppluzhnikov@google.com> Subject: [PATCH] Fix computations with (potentially) NULL pointer From: Paul Pluzhnikov To: elfutils-devel@sourceware.org Cc: nafi@google.com, maennich@google.com, Paul Pluzhnikov X-Spam-Status: No, score=-20.1 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: elfutils-devel-bounces+patchwork=sourceware.org@sourceware.org When map_address is NULL, computing map_address+offset is technically undefined behavior, and triggers Clang/LLVM warning when using -fsanitize=pointer-overflow. Fix this by using uintptr_t to perform computations. Signed-off-by: Shahriar "Nafi" Rouf Signed-off-by: Mark Wielaard --- libelf/elf_begin.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c index fe8c640a..da495bef 100644 --- a/libelf/elf_begin.c +++ b/libelf/elf_begin.c @@ -445,15 +445,15 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, { /* This pointer might not be directly usable if the alignment is not sufficient for the architecture. */ - Elf64_Ehdr *ehdr = (Elf64_Ehdr *) ((char *) map_address + offset); + uintptr_t ehdr = (uintptr_t) map_address + offset; /* This is a 64-bit binary. */ if (map_address != NULL && e_ident[EI_DATA] == MY_ELFDATA && (ALLOW_UNALIGNED - || (((uintptr_t) ehdr) & (__alignof__ (Elf64_Ehdr) - 1)) == 0)) + || (ehdr & (__alignof__ (Elf64_Ehdr) - 1)) == 0)) { /* We can use the mmapped memory. */ - elf->state.elf64.ehdr = ehdr; + elf->state.elf64.ehdr = (Elf64_Ehdr *) ehdr; } else { @@ -486,7 +486,7 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, if (map_address != NULL && e_ident[EI_DATA] == MY_ELFDATA && cmd != ELF_C_READ_MMAP /* We need a copy to be able to write. */ && (ALLOW_UNALIGNED - || ((((uintptr_t) ehdr + e_shoff) + || (((ehdr + e_shoff) & (__alignof__ (Elf64_Shdr) - 1)) == 0))) { if (unlikely (scncnt > 0 && e_shoff >= maxsize) @@ -496,7 +496,7 @@ file_read_elf (int fildes, void *map_address, unsigned char *e_ident, if (scncnt > 0) elf->state.elf64.shdr - = (Elf64_Shdr *) ((char *) ehdr + e_shoff); + = (Elf64_Shdr *) (ehdr + e_shoff); for (size_t cnt = 0; cnt < scncnt; ++cnt) {