Re: [PATCH] drm/msm: Fix return type of mdp4_lvds_connector_mode_valid

From: Abhinav Kumar
Date: Mon Oct 31 2022 - 20:27:35 EST




On 10/31/2022 5:24 PM, Dmitry Baryshkov wrote:
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 <error27@xxxxxxxxx>
Link: https://github.com/ClangBuiltLinux/linux/issues/1703
Cc: llvm@xxxxxxxxxxxxxxx
Signed-off-by: Nathan Huckleberry <nhuck@xxxxxxxxxx>
---
  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 <dmitry.baryshkov@xxxxxxxxxx>

Yes, it was already merged to the -fixes tree and a PR with it was sent out for 6.1-rc

https://gitlab.freedesktop.org/drm/msm/-/commit/0b33a33bd15d5bab73b87152b220a8d0153a4587