Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp817698ybg; Mon, 1 Jun 2020 15:31:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxoxcZW1jLRlAe03pQkv/soqXRb2OVtHLtcIm3G433w8YXYZIZIhZKlS5Ex5J8hpwYuvO1Y X-Received: by 2002:a17:906:1cc6:: with SMTP id i6mr20536226ejh.552.1591050661178; Mon, 01 Jun 2020 15:31:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591050661; cv=none; d=google.com; s=arc-20160816; b=Hzd76wzTrgCcXo+s4CFXHupAW97mlP09IxoYMuz90BtBS+vcHLuNvThKsHmsagUisY yD+e94nZ0pvM4Xbu5IDzUDkfmp8wHfq2XbsM7NWYdyGvG0IEQ2lFxhCDnqZEvmCTVw2g rB9nUB0jQ7n7UXAI80zBgox/ooVduHxLONae86IYFjSNnEoOmjt386jW7D5n2cT6yjGm 7sTxy1/QBJCeXp3xgy3CTR6fZa72CBjz5A5lUHQG8oEwkvFaQ7epVqEZHtzkEH6wFuS5 fm1kUNlHs9QfiWIM+Q+LJMrcmc759oyOWHDcR67tMnEfXkIP9ckuGgNyGIzRodGYX3hb AP2w== 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=pUwQK9YECOS1eHO4IDJrCO4EPRaA8Ogm+zF2kCnSgNo=; b=VuVf/Ab6+R/79nP4Jz+S8+WU2fD2RuqNzAO58972UX3kkjeaevyN5TfKocFIarYpP6 +sSJc00O4Atu3FGWzKnnJX7dic09zGW+8AyZBVdRfVdA8DAqZKajYaPtMaqchQo21EQY ZbGRqRmlCgrzwJQxFOtEF+W4Ms8+qXf5pVuWWYeo6wuwW7tqUnrY/Dw5XuTb0FXQ5Vp2 5EDnIN6CweaAN3u34zI1iQfEwGrxzQ7JQ1BK1Lf9Dz8OsiABFknfvmqzLLLgbmDppsvG wN3mGAUIRaaCD4zQKMfIwU9YJ8OpsPCgVKN3TQCbqAYOwvU8sEzlENzRoBPdkTVrSSwg KDkw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=i6fw7Woj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g59si426233edd.467.2020.06.01.15.30.36; Mon, 01 Jun 2020 15:31:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=i6fw7Woj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728905AbgFAW2O (ORCPT + 99 others); Mon, 1 Jun 2020 18:28:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:55690 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725800AbgFAW2O (ORCPT ); Mon, 1 Jun 2020 18:28:14 -0400 Received: from mail-oo1-f54.google.com (mail-oo1-f54.google.com [209.85.161.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 57335207DF for ; Mon, 1 Jun 2020 22:28:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1591050493; bh=HZeHYKJaA5zfzUfWCv5xs+dYsYLFUWGAULPrEiyXdHU=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=i6fw7Woj321Rj0NEBV5lz31PlvlC+0F5wCw2tEpvRtDhUZY17QTIZZB2fuiJRm32G a34qK0Q1RdyLGubyqCl8BZtDRu8Ylab2JFWWDfY3rvBcczS43wrRoKSzvar/rHf6OO v7xbiwqwbM9qYTqsNjIQ5Z4HrO+YCp9Gl6nFREEo= Received: by mail-oo1-f54.google.com with SMTP id q188so1348499ooq.4 for ; Mon, 01 Jun 2020 15:28:13 -0700 (PDT) X-Gm-Message-State: AOAM532GVC9zcLSX9F3/FCD4hyRmJS9Wg+TnEEWY4N+eYw3RQvjkHZPz tQi2XQqN4/hSASjVlTlhk9PiAjr+PzlqXP0LpLw= X-Received: by 2002:a4a:b18a:: with SMTP id c10mr9200772ooo.41.1591050492222; Mon, 01 Jun 2020 15:28:12 -0700 (PDT) MIME-Version: 1.0 References: <20200521100952.GA5360@willie-the-truck> <20200521173738.GA29590@e121166-lin.cambridge.arm.com> <20200526202157.GE2206@willie-the-truck> <20200527134104.GA16115@e121166-lin.cambridge.arm.com> <20200601070459.GB8601@willie-the-truck> In-Reply-To: From: Ard Biesheuvel Date: Tue, 2 Jun 2020 00:28:00 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: arm64/acpi: NULL dereference reports from UBSAN at boot To: Nick Desaulniers Cc: Will Deacon , Lorenzo Pieralisi , Hanjun Guo , "Rafael J. Wysocki" , Linux ARM , LKML , Mark Rutland , Dmitry Vyukov , Alexander Potapenko , Peter Collingbourne 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, 2 Jun 2020 at 00:19, Nick Desaulniers wrote: > > On Mon, Jun 1, 2020 at 2:57 PM Ard Biesheuvel wrote: > > > > On Mon, 1 Jun 2020 at 23:52, Nick Desaulniers wrote: > > > > > > Anyways, it looks like the address of member from NULL subexpression > > > looks problematic. I wonder if offsetof can be used here? > > > > > > #define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (offsetof(d, f), (void *) 0) > > > > > > Seems to work in my basic test case. Untested in the kernel. > > > > > > IIUC, ACPI_OFFSET is trying to calculate the difference between the > > > offset of a member of a struct and 0? Isn't that the tautology `x - 0 > > > == x`? > > > > No. ACPI_OFFSET() is just a poor person's version of offsetof(). > > > > (Note that it calculates the difference between &(((d *) 0)->f) and > > (void *)0x0, so the 0x0 term is there on both sides) > > Got it. So we're trying to avoid including stddef.h? Can > __builtin_offsetof be used here? > #define ACPI_OFFSET(d, f) ACPI_PTR_DIFF (__builtin_offsetof(d, f), (void *) 0) Drop the 0x0: #define ACPI_OFFSET __builtin_offsetof should be all we need. > The oldest version of GCC in godbolt.org (4.1) supports this builtin. Yeah I think that should be fine. Alternatively, using any arbitrary address other than 0x0 on both sides should work as well to get rid of the undefined behavior (assuming the use of NULL pointers is what is causing it), but I don't see why we need to invent our own helper here. BTW some other macros looks dodgy as well. 761f0b82393353507930b6721ae4311a9df2ca36 provides a nice set of candidates to go and clean up.