Thread (6 messages) 6 messages, 5 authors, 2024-02-14

Re: [PATCH] tty: hvc-iucv: fix function pointer casts

From: Segher Boessenkool <hidden>
Date: 2024-02-14 12:42:49
Also in: linux-serial, lkml, llvm

On Wed, Feb 14, 2024 at 11:37:21AM +0100, Greg Kroah-Hartman wrote:
On Wed, Feb 14, 2024 at 09:46:33AM +0000, David Laight wrote:
quoted
From: Segher Boessenkool
quoted
Sent: 13 February 2024 19:13

On Tue, Feb 13, 2024 at 11:17:49AM +0100, Arnd Bergmann wrote:
quoted
clang warns about explicitly casting between incompatible function
pointers:

drivers/tty/hvc/hvc_iucv.c:1100:23: error: cast from 'void (*)(const void *)' to 'void (*)(struct
device *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict]
quoted
 1100 |         priv->dev->release = (void (*)(struct device *)) kfree;
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Such a cast of course is explicitly allowed by 6.3.2.3/8, only calling a
function using a non-compatible type is UB.  This warning message is
quite misleading.  Doubly so because of the -Werror, as always.
But it will get called using the wrong type.
And (is it) fine-ibt will reject the incorrect call.
And rightfully so, this type of casting abuse is just that, abuse.

Almost no one should be just calling kfree() on a device pointer, I'll
look at the surrounding code as odds are something odd is going on.  But
for now, this patch is correct.
Yes, and I said so.  My point is that the warning message pretends the
cast is bad or dangerous.  It is not, similar casts are the only way in
C to do certain things (yes, you can always avoid it completely, by
writing completely different code, like the patch does, and that
sometimes is a better idea even).

But the warning message is misleading and does more damage than it helps
avoid.


Segher
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help