From patchwork Thu Oct 20 21:19:02 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Bragg X-Patchwork-Id: 9387563 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EBD35607D0 for ; Thu, 20 Oct 2016 21:19:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E00E529C4A for ; Thu, 20 Oct 2016 21:19:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C4DE729C5E; Thu, 20 Oct 2016 21:19:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7FE9829C4A for ; Thu, 20 Oct 2016 21:19:32 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 29AAD6EC44; Thu, 20 Oct 2016 21:19:21 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf0-x241.google.com (mail-lf0-x241.google.com [IPv6:2a00:1450:4010:c07::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id D8DB96E194; Thu, 20 Oct 2016 21:19:17 +0000 (UTC) Received: by mail-lf0-x241.google.com with SMTP id l131so2183247lfl.0; Thu, 20 Oct 2016 14:19:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=neG7iDmC/W1EekD/2lV3kN4KWzKK6bU65JSmmb0UI/M=; b=OZFltp30/qvwDI12ojBWZMd/IS3JGAxjbS7FpZQEDvVeHno1wqaC/H94yjHxbCghyJ MJLJBhoXqT7g5a72M8pjV3c/BzZoZgEMuwnfpqiXPm6pI6bptc9WEIJ7nOtTtbnudrcH WOL0VTDlC6EKy/j81WkB5u4gJRHvpgKdkHMJSqmnCM5NipqYrx7dAlge2a5n+yeoVb0p c+Xqt2DeS/+EE+LE1P0OdVSOKBRAxGzfdYpUg/gLPfm5kbqA3oemIrLLwwnKyHtrU0N3 CtuEeFX7cWX7OroRePKMA/OcmOEbKEXCVdjLPlYt14eBoJQ2f87qqgAi/iXJdxdGsvE8 v/iQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=neG7iDmC/W1EekD/2lV3kN4KWzKK6bU65JSmmb0UI/M=; b=EqJAUcTBkwHwyMKNrvwYU6oKP7pBkN+df2DnqhqSdvx3eQ4Igjgo90Flo+yIutLJJC SfCkTwYYvp8bBy2NFVkc5HfxeFDtLJhPUVXho2yoPAHDkPC2OxrKBGXXVRl3ArPt7EZ9 H6UqsEiT7iuTiGOE9YB6YGgh1XJtZFz9KRnFfk6GSrJEKxggrKASpS7LM18aokMli3JH yaG4fSGjrGt80aHI8doUp0Gz7D9+Y2bvIFvv+onTxeLcHstaIsEHE29yd4blquMjFQUN sW/AfNk8uk97EGHyqwgVvsxK47CpGBD+ogYbFSLZjg+5G73M+Zg8NYQb3PWLIzGlJXYi eQGw== X-Gm-Message-State: AA6/9RkFfPF+GxbZbrVAMuOXnQ5uH+aFe+Y3b0BDvkFR5Wc+BWL3SFyFAk8AFHIC5TaTvA== X-Received: by 10.28.154.150 with SMTP id c144mr182654wme.25.1476998354781; Thu, 20 Oct 2016 14:19:14 -0700 (PDT) Received: from sixbynine.org (cpc26-heme10-2-0-cust305.9-1.cable.virginm.net. [86.3.57.50]) by smtp.gmail.com with ESMTPSA id 135sm596029wmq.8.2016.10.20.14.19.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 20 Oct 2016 14:19:14 -0700 (PDT) From: Robert Bragg To: intel-gfx@lists.freedesktop.org Subject: [PATCH v6 03/11] drm/i915: return EACCES for check_cmd() failures Date: Thu, 20 Oct 2016 22:19:02 +0100 Message-Id: <20161020211910.4723-3-robert@sixbynine.org> X-Mailer: git-send-email 2.10.0 In-Reply-To: <20161020211910.4723-1-robert@sixbynine.org> References: <20161020211910.4723-1-robert@sixbynine.org> Cc: dri-devel@lists.freedesktop.org, Matthew Auld , Sourab Gupta , Daniel Vetter , Robert Bragg X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP check_cmd() is checking whether a command adheres to certain restrictions that ensure it's safe to execute within a privileged batch buffer. Returning false implies a privilege problem, not that the command is invalid. The distinction makes the difference between allowing the buffer to be executed as an unprivileged batch buffer or returning an EINVAL error to userspace without executing anything. In a case where userspace may want to test whether it can successfully write to a register that needs privileges the distinction may be important and an EINVAL error may be considered fatal. In particular this is currently true for Mesa, which includes a test for whether OACONTROL can be written too, but Mesa treats any error when flushing a batch buffer as fatal, calling exit(1). As it is currently Mesa can gracefully handle a failure to write to OACONTROL if the command parser is disabled, but if we were to remove OACONTROL from the parser's whitelist then the returned EINVAL would break Mesa applications as they attempt an OACONTROL write. This bumps the command parser version from 7 to 8, as the change is visible to userspace. Signed-off-by: Robert Bragg --- drivers/gpu/drm/i915/i915_cmd_parser.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c b/drivers/gpu/drm/i915/i915_cmd_parser.c index fe34470..c45dd83 100644 --- a/drivers/gpu/drm/i915/i915_cmd_parser.c +++ b/drivers/gpu/drm/i915/i915_cmd_parser.c @@ -1272,7 +1272,7 @@ int intel_engine_cmd_parser(struct intel_engine_cs *engine, if (!check_cmd(engine, desc, cmd, length, is_master, &oacontrol_set)) { - ret = -EINVAL; + ret = -EACCES; break; } @@ -1333,6 +1333,9 @@ int i915_cmd_parser_get_version(struct drm_i915_private *dev_priv) * 5. GPGPU dispatch compute indirect registers. * 6. TIMESTAMP register and Haswell CS GPR registers * 7. Allow MI_LOAD_REGISTER_REG between whitelisted registers. + * 8. Don't report cmd_check() failures as EINVAL errors to userspace; + * rely on the HW to NOOP disallowed commands as it would without + * the parser enabled. */ - return 7; + return 8; }