aboutsummaryrefslogtreecommitdiffstats
path: root/0001-misc-convert-to-guards.patch
diff options
Diffstat (limited to '0001-misc-convert-to-guards.patch')
-rw-r--r--0001-misc-convert-to-guards.patch166
1 files changed, 166 insertions, 0 deletions
diff --git a/0001-misc-convert-to-guards.patch b/0001-misc-convert-to-guards.patch
new file mode 100644
index 00000000000000..be8763cca4551d
--- /dev/null
+++ b/0001-misc-convert-to-guards.patch
@@ -0,0 +1,166 @@
+From 997e41f41926711ef96e0e0f6cc43321ebbd6e65 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Mon, 12 Jun 2023 17:34:02 +0200
+Subject: [PATCH] misc: convert to guards
+
+---
+ drivers/char/misc.c | 69 +++++++++++++++++----------------------------
+ 1 file changed, 26 insertions(+), 43 deletions(-)
+
+diff --git a/drivers/char/misc.c b/drivers/char/misc.c
+index 1c44c29a666e..9b0418a3dc0d 100644
+--- a/drivers/char/misc.c
++++ b/drivers/char/misc.c
+@@ -123,10 +123,9 @@ static int misc_open(struct inode *inode, struct file *file)
+ {
+ int minor = iminor(inode);
+ struct miscdevice *c = NULL, *iter;
+- int err = -ENODEV;
+ const struct file_operations *new_fops = NULL;
+
+- mutex_lock(&misc_mtx);
++ guard(mutex)(&misc_mtx);
+
+ list_for_each_entry(iter, &misc_list, list) {
+ if (iter->minor != minor)
+@@ -149,7 +148,7 @@ static int misc_open(struct inode *inode, struct file *file)
+ break;
+ }
+ if (!new_fops)
+- goto fail;
++ return -ENODEV;
+ }
+
+ /*
+@@ -159,13 +158,11 @@ static int misc_open(struct inode *inode, struct file *file)
+ */
+ file->private_data = c;
+
+- err = 0;
+ replace_fops(file, new_fops);
+ if (file->f_op->open)
+- err = file->f_op->open(inode, file);
+-fail:
+- mutex_unlock(&misc_mtx);
+- return err;
++ return file->f_op->open(inode, file);
++
++ return 0;
+ }
+
+ static struct class *misc_class;
+@@ -197,29 +194,24 @@ static const struct file_operations misc_fops = {
+ int misc_register(struct miscdevice *misc)
+ {
+ dev_t dev;
+- int err = 0;
+ bool is_dynamic = (misc->minor == MISC_DYNAMIC_MINOR);
+
+ INIT_LIST_HEAD(&misc->list);
+
+- mutex_lock(&misc_mtx);
++ guard(mutex)(&misc_mtx);
+
+ if (is_dynamic) {
+ int i = misc_minor_alloc();
+
+- if (i < 0) {
+- err = -EBUSY;
+- goto out;
+- }
++ if (i < 0)
++ return -EBUSY;
+ misc->minor = i;
+ } else {
+ struct miscdevice *c;
+
+ list_for_each_entry(c, &misc_list, list) {
+- if (c->minor == misc->minor) {
+- err = -EBUSY;
+- goto out;
+- }
++ if (c->minor == misc->minor)
++ return -EBUSY;
+ }
+ }
+
+@@ -233,8 +225,7 @@ int misc_register(struct miscdevice *misc)
+ misc_minor_free(misc->minor);
+ misc->minor = MISC_DYNAMIC_MINOR;
+ }
+- err = PTR_ERR(misc->this_device);
+- goto out;
++ return PTR_ERR(misc->this_device);
+ }
+
+ /*
+@@ -242,9 +233,7 @@ int misc_register(struct miscdevice *misc)
+ * earlier defaults
+ */
+ list_add(&misc->list, &misc_list);
+- out:
+- mutex_unlock(&misc_mtx);
+- return err;
++ return 0;
+ }
+ EXPORT_SYMBOL(misc_register);
+
+@@ -261,11 +250,10 @@ void misc_deregister(struct miscdevice *misc)
+ if (WARN_ON(list_empty(&misc->list)))
+ return;
+
+- mutex_lock(&misc_mtx);
++ guard(mutex)(&misc_mtx);
+ list_del(&misc->list);
+ device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor));
+ misc_minor_free(misc->minor);
+- mutex_unlock(&misc_mtx);
+ }
+ EXPORT_SYMBOL(misc_deregister);
+
+@@ -280,29 +268,24 @@ static char *misc_devnode(const struct device *dev, umode_t *mode)
+ return NULL;
+ }
+
++DEFINE_FREE(class_destroy, struct class *, if (_T) class_destroy(_T));
++DEFINE_FREE(remove_misc_proc, struct proc_dir_entry *, if (_T) remove_proc_entry("misc", NULL));
+ static int __init misc_init(void)
+ {
+- int err;
+- struct proc_dir_entry *ret;
++ struct proc_dir_entry *ret __free(remove_misc_proc) = proc_create_seq("misc", 0, NULL, &misc_seq_ops);
++ struct class *c __free(class_destroy) = class_create("misc");
+
+- ret = proc_create_seq("misc", 0, NULL, &misc_seq_ops);
+- misc_class = class_create("misc");
+- err = PTR_ERR(misc_class);
+- if (IS_ERR(misc_class))
+- goto fail_remove;
++ if (IS_ERR(c))
++ return PTR_ERR(c);
+
+- err = -EIO;
+ if (register_chrdev(MISC_MAJOR, "misc", &misc_fops))
+- goto fail_printk;
+- misc_class->devnode = misc_devnode;
+- return 0;
++ return -EIO;
+
+-fail_printk:
+- pr_err("unable to get major %d for misc devices\n", MISC_MAJOR);
+- class_destroy(misc_class);
+-fail_remove:
+- if (ret)
+- remove_proc_entry("misc", NULL);
+- return err;
++ c->devnode = misc_devnode;
++
++ misc_class = no_free_ptr(c);
++ no_free_ptr(ret);
++
++ return 0;
+ }
+ subsys_initcall(misc_init);
+--
+2.44.0
+