On 01/11/2022 01:10, Nathan Chancellor wrote:
On Tue, Sep 13, 2022 at 01:55:48PM -0700, Nathan Huckleberry wrote:
The mode_valid field in drm_connector_helper_funcs is expected to be of
type:
enum drm_mode_status (* mode_valid) (struct drm_connector *connector,
                                      struct drm_display_mode *mode);

The mismatched return type breaks forward edge kCFI since the underlying
function definition does not match the function hook definition.

The return type of mdp4_lvds_connector_mode_valid should be changed from
int to enum drm_mode_status.

Reported-by: Dan Carpenter <[email protected]>
Link: https://github.com/ClangBuiltLinux/linux/issues/1703
Cc: [email protected]
Signed-off-by: Nathan Huckleberry <[email protected]>
---
  drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c | 5 +++--
  1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c 
b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c
index 7288041dd86a..7444b75c4215 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c
@@ -56,8 +56,9 @@ static int mdp4_lvds_connector_get_modes(struct drm_connector 
*connector)
        return ret;
  }
-static int mdp4_lvds_connector_mode_valid(struct drm_connector *connector,
-                                struct drm_display_mode *mode)
+static enum drm_mode_status
+mdp4_lvds_connector_mode_valid(struct drm_connector *connector,
+                              struct drm_display_mode *mode)
  {
        struct mdp4_lvds_connector *mdp4_lvds_connector =
                        to_mdp4_lvds_connector(connector);
--
2.37.2.789.g6183377224-goog



Did this patch get lost somewhere? I do not see it picked up. It is
needed to avoid a new WIP warning from clang for catching these CFI
failures:

drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c:89:16: error: incompatible 
function pointer types initializing 'enum drm_mode_status (*)(struct 
drm_connector *, struct drm_display_mode *)' with an expression of type 'int 
(struct drm_connector *, struct drm_display_mode *)' 
[-Werror,-Wincompatible-function-pointer-types-strict]
         .mode_valid = mdp4_lvds_connector_mode_valid,
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

It will be picked into 6.1-rc and then propagate through the stable kernel updates.

Anyway:

Fixes: 3e87599b68e7 ("drm/msm/mdp4: add LVDS panel support")
Reviewed-by: Dmitry Baryshkov <[email protected]>


--
With best wishes
Dmitry

Reply via email to