<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/include/net/sctp/structs.h, branch v2.6.36</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
</subtitle>
<id>https://git.shady.money/linux/atom?h=v2.6.36</id>
<link rel='self' href='https://git.shady.money/linux/atom?h=v2.6.36'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/'/>
<updated>2010-06-03T10:21:52Z</updated>
<entry>
<title>net: use __packed annotation</title>
<updated>2010-06-03T10:21:52Z</updated>
<author>
<name>Eric Dumazet</name>
<email>eric.dumazet@gmail.com</email>
</author>
<published>2010-06-03T10:21:52Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=bc10502dba37d3b210efd9f3867212298f13b78e'/>
<id>urn:sha1:bc10502dba37d3b210efd9f3867212298f13b78e</id>
<content type='text'>
cleanup patch.

Use new __packed annotation in net/ and include/
(except netfilter)

Signed-off-by: Eric Dumazet &lt;eric.dumazet@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>sctp: dubious bitfields in sctp_transport</title>
<updated>2010-05-26T07:40:11Z</updated>
<author>
<name>Dan Carpenter</name>
<email>error27@gmail.com</email>
</author>
<published>2010-05-26T07:40:11Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=ff937938e7781b2c1bffce0a5400af308e3946d5'/>
<id>urn:sha1:ff937938e7781b2c1bffce0a5400af308e3946d5</id>
<content type='text'>
Sparse complains because these one-bit bitfields are signed.
  include/net/sctp/structs.h:879:24: error: dubious one-bit signed bitfield
  include/net/sctp/structs.h:889:31: error: dubious one-bit signed bitfield
  include/net/sctp/structs.h:895:26: error: dubious one-bit signed bitfield
  include/net/sctp/structs.h:898:31: error: dubious one-bit signed bitfield
  include/net/sctp/structs.h:901:27: error: dubious one-bit signed bitfield

It doesn't cause a problem in the current code, but it would be better
to clean it up.  This was introduced by c0058a35aacc7: "sctp: Save some
room in the sctp_transport by using bitfields".

Signed-off-by: Dan Carpenter &lt;error27@gmail.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6</title>
<updated>2010-05-12T07:05:35Z</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2010-05-12T07:05:35Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=278554bd6579206921f5d8a523649a7a57f8850d'/>
<id>urn:sha1:278554bd6579206921f5d8a523649a7a57f8850d</id>
<content type='text'>
Conflicts:
	Documentation/feature-removal-schedule.txt
	drivers/net/wireless/ath/ar9170/usb.c
	drivers/scsi/iscsi_tcp.c
	net/ipv4/ipmr.c
</content>
</entry>
<entry>
<title>sctp: Fix a race between ICMP protocol unreachable and connect()</title>
<updated>2010-05-06T07:56:07Z</updated>
<author>
<name>Vlad Yasevich</name>
<email>vladislav.yasevich@hp.com</email>
</author>
<published>2010-05-06T07:56:07Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=50b5d6ad63821cea324a5a7a19854d4de1a0a819'/>
<id>urn:sha1:50b5d6ad63821cea324a5a7a19854d4de1a0a819</id>
<content type='text'>
ICMP protocol unreachable handling completely disregarded
the fact that the user may have locked the socket.  It proceeded
to destroy the association, even though the user may have
held the lock and had a ref on the association.  This resulted
in the following:

Attempt to release alive inet socket f6afcc00

=========================
[ BUG: held lock freed! ]
-------------------------
somenu/2672 is freeing memory f6afcc00-f6afcfff, with a lock still held
there!
 (sk_lock-AF_INET){+.+.+.}, at: [&lt;c122098a&gt;] sctp_connect+0x13/0x4c
1 lock held by somenu/2672:
 #0:  (sk_lock-AF_INET){+.+.+.}, at: [&lt;c122098a&gt;] sctp_connect+0x13/0x4c

