Skip to content

drm_hwcomposer: Fix invalid buffer_handle_t pointer

In Android 11, at boot time, I see the following sequence of calls from SurfaceFlinger that trigger this:

// Composition type for layer is saved in DRM HWC Layer validated_type_ validateDisplay()

// Layer composition type saved in DRM HWC Layer sf_type_ acceptDisplayChanges()

// Composition type in Layer sf_type_ is now "client" so DRM HWC doesn't // update the Layer buffer pointer setLayerBuffer()

// DRM HWC Layer sf_type_ is now changed back to "device" setLayerCompositionType()

// DRM HWC iterates through the layers and finds that Layer composition // type in sf_type_ is "device" so thinks it is fine to calls // importBuffer() but this Layer now has an invalid pointer as the // setLayerBuffer() was ignored. validateDisplay()

Thus this patch, changes the logic to always update the buffer_handle_t pointer in setLayerBuffer regardless of composition type rather than keeping the invalid buffer_handle_t in the Layer obect. The composition type may be changed back to device composition by setLayerCompositionType at which point the Layer object needs to have saved the buffer_handle_t.

Not sure how we could reproduce the same sequence of calls on another Android version.

Signed-off-by: Paul Howgego paul.howgego@arm.com [jstultz: Reword and add context from merge request to the commit message] Signed-off-by: John Stultz john.stultz@linaro.org Change-Id: I88a11ee2fee742d6154a482455a8532a95e681d3

Merge request reports