Re: [drm-misc:drm-misc-next 2/3] drivers/gpu/drm/loongson/lsdc_plane.c:199 lsdc_cursor_plane_atomic_async_check() warn: variable dereferenced before check 'state' (see line 180)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

Am 10.07.23 um 09:02 schrieb suijingfeng:
Hi,


Thanks for testing,

What do you means about tell me this?

I means that would you like to help fixing this warning?

The code in drm_atomic_get_new_plane_state() dereferences the state parameter. Later in your function, you test for state to be non-NULL.
That's what the warning is about.

You should be able to silence this warning by removing the state test from your function (and also delete that else branch). There should always be an atomic state present and the atomic-check callbacks should not be called without a state. If not, the driver most likely failed to initialize correctly.

Best regards
Thomas


Or otherwise, I will fix this someday.


On 2023/7/10 14:29, Dan Carpenter wrote:
tree:   git://anongit.freedesktop.org/drm/drm-misc drm-misc-next
head:   8d1077cf2e43b15fefd76ebec2b71541eb27ef2c
commit: f39db26c54281da6a785259498ca74b5e470476f [2/3] drm: Add kms driver for loongson display controller config: i386-randconfig-m021-20230710 (https://download.01.org/0day-ci/archive/20230710/202307100423.rV7D05Uq-lkp@xxxxxxxxx/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230710/202307100423.rV7D05Uq-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
| Closes: https://lore.kernel.org/r/202307100423.rV7D05Uq-lkp@xxxxxxxxx/

smatch warnings:
drivers/gpu/drm/loongson/lsdc_plane.c:199 lsdc_cursor_plane_atomic_async_check() warn: variable dereferenced before check 'state' (see line 180)

vim +/state +199 drivers/gpu/drm/loongson/lsdc_plane.c

f39db26c54281d Sui Jingfeng 2023-06-15  174  static int lsdc_cursor_plane_atomic_async_check(struct drm_plane *plane, f39db26c54281d Sui Jingfeng 2023-06-15  175 struct drm_atomic_state *state)
f39db26c54281d Sui Jingfeng 2023-06-15  176  {
f39db26c54281d Sui Jingfeng 2023-06-15  177      struct drm_plane_state *new_state; f39db26c54281d Sui Jingfeng 2023-06-15  178      struct drm_crtc_state *crtc_state;
f39db26c54281d Sui Jingfeng 2023-06-15  179
f39db26c54281d Sui Jingfeng 2023-06-15 @180      new_state = drm_atomic_get_new_plane_state(state, plane);
                                                                                            ^^^^^
state is dereferenced inside this function

f39db26c54281d Sui Jingfeng 2023-06-15  181
f39db26c54281d Sui Jingfeng 2023-06-15  182      if (!plane->state || !plane->state->fb) { f39db26c54281d Sui Jingfeng 2023-06-15  183 drm_dbg(plane->dev, "%s: state is NULL\n", plane->name);
f39db26c54281d Sui Jingfeng 2023-06-15  184          return -EINVAL;
f39db26c54281d Sui Jingfeng 2023-06-15  185      }
f39db26c54281d Sui Jingfeng 2023-06-15  186
f39db26c54281d Sui Jingfeng 2023-06-15  187      if (new_state->crtc_w != new_state->crtc_h) { f39db26c54281d Sui Jingfeng 2023-06-15  188 drm_dbg(plane->dev, "unsupported cursor size: %ux%u\n", f39db26c54281d Sui Jingfeng 2023-06-15  189 new_state->crtc_w, new_state->crtc_h);
f39db26c54281d Sui Jingfeng 2023-06-15  190          return -EINVAL;
f39db26c54281d Sui Jingfeng 2023-06-15  191      }
f39db26c54281d Sui Jingfeng 2023-06-15  192
f39db26c54281d Sui Jingfeng 2023-06-15  193      if (new_state->crtc_w != 64 && new_state->crtc_w != 32) { f39db26c54281d Sui Jingfeng 2023-06-15  194 drm_dbg(plane->dev, "unsupported cursor size: %ux%u\n", f39db26c54281d Sui Jingfeng 2023-06-15  195 new_state->crtc_w, new_state->crtc_h);
f39db26c54281d Sui Jingfeng 2023-06-15  196          return -EINVAL;
f39db26c54281d Sui Jingfeng 2023-06-15  197      }
f39db26c54281d Sui Jingfeng 2023-06-15  198
f39db26c54281d Sui Jingfeng 2023-06-15 @199      if (state) {
                                                     ^^^^^
Checked too late

f39db26c54281d Sui Jingfeng 2023-06-15  200          crtc_state = drm_atomic_get_existing_crtc_state(state, new_state->crtc);
f39db26c54281d Sui Jingfeng 2023-06-15  201      } else {
f39db26c54281d Sui Jingfeng 2023-06-15  202          crtc_state = plane->crtc->state; f39db26c54281d Sui Jingfeng 2023-06-15  203 drm_dbg(plane->dev, "%s: atomic state is NULL\n", plane->name);
f39db26c54281d Sui Jingfeng 2023-06-15  204      }
f39db26c54281d Sui Jingfeng 2023-06-15  205
f39db26c54281d Sui Jingfeng 2023-06-15  206      if (!crtc_state->active)
f39db26c54281d Sui Jingfeng 2023-06-15  207          return -EINVAL;
f39db26c54281d Sui Jingfeng 2023-06-15  208
f39db26c54281d Sui Jingfeng 2023-06-15  209      if (plane->state->crtc != new_state->crtc || f39db26c54281d Sui Jingfeng 2023-06-15  210 plane->state->src_w != new_state->src_w || f39db26c54281d Sui Jingfeng 2023-06-15  211 plane->state->src_h != new_state->src_h || f39db26c54281d Sui Jingfeng 2023-06-15  212 plane->state->crtc_w != new_state->crtc_w || f39db26c54281d Sui Jingfeng 2023-06-15  213 plane->state->crtc_h != new_state->crtc_h)
f39db26c54281d Sui Jingfeng 2023-06-15  214          return -EINVAL;
f39db26c54281d Sui Jingfeng 2023-06-15  215
f39db26c54281d Sui Jingfeng 2023-06-15  216      if (new_state->visible != plane->state->visible)
f39db26c54281d Sui Jingfeng 2023-06-15  217          return -EINVAL;
f39db26c54281d Sui Jingfeng 2023-06-15  218
f39db26c54281d Sui Jingfeng 2023-06-15  219      return drm_atomic_helper_check_plane_state(plane->state, f39db26c54281d Sui Jingfeng 2023-06-15 220                             crtc_state, f39db26c54281d Sui Jingfeng 2023-06-15 221                             DRM_PLANE_NO_SCALING, f39db26c54281d Sui Jingfeng 2023-06-15 222                             DRM_PLANE_NO_SCALING, f39db26c54281d Sui Jingfeng 2023-06-15 223                             true, true);
f39db26c54281d Sui Jingfeng 2023-06-15  224  }



--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux