Thomas Pornin writes:
> The problem is in the pppoe_finduniq() function. In order to identify
> sessions, the PPPoE code sends a tag with the first packet it sends to
> the modem; this tag is in fact a 64-bit pointer to some data structure
> in kernel space. When a packet of type PADO_CODE or PADS_CODE is
> received, the tag is compared with known pointers.

> However, only 32 bits are present in the return tag. So, if the original
> pointer is 0xfffffc00003b3d00, the tag contains only 0x003b3d00, which
> are the first four bytes of data (in little-endian representation). If
> I modify the pppoe_finduniq() function to accept matches on these four
> bytes, the connection is established, and remains fully functionnal
> afterwards.

Yes, exactly.  I ran into the same issue.  See PR kern/27767
(http://www.freebsd.org/cgi/query-pr.cgi?pr=27767) for the
bug report.

The PR also contains the (gross, alpha-specific) hack I use right now
to work around this issue.  It simply masks out the upper 32 bits in
the pointer when making the comparison.  Obviously not a real
solution, however it suffices for now since all of the pointers being
compared are in the same 32-bit segment.

-- 
Sudish Joseph

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-net" in the body of the message

Reply via email to