lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 24 Sep 2021 05:47:47 -0700 From: Kees Cook <keescook@...omium.org> To: "Gustavo A. R. Silva" <gustavoars@...nel.org>, Stefan Richter <stefanr@...6.in-berlin.de> CC: linux1394-devel@...ts.sourceforge.net, linux-kernel@...r.kernel.org, linux-hardening@...r.kernel.org Subject: Re: [PATCH][next] firewire: cdev: Fix function cast error On September 24, 2021 3:57:33 AM PDT, "Gustavo A. R. Silva" <gustavoars@...nel.org> wrote: >Fix the following function cast error when building with >-Wcast-function-type: > >drivers/firewire/core-cdev.c: In function ‘ioctl_create_iso_context’: >drivers/firewire/core-cdev.c:985:8: error: cast between incompatible function types from ‘void (*)(struct fw_iso_context *, dma_addr_t, void *)’ {aka ‘void (*)(struct fw_iso_context *, long long unsigned int, void *)’} to ‘void (*)(struct fw_iso_context *, u32, size_t, void *, void *)’ {aka ‘void (*)(struct fw_iso_context *, unsigned int, long unsigned int, void *, void *)’} [-Werror=cast-function-type] > 985 | cb = (fw_iso_callback_t)iso_mc_callback; > | ^ >cc1: all warnings being treated as errors > >This helps with the ongoing efforts to globally enable -Wcast-function-type, >so when Control Flow Integrity checking lands in the kernel, incompatible >function type casting doesn't interfere with it. > >Link: https://github.com/KSPP/linux/issues/20 >Link: https://github.com/KSPP/linux/issues/102 >Signed-off-by: Gustavo A. R. Silva <gustavoars@...nel.org> I thought this looked familiar... https://lore.kernel.org/lkml/20200530090839.7895-1-oscar.carter@gmx.com/ I think someone just needs to pick this up since it got past review, etc. -Kees >--- > drivers/firewire/core-cdev.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > >diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c >index fb6c651214f3..fd2923599667 100644 >--- a/drivers/firewire/core-cdev.c >+++ b/drivers/firewire/core-cdev.c >@@ -957,7 +957,10 @@ static int ioctl_create_iso_context(struct client *client, union ioctl_arg *arg) > { > struct fw_cdev_create_iso_context *a = &arg->create_iso_context; > struct fw_iso_context *context; >- fw_iso_callback_t cb; >+ union callback { >+ fw_iso_callback_t sc; >+ fw_iso_mc_callback_t mc; >+ } cb; > int ret; > > BUILD_BUG_ON(FW_CDEV_ISO_CONTEXT_TRANSMIT != FW_ISO_CONTEXT_TRANSMIT || >@@ -970,7 +973,7 @@ static int ioctl_create_iso_context(struct client *client, union ioctl_arg *arg) > if (a->speed > SCODE_3200 || a->channel > 63) > return -EINVAL; > >- cb = iso_callback; >+ cb.sc = iso_callback; > break; > > case FW_ISO_CONTEXT_RECEIVE: >@@ -978,11 +981,11 @@ static int ioctl_create_iso_context(struct client *client, union ioctl_arg *arg) > a->channel > 63) > return -EINVAL; > >- cb = iso_callback; >+ cb.sc = iso_callback; > break; > > case FW_ISO_CONTEXT_RECEIVE_MULTICHANNEL: >- cb = (fw_iso_callback_t)iso_mc_callback; >+ cb.mc = iso_mc_callback; > break; > > default: >@@ -990,7 +993,7 @@ static int ioctl_create_iso_context(struct client *client, union ioctl_arg *arg) > } > > context = fw_iso_context_create(client->device->card, a->type, >- a->channel, a->speed, a->header_size, cb, client); >+ a->channel, a->speed, a->header_size, cb.sc, client); > if (IS_ERR(context)) > return PTR_ERR(context); > if (client->version < FW_CDEV_VERSION_AUTO_FLUSH_ISO_OVERFLOW)
Powered by blists - more mailing lists