diff --git a/dccp-fix-oops-on-reset-after-close.patch b/dccp-fix-oops-on-reset-after-close.patch new file mode 100644 index 000000000..736a66174 --- /dev/null +++ b/dccp-fix-oops-on-reset-after-close.patch @@ -0,0 +1,71 @@ +From: Gerrit Renker +Date: Wed, 2 Mar 2011 07:02:07 +0000 (-0800) +Subject: dccp: fix oops on Reset after close +X-Git-Tag: v2.6.38-rc8~29^2~9 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=720dc34bbbe9493c7bd48b2243058b4e447a929d + +dccp: fix oops on Reset after close + +This fixes a bug in the order of dccp_rcv_state_process() that still permitted +reception even after closing the socket. A Reset after close thus causes a NULL +pointer dereference by not preventing operations on an already torn-down socket. + + dccp_v4_do_rcv() + | + | state other than OPEN + v + dccp_rcv_state_process() + | + | DCCP_PKT_RESET + v + dccp_rcv_reset() + | + v + dccp_time_wait() + + WARNING: at net/ipv4/inet_timewait_sock.c:141 __inet_twsk_hashdance+0x48/0x128() + Modules linked in: arc4 ecb carl9170 rt2870sta(C) mac80211 r8712u(C) crc_ccitt ah + [] (unwind_backtrace+0x0/0xec) from [] (warn_slowpath_common) + [] (warn_slowpath_common+0x4c/0x64) from [] (warn_slowpath_n) + [] (warn_slowpath_null+0x1c/0x24) from [] (__inet_twsk_hashd) + [] (__inet_twsk_hashdance+0x48/0x128) from [] (dccp_time_wai) + [] (dccp_time_wait+0x40/0xc8) from [] (dccp_rcv_state_proces) + [] (dccp_rcv_state_process+0x120/0x538) from [] (dccp_v4_do_) + [] (dccp_v4_do_rcv+0x11c/0x14c) from [] (release_sock+0xac/0) + [] (release_sock+0xac/0x110) from [] (dccp_close+0x28c/0x380) + [] (dccp_close+0x28c/0x380) from [] (inet_release+0x64/0x70) + +The fix is by testing the socket state first. Receiving a packet in Closed state +now also produces the required "No connection" Reset reply of RFC 4340, 8.3.1. + +Reported-and-tested-by: Johan Hovold +Cc: stable@kernel.org +Signed-off-by: Gerrit Renker +Signed-off-by: David S. Miller +--- + +diff --git a/net/dccp/input.c b/net/dccp/input.c +index 8cde009..4222e7a 100644 +--- a/net/dccp/input.c ++++ b/net/dccp/input.c +@@ -614,6 +614,9 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb, + /* Caller (dccp_v4_do_rcv) will send Reset */ + dcb->dccpd_reset_code = DCCP_RESET_CODE_NO_CONNECTION; + return 1; ++ } else if (sk->sk_state == DCCP_CLOSED) { ++ dcb->dccpd_reset_code = DCCP_RESET_CODE_NO_CONNECTION; ++ return 1; + } + + if (sk->sk_state != DCCP_REQUESTING && sk->sk_state != DCCP_RESPOND) { +@@ -668,10 +671,6 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb, + } + + switch (sk->sk_state) { +- case DCCP_CLOSED: +- dcb->dccpd_reset_code = DCCP_RESET_CODE_NO_CONNECTION; +- return 1; +- + case DCCP_REQUESTING: + queued = dccp_rcv_request_sent_state_process(sk, skb, dh, len); + if (queued >= 0) diff --git a/kernel.spec b/kernel.spec index 416e644b5..b80ec8886 100644 --- a/kernel.spec +++ b/kernel.spec @@ -857,6 +857,8 @@ Patch13957: agp-fix-arbitrary-kernel-memory-writes.patch Patch13958: agp-fix-oom-and-buffer-overflow.patch # CVE-2011-1494, CVE-2011-1495 Patch13960: scsi-mpt2sas-prevent-heap-overflows-and-unchecked-reads.patch +# CVE-2011-1093 +Patch13961: dccp-fix-oops-on-reset-after-close.patch %endif @@ -1624,6 +1626,8 @@ ApplyPatch agp-fix-arbitrary-kernel-memory-writes.patch ApplyPatch agp-fix-oom-and-buffer-overflow.patch # CVE-2011-1494, CVE-2011-1495 ApplyPatch scsi-mpt2sas-prevent-heap-overflows-and-unchecked-reads.patch +# CVE-2011-1093 +ApplyPatch dccp-fix-oops-on-reset-after-close.patch # END OF PATCH APPLICATIONS @@ -2248,6 +2252,7 @@ fi * Mon May 02 2011 Chuck Ebbert 2.6.34.9-69 - [SCSI] mpt2sas: prevent heap overflows and unchecked reads (CVE-2011-1494, CVE-2011-1495) +- dccp: fix oops on Reset after close (CVE-2011-1093) * Fri Apr 29 2011 Chuck Ebbert - Bluetooth: bnep: fix buffer overflow (CVE-2011-1079)