[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <19195.41887.250696.801873@notabene.brown>
Date: Thu, 12 Nov 2009 16:56:47 +1100
From: Neil Brown <neilb@...e.de>
To: Chuck Lever <chuck.lever@...cle.com>
Cc: Fabio Olive Leite <fabio.olive@...il.com>, argp@...sus-labs.com,
bugzilla-daemon@...zilla.kernel.org,
bugme-daemon@...zilla.kernel.org,
Linux Network Developers <netdev@...r.kernel.org>,
"J. Bruce Fields" <bfields@...ldses.org>,
Trond Myklebust <trond.myklebust@....uio.no>,
Andrew Morton <akpm@...ux-foundation.org>,
Linux NFS Mailing list <linux-nfs@...r.kernel.org>
Subject: Re: [Bugme-new] [Bug 14546] New: Off-by-two stack buffer overflow in function rpc_uaddr2sockaddr() of net/sunrpc/addr.c
On Wednesday November 11, chuck.lever@...cle.com wrote:
> On 2009-11-11 Fabio Olive Leite wrote:
> > On 2009-11-11 Patroklos Argyroudis wrote:
> >> There is no need to increase the size of the buffer since the new
> >> check (if (uaddr_len > sizeof(buf) - 2)) will terminate the function
> >> in case the valid universal address is RPCBIND_MAXUADDRLEN bytes.
> > On a second note, why is '\n' needed there? You should only need
> > '\0', as a '\n'
>
> > at the end is not required by any of the string functions used to
> > convert the
> > address. I believe you could go with buf[RPCBIND_MAXUADDRLEN+1] for
> > the extra NUL only.
>
> AFAICT, strict_strtoul() requires the '\n\0' termination.
if ((*tail == '\0') ||
((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {
*res = val;
return 0;
}
allows, not requires. Though admittedly that code isn't as clear as
one might like:
if (tail[0] == 0 || (tail[0] == '\n' && tail[1] == 0) {
.....
}
NeilBrown
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists