OpenSolaris

Printable Version Enter a New Search
Bug ID 6610789
Synopsis SCTP has erroneous check for multicast address
State 10-Fix Delivered (Fix available in build)
Category:Subcategory kernel:tcp-ip
Keywords opensolaris | rtiq_reviewed
Responsible Engineer Kacheong Poon
Reported Against snv_01
Duplicate Of
Introduced In solaris_10
Commit to Fix snv_76
Fixed In snv_76
Release Fixed solaris_nevada(snv_76) , solaris_10u5(s10u5_08) (Bug ID:2153685)
Related Bugs 5014658
Submit Date 28-September-2007
Last Update Date 22-January-2008
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.
Work Around
N/A
Comments
N/A