From 7ac2ce25e3bcb7e03bee98dd9dd5757f6bf12d47 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 2 Feb 2021 19:52:20 +0100 Subject: render/dmabuf: cleanup on wlr_dmabuf_attributes_copy error --- render/dmabuf.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'render') diff --git a/render/dmabuf.c b/render/dmabuf.c index bed609dd..1940b66e 100644 --- a/render/dmabuf.c +++ b/render/dmabuf.c @@ -16,13 +16,22 @@ bool wlr_dmabuf_attributes_copy(struct wlr_dmabuf_attributes *dst, struct wlr_dmabuf_attributes *src) { memcpy(dst, src, sizeof(struct wlr_dmabuf_attributes)); - for (int i = 0; i < src->n_planes; ++i) { + int i; + for (i = 0; i < src->n_planes; ++i) { dst->fd[i] = fcntl(src->fd[i], F_DUPFD_CLOEXEC, 0); if (dst->fd[i] < 0) { wlr_log_errno(WLR_ERROR, "fcntl(F_DUPFD_CLOEXEC) failed"); - return false; + goto error; } } return true; + +error: + for (int j = 0; j < i; j++) { + close(dst->fd[i]); + dst->fd[j] = -1; + } + dst->n_planes = 0; + return false; } -- cgit v1.2.3