mei: Cast the cb->ext_hdr allocation type
authorKees Cook <kees@kernel.org>
Sat, 26 Apr 2025 06:18:16 +0000 (23:18 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 May 2025 15:57:15 +0000 (17:57 +0200)
In preparation for making the kmalloc family of allocators type aware,
we need to make sure that the returned type from the allocation matches
the type of the variable being assigned. (Before, the allocator would
always return "void *", which can be implicitly cast to any pointer type.)

The assigned type is "struct mei_ext_hdr *", but the returned type will
be "struct mei_ext_hdr_gsc_f2h *", which is a larger allocation size.
This is by design as struct mei_ext_hdr_gsc_f2h contains struct
mei_ext_hdr as its first member. Cast the allocation to the match the
assignment.

Signed-off-by: Kees Cook <kees@kernel.org>
Acked-by: Alexander Usyskin <alexander.usyskin@intel.com>
Link: https://lore.kernel.org/r/20250426061815.work.435-kees@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/mei/interrupt.c

index b09b79fedaba06677281446cba18dc4b333e8a81..c484f416fae419641cfd9ed5d8a37f18298dfa29 100644 (file)
@@ -133,7 +133,7 @@ static int mei_cl_irq_read_msg(struct mei_cl *cl,
                                break;
                        case MEI_EXT_HDR_GSC:
                                gsc_f2h = (struct mei_ext_hdr_gsc_f2h *)ext;
-                               cb->ext_hdr = kzalloc(sizeof(*gsc_f2h), GFP_KERNEL);
+                               cb->ext_hdr = (struct mei_ext_hdr *)kzalloc(sizeof(*gsc_f2h), GFP_KERNEL);
                                if (!cb->ext_hdr) {
                                        cb->status = -ENOMEM;
                                        goto discard;