| From stable-bounces@linux.kernel.org Sun Oct 29 23:49:17 2006 |
| Date: Sun, 29 Oct 2006 23:48:51 -0800 (PST) |
| Message-Id: <20061029.234851.48808018.davem@davemloft.net> |
| From: Herbert Xu <herbert@gondor.apana.org.au> |
| To: stable@kernel.org |
| Mime-Version: 1.0 |
| Subject: SCTP: Always linearise packet on input |
| Content-Type: text/plain; charset="us-ascii" |
| |
| From: Herbert Xu <herbert@gondor.apana.org.au> |
| |
| I was looking at a RHEL5 bug report involving Xen and SCTP |
| (https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=212550). |
| It turns out that SCTP wasn't written to handle skb fragments at |
| all. The absence of any calls to skb_may_pull is testament to |
| that. |
| |
| It just so happens that Xen creates fragmented packets more often |
| than other scenarios (header & data split when going from domU to |
| dom0). That's what caused this bug to show up. |
| |
| Until someone has the time sits down and audits the entire net/sctp |
| directory, here is a conservative and safe solution that simply |
| linearises all packets on input. |
| |
| Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| Signed-off-by: Chris Wright <chrisw@sous-sol.org> |
| |
| --- |
| net/sctp/input.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- linux-2.6.18.1.orig/net/sctp/input.c |
| +++ linux-2.6.18.1/net/sctp/input.c |
| @@ -135,6 +135,9 @@ int sctp_rcv(struct sk_buff *skb) |
| |
| SCTP_INC_STATS_BH(SCTP_MIB_INSCTPPACKS); |
| |
| + if (skb_linearize(skb)) |
| + goto discard_it; |
| + |
| sh = (struct sctphdr *) skb->h.raw; |
| |
| /* Pull up the IP and SCTP headers. */ |