| From: Nathan Chancellor <nathan@kernel.org> |
| Subject: s390/smsgiucv_app: remove function pointer cast |
| Date: Wed, 17 Apr 2024 11:24:36 -0700 |
| |
| Clang warns (or errors with CONFIG_WERROR) after enabling |
| -Wcast-function-type-strict by default: |
| |
| drivers/s390/net/smsgiucv_app.c:176:26: error: cast from 'void (*)(const void *)' to 'void (*)(struct device *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict] |
| 176 | smsg_app_dev->release = (void (*)(struct device *)) kfree; |
| | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 1 error generated. |
| |
| Add a standalone function to fix the warning properly, which addresses |
| the root of the warning that these casts are not safe for kCFI. |
| |
| Link: https://lkml.kernel.org/r/20240417-s390-drivers-fix-cast-function-type-v1-2-fd048c9903b0@kernel.org |
| Signed-off-by: Nathan Chancellor <nathan@kernel.org> |
| Reviewed-by: Arnd Bergmann <arnd@arndb.de> |
| Cc: Alexander Gordeev <agordeev@linux.ibm.com> |
| Cc: Alexandra Winter <wintera@linux.ibm.com> |
| Cc: Christian Borntraeger <borntraeger@linux.ibm.com> |
| Cc: Heiko Carstens <hca@linux.ibm.com> |
| Cc: Sven Schnelle <svens@linux.ibm.com> |
| Cc: Thorsten Winkler <twinkler@linux.ibm.com> |
| Cc: Vasily Gorbik <gor@linux.ibm.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| drivers/s390/net/smsgiucv_app.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/s390/net/smsgiucv_app.c~s390-smsgiucv_app-remove-function-pointer-cast |
| +++ a/drivers/s390/net/smsgiucv_app.c |
| @@ -64,6 +64,11 @@ static void smsg_app_event_free(struct s |
| kfree(ev); |
| } |
| |
| +static void smsg_app_free_dev(struct device *dev) |
| +{ |
| + kfree(dev); |
| +} |
| + |
| static struct smsg_app_event *smsg_app_event_alloc(const char *from, |
| const char *msg) |
| { |
| @@ -173,7 +178,7 @@ static int __init smsgiucv_app_init(void |
| } |
| smsg_app_dev->bus = &iucv_bus; |
| smsg_app_dev->parent = iucv_root; |
| - smsg_app_dev->release = (void (*)(struct device *)) kfree; |
| + smsg_app_dev->release = smsg_app_free_dev; |
| smsg_app_dev->driver = smsgiucv_drv; |
| rc = device_register(smsg_app_dev); |
| if (rc) { |
| _ |