diff -ru linux-2.5.74/drivers/net/hamradio/mkiss.c linux-2.5.74.rxq/drivers/net/hamradio/mkiss.c --- linux-2.5.74/drivers/net/hamradio/mkiss.c 2003-07-02 22:57:13.000000000 +0200 +++ linux-2.5.74.rxq/drivers/net/hamradio/mkiss.c 2003-07-05 19:33:20.000000000 +0200 @@ -22,6 +22,8 @@ * Matthias (DG2FEF) Added support for FlexNet CRC (on special request) * Fixed bug in ax25_close(): dev_lock_wait() was * called twice, causing a deadlock. + * Jeroen (PE1RXQ) Added NULL check for tty->driver_data and removed + * MOD_*_USE_COUNT calls */ #include @@ -320,7 +322,7 @@ if (ax->rbuff[0] > 0x0f) { if (ax->mkiss != NULL) { mkiss= ax->mkiss->tty->driver_data; - if (mkiss->magic == MKISS_DRIVER_MAGIC) + if (mkiss && mkiss->magic == MKISS_DRIVER_MAGIC) tmp_ax = ax->mkiss; } else if (ax->rbuff[0] & 0x20) { ax->crcmode = CRC_MODE_FLEX; @@ -376,7 +378,7 @@ p = icp; - if (mkiss->magic != MKISS_DRIVER_MAGIC) { + if (!mkiss || mkiss->magic != MKISS_DRIVER_MAGIC) { switch (ax->crcmode) { unsigned short crc; @@ -430,7 +432,7 @@ if (ax->mkiss != NULL) { mkiss= ax->mkiss->tty->driver_data; - if (mkiss->magic == MKISS_DRIVER_MAGIC) + if (mkiss && mkiss->magic == MKISS_DRIVER_MAGIC) ax_unlock(ax->mkiss); } @@ -452,7 +454,7 @@ tmp_ax = NULL; - if (mkiss->magic == MKISS_DRIVER_MAGIC) { + if (mkiss && mkiss->magic == MKISS_DRIVER_MAGIC) { if (skb->data[0] < 0x10) skb->data[0] = skb->data[0] + 0x10; tmp_ax = ax->mkiss; @@ -666,7 +668,7 @@ mkiss = ax->tty->driver_data; - if (mkiss->magic == MKISS_DRIVER_MAGIC) { + if (mkiss && mkiss->magic == MKISS_DRIVER_MAGIC) { for (cnt = 1; cnt < ax25_maxdev; cnt++) { if (ax25_ctrls[cnt]) { if (netif_running(&ax25_ctrls[cnt]->dev)) { @@ -685,8 +687,6 @@ tmp_ax->mkiss = ax; } - MOD_INC_USE_COUNT; - /* Done. We have linked the TTY line to a channel. */ return ax->dev->base_addr; } @@ -705,7 +705,6 @@ ax->tty = NULL; ax_free(ax); - MOD_DEC_USE_COUNT; }