From patchwork Wed Aug 26 23:29:13 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tiago Vignatti X-Patchwork-Id: 52740 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-lb0-f199.google.com (mail-lb0-f199.google.com [209.85.217.199]) by patches.linaro.org (Postfix) with ESMTPS id AE33722E9E for ; Wed, 26 Aug 2015 23:29:39 +0000 (UTC) Received: by lbcli1 with SMTP id li1sf736702lbc.2 for ; Wed, 26 Aug 2015 16:29:38 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:delivered-to:from:to:subject:date :message-id:in-reply-to:references:cc:precedence:list-id :list-unsubscribe:list-archive:list-post:list-help:list-subscribe :mime-version:content-type:content-transfer-encoding:errors-to :sender:x-original-sender:x-original-authentication-results :mailing-list; bh=87Cx6NcG7FTbbWL/UV5ejdktESiZPZk7YtHMufye4eQ=; b=luccD/0nqbs7FGUewHICFcvzlA1suk2+fPX22d9MIyiGiN0CmGZY2f3iYvK0BLtbZF chBuT5nVeHJGbmDxsMD2FBEf6qPaQPJVrU2J0ii568JgFEpXGVIF5qDVgXCZJcxX7KIN MG7/5l6X86hUh9L+Rml1/K+v72YPLomSg8sRhpSeAihV9kHcAxqDhPmHfnmdMNzpI6sw c+COE4NkzqYg39CCp5/Y60s/WNeLt2FeYnjDIEXWRzZ7+i+kmuZKB0B1CSaOuXJV6Hco cG6YUVeuPwdVKmC9FO5+IgXKI8tmzJOYyyTa5+ParIPdsHBo76WWRY3iBwHCH2x7ARv6 29OA== X-Gm-Message-State: ALoCoQnYtViwsep3RlyL5XwDgpkrVRczk++PzvbEVq+qHxsc9ymZB986Qsqk3GFChGQ/BiireR7F X-Received: by 10.152.6.103 with SMTP id z7mr343279laz.8.1440631778674; Wed, 26 Aug 2015 16:29:38 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.5.168 with SMTP id t8ls8426lat.84.gmail; Wed, 26 Aug 2015 16:29:38 -0700 (PDT) X-Received: by 10.152.18.164 with SMTP id x4mr750991lad.35.1440631778412; Wed, 26 Aug 2015 16:29:38 -0700 (PDT) Received: from mail-la0-f46.google.com (mail-la0-f46.google.com. [209.85.215.46]) by mx.google.com with ESMTPS id h6si260285lbz.7.2015.08.26.16.29.38 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 26 Aug 2015 16:29:38 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.46 as permitted sender) client-ip=209.85.215.46; Received: by labns7 with SMTP id ns7so1605174lab.0 for ; Wed, 26 Aug 2015 16:29:38 -0700 (PDT) X-Received: by 10.152.5.228 with SMTP id v4mr1039489lav.36.1440631778289; Wed, 26 Aug 2015 16:29:38 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.162.200 with SMTP id yc8csp4251224lbb; Wed, 26 Aug 2015 16:29:37 -0700 (PDT) X-Received: by 10.68.139.226 with SMTP id rb2mr1853571pbb.49.1440631776748; Wed, 26 Aug 2015 16:29:36 -0700 (PDT) Received: from gabe.freedesktop.org (gabe.freedesktop.org. [131.252.210.177]) by mx.google.com with ESMTP id jf11si375622pbd.111.2015.08.26.16.29.35; Wed, 26 Aug 2015 16:29:36 -0700 (PDT) Received-SPF: pass (google.com: domain of dri-devel-bounces@lists.freedesktop.org designates 131.252.210.177 as permitted sender) client-ip=131.252.210.177; Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0A3756E6D8; Wed, 26 Aug 2015 16:29:35 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id AF6756E6D8 for ; Wed, 26 Aug 2015 16:29:33 -0700 (PDT) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP; 26 Aug 2015 16:29:34 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,419,1437462000"; d="scan'208";a="632919366" Received: from tvignatt-mobl3.amr.corp.intel.com ([10.254.89.87]) by orsmga003.jf.intel.com with ESMTP; 26 Aug 2015 16:29:31 -0700 From: Tiago Vignatti To: dri-devel@lists.freedesktop.org Subject: [PATCH 1/6] drm: prime: Honour O_RDWR during prime-handle-to-fd Date: Wed, 26 Aug 2015 20:29:13 -0300 Message-Id: <1440631758-30303-2-git-send-email-tiago.vignatti@intel.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1440631758-30303-1-git-send-email-tiago.vignatti@intel.com> References: <1440631758-30303-1-git-send-email-tiago.vignatti@intel.com> Cc: daniel.thompson@linaro.org, daniel.vetter@ffwll.ch, thellstrom@vmware.com, jglisse@redhat.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: 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-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: tiago.vignatti@intel.com X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.46 as permitted sender) smtp.mailfrom=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 From: Daniel Thompson Currently DRM_IOCTL_PRIME_HANDLE_TO_FD rejects all flags except (DRM|O)_CLOEXEC making it difficult (maybe impossible) for userspace to mmap() the resulting dma-buf even when this is supported by the DRM driver. It is trivial to relax the restriction and permit read/write access. This is safe because the flags are seldom touched by drm; mostly they are passed verbatim to dma_buf calls. v3 (Tiago): removed unused flags variable from drm_prime_handle_to_fd_ioctl. Reviewed-by: Chris Wilson Signed-off-by: Daniel Thompson Signed-off-by: Tiago Vignatti --- drivers/gpu/drm/drm_prime.c | 10 +++------- include/uapi/drm/drm.h | 1 + 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index 27aa718..df6cdc7 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -329,7 +329,7 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = { * drm_gem_prime_export - helper library implementation of the export callback * @dev: drm_device to export from * @obj: GEM object to export - * @flags: flags like DRM_CLOEXEC + * @flags: flags like DRM_CLOEXEC and DRM_RDWR * * This is the implementation of the gem_prime_export functions for GEM drivers * using the PRIME helpers. @@ -628,7 +628,6 @@ int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv) { struct drm_prime_handle *args = data; - uint32_t flags; if (!drm_core_check_feature(dev, DRIVER_PRIME)) return -EINVAL; @@ -637,14 +636,11 @@ int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data, return -ENOSYS; /* check flags are valid */ - if (args->flags & ~DRM_CLOEXEC) + if (args->flags & ~(DRM_CLOEXEC | DRM_RDWR)) return -EINVAL; - /* we only want to pass DRM_CLOEXEC which is == O_CLOEXEC */ - flags = args->flags & DRM_CLOEXEC; - return dev->driver->prime_handle_to_fd(dev, file_priv, - args->handle, flags, &args->fd); + args->handle, args->flags, &args->fd); } int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data, diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index 3801584..ad8223e 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -668,6 +668,7 @@ struct drm_set_client_cap { __u64 value; }; +#define DRM_RDWR O_RDWR #define DRM_CLOEXEC O_CLOEXEC struct drm_prime_handle { __u32 handle;