Received: by 2002:a25:2c96:0:0:0:0:0 with SMTP id s144csp967571ybs; Mon, 25 May 2020 04:00:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz3qXqyinvUAp2grpbSwB3BdfOaJeit/ynq4cH5Z/hHKhHXolZkDMVuQs1YBTsKp5kmxTud X-Received: by 2002:aa7:ca49:: with SMTP id j9mr15122719edt.186.1590404403111; Mon, 25 May 2020 04:00:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590404403; cv=none; d=google.com; s=arc-20160816; b=F/aH7xgtdjZcoYw73KiwXpdAVQ8UW0IGPX8zG4kPOhWAHFZqw5qCobZXvn+tNGnJsC yWC18wlH84hB+k8ul2fvJezQnBGf5NTFnMl9b/TY+b7Q7Jav6aG1fsQYl1NLPaLodGdl LUugSoJ3iQgcIwYJOQ8GlrTh5b8WPEg0znkr77ISaZklg7q5+BP1oAorRldr1xnQmQDT fuOjmUPwaAfKM0tpZvDt2F1p7Vu9Sc56ph/cCtp3LdgHEEafgR435hz8vwRAVGH8XYV3 5WLuDkiC0gJJ+tUlLE6uQm/3YQnFVNA3fKMYx2+buD6wBDktCZQdAPDKzR0qzlIXmSRH sRzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:subject:cc:to:from:message-id:date:dkim-signature; bh=3U7FI4k+z5eBTbFF8WtXAo/IdeGY9Lrh0ZeTcfDSA+o=; b=ivy1IkAF9JWkmfCXGC0Y0kxuUF3xpV6dYH8rWLuDVbgLkIRz4DYod14sRGO5lcy+Cu xcaF5AQyEuDWaiW341UQLw5BGz18ABSRnDtRBN00y69VUgJKaRARm2A/Uk8QNvSA9kzp rMf9sPqUL86DDHTRa1VO5qFlfRNUFK/UyFESZ2/ba55RsVKZL3HJ7qrd+bbw/mfAMLOs pSYAnspD3CH/KdA44nGlR2x863JmUMY2KoQJwirUSMRu1iSlK95CfW2DKy9xZfwLSrM2 B6VvP0u2dO+WtSlqvBVe9vchSpzvblFihRmxlfEqkbxo7RXKmXdE+rZkQVdPnQSUkHok u01Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=fSLDSNxR; 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 d8si8023828edr.609.2020.05.25.03.59.40; Mon, 25 May 2020 04:00:03 -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=fSLDSNxR; 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 S2389970AbgEYKzh (ORCPT + 99 others); Mon, 25 May 2020 06:55:37 -0400 Received: from mail.kernel.org ([198.145.29.99]:36978 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389897AbgEYKzg (ORCPT ); Mon, 25 May 2020 06:55:36 -0400 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id DBA942073B; Mon, 25 May 2020 10:55:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590404136; bh=tijjKaQGw1GCkKwwvpL3QGBA9oFShZay8rBCAWS2hlI=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=fSLDSNxRP5ppZlNQU3AtSn7fwMWkuL+my77sSo9NOVls+WS1zcFOQYIODUeotZfBA SEKZwcENx/mcWHy+46fT320nXCEYHVw/BIfdrvJqcJdFbF/ySxGDKKz++3D5HHbq2R azIOIQ7slcmjfjac92eW+lJDoJImSmaBqr4/lIJ8= Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=wait-a-minute.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jdAla-00F8XK-85; Mon, 25 May 2020 11:55:34 +0100 Date: Mon, 25 May 2020 11:55:33 +0100 Message-ID: <87tv04z3kq.wl-maz@kernel.org> From: Marc Zyngier To: Oscar Carter Cc: Kees Cook , Thomas Gleixner , Jason Cooper , kernel-hardening@lists.openwall.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2] drivers/irqchip: Remove function callback casts In-Reply-To: <20200524162220.10186-1-oscar.carter@gmx.com> References: <20200524162220.10186-1-oscar.carter@gmx.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 EasyPG/1.0.0 Emacs/26 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: oscar.carter@gmx.com, keescook@chromium.org, tglx@linutronix.de, jason@lakedaemon.net, kernel-hardening@lists.openwall.com, linux-kernel@vger.kernel.org X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 24 May 2020 17:22:20 +0100, Oscar Carter wrote: > > In an effort to enable -Wcast-function-type in the top-level Makefile to > support Control Flow Integrity builds, remove all the function callback > casts. > > To do this, create a new macro called ACPI_DECLARE_SUBTABLE_PROBE_ENTRY > to initialize the acpi_probe_entry struct using the probe_subtbl field > instead of the probe_table field. Then, modify the IRQCHIP_ACPI_DECLARE > macro to use this new defined macro. > > Even though these two commented fields are part of a union, this is > necessary to avoid function cast mismatches. That is, due to the > IRQCHIP_ACPI_DECLARE invocations use as last parameter a function with > the protoype "int (*func)(struct acpi_subtable_header *, const unsigned > long)" it's necessary that this macro initialize the probe_subtbl field > of the acpi_probe_entry struct and not the probe_table field. > > Signed-off-by: Oscar Carter > --- > Changelog v1->v2 > - Add more details in the commit changelog to clarify the changes (Marc > Zyngier) > - Declare a new macro called ACPI_DECLARE_SUBTABLE_PROBE_ENTRY (Marc > Zyngier) > - In the IRQCHIP_ACPI_DECLARE use the new defined macro (Marc Zyngier) > > include/linux/acpi.h | 11 +++++++++++ You now need to Cc the ACPI maintainers. > include/linux/irqchip.h | 5 +++-- > 2 files changed, 14 insertions(+), 2 deletions(-) > > diff --git a/include/linux/acpi.h b/include/linux/acpi.h > index d661cd0ee64d..fed49b276a90 100644 > --- a/include/linux/acpi.h > +++ b/include/linux/acpi.h > @@ -1154,6 +1154,17 @@ struct acpi_probe_entry { > .driver_data = data, \ > } > > +#define ACPI_DECLARE_SUBTABLE_PROBE_ENTRY(table, name, table_id, \ > + subtable, valid, data, fn) \ > + static const struct acpi_probe_entry __acpi_probe_##name \ > + __used __section(__##table##_acpi_probe_table) = { \ > + .id = table_id, \ > + .type = subtable, \ > + .subtable_valid = valid, \ > + .probe_subtbl = (acpi_tbl_entry_handler)fn, \ It strikes me that under the guise of removing function casts, you are actually adding one! And this cast is actually hiding all sorts of sins (remove it, and see things exploding). I've fixed it with the patch below (ACPI is such a mess of data structure case...). diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index d7006ef18a0d..3870e9d4d3a8 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c @@ -2117,7 +2117,7 @@ static void __init gic_acpi_setup_kvm_info(void) } static int __init -gic_acpi_init(struct acpi_subtable_header *header, const unsigned long end) +gic_acpi_init(union acpi_subtable_headers *header, const unsigned long end) { struct acpi_madt_generic_distributor *dist; struct fwnode_handle *domain_handle; diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c index 30ab623343d3..fc431857ce90 100644 --- a/drivers/irqchip/irq-gic.c +++ b/drivers/irqchip/irq-gic.c @@ -1593,7 +1593,7 @@ static void __init gic_acpi_setup_kvm_info(void) gic_set_kvm_info(&gic_v2_kvm_info); } -static int __init gic_v2_acpi_init(struct acpi_subtable_header *header, +static int __init gic_v2_acpi_init(union acpi_subtable_headers *header, const unsigned long end) { struct acpi_madt_generic_distributor *dist; diff --git a/include/linux/acpi.h b/include/linux/acpi.h index fed49b276a90..4f4ddbfce3d3 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -1150,7 +1150,7 @@ struct acpi_probe_entry { .id = table_id, \ .type = subtable, \ .subtable_valid = valid, \ - .probe_table = (acpi_tbl_table_handler)fn, \ + .probe_table = fn, \ .driver_data = data, \ } @@ -1161,7 +1161,7 @@ struct acpi_probe_entry { .id = table_id, \ .type = subtable, \ .subtable_valid = valid, \ - .probe_subtbl = (acpi_tbl_entry_handler)fn, \ + .probe_subtbl = fn, \ .driver_data = data, \ } Thanks, M. -- Without deviation from the norm, progress is not possible.