--- ppp_async.c.org 2009-12-19 17:45:28.000000000 +0200 +++ ppp_async.c 2009-12-19 14:32:23.000000000 +0200 @@ -346,22 +346,30 @@ * This can now be called from hard interrupt level as well * as soft interrupt level or mainline. */ -static void +static int ppp_asynctty_receive(struct tty_struct *tty, const unsigned char *buf, char *cflags, int count) { struct asyncppp *ap = ap_get(tty); unsigned long flags; - if (!ap) - return; + if (!ap) { +// printk(KERN_ERR "ppp_asynctty_receive: !ap %08x %08x %i\n", buf, cflags, count); + return 0; + } +// printk(KERN_ERR "ppp_asynctty_receive: %08x %08x %i\n", buf, cflags, count); + if(((unsigned long)buf<0xc0000000) || ((unsigned long)cflags<0xc0000000)) { + return count; + } else { spin_lock_irqsave(&ap->recv_lock, flags); ppp_async_input(ap, buf, cflags, count); spin_unlock_irqrestore(&ap->recv_lock, flags); + } if (!skb_queue_empty(&ap->rqueue)) tasklet_schedule(&ap->tsk); ap_put(ap); tty_unthrottle(tty); + return count; } static void