stack backtrace:
Pid: 2672, comm: somenu Not tainted 2.6.32-telco #55
Call Trace:
 [&lt;c1232266&gt;] ? printk+0xf/0x11
 [&lt;c1038553&gt;] debug_check_no_locks_freed+0xce/0xff
 [&lt;c10620b4&gt;] kmem_cache_free+0x21/0x66
 [&lt;c1185f25&gt;] __sk_free+0x9d/0xab
 [&lt;c1185f9c&gt;] sk_free+0x1c/0x1e
 [&lt;c1216e38&gt;] sctp_association_put+0x32/0x89
 [&lt;c1220865&gt;] __sctp_connect+0x36d/0x3f4
 [&lt;c122098a&gt;] ? sctp_connect+0x13/0x4c
 [&lt;c102d073&gt;] ? autoremove_wake_function+0x0/0x33
 [&lt;c12209a8&gt;] sctp_connect+0x31/0x4c
 [&lt;c11d1e80&gt;] inet_dgram_connect+0x4b/0x55
 [&lt;c11834fa&gt;] sys_connect+0x54/0x71
 [&lt;c103a3a2&gt;] ? lock_release_non_nested+0x88/0x239
 [&lt;c1054026&gt;] ? might_fault+0x42/0x7c
 [&lt;c1054026&gt;] ? might_fault+0x42/0x7c
 [&lt;c11847ab&gt;] sys_socketcall+0x6d/0x178
 [&lt;c10da994&gt;] ? trace_hardirqs_on_thunk+0xc/0x10
 [&lt;c1002959&gt;] syscall_call+0x7/0xb

This was because the sctp_wait_for_connect() would aqcure the socket
lock and then proceed to release the last reference count on the
association, thus cause the fully destruction path to finish freeing
the socket.

The simplest solution is to start a very short timer in case the socket
is owned by user.  When the timer expires, we can do some verification
and be able to do the release properly.

Signed-off-by: Vlad Yasevich &lt;vladislav.yasevich@hp.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>Merge branch 'net-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vxy/lksctp-dev</title>
<updated>2010-05-03T23:24:31Z</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2010-05-03T23:20:44Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=f5460618405eec8c3300947a499011528a115acd'/>
<id>urn:sha1:f5460618405eec8c3300947a499011528a115acd</id>
<content type='text'>
Add missing linux/vmalloc.h include to net/sctp/probe.c

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
<entry>
<title>sctp: Tag messages that can be Nagle delayed at creation.</title>
<updated>2010-05-01T02:41:10Z</updated>
<author>
<name>Vlad Yasevich</name>
<email>vladislav.yasevich@hp.com</email>
</author>
<published>2010-05-01T02:41:10Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=0e3aef8d09a8c11e3fb83cdcb24b5bc7421b3726'/>
<id>urn:sha1:0e3aef8d09a8c11e3fb83cdcb24b5bc7421b3726</id>
<content type='text'>
When we create the sctp_datamsg and fragment the user data,
we know exactly if we are sending full segments or not and
how they might be bundled.  During this time, we can mark
messages a Nagle capable or not.  This makes the check at
transmit time much simpler.

Signed-off-by: Vlad Yasevich &lt;vladislav.yasevich@hp.com&gt;
</content>
</entry>
<entry>
<title>sctp: fast recovery algorithm is per association.</title>
<updated>2010-05-01T02:41:10Z</updated>
<author>
<name>Vlad Yasevich</name>
<email>vladislav.yasevich@hp.com</email>
</author>
<published>2010-05-01T02:41:10Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=cf9b4812e18aab6f86ff998bd7425a9e823269c3'/>
<id>urn:sha1:cf9b4812e18aab6f86ff998bd7425a9e823269c3</id>
<content type='text'>
SCTP fast recovery algorithm really applies per association
and impacts all transports.

Signed-off-by: Vlad Yasevich &lt;vladislav.yasevich@hp.com&gt;
</content>
</entry>
<entry>
<title>sctp: Save some room in the sctp_transport by using bitfields</title>
<updated>2010-05-01T02:41:09Z</updated>
<author>
<name>Vlad Yasevich</name>
<email>vladislav.yasevich@hp.com</email>
</author>
<published>2010-05-01T02:41:09Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=c0058a35aacc79406e867ec33c5cb75624fd5860'/>
<id>urn:sha1:c0058a35aacc79406e867ec33c5cb75624fd5860</id>
<content type='text'>
Saves some room in the sctp_transport structure.

