summaryrefslogtreecommitdiff
path: root/drivers/misc/ti-st/st_core.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2011-09-20 21:45:56 +0200
committerArnd Bergmann <arnd@arndb.de>2011-09-20 21:45:56 +0200
commit1fdb4888e45f1413972a8e9da55f3ffc08b9abcb (patch)
tree635ef73cdff38d21a529bbdcab4cd2cb39a29484 /drivers/misc/ti-st/st_core.c
parent1884af9365a96314164f4110d4528d425e5dd843 (diff)
parentceb1c532ba6220900e61ec7073a9234661efa450 (diff)
Merge branch 'omap/cleanup' into next/cleanup
Diffstat (limited to 'drivers/misc/ti-st/st_core.c')
-rw-r--r--drivers/misc/ti-st/st_core.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/misc/ti-st/st_core.c b/drivers/misc/ti-st/st_core.c
index 54c91ffe4a91..ba168a7d54d4 100644
--- a/drivers/misc/ti-st/st_core.c
+++ b/drivers/misc/ti-st/st_core.c
@@ -338,6 +338,12 @@ void st_int_recv(void *disc_data,
/* Unknow packet? */
default:
type = *ptr;
+ if (st_gdata->list[type] == NULL) {
+ pr_err("chip/interface misbehavior dropping"
+ " frame starting with 0x%02x", type);
+ goto done;
+
+ }
st_gdata->rx_skb = alloc_skb(
st_gdata->list[type]->max_frame_size,
GFP_ATOMIC);
@@ -354,6 +360,7 @@ void st_int_recv(void *disc_data,
ptr++;
count--;
}
+done:
spin_unlock_irqrestore(&st_gdata->lock, flags);
pr_debug("done %s", __func__);
return;
@@ -717,9 +724,10 @@ static void st_tty_close(struct tty_struct *tty)
*/
spin_lock_irqsave(&st_gdata->lock, flags);
for (i = ST_BT; i < ST_MAX_CHANNELS; i++) {
- if (st_gdata->list[i] != NULL)
+ if (st_gdata->is_registered[i] == true)
pr_err("%d not un-registered", i);
st_gdata->list[i] = NULL;
+ st_gdata->is_registered[i] = false;
}
st_gdata->protos_registered = 0;
spin_unlock_irqrestore(&st_gdata->lock, flags);