On Wed, Nov 02, 2022 at 08:25:39AM -0700, Nathan Chancellor wrote: > With clang's kernel control flow integrity (kCFI, CONFIG_CFI_CLANG), > indirect call targets are validated against the expected function > pointer prototype to make sure the call target is valid to help mitigate > ROP attacks. If they are not identical, there is a failure at run time, > which manifests as either a kernel panic or thread getting killed. A > proposed warning in clang aims to catch these at compile time, which > reveals: > > drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c:412:15: error: incompatible function > pointer types initializing 'void (*)(struct amdgpu_device *, u32, u32, u32, > u32)' (aka 'void (*)(struct amdgpu_device *, unsigned int, unsigned int, > unsigned int, unsigned int)') with an expression of type 'void (struct > amdgpu_device *, enum idh_request, u32, u32, u32)' (aka 'void (struct > amdgpu_device *, enum idh_request, unsigned int, unsigned int, unsigned > int)') [-Werror,-Wincompatible-function-pointer-types-strict] > .trans_msg = xgpu_ai_mailbox_trans_msg, > ^~~~~~~~~~~~~~~~~~~~~~~~~ > 1 error generated. > > drivers/gpu/drm/amd/amdgpu/mxgpu_nv.c:435:15: error: incompatible function > pointer types initializing 'void (*)(struct amdgpu_device *, u32, u32, u32, > u32)' (aka 'void (*)(struct amdgpu_device *, unsigned int, unsigned int, > unsigned int, unsigned int)') with an expression of type 'void (struct > amdgpu_device *, enum idh_request, u32, u32, u32)' (aka 'void (struct > amdgpu_device *, enum idh_request, unsigned int, unsigned int, unsigned > int)') [-Werror,-Wincompatible-function-pointer-types-strict] > .trans_msg = xgpu_nv_mailbox_trans_msg, > ^~~~~~~~~~~~~~~~~~~~~~~~~ > 1 error generated. > > The type of the second parameter in the prototype should be 'enum > idh_request' instead of 'u32'. Update it to clear up the warnings. > > Link: https://github.com/ClangBuiltLinux/linux/issues/1750 > Reported-by: Sami Tolvanen <[email protected]> > Signed-off-by: Nathan Chancellor <[email protected]>
Reviewed-by: Kees Cook <[email protected]> -- Kees Cook