Signed-off-by: Vlad Yasevich &lt;vladislav.yasevich@hp.com&gt;
</content>
</entry>
<entry>
<title>sctp: remove 'resent' bit from the chunk</title>
<updated>2010-05-01T02:41:09Z</updated>
<author>
<name>Vlad Yasevich</name>
<email>vladislav.yasevich@hp.com</email>
</author>
<published>2010-05-01T02:41:09Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=ae19c54866450f6c6f79223ca7d37965859a54e1'/>
<id>urn:sha1:ae19c54866450f6c6f79223ca7d37965859a54e1</id>
<content type='text'>
The 'resent' bit is used to make sure that we don't update
rto estimate based on retransmitted chunks.  However, we already
have the 'rto_pending' bit that we test when need to update rto,
so 'resent' bit is just extra.  Additionally, we currently have
a bug in that we always set a 'resent' bit and thus rto estimate
is only updated by Heartbeats.

Signed-off-by: Vlad Yasevich &lt;vladislav.yasevich@hp.com&gt;
</content>
</entry>
<entry>
<title>sctp: Fix skb_over_panic resulting from multiple invalid parameter errors (CVE-2010-1173) (v4)</title>
<updated>2010-04-28T21:22:01Z</updated>
<author>
<name>Neil Horman</name>
<email>nhorman@tuxdriver.com</email>
</author>
<published>2010-04-28T10:30:59Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=5fa782c2f5ef6c2e4f04d3e228412c9b4a4c8809'/>
<id>urn:sha1:5fa782c2f5ef6c2e4f04d3e228412c9b4a4c8809</id>
<content type='text'>
Ok, version 4

Change Notes:
1) Minor cleanups, from Vlads notes

Summary:

Hey-
	Recently, it was reported to me that the kernel could oops in the
following way:

