Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp909937pxb; Wed, 1 Sep 2021 12:27:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyFqGKw8xHCrmIJhg4A4ECdQWNMyuAhGvB31KxdqLqCGfNKbQLR1n1cbdZcb4XXM7PnWNKI X-Received: by 2002:aa7:d0c3:: with SMTP id u3mr1223170edo.158.1630524477618; Wed, 01 Sep 2021 12:27:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630524477; cv=none; d=google.com; s=arc-20160816; b=cHbS1PAvTNUzYIHinec0/jLyg6cnksb2TlE9Wb2TdprkR0vR2DpWc7Q8NMsG6c3Jct 2cVAfHRtFJwkCNRxtQcjYf68cX2HDm5ymuu26tPBb1te+UE0pThAKtmlD3+9bU0MP73g 9sVq0wDPTFkpaA94FrXQVeqsh+GiXlVc7D5wKV8iyMLQtezOC54SQmZU/4AbJjCeaegt OhthLJUffGXaO+V+bzH2aB7kmvGpUKVI6n6Gj1yQsrI+O44ildnAp7+RXWDdPSTKKs7u 4jk8S1apwufpGApieGLuWtEdnaax16fu7kRI+KhtVn+MBetwxAgj1oPYz1yekiKUC4dE NUXg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=sm2FM4HjQNC68XB6xcgyznUO8e2i/2Fbn1uefPSL2TE=; b=pDHkEOBlXm1mi5qe/JqaJD1w969/dlwSeSZC5MwZDYFvxN4zNKMwVTtB5RpY1B4+sE 1hqUayGulHjRShNuaT/UnZV625bEw3whxuRuoxmfvwdTkWc/0qpGyIEmRtYdahj6BXXF 0tQnfnWLaMHJLYa7KMp1UWodTXJ1cAJJxY52IcjH6IHk2AAECtDsROcznsIy4vr0g3l6 cu9UYFHMtNCFLnVDs3ArBG4JrV9W8Caa0GM4mI3Rbc1eSKzyEidD+8Yt3nEuwGrGNv8R Wfrhnbgwl6Rs1h0nMZ4UxZBByGDXC6BQfQL/UrJ97kMhOR1ITlDTz0XEhd6xgTmMdbwb K1Yw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=rqUUpDGY; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l1si385420eds.322.2021.09.01.12.27.11; Wed, 01 Sep 2021 12:27:57 -0700 (PDT) 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; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=rqUUpDGY; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244421AbhIAMaA (ORCPT + 99 others); Wed, 1 Sep 2021 08:30:00 -0400 Received: from mail.kernel.org ([198.145.29.99]:59206 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244411AbhIAM3b (ORCPT ); Wed, 1 Sep 2021 08:29:31 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id DED1961075; Wed, 1 Sep 2021 12:28:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1630499305; bh=/AxiVkp2wPOLGc5o1bO4R4KpoZShQ8u7g5ph4onMxvo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=rqUUpDGYETbzQyhfr07WMofUhIKxIIg5WUL3/Ik4U92g2UhSI5qy2FXS2mivQT8ar OmS0PPJmY/sEtU0as48MOINn3mjPTZkqNAz/m6VEV/fcdIv8zZV8EY9SDTcUAf2mgu WTan5Bb8tlK3cUKduJJyQB7iAdwvzvW76g1yuqkY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, =?UTF-8?q?Michel=20D=C3=A4nzer?= , Mark Yacoub , Sean Paul , Sasha Levin Subject: [PATCH 4.14 16/23] drm: Copy drm_wait_vblank to user before returning Date: Wed, 1 Sep 2021 14:27:01 +0200 Message-Id: <20210901122250.310573095@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210901122249.786673285@linuxfoundation.org> References: <20210901122249.786673285@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mark Yacoub [ Upstream commit fa0b1ef5f7a694f48e00804a391245f3471aa155 ] [Why] Userspace should get back a copy of drm_wait_vblank that's been modified even when drm_wait_vblank_ioctl returns a failure. Rationale: drm_wait_vblank_ioctl modifies the request and expects the user to read it back. When the type is RELATIVE, it modifies it to ABSOLUTE and updates the sequence to become current_vblank_count + sequence (which was RELATIVE), but now it became ABSOLUTE. drmWaitVBlank (in libdrm) expects this to be the case as it modifies the request to be Absolute so it expects the sequence to would have been updated. The change is in compat_drm_wait_vblank, which is called by drm_compat_ioctl. This change of copying the data back regardless of the return number makes it en par with drm_ioctl, which always copies the data before returning. [How] Return from the function after everything has been copied to user. Fixes IGT:kms_flip::modeset-vs-vblank-race-interruptible Tested on ChromeOS Trogdor(msm) Reviewed-by: Michel Dänzer Signed-off-by: Mark Yacoub Signed-off-by: Sean Paul Link: https://patchwork.freedesktop.org/patch/msgid/20210812194917.1703356-1-markyacoub@chromium.org Signed-off-by: Sasha Levin --- drivers/gpu/drm/drm_ioc32.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_ioc32.c b/drivers/gpu/drm/drm_ioc32.c index 86105e7f07fc..6773e8f09fc3 100644 --- a/drivers/gpu/drm/drm_ioc32.c +++ b/drivers/gpu/drm/drm_ioc32.c @@ -855,8 +855,6 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd, req.request.sequence = req32.request.sequence; req.request.signal = req32.request.signal; err = drm_ioctl_kernel(file, drm_wait_vblank_ioctl, &req, DRM_UNLOCKED); - if (err) - return err; req32.reply.type = req.reply.type; req32.reply.sequence = req.reply.sequence; @@ -865,7 +863,7 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd, if (copy_to_user(argp, &req32, sizeof(req32))) return -EFAULT; - return 0; + return err; } #if defined(CONFIG_X86) -- 2.30.2