Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2814182ybl; Mon, 20 Jan 2020 09:50:15 -0800 (PST) X-Google-Smtp-Source: APXvYqyTvJhS24LjEgMr7Ki7YwPcdpabTYCmMj/oJG8jTfwJkfgzcjmv/+JQvHSpHQGaWQznLWYd X-Received: by 2002:a9d:4f18:: with SMTP id d24mr463748otl.179.1579542614988; Mon, 20 Jan 2020 09:50:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579542614; cv=none; d=google.com; s=arc-20160816; b=e8A/+ZGWpqb2P0HCr6RqcIyP8T0TUo5EzQcfYBP9Ae93YU/RssxGz5HHtNLGWvruJW UDT15IrYrvLQ0KURMGEmPpcpXCHzZdgfmYMeLd2PgHk5uukJ1OfjTvlqq1+EcMxXIZ51 idO+z9Ajb3DznAvz7ZivlFFifjC/aupoFUUlPnR2UmT9gCLqHYXVgGRZf3gxOM9aYlYE KSQ/arBHFb2KcM4L6Cog1H3lpv9Ui6FFTKRJqcRBkm3Wnd+zQqWXsVjf51A48bq78kVh 1u8MfU/8TWXOthtiEZ+blwV2AQSi/lqWoI9Ba7QJGy5qdO6WzLVB0e6KtOJjcUTGf1eQ zQBA== 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 :user-agent:references:in-reply-to:date:cc:to:from:subject :message-id; bh=z6e8idBgmcqdrYQ5qaq3fxYozdqR+v7pYOYGWGzv/2I=; b=sDMqw/zi3+igY8mRoZB+vo6f47BaAyvx3lrYGUhmF4+ch04kRGa7XnIpkLXMifcEEh BJ5wbgIhtxnEJJNzFOnPqYhrKYD9fQGdkw+HlaOSSKHyM+Heyir1XXrPryQ/xR5lQskD EXsrUHzuP97vfpIm7yR/ah2BwIGU6LRs7cPNNs+Sl3mQ3Il633T2crItR5XtteKOj4en cHZ4JbowGLlaeAWA4gv/Rzx7VplGiRC8sKg+voM25pXEUWTo0WT+pcr4cii3dKoHulry xngLTtZqlWU67XodesCh+NKRq2DuL4zySBJxiFjurq0Hr60rlVQ2Nsr4nE9h22o5gmmp cE8A== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i20si17895851oie.119.2020.01.20.09.50.01; Mon, 20 Jan 2020 09:50:14 -0800 (PST) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727071AbgATRsE (ORCPT + 99 others); Mon, 20 Jan 2020 12:48:04 -0500 Received: from metis.ext.pengutronix.de ([85.220.165.71]:51595 "EHLO metis.ext.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726642AbgATRsE (ORCPT ); Mon, 20 Jan 2020 12:48:04 -0500 Received: from kresse.hi.pengutronix.de ([2001:67c:670:100:1d::2a]) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1itb9b-0004hc-84; Mon, 20 Jan 2020 18:47:59 +0100 Message-ID: Subject: Re: [PATCH v2 13/24] drm/etnaviv: reject timeouts with tv_nsec >= NSEC_PER_SEC From: Lucas Stach To: Guido =?ISO-8859-1?Q?G=FCnther?= , Arnd Bergmann Cc: Philipp Zabel , y2038@lists.linaro.org, etnaviv@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, David Airlie , Christian Gmeiner , Daniel Vetter , Russell King , Emil Velikov , Sam Ravnborg Date: Mon, 20 Jan 2020 18:47:56 +0100 In-Reply-To: <20200117154726.GA328525@bogon.m.sigxcpu.org> References: <20191213204936.3643476-1-arnd@arndb.de> <20191213205417.3871055-4-arnd@arndb.de> <20200117154726.GA328525@bogon.m.sigxcpu.org> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.30.5-1.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::2a X-SA-Exim-Mail-From: l.stach@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fr, 2020-01-17 at 16:47 +0100, Guido Günther wrote: > Hi, > On Fri, Dec 13, 2019 at 09:53:41PM +0100, Arnd Bergmann wrote: > > Most kernel interfaces that take a timespec require normalized > > representation with tv_nsec between 0 and NSEC_PER_SEC. > > > > Passing values larger than 0x100000000ull further behaves differently > > on 32-bit and 64-bit kernels, and can cause the latter to spend a long > > time counting seconds in timespec64_sub()/set_normalized_timespec64(). > > > > Reject those large values at the user interface to enforce sane and > > portable behavior. > > > > Signed-off-by: Arnd Bergmann > > --- > > drivers/gpu/drm/etnaviv/etnaviv_drv.c | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c > > index 1f9c01be40d7..95d72dc00280 100644 > > --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c > > +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c > > @@ -297,6 +297,9 @@ static int etnaviv_ioctl_gem_cpu_prep(struct drm_device *dev, void *data, > > if (args->op & ~(ETNA_PREP_READ | ETNA_PREP_WRITE | ETNA_PREP_NOSYNC)) > > return -EINVAL; > > > > + if (args->timeout.tv_nsec > NSEC_PER_SEC) > > + return -EINVAL; > > + > > obj = drm_gem_object_lookup(file, args->handle); > > if (!obj) > > return -ENOENT; > > @@ -360,6 +363,9 @@ static int etnaviv_ioctl_wait_fence(struct drm_device *dev, void *data, > > if (args->flags & ~(ETNA_WAIT_NONBLOCK)) > > return -EINVAL; > > > > + if (args->timeout.tv_nsec > NSEC_PER_SEC) > > + return -EINVAL; > > + > > if (args->pipe >= ETNA_MAX_PIPES) > > return -EINVAL; > > > > @@ -411,6 +417,9 @@ static int etnaviv_ioctl_gem_wait(struct drm_device *dev, void *data, > > if (args->flags & ~(ETNA_WAIT_NONBLOCK)) > > return -EINVAL; > > > > + if (args->timeout.tv_nsec > NSEC_PER_SEC) > > + return -EINVAL; > > + > > if (args->pipe >= ETNA_MAX_PIPES) > > return -EINVAL; > > > > This breaks rendering here on arm64/gc7000 due to > > ioctl(6, DRM_IOCTL_ETNAVIV_GEM_CPU_PREP or DRM_IOCTL_MSM_GEM_CPU_PREP, 0xfffff7888680) = -1 EINVAL (Invalid argument) > ioctl(6, DRM_IOCTL_ETNAVIV_GEM_CPU_FINI or DRM_IOCTL_QXL_CLIENTCAP, 0xfffff78885e0) = 0 > ioctl(6, DRM_IOCTL_ETNAVIV_GEM_CPU_PREP or DRM_IOCTL_MSM_GEM_CPU_PREP, 0xfffff7888680) = -1 EINVAL (Invalid argument) > ioctl(6, DRM_IOCTL_ETNAVIV_GEM_CPU_FINI or DRM_IOCTL_QXL_CLIENTCAP, 0xfffff78885e0) = 0 > ioctl(6, DRM_IOCTL_ETNAVIV_GEM_CPU_PREP or DRM_IOCTL_MSM_GEM_CPU_PREP, 0xfffff7888680) = -1 EINVAL (Invalid argument) > ioctl(6, DRM_IOCTL_ETNAVIV_GEM_CPU_FINI or DRM_IOCTL_QXL_CLIENTCAP, 0xfffff78885e0) = 0 > > This is due to > > get_abs_timeout(&req.timeout, 5000000000); > > in etna_bo_cpu_prep which can exceed NSEC_PER_SEC. > > Should i send a patch to revert that change since it breaks existing userspace? No need to revert. This patch has not been applied to the etnaviv tree yet, I guess it's just in one of Arnds branches feeding into -next. That part of userspace is pretty dumb, as it misses to renormalize tv_nsec when it overflows the second boundary. So if what I see is correct it should be enough to allow 2 * NSEC_PER_SEC, which should both reject broken large timeout and keep existing userspace working. Regards, Lucas