&lt;5&gt; kernel BUG at net/core/skbuff.c:91!
&lt;5&gt; invalid operand: 0000 [#1]
&lt;5&gt; Modules linked in: sctp netconsole nls_utf8 autofs4 sunrpc iptable_filter
ip_tables cpufreq_powersave parport_pc lp parport vmblock(U) vsock(U) vmci(U)
vmxnet(U) vmmemctl(U) vmhgfs(U) acpiphp dm_mirror dm_mod button battery ac md5
ipv6 uhci_hcd ehci_hcd snd_ens1371 snd_rawmidi snd_seq_device snd_pcm_oss
snd_mixer_oss snd_pcm snd_timer snd_page_alloc snd_ac97_codec snd soundcore
pcnet32 mii floppy ext3 jbd ata_piix libata mptscsih mptsas mptspi mptscsi
mptbase sd_mod scsi_mod
&lt;5&gt; CPU:    0
&lt;5&gt; EIP:    0060:[&lt;c02bff27&gt;]    Not tainted VLI
&lt;5&gt; EFLAGS: 00010216   (2.6.9-89.0.25.EL)
&lt;5&gt; EIP is at skb_over_panic+0x1f/0x2d
&lt;5&gt; eax: 0000002c   ebx: c033f461   ecx: c0357d96   edx: c040fd44
&lt;5&gt; esi: c033f461   edi: df653280   ebp: 00000000   esp: c040fd40
&lt;5&gt; ds: 007b   es: 007b   ss: 0068
&lt;5&gt; Process swapper (pid: 0, threadinfo=c040f000 task=c0370be0)
&lt;5&gt; Stack: c0357d96 e0c29478 00000084 00000004 c033f461 df653280 d7883180
e0c2947d
&lt;5&gt;        00000000 00000080 df653490 00000004 de4f1ac0 de4f1ac0 00000004
df653490
&lt;5&gt;        00000001 e0c2877a 08000800 de4f1ac0 df653490 00000000 e0c29d2e
00000004
&lt;5&gt; Call Trace:
&lt;5&gt;  [&lt;e0c29478&gt;] sctp_addto_chunk+0xb0/0x128 [sctp]
&lt;5&gt;  [&lt;e0c2947d&gt;] sctp_addto_chunk+0xb5/0x128 [sctp]
&lt;5&gt;  [&lt;e0c2877a&gt;] sctp_init_cause+0x3f/0x47 [sctp]
&lt;5&gt;  [&lt;e0c29d2e&gt;] sctp_process_unk_param+0xac/0xb8 [sctp]
&lt;5&gt;  [&lt;e0c29e90&gt;] sctp_verify_init+0xcc/0x134 [sctp]
&lt;5&gt;  [&lt;e0c20322&gt;] sctp_sf_do_5_1B_init+0x83/0x28e [sctp]
&lt;5&gt;  [&lt;e0c25333&gt;] sctp_do_sm+0x41/0x77 [sctp]
&lt;5&gt;  [&lt;c01555a4&gt;] cache_grow+0x140/0x233
&lt;5&gt;  [&lt;e0c26ba1&gt;] sctp_endpoint_bh_rcv+0xc5/0x108 [sctp]
&lt;5&gt;  [&lt;e0c2b863&gt;] sctp_inq_push+0xe/0x10 [sctp]
&lt;5&gt;  [&lt;e0c34600&gt;] sctp_rcv+0x454/0x509 [sctp]
&lt;5&gt;  [&lt;e084e017&gt;] ipt_hook+0x17/0x1c [iptable_filter]
&lt;5&gt;  [&lt;c02d005e&gt;] nf_iterate+0x40/0x81
&lt;5&gt;  [&lt;c02e0bb9&gt;] ip_local_deliver_finish+0x0/0x151
&lt;5&gt;  [&lt;c02e0c7f&gt;] ip_local_deliver_finish+0xc6/0x151
&lt;5&gt;  [&lt;c02d0362&gt;] nf_hook_slow+0x83/0xb5
&lt;5&gt;  [&lt;c02e0bb2&gt;] ip_local_deliver+0x1a2/0x1a9
&lt;5&gt;  [&lt;c02e0bb9&gt;] ip_local_deliver_finish+0x0/0x151
&lt;5&gt;  [&lt;c02e103e&gt;] ip_rcv+0x334/0x3b4
&lt;5&gt;  [&lt;c02c66fd&gt;] netif_receive_skb+0x320/0x35b
&lt;5&gt;  [&lt;e0a0928b&gt;] init_stall_timer+0x67/0x6a [uhci_hcd]
&lt;5&gt;  [&lt;c02c67a4&gt;] process_backlog+0x6c/0xd9
&lt;5&gt;  [&lt;c02c690f&gt;] net_rx_action+0xfe/0x1f8
&lt;5&gt;  [&lt;c012a7b1&gt;] __do_softirq+0x35/0x79
&lt;5&gt;  [&lt;c0107efb&gt;] handle_IRQ_event+0x0/0x4f
&lt;5&gt;  [&lt;c01094de&gt;] do_softirq+0x46/0x4d

Its an skb_over_panic BUG halt that results from processing an init chunk in
which too many of its variable length parameters are in some way malformed.

The problem is in sctp_process_unk_param:
if (NULL == *errp)
	*errp = sctp_make_op_error_space(asoc, chunk,
					 ntohs(chunk-&gt;chunk_hdr-&gt;length));

	if (*errp) {
		sctp_init_cause(*errp, SCTP_ERROR_UNKNOWN_PARAM,
				 WORD_ROUND(ntohs(param.p-&gt;length)));
		sctp_addto_chunk(*errp,
			WORD_ROUND(ntohs(param.p-&gt;length)),
				  param.v);

When we allocate an error chunk, we assume that the worst case scenario requires
that we have chunk_hdr-&gt;length data allocated, which would be correct nominally,
given that we call sctp_addto_chunk for the violating parameter.  Unfortunately,
we also, in sctp_init_cause insert a sctp_errhdr_t structure into the error
chunk, so the worst case situation in which all parameters are in violation
requires chunk_hdr-&gt;length+(sizeof(sctp_errhdr_t)*param_count) bytes of data.

The result of this error is that a deliberately malformed packet sent to a
listening host can cause a remote DOS, described in CVE-2010-1173:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=2010-1173

I've tested the below fix and confirmed that it fixes the issue.  We move to a
strategy whereby we allocate a fixed size error chunk and ignore errors we don't
have space to report.  Tested by me successfully

Signed-off-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Acked-by: Vlad Yasevich &lt;vladislav.yasevich@hp.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
</entry>
</feed>
