From patchwork Fri Jul 31 20:42:24 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tiago Vignatti X-Patchwork-Id: 51796 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-lb0-f197.google.com (mail-lb0-f197.google.com [209.85.217.197]) by patches.linaro.org (Postfix) with ESMTPS id 87D2922A8D for ; Fri, 31 Jul 2015 20:43:25 +0000 (UTC) Received: by lbbyj8 with SMTP id yj8sf7958278lbb.3 for ; Fri, 31 Jul 2015 13:43:24 -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=R1YzOsFxPPnsR5hea6k0z+q6TXFST7vT8ArPWlQqPpM=; b=SHj9+NW1NVEuh5osltvXchiKe/OrbEJU6X2TW3fX3aSyzf4GVUwwBDL3Oc435hTyi+ yKRrmyYscJDfcrqChlnolC15zZskYziIpWH4vpLurpqPa8Cxrc1BNrvLApoRl0h1DEmw af1c4YGTJcjy+jg5w7+fxzqmscBJUNAkWBq1+L/A/Th9cJe6zVxLAY/N6vHP63kByiKH 5Kuuhe08PxclXhmp+fubJY9kY+jMi3GtRFKKbd9P4Ghi3PTiMIIXG3WXOmfnP2wF2Zms 9W48utTH/h7zXpCaqr1BtZMXXjIgnrYAINFywCVr+bdQl3F3FrDS/iHi820rxObh5ObC E+Bw== X-Gm-Message-State: ALoCoQlX0oVvG0Fuig7zKiSFUrMmSmZe4xNfhr/mfdoVJV0Y0PXXpy0X8AkLDm3enX4EreLSfP/O X-Received: by 10.112.98.42 with SMTP id ef10mr1504754lbb.18.1438375404471; Fri, 31 Jul 2015 13:43:24 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.29.100 with SMTP id j4ls383061lah.9.gmail; Fri, 31 Jul 2015 13:43:24 -0700 (PDT) X-Received: by 10.152.28.194 with SMTP id d2mr5315191lah.122.1438375404191; Fri, 31 Jul 2015 13:43:24 -0700 (PDT) Received: from mail-lb0-f174.google.com (mail-lb0-f174.google.com. [209.85.217.174]) by mx.google.com with ESMTPS id q2si4887358laq.102.2015.07.31.13.43.24 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 31 Jul 2015 13:43:24 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.174 as permitted sender) client-ip=209.85.217.174; Received: by lbbyj8 with SMTP id yj8so52721214lbb.0 for ; Fri, 31 Jul 2015 13:43:24 -0700 (PDT) X-Received: by 10.152.36.161 with SMTP id r1mr5154940laj.88.1438375403962; Fri, 31 Jul 2015 13:43:23 -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.7.198 with SMTP id l6csp593451lba; Fri, 31 Jul 2015 13:43:22 -0700 (PDT) X-Received: by 10.70.129.102 with SMTP id nv6mr11003940pdb.55.1438375398657; Fri, 31 Jul 2015 13:43:18 -0700 (PDT) Received: from gabe.freedesktop.org (gabe.freedesktop.org. [131.252.210.177]) by mx.google.com with ESMTP id ti5si12689896pab.152.2015.07.31.13.43.17; Fri, 31 Jul 2015 13:43:18 -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 F2C2D7A201; Fri, 31 Jul 2015 13:43:16 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id B849A7A205; Fri, 31 Jul 2015 13:43:15 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP; 31 Jul 2015 13:42:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,586,1432623600"; d="scan'208";a="533900442" Received: from tvignatt-mobl3.amr.corp.intel.com ([10.254.54.33]) by FMSMGA003.fm.intel.com with ESMTP; 31 Jul 2015 13:42:54 -0700 From: Tiago Vignatti To: dri-devel@lists.freedesktop.org Subject: [PATCH 2/2] drm: prime: Honour O_RDWR during prime-handle-to-fd Date: Fri, 31 Jul 2015 17:42:24 -0300 Message-Id: <1438375344-4954-3-git-send-email-tiago.vignatti@intel.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1438375344-4954-1-git-send-email-tiago.vignatti@intel.com> References: <1438375344-4954-1-git-send-email-tiago.vignatti@intel.com> Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, daniel.thompson@linaro.org 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.217.174 as permitted sender) smtp.mail=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. 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;