On Thu, 22 Jun 2023, Nathan Chancellor wrote: > Clang's kernel Control Flow Integrity (kCFI) is a compiler-based > security mitigation that ensures the target of an indirect function call > matches the expected type of the call and trapping if they do not match > exactly. The warning -Wincompatible-function-pointer-types-strict aims > to catch these issues at compile time, which reveals: > > drivers/leds/leds-mt6323.c:598:49: error: incompatible function pointer types assigning to 'int (*)(struct led_classdev *, enum led_brightness)' from 'int (struct led_classdev *, unsigned int)' [-Werror,-Wincompatible-function-pointer-types-strict] > 598 | leds->led[reg]->cdev.brightness_set_blocking = > | ^ > 599 | mt6323_wled_set_brightness; > | ~~~~~~~~~~~~~~~~~~~~~~~~~~ > drivers/leds/leds-mt6323.c:600:40: error: incompatible function pointer types assigning to 'enum led_brightness (*)(struct led_classdev *)' from 'unsigned int (struct led_classdev *)' [-Werror,-Wincompatible-function-pointer-types-strict] > 600 | leds->led[reg]->cdev.brightness_get = > | ^ > 601 | mt6323_get_wled_brightness; > | ~~~~~~~~~~~~~~~~~~~~~~~~~~ > 2 errors generated. > > While 'unsigned int' is ABI compatible with 'enum led_brightness' (hence > no warning from -Wincompatible-function-pointer-types) and the callers > of these callbacks use/pass the values as 'unsigned int', the mismatch > between the prototype and the called function will trip kCFI at runtime. > > Change the types in the implementations to match the prototypes, clearing > up the warning and avoiding kCFI failures. > > Fixes: 9bb0a9e0626c ("leds: leds-mt6323: Add support for WLEDs and MT6332") > Signed-off-by: Nathan Chancellor <nathan@xxxxxxxxxx> > --- > drivers/leds/leds-mt6323.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) Applied, thanks -- Lee Jones [李琼斯]