From patchwork Wed Aug 5 22:13:09 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tiago Vignatti X-Patchwork-Id: 51978 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-la0-f70.google.com (mail-la0-f70.google.com [209.85.215.70]) by patches.linaro.org (Postfix) with ESMTPS id 0F9BE229FD for ; Wed, 5 Aug 2015 22:13:34 +0000 (UTC) Received: by lagz9 with SMTP id z9sf1243743lag.3 for ; Wed, 05 Aug 2015 15:13:32 -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=ONVS4pLVYmm5E1XIw6qeUmO8XtyxQz0JFa/q2k1ntorK2a9XZ863EpXTem9m+niflR LStcaBxGvLT2Q3TK2TkcmmzKD8SgTI3QKh5NT90s+N5OtVl9Wkj9qWcelRZidYoWPaSQ iuf3ESEDsd7e/u62mhu3rjRLoeliUbd92mx6fl2tSPZ9W5QJqnP2Ysu93fH+69xcrHEv mwHbKgg27ZIwiy083oT2qW3zqWuIHU+Dc1/8S/TrptlTILzjb4QJewQt6/O7qGqU8hol I6JXstk6WvTzhziHVvEs1Y9wA95KvCjvf8cHOqY49x/6ooihpeD7Tj72ejVjfRfGeAR6 J0vg== X-Gm-Message-State: ALoCoQlT8+8ctH/eryvyXD/lnMIkdrNqmG4Qxi63FpeCKZlPT568D/NFaYUwizFNAlL78l903uvr X-Received: by 10.194.93.198 with SMTP id cw6mr3376233wjb.3.1438812812451; Wed, 05 Aug 2015 15:13:32 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.185.67 with SMTP id fa3ls236030lac.76.gmail; Wed, 05 Aug 2015 15:13:32 -0700 (PDT) X-Received: by 10.152.179.42 with SMTP id dd10mr11681710lac.89.1438812812144; Wed, 05 Aug 2015 15:13:32 -0700 (PDT) Received: from mail-lb0-f178.google.com (mail-lb0-f178.google.com. [209.85.217.178]) by mx.google.com with ESMTPS id t9si3119548lat.175.2015.08.05.15.13.32 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Aug 2015 15:13:32 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.178 as permitted sender) client-ip=209.85.217.178; Received: by lbbvv8 with SMTP id vv8so30017289lbb.1 for ; Wed, 05 Aug 2015 15:13:32 -0700 (PDT) X-Received: by 10.112.166.106 with SMTP id zf10mr11632690lbb.36.1438812811937; Wed, 05 Aug 2015 15:13:31 -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 l6csp599730lba; Wed, 5 Aug 2015 15:13:30 -0700 (PDT) X-Received: by 10.68.105.33 with SMTP id gj1mr20239657pbb.100.1438812808279; Wed, 05 Aug 2015 15:13:28 -0700 (PDT) Received: from gabe.freedesktop.org (gabe.freedesktop.org. [131.252.210.177]) by mx.google.com with ESMTP id qw9si7491342pab.238.2015.08.05.15.13.27; Wed, 05 Aug 2015 15:13:28 -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 10E067A085; Wed, 5 Aug 2015 15:13:26 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id B25937A084; Wed, 5 Aug 2015 15:13:24 -0700 (PDT) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga102.fm.intel.com with ESMTP; 05 Aug 2015 15:13:25 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,620,1432623600"; d="scan'208";a="742999065" Received: from tvignatt-mobl3.amr.corp.intel.com ([10.254.19.24]) by orsmga001.jf.intel.com with ESMTP; 05 Aug 2015 15:13:22 -0700 From: Tiago Vignatti To: dri-devel@lists.freedesktop.org Subject: [PATCH 1/3] drm: prime: Honour O_RDWR during prime-handle-to-fd Date: Wed, 5 Aug 2015 19:13:09 -0300 Message-Id: <1438812791-5857-2-git-send-email-tiago.vignatti@intel.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1438812791-5857-1-git-send-email-tiago.vignatti@intel.com> References: <1438812791-5857-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.178 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;