All of lore.kernel.org
 help / color / mirror / Atom feed
From: u.kleine-koenig@pengutronix.de (Uwe Kleine-König)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] clockevents: Sanitize ticks to nsec conversion
Date: Thu, 19 Sep 2013 14:48:05 +0200	[thread overview]
Message-ID: <20130919124805.GU24802@pengutronix.de> (raw)
In-Reply-To: <alpine.DEB.2.02.1309191207460.4089@ionos.tec.linutronix.de>

Hello Thomas,

On Thu, Sep 19, 2013 at 12:15:10PM +0200, Thomas Gleixner wrote:
> On Thu, 19 Sep 2013, Uwe Kleine-K?nig wrote:
> > On Thu, Sep 19, 2013 at 12:01:25AM +0200, Thomas Gleixner wrote:
> > > Versus the 64bit overflow check, we need to be even more careful. We
> > > need to check for overflowing (1 << 63) - 1 (i.e. the max positive
> > > value which fits into a s64). See clockevents_program_event().
> > 
> > That is because you interpret times < 0 as in the past, right? But note
> > that the interim result we're talking about here is still to be divided
> > by evt->mult. So assuming mult > 1, that check is too strict unless you
> > move it below the do_div in clockevent_delta2ns. For sure it makes sense
> > to use the same value for a and b in the handling:
> 
> No, it's not too strict.
> 
>     nsec = (latch << shift) / mult;
> 
> Now the backwards conversion does:
> 
>     latch = (nsec * mult) >> shift;
>
> So we want nsec * mult to be in the positive range of s64. Which
> means, that latch << shift must be in that range as well.
The backwards conversion is in clockevents_program_event(), right? There
is:

	clc = ((unsigned long long) delta * dev->mult) >> dev->shift;

So I don't see a problem if nsec * mult overflows (1 << 63) - 1 as long
as it still fits into an unsigned long long (i.e. a 64 bit value).

What am I missing?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-K?nig            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

WARNING: multiple messages have this Message-ID (diff)
From: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Ludovic Desroches <ludovic.desroches@atmel.com>,
	Russell King - ARM Linux <linux@arm.linux.org.uk>,
	Marc Kleine-Budde <mkl@pengutronix.de>,
	nicolas.ferre@atmel.com, LKML <linux-kernel@vger.kernel.org>,
	Marc Pignat <marc.pignat@hevs.ch>,
	john.stultz@linaro.org, kernel@pengutronix.de,
	Ronald Wahl <ronald.wahl@raritan.com>,
	LAK <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH] clockevents: Sanitize ticks to nsec conversion
Date: Thu, 19 Sep 2013 14:48:05 +0200	[thread overview]
Message-ID: <20130919124805.GU24802@pengutronix.de> (raw)
In-Reply-To: <alpine.DEB.2.02.1309191207460.4089@ionos.tec.linutronix.de>

Hello Thomas,

On Thu, Sep 19, 2013 at 12:15:10PM +0200, Thomas Gleixner wrote:
> On Thu, 19 Sep 2013, Uwe Kleine-König wrote:
> > On Thu, Sep 19, 2013 at 12:01:25AM +0200, Thomas Gleixner wrote:
> > > Versus the 64bit overflow check, we need to be even more careful. We
> > > need to check for overflowing (1 << 63) - 1 (i.e. the max positive
> > > value which fits into a s64). See clockevents_program_event().
> > 
> > That is because you interpret times < 0 as in the past, right? But note
> > that the interim result we're talking about here is still to be divided
> > by evt->mult. So assuming mult > 1, that check is too strict unless you
> > move it below the do_div in clockevent_delta2ns. For sure it makes sense
> > to use the same value for a and b in the handling:
> 
> No, it's not too strict.
> 
>     nsec = (latch << shift) / mult;
> 
> Now the backwards conversion does:
> 
>     latch = (nsec * mult) >> shift;
>
> So we want nsec * mult to be in the positive range of s64. Which
> means, that latch << shift must be in that range as well.
The backwards conversion is in clockevents_program_event(), right? There
is:

	clc = ((unsigned long long) delta * dev->mult) >> dev->shift;

So I don't see a problem if nsec * mult overflows (1 << 63) - 1 as long
as it still fits into an unsigned long long (i.e. a 64 bit value).

