Merge branch 'for-6.5/apple' into for-linus
[platform/kernel/linux-starfive.git] / drivers / hid / hidraw.c
index 93e62b1..e63c56a 100644 (file)
@@ -272,7 +272,12 @@ static int hidraw_open(struct inode *inode, struct file *file)
                goto out;
        }
 
-       down_read(&minors_rwsem);
+       /*
+        * Technically not writing to the hidraw_table but a write lock is
+        * required to protect the device refcount. This is symmetrical to
+        * hidraw_release().
+        */
+       down_write(&minors_rwsem);
        if (!hidraw_table[minor] || !hidraw_table[minor]->exist) {
                err = -ENODEV;
                goto out_unlock;
@@ -301,7 +306,7 @@ static int hidraw_open(struct inode *inode, struct file *file)
        spin_unlock_irqrestore(&hidraw_table[minor]->list_lock, flags);
        file->private_data = list;
 out_unlock:
-       up_read(&minors_rwsem);
+       up_write(&minors_rwsem);
 out:
        if (err < 0)
                kfree(list);