Re: [PATCH] time: Fix sign bug in ntp mult overflow warning

2014-12-02 Thread Jeremiah Mahler
Xunlei,

On Tue, Dec 02, 2014 at 11:00:26PM +0800, Xunlei Pang wrote:
> On 2 December 2014 at 17:32, Jeremiah Mahler  wrote:
> > John,
> >
> > On Mon, Nov 24, 2014 at 08:35:45PM -0800, John Stultz wrote:
> >> In commit 6067dc5a8c2b ("time: Avoid possible NTP adjustment mult
> >> @@ -1330,7 +1330,7 @@ static __always_inline void 
> >> timekeeping_apply_adjustment(struct timekeeper *tk,
[...]
> >>*
> >>* XXX - TODO: Doc ntp_error calculation.
> >>*/
> >> - if (tk->tkr.mult + mult_adj < mult_adj) {
> >> + if ((mult_adj > 0) && (tk->tkr.mult + mult_adj < mult_adj)) {
> >>   /* NTP adjustment caused clocksource mult overflow */
> >>   WARN_ON_ONCE(1);
> >>   return;
> >
> > This change does quiet the warning but I think it does so for the wrong
> > reason.
> >
> > mult_adj is a signed number and tk->tkr.mult is an unsigned number.
> > Adding the check that (mult_adj > 0) limits the test to only positive
> > numbers.  A positive number plus a positive number will never be less
> > than either of the two positive numbers.  The test is always false.
> 
> Hi Jeremiah,
> 
> The result of a positive number plus a positive number may overflow,
> for example, u32  (0x_FFF0 + 0x20) will be 0x10,
> that's what this patch is dealing with.
> 
> Thanks,
> Xunlei
> >
> > --
> > - Jeremiah Mahler

Oh, got it.  That makes sense now.  Thanks :)

-- 
- Jeremiah Mahler
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] time: Fix sign bug in ntp mult overflow warning

2014-12-02 Thread Xunlei Pang
On 2 December 2014 at 17:32, Jeremiah Mahler  wrote:
> John,
>
> On Mon, Nov 24, 2014 at 08:35:45PM -0800, John Stultz wrote:
>> In commit 6067dc5a8c2b ("time: Avoid possible NTP adjustment mult
>> overflow") a new check was added to watch for adjustments that could
>> cause a mult overflow.
>>
>> Unfortunately the check compares a signed with unsigned value and
>> ignored the case where the adjustment was negative, which causes
>> spurious warn-ons on some systems (and seems like it would result in
>> problematic time adjustments there as well, due to the early
>> return).
>>
>> Thus this patch adds a check to make sure the adjustment is positive
>> before we check for an overflow, and resovles the issue in my
>> testing.
>>
>> Cc: pang.xunlei 
>> Cc: Fengguang Wu 
>> Cc: Thomas Gleixner 
>> Cc: Ingo Molnar 
>> Reported-by: Fengguang Wu 
>> Debugged-by: pang.xunlei 
>> Signed-off-by: John Stultz 
>> ---
>>  kernel/time/timekeeping.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
>> index 29a7d67..2dc0646 100644
>> --- a/kernel/time/timekeeping.c
>> +++ b/kernel/time/timekeeping.c
>> @@ -1330,7 +1330,7 @@ static __always_inline void 
>> timekeeping_apply_adjustment(struct timekeeper *tk,
>>*
>>* XXX - TODO: Doc ntp_error calculation.
>>*/
>> - if (tk->tkr.mult + mult_adj < mult_adj) {
>> + if ((mult_adj > 0) && (tk->tkr.mult + mult_adj < mult_adj)) {
>>   /* NTP adjustment caused clocksource mult overflow */
>>   WARN_ON_ONCE(1);
>>   return;
>
> This change does quiet the warning but I think it does so for the wrong
> reason.
>
> mult_adj is a signed number and tk->tkr.mult is an unsigned number.
> Adding the check that (mult_adj > 0) limits the test to only positive
> numbers.  A positive number plus a positive number will never be less
> than either of the two positive numbers.  The test is always false.

Hi Jeremiah,

The result of a positive number plus a positive number may overflow,
for example, u32  (0x_FFF0 + 0x20) will be 0x10,
that's what this patch is dealing with.

Thanks,
Xunlei
>
> --
> - Jeremiah Mahler
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] time: Fix sign bug in ntp mult overflow warning

2014-12-02 Thread Jeremiah Mahler
John,

On Mon, Nov 24, 2014 at 08:35:45PM -0800, John Stultz wrote:
> In commit 6067dc5a8c2b ("time: Avoid possible NTP adjustment mult
> overflow") a new check was added to watch for adjustments that could
> cause a mult overflow.
> 
> Unfortunately the check compares a signed with unsigned value and
> ignored the case where the adjustment was negative, which causes
> spurious warn-ons on some systems (and seems like it would result in
> problematic time adjustments there as well, due to the early
> return).
> 
> Thus this patch adds a check to make sure the adjustment is positive
> before we check for an overflow, and resovles the issue in my
> testing.
> 
> Cc: pang.xunlei 
> Cc: Fengguang Wu 
> Cc: Thomas Gleixner 
> Cc: Ingo Molnar 
> Reported-by: Fengguang Wu 
> Debugged-by: pang.xunlei 
> Signed-off-by: John Stultz 
> ---
>  kernel/time/timekeeping.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
> index 29a7d67..2dc0646 100644
> --- a/kernel/time/timekeeping.c
> +++ b/kernel/time/timekeeping.c
> @@ -1330,7 +1330,7 @@ static __always_inline void 
> timekeeping_apply_adjustment(struct timekeeper *tk,
>*
>* XXX - TODO: Doc ntp_error calculation.
>*/
> - if (tk->tkr.mult + mult_adj < mult_adj) {
> + if ((mult_adj > 0) && (tk->tkr.mult + mult_adj < mult_adj)) {
>   /* NTP adjustment caused clocksource mult overflow */
>   WARN_ON_ONCE(1);
>   return;

This change does quiet the warning but I think it does so for the wrong
reason.

mult_adj is a signed number and tk->tkr.mult is an unsigned number.
Adding the check that (mult_adj > 0) limits the test to only positive
numbers.  A positive number plus a positive number will never be less
than either of the two positive numbers.  The test is always false.

-- 
- Jeremiah Mahler
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] time: Fix sign bug in ntp mult overflow warning

2014-12-02 Thread Jeremiah Mahler
John,

On Mon, Nov 24, 2014 at 08:35:45PM -0800, John Stultz wrote:
 In commit 6067dc5a8c2b (time: Avoid possible NTP adjustment mult
 overflow) a new check was added to watch for adjustments that could
 cause a mult overflow.
 
 Unfortunately the check compares a signed with unsigned value and
 ignored the case where the adjustment was negative, which causes
 spurious warn-ons on some systems (and seems like it would result in
 problematic time adjustments there as well, due to the early
 return).
 
 Thus this patch adds a check to make sure the adjustment is positive
 before we check for an overflow, and resovles the issue in my
 testing.
 
 Cc: pang.xunlei pang.xun...@linaro.org
 Cc: Fengguang Wu fengguang...@intel.com
 Cc: Thomas Gleixner t...@linutronix.de
 Cc: Ingo Molnar mi...@kernel.org
 Reported-by: Fengguang Wu fengguang...@intel.com
 Debugged-by: pang.xunlei pang.xun...@linaro.org
 Signed-off-by: John Stultz john.stu...@linaro.org
 ---
  kernel/time/timekeeping.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
 index 29a7d67..2dc0646 100644
 --- a/kernel/time/timekeeping.c
 +++ b/kernel/time/timekeeping.c
 @@ -1330,7 +1330,7 @@ static __always_inline void 
 timekeeping_apply_adjustment(struct timekeeper *tk,
*
* XXX - TODO: Doc ntp_error calculation.
*/
 - if (tk-tkr.mult + mult_adj  mult_adj) {
 + if ((mult_adj  0)  (tk-tkr.mult + mult_adj  mult_adj)) {
   /* NTP adjustment caused clocksource mult overflow */
   WARN_ON_ONCE(1);
   return;

This change does quiet the warning but I think it does so for the wrong
reason.

mult_adj is a signed number and tk-tkr.mult is an unsigned number.
Adding the check that (mult_adj  0) limits the test to only positive
numbers.  A positive number plus a positive number will never be less
than either of the two positive numbers.  The test is always false.

-- 
- Jeremiah Mahler
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] time: Fix sign bug in ntp mult overflow warning

2014-12-02 Thread Xunlei Pang
On 2 December 2014 at 17:32, Jeremiah Mahler jmmah...@gmail.com wrote:
 John,

 On Mon, Nov 24, 2014 at 08:35:45PM -0800, John Stultz wrote:
 In commit 6067dc5a8c2b (time: Avoid possible NTP adjustment mult
 overflow) a new check was added to watch for adjustments that could
 cause a mult overflow.

 Unfortunately the check compares a signed with unsigned value and
 ignored the case where the adjustment was negative, which causes
 spurious warn-ons on some systems (and seems like it would result in
 problematic time adjustments there as well, due to the early
 return).

 Thus this patch adds a check to make sure the adjustment is positive
 before we check for an overflow, and resovles the issue in my
 testing.

 Cc: pang.xunlei pang.xun...@linaro.org
 Cc: Fengguang Wu fengguang...@intel.com
 Cc: Thomas Gleixner t...@linutronix.de
 Cc: Ingo Molnar mi...@kernel.org
 Reported-by: Fengguang Wu fengguang...@intel.com
 Debugged-by: pang.xunlei pang.xun...@linaro.org
 Signed-off-by: John Stultz john.stu...@linaro.org
 ---
  kernel/time/timekeeping.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

 diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
 index 29a7d67..2dc0646 100644
 --- a/kernel/time/timekeeping.c
 +++ b/kernel/time/timekeeping.c
 @@ -1330,7 +1330,7 @@ static __always_inline void 
 timekeeping_apply_adjustment(struct timekeeper *tk,
*
* XXX - TODO: Doc ntp_error calculation.
*/
 - if (tk-tkr.mult + mult_adj  mult_adj) {
 + if ((mult_adj  0)  (tk-tkr.mult + mult_adj  mult_adj)) {
   /* NTP adjustment caused clocksource mult overflow */
   WARN_ON_ONCE(1);
   return;

 This change does quiet the warning but I think it does so for the wrong
 reason.

 mult_adj is a signed number and tk-tkr.mult is an unsigned number.
 Adding the check that (mult_adj  0) limits the test to only positive
 numbers.  A positive number plus a positive number will never be less
 than either of the two positive numbers.  The test is always false.

Hi Jeremiah,

The result of a positive number plus a positive number may overflow,
for example, u32  (0x_FFF0 + 0x20) will be 0x10,
that's what this patch is dealing with.

Thanks,
Xunlei

 --
 - Jeremiah Mahler
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] time: Fix sign bug in ntp mult overflow warning

2014-12-02 Thread Jeremiah Mahler
Xunlei,

On Tue, Dec 02, 2014 at 11:00:26PM +0800, Xunlei Pang wrote:
 On 2 December 2014 at 17:32, Jeremiah Mahler jmmah...@gmail.com wrote:
  John,
 
  On Mon, Nov 24, 2014 at 08:35:45PM -0800, John Stultz wrote:
  In commit 6067dc5a8c2b (time: Avoid possible NTP adjustment mult
  @@ -1330,7 +1330,7 @@ static __always_inline void 
  timekeeping_apply_adjustment(struct timekeeper *tk,
[...]
 *
 * XXX - TODO: Doc ntp_error calculation.
 */
  - if (tk-tkr.mult + mult_adj  mult_adj) {
  + if ((mult_adj  0)  (tk-tkr.mult + mult_adj  mult_adj)) {
/* NTP adjustment caused clocksource mult overflow */
WARN_ON_ONCE(1);
return;
 
  This change does quiet the warning but I think it does so for the wrong
  reason.
 
  mult_adj is a signed number and tk-tkr.mult is an unsigned number.
  Adding the check that (mult_adj  0) limits the test to only positive
  numbers.  A positive number plus a positive number will never be less
  than either of the two positive numbers.  The test is always false.
 
 Hi Jeremiah,
 
 The result of a positive number plus a positive number may overflow,
 for example, u32  (0x_FFF0 + 0x20) will be 0x10,
 that's what this patch is dealing with.
 
 Thanks,
 Xunlei
 
  --
  - Jeremiah Mahler

Oh, got it.  That makes sense now.  Thanks :)

-- 
- Jeremiah Mahler
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] time: Fix sign bug in ntp mult overflow warning

2014-11-24 Thread John Stultz
In commit 6067dc5a8c2b ("time: Avoid possible NTP adjustment mult
overflow") a new check was added to watch for adjustments that could
cause a mult overflow.

Unfortunately the check compares a signed with unsigned value and
ignored the case where the adjustment was negative, which causes
spurious warn-ons on some systems (and seems like it would result in
problematic time adjustments there as well, due to the early
return).

Thus this patch adds a check to make sure the adjustment is positive
before we check for an overflow, and resovles the issue in my
testing.

Cc: pang.xunlei 
Cc: Fengguang Wu 
Cc: Thomas Gleixner 
Cc: Ingo Molnar 
Reported-by: Fengguang Wu 
Debugged-by: pang.xunlei 
Signed-off-by: John Stultz 
---
 kernel/time/timekeeping.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 29a7d67..2dc0646 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -1330,7 +1330,7 @@ static __always_inline void 
timekeeping_apply_adjustment(struct timekeeper *tk,
 *
 * XXX - TODO: Doc ntp_error calculation.
 */
-   if (tk->tkr.mult + mult_adj < mult_adj) {
+   if ((mult_adj > 0) && (tk->tkr.mult + mult_adj < mult_adj)) {
/* NTP adjustment caused clocksource mult overflow */
WARN_ON_ONCE(1);
return;
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] time: Fix sign bug in ntp mult overflow warning

2014-11-24 Thread John Stultz
In commit 6067dc5a8c2b (time: Avoid possible NTP adjustment mult
overflow) a new check was added to watch for adjustments that could
cause a mult overflow.

Unfortunately the check compares a signed with unsigned value and
ignored the case where the adjustment was negative, which causes
spurious warn-ons on some systems (and seems like it would result in
problematic time adjustments there as well, due to the early
return).

Thus this patch adds a check to make sure the adjustment is positive
before we check for an overflow, and resovles the issue in my
testing.

Cc: pang.xunlei pang.xun...@linaro.org
Cc: Fengguang Wu fengguang...@intel.com
Cc: Thomas Gleixner t...@linutronix.de
Cc: Ingo Molnar mi...@kernel.org
Reported-by: Fengguang Wu fengguang...@intel.com
Debugged-by: pang.xunlei pang.xun...@linaro.org
Signed-off-by: John Stultz john.stu...@linaro.org
---
 kernel/time/timekeeping.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 29a7d67..2dc0646 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -1330,7 +1330,7 @@ static __always_inline void 
timekeeping_apply_adjustment(struct timekeeper *tk,
 *
 * XXX - TODO: Doc ntp_error calculation.
 */
-   if (tk-tkr.mult + mult_adj  mult_adj) {
+   if ((mult_adj  0)  (tk-tkr.mult + mult_adj  mult_adj)) {
/* NTP adjustment caused clocksource mult overflow */
WARN_ON_ONCE(1);
return;
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/