On 03/19/2013 10:48:53 PM, Wang Dongsheng-B40534 wrote:
> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Wednesday, March 20, 2013 6:55 AM
> To: Wang Dongsheng-B40534
> Cc: Wood Scott-B07421; Gala Kumar-B11780;
linuxppc-dev@lists.ozlabs.org;
> Zhao Chenhui-B35336; Li Yang-R58472
> Subject: Re: [PATCH 3/3] powerpc/fsl: add MPIC timer wakeup support
>
> On 03/19/2013 01:25:42 AM, Wang Dongsheng-B40534 wrote:
> > > -----Original Message-----
> > > From: Wood Scott-B07421
> > > Sent: Tuesday, March 19, 2013 8:31 AM
> > > To: Wang Dongsheng-B40534
> > > Cc: Gala Kumar-B11780; linuxppc-dev@lists.ozlabs.org; Wang
> > Dongsheng-
> > > B40534; Zhao Chenhui-B35336; Li Yang-R58472
> > > Subject: Re: [PATCH 3/3] powerpc/fsl: add MPIC timer wakeup
support
> > >
> > > On 03/08/2013 01:38:47 AM, Wang Dongsheng wrote:
> > > > +static ssize_t fsl_timer_wakeup_store(struct device *dev,
> > > > + struct device_attribute *attr,
> > > > + const char *buf,
> > > > + size_t count)
> > > > +{
> > > > + struct timeval interval;
> > > > + int ret;
> > > > +
> > > > + interval.tv_usec = 0;
> > > > + if (kstrtol(buf, 0, &interval.tv_sec))
> > > > + return -EINVAL;
> > >
> > > I don't think the buffer will NUL-terminated... Ordinarily
> > there'll be
> > > an LF terminator, but you can't rely on that (many other sysfs
> > attributes
> > > seem to, though...).
> > >
> > I think we don't need to care about LF terminator.
> > The kstrtol--> _kstrtoull has been done.
>
> My point is, what happens if userspace passes in a buffer that has
no
> terminator of any sort? kstrtol will continue reading beyond the
end of
> the buffer.
>
Do not care about terminator.
kstrtol() obviously *does* because it doesn't take the buffer length as
a parameter.
kstrtol--> _kstrtoull--> _parse_integer
_kstrtoull(...) {
...
rv = _parse_integer(s, base, &_res);
if (rv & KSTRTOX_OVERFLOW)
return -ERANGE;
rv &= ~KSTRTOX_OVERFLOW;
if (rv == 0)
return -EINVAL;
s += rv;
if (*s == '\n')
s++;
if (*s)
return -EINVAL;
...
}
_parse_integer(...) {
...
while (*s) {
if ('0' <= *s && *s <= '9')
val = *s - '0';
else if ('a' <= _tolower(*s) && _tolower(*s) <= 'f')
val = _tolower(*s) - 'a' + 10;
else
break; //this will break out to convert.
Really? How do you know that the next byte after the buffer isn't a
valid hex digit? How do you even know that we won't take a fault
accessing it?
> Echoing a nonzero value wouldn't just be to cancel, it would be to
set a
> new timer after cancelling the old.
>
If you think this way is better, I can change.
I do.
But why should do it?
Explicitly stop the timer (echo 0) before reuse it is more reasonable
for me.
It's an unnecessary restriction, and eliminating it doesn't make
anything simpler.
-Scott
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev