Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp1353162pxb; Fri, 20 Nov 2020 07:32:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJyQHw3EVzzEaqiAKRSR5Ud6/aBG1GYU0Zs/0fJzlF7TYxwlRY336jIKxrfIZlfCGUsLPtbG X-Received: by 2002:a17:906:9459:: with SMTP id z25mr34248517ejx.88.1605886365551; Fri, 20 Nov 2020 07:32:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605886365; cv=none; d=google.com; s=arc-20160816; b=smQe3eOXT1o9nI050zt+v9FzDixialb6wPeUBvVdHoTy1ktRgvfp/6WGBe7vzwwrzX eOmamvQpFEx3yyr8d6UQ+uT/n3CnnhUqAY9fE/QIg0mL4VoCzG5Fjwfqiy6KNExbIxdX GbZdT/h4ii25eJhoEP6ECxwkJB9+l9rfsBAKO3+s6tK6Jl6R7tTRQO4MgRMKxJwRK8AH 3+xv6jq2EynelPJW9N3KEREZy/cY0ulSf7q2nGHGNY4x3OE+HpuNE794z52B/VVpj4YS 53vbnumb85uz4QyS28m+9zgC11UBbTeY8ipXE0JrjmS3NLLWJ9Vg8IlZzROJkB3s7cRL aMEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=MSbA/vRICUZ6iijqYEkIPYBLVLuo2FTN6HOEh0Vsvxs=; b=q6rn6nLo31dZjYRfVvjD4QB72PbTewUm/I6t43kBF7zfMiXz9L5tCsK6PQkyOSch2/ my8JkGn6dAB1P8mMoYu6c+keuTPzpFKKC9TeenkG9dIBDeA7LVY28Rzi1CYzzIpTNwA2 iduXvwBeuHLko+CpRRHKBgNhCOVWbH97RU8XGWODNt+gOglgVP1E+idnk88+scjVANge Plb5KTsdKwU1YJSB2B+UHjTIEoWzEUXlzQim36IR9xJONXMLTham75FM9SMPbwdNrYf3 2kxyO15peW34A7f3bMdU1qBkfwWMnKxUQ/0J7tsuVGBXI0qbl9Qc2Z/qSm2zxQ2PuLPW x7wA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t2si1859438edj.427.2020.11.20.07.32.17; Fri, 20 Nov 2020 07:32:45 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728592AbgKTPaa (ORCPT + 99 others); Fri, 20 Nov 2020 10:30:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41748 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728048AbgKTPaa (ORCPT ); Fri, 20 Nov 2020 10:30:30 -0500 X-Greylist: delayed 394 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Fri, 20 Nov 2020 07:30:30 PST Received: from pet8032.tnsp.org (tnsp.org [IPv6:2a04:3540:1000:310:f095:b5ff:fe23:3d0e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 136B8C0613CF for ; Fri, 20 Nov 2020 07:30:30 -0800 (PST) Received: from nmos6502.tnsp.org (91-158-253-65.elisa-laajakaista.fi [91.158.253.65]) by pet8032.tnsp.org (Postfix) with ESMTPSA id 21D0C196A72; Fri, 20 Nov 2020 17:23:51 +0200 (EET) From: Matti Hamalainen To: linux-kernel@vger.kernel.org Cc: Daniel Vetter , Ben Skeggs , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH] drm/nouveau: fix relocations applying logic and a double-free Date: Fri, 20 Nov 2020 17:23:38 +0200 Message-Id: <20201120152338.1203257-1-ccr@tnsp.org> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit 03e0d26fcf79 ("drm/nouveau: slowpath for pushbuf ioctl") included a logic-bug which results in the relocations not actually getting applied at all as the call to nouveau_gem_pushbuf_reloc_apply() is never reached. This causes a regression with graphical corruption, triggered when relocations need to be done (for example after a suspend/resume cycle.) Fix by setting *apply_relocs value only if there were more than 0 relocations. Additionally, the never reached code had a leftover u_free() call, which, after fixing the logic, now got called and resulted in a double-free. Fix by removing one u_free(), moving the other and adding check for errors. Cc: Daniel Vetter Cc: Ben Skeggs Cc: nouveau@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org Signed-off-by: Matti Hamalainen Fixes: 03e0d26fcf79 ("drm/nouveau: slowpath for pushbuf ioctl") Link: https://gitlab.freedesktop.org/drm/nouveau/-/issues/11 --- drivers/gpu/drm/nouveau/nouveau_gem.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c index 549bc67feabb..c2051380d18c 100644 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c @@ -558,8 +558,10 @@ nouveau_gem_pushbuf_validate(struct nouveau_channel *chan, NV_PRINTK(err, cli, "validating bo list\n"); validate_fini(op, chan, NULL, NULL); return ret; + } else if (ret > 0) { + *apply_relocs = true; } - *apply_relocs = ret; + return 0; } @@ -662,7 +664,6 @@ nouveau_gem_pushbuf_reloc_apply(struct nouveau_cli *cli, nouveau_bo_wr32(nvbo, r->reloc_bo_offset >> 2, data); } - u_free(reloc); return ret; } @@ -872,9 +873,10 @@ nouveau_gem_ioctl_pushbuf(struct drm_device *dev, void *data, break; } } - u_free(reloc); } out_prevalid: + if (!IS_ERR(reloc)) + u_free(reloc); u_free(bo); u_free(push); base-commit: 3494d58865ad4a47611dbb427b214cc5227fa5eb -- 2.29.2