NET: Fix locking issues in PPP, 6pack, mkiss and strip line disciplines.
[deliverable/linux.git] / drivers / net / ppp_synctty.c
index aa3d39f38e2257deee5e72e9df06453be96e3046..1b3f75febee1ce3ad1aa01e6f3d30671a8f00460 100644 (file)
@@ -182,13 +182,15 @@ static DEFINE_RWLOCK(disc_data_lock);
 
 static struct syncppp *sp_get(struct tty_struct *tty)
 {
+       unsigned long flags;
        struct syncppp *ap;
 
-       read_lock(&disc_data_lock);
+       read_lock_irqsave(&disc_data_lock, flags);
        ap = tty->disc_data;
        if (ap != NULL)
                atomic_inc(&ap->refcnt);
-       read_unlock(&disc_data_lock);
+       read_unlock_irqrestore(&disc_data_lock, flags);
+
        return ap;
 }
 
@@ -262,12 +264,13 @@ ppp_sync_open(struct tty_struct *tty)
 static void
 ppp_sync_close(struct tty_struct *tty)
 {
+       unsigned long flags;
        struct syncppp *ap;
 
-       write_lock_irq(&disc_data_lock);
+       write_lock_irqsave(&disc_data_lock, flags);
        ap = tty->disc_data;
        tty->disc_data = NULL;
-       write_unlock_irq(&disc_data_lock);
+       write_unlock_irqrestore(&disc_data_lock, flags);
        if (!ap)
                return;
 
This page took 0.027966 seconds and 5 git commands to generate.