Skip to content

Commit 890d637

Browse files
nathanchanceChun-Kuang Hu
authored andcommitted
drm/mediatek: Fix return type of mtk_hdmi_bridge_mode_valid()
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/mediatek/mtk_hdmi.c:1407:16: error: incompatible function pointer types initializing 'enum drm_mode_status (*)(struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *)' with an expression of type 'int (struct drm_bridge *, const struct drm_display_info *, const struct drm_display_mode *)' [-Werror,-Wincompatible-function-pointer-types-strict] .mode_valid = mtk_hdmi_bridge_mode_valid, ^~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. ->mode_valid() in 'struct drm_bridge_funcs' expects a return type of 'enum drm_mode_status', not 'int'. Adjust the return type of mtk_hdmi_bridge_mode_valid() to match the prototype's to resolve the warning and CFI failure. Link: ClangBuiltLinux#1750 Reported-by: Sami Tolvanen <[email protected]> Signed-off-by: Nathan Chancellor <[email protected]> Reviewed-by: Kees Cook <[email protected]> Reviewed-by: AngeloGioacchino Del Regno <[email protected]> Signed-off-by: Chun-Kuang Hu <[email protected]>
1 parent 144d9b2 commit 890d637

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

drivers/gpu/drm/mediatek/mtk_hdmi.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,9 +1202,10 @@ static enum drm_connector_status mtk_hdmi_detect(struct mtk_hdmi *hdmi)
12021202
return mtk_hdmi_update_plugged_status(hdmi);
12031203
}
12041204

1205-
static int mtk_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
1206-
const struct drm_display_info *info,
1207-
const struct drm_display_mode *mode)
1205+
static enum drm_mode_status
1206+
mtk_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
1207+
const struct drm_display_info *info,
1208+
const struct drm_display_mode *mode)
12081209
{
12091210
struct mtk_hdmi *hdmi = hdmi_ctx_from_bridge(bridge);
12101211
struct drm_bridge *next_bridge;

0 commit comments

Comments
 (0)