The code associated with revision 225947 for modifing in.c seems suspect. 
Code from revision has:

        const char *sa, *mask, *addr, *lim;
        int len;

        sa = (const char *)rt_key(rt);
        mask = (const char *)rt_mask(rt);
        addr = (const char *)l3addr;
        len = ((const struct sockaddr_in *)l3addr)->sin_len;
        lim = addr + len;

        for ( ; addr < lim; sa++, mask++, addr++) {
                if ((*sa ^ *addr) & *mask) {
#ifdef DIAGNOSTIC
                        log(LOG_INFO, "IPv4 address: \"%s\" is not on th
e network\n",
                            inet_ntoa(((const struct sockaddr_in *)l3add
r)->sin_addr));
#endif
                        RTFREE_LOCKED(rt);
                        return (EINVAL);
                }
            }



It compares all bytes of sockaddr_in structure against mask instead of just
address.  Would following code be more correct?


        const char *sa, *mask, *addr, *lim;
        int len;

        sa = (const char *)rt_key(rt);
        mask = (const char *)rt_mask(rt);
        addr = (const char *)&(((const struct sockaddr_in *)l3addr)->sin_addr);
        len = ((const struct sockaddr_in *)l3addr)->sin_len;
        lim = (const char *)l3addr + len;

        for ( ; addr < lim; sa++, mask++, addr++) {
                if ((*sa ^ *addr) & *mask) {
#ifdef DIAGNOSTIC
                        log(LOG_INFO, "IPv4 address: \"%s\" is not on th
e network\n",
                            inet_ntoa(((const struct sockaddr_in *)l3add
r)->sin_addr));
#endif
                        RTFREE_LOCKED(rt);
                        return (EINVAL);
                }
            }

-- 
------------------------------------------------------------------------
Larry Baird                        | http://www.gta.com
Global Technology Associates, Inc. | Orlando, FL
Email: [email protected]                 | TEL 407-380-0220, FAX 407-380-6080
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "[email protected]"

Reply via email to