What am I missing?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

  reply	other threads:[~2013-09-19 12:48 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-13 13:02 [PATCH] [PATCH] clocksource: tcb: fix min_delta calculation Marc Kleine-Budde
2013-09-13 13:02 ` Marc Kleine-Budde
2013-09-17  9:56 ` Ludovic Desroches
2013-09-17 10:04   ` Russell King - ARM Linux
2013-09-17 10:04     ` Russell King - ARM Linux
2013-09-17 11:26     ` Thomas Gleixner
2013-09-17 11:26       ` Thomas Gleixner
2013-09-17 13:01       ` Ludovic Desroches
2013-09-17 21:15         ` [PATCH] clockevents: Sanitize ticks to nsec conversion Thomas Gleixner
2013-09-17 21:15           ` Thomas Gleixner
2013-09-17 22:25           ` Marc Kleine-Budde
2013-09-17 22:25             ` Marc Kleine-Budde
2013-09-17 23:20             ` Thomas Gleixner
2013-09-17 23:20               ` Thomas Gleixner
2013-09-18  7:33           ` Ludovic Desroches
2013-09-18  8:56           ` Uwe Kleine-König
2013-09-18  8:56             ` Uwe Kleine-König
2013-09-18  9:38             ` Thomas Gleixner
2013-09-18  9:38               ` Thomas Gleixner
2013-09-18 15:09               ` Uwe Kleine-König
2013-09-18 15:09                 ` Uwe Kleine-König
2013-09-18 22:01                 ` Thomas Gleixner
2013-09-18 22:01                   ` Thomas Gleixner
2013-09-19 10:02                   ` Uwe Kleine-König
2013-09-19 10:02                     ` Uwe Kleine-König
2013-09-19 10:15                     ` Thomas Gleixner
2013-09-19 10:15                       ` Thomas Gleixner
2013-09-19 12:48                       ` Uwe Kleine-König [this message]
2013-09-19 12:48                         ` Uwe Kleine-König
2013-09-19 13:12                         ` Thomas Gleixner
2013-09-19 13:12                           ` Thomas Gleixner
2013-09-19 14:30                         ` Thomas Gleixner
2013-09-19 14:30                           ` Thomas Gleixner
2013-09-19 20:03                           ` Uwe Kleine-König
2013-09-19 20:03                             ` Uwe Kleine-König
2013-09-20  9:56                             ` Thomas Gleixner
2013-09-20  9:56                               ` Thomas Gleixner
2013-09-20 20:41                               ` Uwe Kleine-König
2013-09-20 20:41                                 ` Uwe Kleine-König
2013-09-20 21:30                                 ` Thomas Gleixner
2013-09-20 21:30                                   ` Thomas Gleixner
2013-09-24 19:50                           ` [PATCH v2] " Uwe Kleine-König
2013-09-24 19:50                             ` Uwe Kleine-König
2013-09-24 21:11                             ` Timekeeping on at91rm9200 [Was: [PATCH v2] clockevents: Sanitize ticks to nsec conversion] Uwe Kleine-König
2013-09-24 21:11                               ` Uwe Kleine-König
2013-10-04 10:00                               ` Nicolas Ferre
2013-10-04 10:00                                 ` Nicolas Ferre
2013-09-24 21:16                             ` [PATCH v2] clockevents: Sanitize ticks to nsec conversion Uwe Kleine-König
2013-09-24 21:16                               ` Uwe Kleine-König
2013-10-08 10:08                             ` Marc Kleine-Budde
2013-10-08 10:08                               ` Marc Kleine-Budde
2013-10-08 15:31                               ` [GIT PULL] fixes for integer rounding in timer core (Was: [PATCH v2] clockevents: Sanitize ticks to nsec conversion) Uwe Kleine-König
2013-10-08 15:31                                 ` Uwe Kleine-König
2013-10-14  7:34                                 ` [GIT PULL] fixes for integer rounding in timer core Uwe Kleine-König
2013-10-14  7:34                                   ` Uwe Kleine-König
2013-10-16 14:19                                   ` Nicolas Ferre
2013-10-16 14:19                                     ` Nicolas Ferre
2013-10-21  7:12                                   ` Uwe Kleine-König
2013-10-21  7:12                                     ` Uwe Kleine-König
2013-10-21 20:53                                     ` Daniel Lezcano
2013-10-21 20:53                                       ` Daniel Lezcano
2013-10-23 10:56                             ` [tip:timers/urgent] clockevents: Sanitize ticks to nsec conversion tip-bot for Thomas Gleixner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130919124805.GU24802@pengutronix.de \
    --to=u.kleine-koenig@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.