[PATCH libdrm] Fix memory leak with drmModeGetConnectorCurrent()
Chris Wilson
chris at chris-wilson.co.uk
Tue Dec 15 06:05:45 PST 2015
On Tue, Dec 15, 2015 at 03:59:28PM +0200, ville.syrjala at linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> drmModeGetConnectorCurrent() must provide temporary storage for the
> kernel to fill in at least one mode (asking for !=0 modes is how
> you prevent the heavyweight probe in the kernel). Currently we malloc
> that temp storage but we fail to free it before overwriting the
> pointer with the address of the actual storage we use to store the
> real mode list we get from the kernel in the second ioctl call.
>
> Let's just keep the temporary storage on the stack and thus we avoid the
> leak and also eliminate some pointless mallocs.
>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> Fixes: 5ed5fa10600f ("mode: Retrieve only the current information for a Connector")
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
> xf86drmMode.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/xf86drmMode.c b/xf86drmMode.c
> index ab6b5195e8d3..7710061865ee 100644
> --- a/xf86drmMode.c
> +++ b/xf86drmMode.c
> @@ -475,12 +475,13 @@ _drmModeGetConnector(int fd, uint32_t connector_id, int probe)
> {
> struct drm_mode_get_connector conn, counts;
> drmModeConnectorPtr r = NULL;
> + struct drm_mode_modeinfo stack_mode;
>
> memclear(conn);
> conn.connector_id = connector_id;
> if (!probe) {
> conn.count_modes = 1;
> - conn.modes_ptr = VOID2U64(drmMalloc(sizeof(struct drm_mode_modeinfo)));
> + conn.modes_ptr = VOID2U64(&stack_mode);
> }
If you just made this change, we wouldn't need the hunks below (and I
wouln't have to look at so much shouting).
Either way,
Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the dri-devel
mailing list