lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 5 May 2015 09:19:37 -0600
From:	Pete Zaitcev <zaitcev@...hat.com>
To:	Arnd Bergmann <arnd@...db.de>
Cc:	Tina Ruchandani <ruchandani.tina@...il.com>,
	Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
	linux-usb@...r.kernel.org, linux-kernel@...r.kernel.org,
	zaitcev@...hat.com
Subject: Re: [PATCH] USB: usbmon: Remove timeval usage for timestamp

On Tue, 05 May 2015 11:24:16 +0200
Arnd Bergmann <arnd@...db.de> wrote:

> On Tuesday 05 May 2015 11:44:33 Tina Ruchandani wrote:

> >  static inline unsigned int mon_get_timestamp(void)
> >  {
> > -	struct timeval tval;
> > +	struct timespec64 now;
> >  	unsigned int stamp;
> >  
> > -	do_gettimeofday(&tval);
> > -	stamp = tval.tv_sec & 0xFFF;	/* 2^32 = 4294967296. Limit to 4096s. */
> > -	stamp = stamp * 1000000 + tval.tv_usec;
> > +	getnstimeofday64(&now);
> > +	stamp = now.tv_sec & 0xFFF;  /* now.tv_sec is 64-bit. Limit to 4096s */
> > +	stamp = stamp * USEC_PER_SEC + now.tv_nsec / NSEC_PER_USEC;
> >  	return stamp;
> >  }
> 
> Your conversion looks entirely correct, but the original code is a bit
> odd here as it does not use the entire range of the 32-bit microsecond
> value, and counts from 0 to 4096000000us instead of the more intuitive
> 0 to 4294967296 us range before wrapping around.

The intent was to create a rolling timestamp that is not too large.
Remember that the text format is intended to be eyeballed. The wrap point
could be anything. No consideration was given to what's intuitive.

> it might be more obvious what is going on, but it would slightly change
> the output in the debugfs file to use the full range. Do we know what
> behavior is expected by normal user space here?
> [...]
> I also wonder if we should make the output use monotonic time instead

The only guarantee we give is that the time corresponds to microseconds.
This is sometimes necessary to debug things in microntrollers in USB
devices.

A monotonic time is fine.

One thing though, I object to Tina's new comment. It does not matter what
now.tv_sec is. The comment is about the destination, that is the stamp.
So, please don't change it, unless you change the type of the ep->tstamp.

> static inline unsigned int mon_get_timestamp(void)
> {
> 	return ktime_to_us(ktime_get_real());
> }
> 
> it might be more obvious what is going on, but it would slightly change

Now you made the truncation explicit, so if anyhing it's less obvious.
The code is fine, but at least add a comment to that effect, if you don't
want to tack %4096000000 or %4000000000.

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