|
Description
|
Category
kernel
Sub-Category
accounting
Description
When an SCTP connection is set up, a check is made in the kernel that
a multicast address is not used (verified in OpenSolaris source code).
This check is however erroneous as big endian (Sparc) is assumed.
The last byte of the address is checked instead of the first byte.
Thus all ip-addresses ending in .224 - .239 will be refused (EINVAL).
A call to htonl() is missing in the kernel SCTP code when IN_MULTICAST()
is used.
Frequency
Always
Regression
No
Steps to Reproduce
Setup an SCTP connection towards an ip-address ending in 224 - 239,
for example 192.168.0.224.
Expected Result
A successful connection.
Actual Result
The result will be EINVAL...
Error Message(s)
Test Case
Workaround
Avoid SCTP connections to ip-addresses ending in the range 224 to 239...
Submitter wants to work on bug
No
Additional configuration information
The bogus check is in sctp_get_addrparams:
if (ta == 0 ||
ta == INADDR_BROADCAST ||
ta == htonl(INADDR_LOOPBACK) ||
--> IN_MULTICAST(ta) ||
sctp->sctp_connp->conn_ipv6_v6only) {
goto next;
}
The IN_MULTICAST macro is odd, and expects host byte ordering. The right
fix is probably to switch around 'ta' before the if statement executes.
|