From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: Re: [PATCH] drm/i915: prevent division by zero when asking for chipset power Date: Thu, 10 Nov 2011 13:21:38 +0000 Message-ID: References: <1320929486-6800-1-git-send-email-eugeni.dodonov@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id EADF8A0BD9 for ; Thu, 10 Nov 2011 05:21:46 -0800 (PST) In-Reply-To: <1320929486-6800-1-git-send-email-eugeni.dodonov@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org Cc: stable@vger.kernel.org, Eugeni Dodonov List-Id: intel-gfx@lists.freedesktop.org On Thu, 10 Nov 2011 10:51:26 -0200, Eugeni Dodonov wrote: > This prevents an in-kernel division by zero which happens when we are > asking for i915_chipset_val too quickly, or within a race condition > between the power monitoring thread and userspace accesses via debugfs. > > The issue can be reproduced easily via the following command: > while ``; do cat /sys/kernel/debug/dri/0/i915_emon_status; done > > This is particularly dangerous because it can be triggered by > a non-privileged user by just reading the debugfs entry. > > This issue was also found independently by Konstantin Belousov > , who proposed a similar patch. > > Reported-by: Konstantin Belousov > Acked-by: Jesse Barnes > Acked-by: Keith Packard > Cc: > Signed-off-by: Eugeni Dodonov Reviewed-by: Chris Wilson Just spotted a typo... > --- > drivers/gpu/drm/i915/i915_dma.c | 10 ++++++++++ > drivers/gpu/drm/i915/i915_drv.h | 1 + > 2 files changed, 11 insertions(+), 0 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c > index 8a3942c..de199e7 100644 > --- a/drivers/gpu/drm/i915/i915_dma.c > +++ b/drivers/gpu/drm/i915/i915_dma.c > @@ -1453,6 +1453,14 @@ unsigned long i915_chipset_val(struct drm_i915_private *dev_priv) > > diff1 = now - dev_priv->last_time1; > > + /* Prevent division-by-zero if we are asking too fast. > + * Also, we don't get interesting results in we are polling s/in/if/ -Chris -- Chris Wilson, Intel Open Source Technology Centre