2004-10-06 Ken Raeburn <raeburn@mit.edu>
+ * localaddr.c (foreach_localaddr): Be more careful not to walk
+ past the end of the ifreq array.
+ (get_ifreq_array): Return 0 in success case, not errno.
+
* localaddr.c (get_ifreq_array): Split out from foreach_localaddr
general version.
(foreach_localaddr): Call it.
goto punt;
}
- for (i = 0; i < P.buf_size; i+= sizeof (*lifr)) {
+ for (i = 0; i + sizeof(*lifr) <= P.buf_size; i+= sizeof (*lifr)) {
lifr = (struct lifreq *)((caddr_t) P.buf+i);
strncpy(lifreq.lifr_name, lifr->lifr_name,
if (pass2fn)
FOREACH_AF ()
if (P.sock >= 0) {
- for (i = 0; i < P.buf_size; i+= sizeof (*lifr)) {
+ for (i = 0; i + sizeof (*lifr) <= P.buf_size; i+= sizeof (*lifr)) {
lifr = (struct lifreq *)((caddr_t) P.buf+i);
if (lifr->lifr_name[0] == '\0')
goto punt;
}
- for (i = 0; i < P.buf_size; i+= sizeof (*lifr)) {
+ for (i = 0; i + sizeof(*lifr) <= P.buf_size; i+= sizeof (*lifr)) {
lifr = (struct if_laddrreq *)((caddr_t) P.buf+i);
strncpy(lifreq.iflr_name, lifr->iflr_name,
if (pass2fn)
FOREACH_AF ()
if (P.sock >= 0) {
- for (i = 0; i < P.buf_size; i+= sizeof (*lifr)) {
+ for (i = 0; i + sizeof(*lifr) <= P.buf_size; i+= sizeof (*lifr)) {
lifr = (struct if_laddrreq *)((caddr_t) P.buf+i);
if (lifr->iflr_name[0] == '\0')
*bufp = buf;
*np = n;
- return errno;
+ return 0;
}
int
The Samba mailing list archives mention that NTP looks for the
size on these systems: *-fujitsu-uxp* *-ncr-sysv4*
*-univel-sysv*. */
- for (i = 0; i < n; i+= ifreq_size(*ifr) ) {
+ for (i = 0; i + sizeof(struct ifreq) < n; i+= ifreq_size(*ifr) ) {
ifr = (struct ifreq *)((caddr_t) buf+i);
+ /* In case ifreq_size is more than sizeof(). */
+ if (i + ifreq_size(*ifr) >= n)
+ break;
strncpy(ifreq.ifr_name, ifr->ifr_name, sizeof (ifreq.ifr_name));
Tprintf (("interface %s\n", ifreq.ifr_name));