aboutsummaryrefslogtreecommitdiffstats
path: root/net/irda/ircomm
diff options
context:
space:
mode:
authorRobie Basak <rb-oss-1@justgohome.co.uk>2008-01-19 02:58:44 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:08:09 -0500
commit5d780cd6585d242d9592a479fe75a007fd75155d (patch)
treed0cb1ed0a2391e9a5efb746c37ff69fd6848f481 /net/irda/ircomm
parent6d97b53e92af822890b87818c99820df47fc589b (diff)
[IrDA]: Frame length validation.
When using a stir4200-based USB adaptor to talk to a device that uses an mcp2150, the stir4200 sometimes drops an incoming frame causing the mcp2150 to try and retransmit the lost frame. In this combination, the next frame received from the mcp2150 is often invalid - either an empty i:rsp or an IrCOMM i:rsp with an invalid clen. These corner cases are now checked. Signed-off-by: Robie Basak <rb-oss-1@justgohome.co.uk> Signed-off-by: Samuel Ortiz <samuel@sortiz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/irda/ircomm')
-rw-r--r--net/irda/ircomm/ircomm_core.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/net/irda/ircomm/ircomm_core.c b/net/irda/ircomm/ircomm_core.c
index 2d63fa8e1556..b825399fc160 100644
--- a/net/irda/ircomm/ircomm_core.c
+++ b/net/irda/ircomm/ircomm_core.c
@@ -363,6 +363,18 @@ void ircomm_process_data(struct ircomm_cb *self, struct sk_buff *skb)
363 clen = skb->data[0]; 363 clen = skb->data[0];
364 364
365 /* 365 /*
366 * Input validation check: a stir4200/mcp2150 combinations sometimes
367 * results in frames with clen > remaining packet size. These are
368 * illegal; if we throw away just this frame then it seems to carry on
369 * fine
370 */
371 if (unlikely(skb->len < (clen + 1))) {
372 IRDA_DEBUG(2, "%s() throwing away illegal frame\n",
373 __FUNCTION__ );
374 return;
375 }
376
377 /*
366 * If there are any data hiding in the control channel, we must 378 * If there are any data hiding in the control channel, we must
367 * deliver it first. The side effect is that the control channel 379 * deliver it first. The side effect is that the control channel
368 * will be removed from the skb 380 * will be removed from the skb