Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp573993yba; Wed, 24 Apr 2019 06:16:06 -0700 (PDT) X-Google-Smtp-Source: APXvYqzXm6gwvhCRE035b8RBrgD1w1H5EK12MGKa7jwlTb+LJ7pz2yptXg2iSAmf3bODchZ1jxMx X-Received: by 2002:a63:170f:: with SMTP id x15mr649426pgl.213.1556111766717; Wed, 24 Apr 2019 06:16:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556111766; cv=none; d=google.com; s=arc-20160816; b=OZrTUcUfXw/XObY0zmpw4C5J2YGqc3B/AtiFTIkL/WUHxgGTkOTHOTFvfAp9fcx8sb E6NOTpwnbC7QQZVBN0v5KwpTRk1kJ3VlWXTDirP7H7Ms9FQ9ApnH65rfHTZYBH2elpQH 6/j7kYolhrds7kwxlHW062cB2YvqkbKOEPCZOthteBpeXJQ2ZkFDdx0xByYZajDM4oGW 85/06XCXJkZlmVb82vwsaEIuhQ6nGENZn67F0cfQzT26xgw6xEe8qjfY+Djw8cA3gWfq E0Su6m2N17h50dO/iDC//Pj5LzYN6wD0x+KYMsG53fF/5t7Yale4K7+lY5lMOwOeHecx y+Lw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=J8qWjC17CdJYRqhzFhIPuaKkf1U3hmYPn8JGqQcjU8M=; b=qfELfYwjxP1N4Ku6bKoY/PgAQpFkhPf8U9Zxu//vK9g68TO/qZpklwfuqFHtZzknp/ HOenqxFZDrUaevc94n7i7GkbuJC/cZ9Zu1V2JKZ2wLF1mnXgJsYuruHDRENqn3vcJplT ABaaKJQL5LzvbhKhzKyvarWoaDn97scb38mJ8AQvn+PX8zmixh7KkUXm1t2H0vQMpsnK qEH5YJ4MoDpdmRFkwAPVFb7t5QZKP2+bsrsfubZrIy2mkJhOryYfeaPNR5vdefuCDLx7 CIu1k21ERpMqrUhwI6ZufALMjGmfnHbfvL0RQzEq/2BC8FzcX+hkCWWzS7rvVR18KV6G YAKA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=CaRl0vtc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 98si19248359plb.84.2019.04.24.06.15.50; Wed, 24 Apr 2019 06:16:06 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=CaRl0vtc; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730397AbfDXNOM (ORCPT + 99 others); Wed, 24 Apr 2019 09:14:12 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:38700 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730382AbfDXNOM (ORCPT ); Wed, 24 Apr 2019 09:14:12 -0400 Received: by mail-wm1-f66.google.com with SMTP id w15so5004968wmc.3 for ; Wed, 24 Apr 2019 06:14:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=J8qWjC17CdJYRqhzFhIPuaKkf1U3hmYPn8JGqQcjU8M=; b=CaRl0vtcX8Mf/mRrkgyrA7GRkjr0zmIm9LhtwWG8n0aoChBVa9TpXaO7On3qoK1CeN ismOcNcJqgCrMJBdKN88zcyRVuzmb1hyeaS00DeM0Xgb0Igy+fek7D7IYhiR3LXTzHI7 KTxHGMPDsxdJnai54FQ3++LDjVr2CDUmhvpDMbjw/hhAa6Yf4AXqmWr2+0TMjfFY1y4K /XKJ/I69XI+n2TJdPkxVxwOh5B9VOhjbgtQDJF/pMjJ61m2xEt3IamAOXFItUEd5Bv5A ziPYdtv5CYyDRDn/JLdq2pEGw4ju66N0AZypVVns7BxHD6Rg1Bmg72ZpcNWfdfJZEMso hHgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :mime-version:content-transfer-encoding; bh=J8qWjC17CdJYRqhzFhIPuaKkf1U3hmYPn8JGqQcjU8M=; b=TOOm2losc1jh0o9azzc16bvE+q+p3IXFJ4gkCMe3wxxl1iRe/HJaTiIX5AGt1uFvJE qwCgvKki2Knqu1YKQBicYcHWp9pZtFTHDNPbixY/seS6WT4fCkizF5sB+6vR85foZubz Xvqlg3IalgGFVqTRhe2eQ/RBljawaXE8++L+AYYhnWjbsXE9HkfOywwx15y4f0jhsRwK c9jGUuON/KXokLTWy3ghQH8ge/3Srv148Ky+hBlIR+/jz5GV5j8m9ZYFAW9KUwJlzB8X hmQYa/VpF8C0LY3r/6ELYp4Vu/eU+IWXQ9ZQf1zNL54crUECThuwyDycgYc9gVXx/RxK HBcQ== X-Gm-Message-State: APjAAAUFKcBO+Zm0XpqPaIqG5yE1tkKromrkim52nxke+zZUxu1VDCeJ zZMXrHYo3u8p8S3Hj0a8Hq/KzBtW X-Received: by 2002:a1c:cb0f:: with SMTP id b15mr6475340wmg.88.1556111650088; Wed, 24 Apr 2019 06:14:10 -0700 (PDT) Received: from cizrna.cbg.collabora.co.uk ([109.72.12.5]) by smtp.gmail.com with ESMTPSA id r18sm29355218wme.18.2019.04.24.06.14.08 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 24 Apr 2019 06:14:09 -0700 (PDT) From: Tomeu Vizoso To: linux-kernel@vger.kernel.org Cc: Tomeu Vizoso , Rob Herring , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org Subject: [PATCH] drm/panfrost: Add sanity checks to submit IOCTL Date: Wed, 24 Apr 2019 15:13:53 +0200 Message-Id: <20190424131355.62817-1-tomeu.vizoso@collabora.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org So userspace can get feedback on any error conditions, instead of going ahead and things breaking later. Signed-off-by: Tomeu Vizoso --- drivers/gpu/drm/panfrost/panfrost_drv.c | 35 +++++++++++++++++-------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c index c06af78ab833..0f2863cb8077 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -172,13 +172,27 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, { struct panfrost_device *pfdev = dev->dev_private; struct drm_panfrost_submit *args = data; - struct drm_syncobj *sync_out; + struct drm_syncobj *sync_out = NULL; struct panfrost_job *job; int ret = 0; + if (!args->jc) + return -EINVAL; + + if (args->requirements && args->requirements != PANFROST_JD_REQ_FS) + return -EINVAL; + + if (args->out_sync > 0) { + sync_out = drm_syncobj_find(file, args->out_sync); + if (!sync_out) + return -ENODEV; + } + job = kzalloc(sizeof(*job), GFP_KERNEL); - if (!job) - return -ENOMEM; + if (!job) { + ret = -ENOMEM; + goto fail_out_sync; + } kref_init(&job->refcount); @@ -190,25 +204,24 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, ret = panfrost_copy_in_sync(dev, file, args, job); if (ret) - goto fail; + goto fail_job; ret = panfrost_lookup_bos(dev, file, args, job); if (ret) - goto fail; + goto fail_job; ret = panfrost_job_push(job); if (ret) - goto fail; + goto fail_job; /* Update the return sync object for the job */ - sync_out = drm_syncobj_find(file, args->out_sync); - if (sync_out) { + if (sync_out) drm_syncobj_replace_fence(sync_out, job->render_done_fence); - drm_syncobj_put(sync_out); - } -fail: +fail_job: panfrost_job_put(job); +fail_out_sync: + drm_syncobj_put(sync_out); return ret; } -- 2.20.1