drm_hwcomposer: Initialize buffer_ pointer to NULL

In some cases, we've seen drm_hwcomposer start to try to
compose frames before anything has called SetClientTarget().

This seems to be some sort of a race, which for some reason
we only see with certain dummy HDMI dongles (which provide
fake EDID data) which allow our lab machines to run headless.
I'm still trying to understand more about why this happens
only in this case.

The net of the issue is we see CreateComposition() being called,
which adds the client_layer_ to the zmap. Then it creates the
DrmHwcLayers copying the non-initialized buffer_ value as the
sf_handle.

This then later causes a crash in ImportBuffer() when we
traverse the non-null (but invalid) hnd value.

Thus, this patch simply initilizes the buffer_ pointer to NULL
so that we error out properly in the case of the race.

Reported-by: YongQin Liu <yongqin.liu@linaro.org>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Change-Id: I5fde3fccde86519edb04e61cbc2842eda395ade4
1 file changed
tree: 5b134952e60530dc632d74493577d15eafb1abfb
  1. tests/
  2. .clang-format
  3. .gitlab-ci-checkcommit.sh
  4. .gitlab-ci.yml
  5. Android.mk
  6. autofd.h
  7. autolock.cpp
  8. autolock.h
  9. drmconnector.cpp
  10. drmconnector.h
  11. drmcrtc.cpp
  12. drmcrtc.h
  13. drmdevice.cpp
  14. drmdevice.h
  15. drmdisplaycomposition.cpp
  16. drmdisplaycomposition.h
  17. drmdisplaycompositor.cpp
  18. drmdisplaycompositor.h
  19. drmencoder.cpp
  20. drmencoder.h
  21. drmeventlistener.cpp
  22. drmeventlistener.h
  23. drmframebuffer.h
  24. drmhwcgralloc.h
  25. drmhwcomposer.h
  26. drmhwctwo.cpp
  27. drmhwctwo.h
  28. drmmode.cpp
  29. drmmode.h
  30. drmplane.cpp
  31. drmplane.h
  32. drmproperty.cpp
  33. drmproperty.h
  34. hwcutils.cpp
  35. MODULE_LICENSE_APACHE2
  36. NOTICE
  37. platform.cpp
  38. platform.h
  39. platformdrmgeneric.cpp
  40. platformdrmgeneric.h
  41. platformhisi.cpp
  42. platformhisi.h
  43. platformminigbm.cpp
  44. platformminigbm.h
  45. README.md
  46. resourcemanager.cpp
  47. resourcemanager.h
  48. vsyncworker.cpp
  49. vsyncworker.h
  50. worker.cpp
  51. worker.h
README.md

drm_hwcomposer

Patches to drm_hwcomposer are very much welcome, we really want this to be the universal HW composer implementation for Android and similar platforms So please bring on porting patches, bugfixes, improvements for documentation and new features.

A short list of contribution guidelines:

  • Submit changes via gitlab merge requests on gitlab.freedesktop.org

  • drm_hwcomposer is Apache 2.0 Licensed and we require contributions to follow the developer's certificate of origin: http://developercertificate.org/

  • When submitting new code please follow the naming conventions documented in the generated documentation. Also please make full use of all the helpers and convenience macros provided by drm_hwcomposer. The below command can help you with formatting of your patches:

    `git diff | clang-format-diff-5.0 -p 1 -style=file`
    
  • Hardware specific changes should be tested on relevant platforms before committing.

If you need inspiration, please checkout our TODO issues

Happy hacking!