Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp1416002ybi; Wed, 17 Jul 2019 15:03:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqy/JpTlCMYy9VVxppjf9O0axReIWGqJO/5sO4xcFGhzURAsKU8g9O3D2OFcyWILmKfSIdY8 X-Received: by 2002:a17:90a:270f:: with SMTP id o15mr46804728pje.56.1563401012171; Wed, 17 Jul 2019 15:03:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563401012; cv=none; d=google.com; s=arc-20160816; b=Hun4OtFQc5NGyrj8uGtCBeNX+8IDCdI17TlXISeZtvqKuK3kes45eSTvvnWmhver/M CscEbU3NqmTrfEsmgaiIiHP2Isw9IM6brnb3XI9hDylXmbeg2HtXC6zAyZIPifMzQqL9 ItydK5rmyiIT7BlYFjQPLYrmSVeztmI8a0gE4+7IxuQ5+Z+laEptWBA3Uc5JLsO2w8rQ X+Kv4+kYryI8uXZ01e4yr21p1ZTM4PHWgy2JPsVccBC5mjngi3chIWqMMFlyZsGtgXLc 4ESTRc/oID0xujBejhvAsEh7cwy6aI5W2uK8kJrXBaVuvEMYj8cuHGPQ/q6dfj6Qi/2c 0DaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=fTLcLaPhVwoKKpKMc1I9xT0INE94L4TgQfexrydY+cA=; b=Nksp4JkJkyYYyFITsnPvJKfUrLq3f5ULUg8IZH1Qgt0vkZhhfTO6rJYGEhy9M+eKpJ 47vIegkXFdY8L0hmZKtRt7UL3AHvvpJQyOEx4NS+EI61iQkbcH5CeKrfTLBXUV+gVj+d Y500j9GJV6+vKfGRdH0oZskpp+AHX6zYimmCz5y1gWqpu0QxogJXo1k4xZytN9yNI+tw XOg/iYpEJ7fvKGzBWjO/N5BKo79SWjLgODCMFIQv4cEqNVXNQHk+NLnvQq1SzAx3k3Iw /h4lKigFQwNXhPPV0jUvnhkbcsmfg2q7WRjzLIERw4CAMCl89WfYq9urPABc2FS4rQsE yZCQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=Z8mzWEN0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q13si23899604pls.369.2019.07.17.15.03.15; Wed, 17 Jul 2019 15:03:32 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=Z8mzWEN0; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728262AbfGQWBc (ORCPT + 99 others); Wed, 17 Jul 2019 18:01:32 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:40807 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727382AbfGQWBb (ORCPT ); Wed, 17 Jul 2019 18:01:31 -0400 Received: by mail-pg1-f195.google.com with SMTP id w10so11813117pgj.7 for ; Wed, 17 Jul 2019 15:01:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=fTLcLaPhVwoKKpKMc1I9xT0INE94L4TgQfexrydY+cA=; b=Z8mzWEN0CeWUNvwKhn1qfilBTBRC7WxTjomnVsKPHQU0ElCU8F0S+0b6hmIm7/nhch +DifBmtphlUm+XiggXkiUNvdXglwFDqpqRYwxBJ1aOOituDUlQ5cPcH9WfCGseEHOFw8 dDQZwj8eABofHwsXh91agobn7fLXtduOSolkjgIHCQv/JlOq7DmttmbAYWr2vOlJHh/X phhszvm1zTiHpZUGPBawQGRzDFNXcee7ET2hvB3e81ksWT88LZYlNsbh3x47Hm/XlI/B u/OFwzWhaWgaDyCoNr42/zXR8ZJo1XWCYRP7jHIEVOQDhNfXPOTXnrdvEzUwqf+8fBHz lHxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=fTLcLaPhVwoKKpKMc1I9xT0INE94L4TgQfexrydY+cA=; b=Pg1SFDOhbOEdE7qEpJqZD6yDRW+5DX14cE+f3SYkcKxgMqVmyj1tz623bdq4r5X9zS PBB9D8/OnCjbGI20p1r8cmg9WPRzaIsnD2zeu2zSM302fGf5XIJTR/2qeBv3P3Pe1Xgv ObNYLNpBSJdVXhg22AYPkNF0+nLzG4VWvEbZaeIzS2A6yFCSLmxPyznQi34ZZA9Clxvc MEigtUqqKdxYHRQ1jejjNqo3600ztocVSUHKYxE3hsfS/8WNFrpZB2zn6RO7ULureHLn hQhrSXb4FfeOMMMlgJ2JgofmNJy1/HwEBVqJWCZsvo2NKrBkMKfFMtZX3Ock/ukUUH3C WmvQ== X-Gm-Message-State: APjAAAV3DVPBTkl+My4Mnf3hCBWhZhiHm9IFZVO/7Z9ciOtxjKTQ97JW kUzANvNb5pZqxiqVFD26L7zrLXAbnOnIAdkc8slXkA== X-Received: by 2002:a17:90a:2488:: with SMTP id i8mr45895718pje.123.1563400889995; Wed, 17 Jul 2019 15:01:29 -0700 (PDT) MIME-Version: 1.0 References: <20190717033807.1207-1-cai@lca.pw> In-Reply-To: <20190717033807.1207-1-cai@lca.pw> From: Nick Desaulniers Date: Wed, 17 Jul 2019 15:01:18 -0700 Message-ID: Subject: Re: [PATCH] acpica: fix -Wnull-pointer-arithmetic warnings To: Qian Cai Cc: rafael.j.wysocki@intel.com, robert.moore@intel.com, erik.schmauss@intel.com, jkim@freebsd.org, Len Brown , linux-acpi@vger.kernel.org, devel@acpica.org, clang-built-linux , LKML Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jul 16, 2019 at 8:38 PM Qian Cai wrote: > > Clang generate quite a few of those warnings. > > drivers/acpi/scan.c:759:28: warning: arithmetic on a null pointer > treated as a cast from integer to pointer is a GNU extension > [-Wnull-pointer-arithmetic] > status = acpi_get_handle(ACPI_ROOT_OBJECT, > obj->string.pointer, > ^~~~~~~~~~~~~~~~ > ./include/acpi/actypes.h:458:56: note: expanded from macro > 'ACPI_ROOT_OBJECT' > #define ACPI_ROOT_OBJECT ((acpi_handle) ACPI_TO_POINTER > (ACPI_MAX_PTR)) > ^~~~~~~~~~~~~~~ > ./include/acpi/actypes.h:509:41: note: expanded from macro > 'ACPI_TO_POINTER' > #define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) 0, > (acpi_size) (i)) > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > ./include/acpi/actypes.h:503:84: note: expanded from macro > 'ACPI_ADD_PTR' > #define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, > (ACPI_CAST_PTR (u8, (a)) + (acpi_size)(b))) > ^~~~~~~~~~~~~~~~~ > ./include/acpi/actypes.h:501:66: note: expanded from macro > 'ACPI_CAST_PTR' > #define ACPI_CAST_PTR(t, p) ((t *) (acpi_uintptr_t) (p)) > ^ > This is because pointer arithmetic on a pointer not pointing to an array > is an undefined behavior. Fix it by doing an integer arithmetic > instead. Hi Qian, thanks for the patch. How do I reproduce this issue, precisely? I just tried: $ make CC=clang -j71 drivers/acpi/scan.o on linux-next today and don't observe the warning. My clang is ToT built sometime this week. It looks like drivers/acpi/scan.o when CONFIG_ACPI=y, which is set in the defconfig. Is there another set of configs to enable to observe the warning? Also, the fix is curious. Arithmetic on pointers to different "objects" (with one element passed the end) may lead to provence issues due to undefined behavior, but I would have expected some cases to uintptr_t, then arithmetic on that type, as the solution (which is what I suspect ACPI_CAST_PTR is doing). Further, you seem to have modified ACPI_ADD_PTR but not ACPI_SUB_PTR; I would have expected both to be afflicted together or not at all based on their existing implementations. > > Signed-off-by: Qian Cai > --- > include/acpi/actypes.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h > index ad6892a24015..25b4a32da177 100644 > --- a/include/acpi/actypes.h > +++ b/include/acpi/actypes.h > @@ -500,13 +500,13 @@ typedef u64 acpi_integer; > > #define ACPI_CAST_PTR(t, p) ((t *) (acpi_uintptr_t) (p)) > #define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (acpi_uintptr_t) (p)) > -#define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8, (a)) + (acpi_size)(b))) > +#define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (a) + (acpi_size)(b)) > #define ACPI_SUB_PTR(t, a, b) ACPI_CAST_PTR (t, (ACPI_CAST_PTR (u8, (a)) - (acpi_size)(b))) > #define ACPI_PTR_DIFF(a, b) ((acpi_size) (ACPI_CAST_PTR (u8, (a)) - ACPI_CAST_PTR (u8, (b)))) > > /* Pointer/Integer type conversions */ > > -#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) 0, (acpi_size) (i)) > +#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, 0, (acpi_size) (i)) IIUC, these are adding `i` to NULL (or (void*)0)? X + 0 == X ? -- Thanks, ~Nick Desaulniers