diff mbox series

[v3,25/26] media: mc: Enforce one-time registration

Message ID 20240312103422.216484-26-sakari.ailus@linux.intel.com
State New
Headers show
Series [v3,01/26] Revert "[media] media: fix media devnode ioctl/syscall and unregister race" | expand

Commit Message

Sakari Ailus March 12, 2024, 10:34 a.m. UTC
A media devnode may be registered only once. Enforce this by setting the
minor to -1 in init.

Registration initialises the character device and sets up the device name.
These should take place only once during the lifetime of the media device.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/media/mc/mc-devnode.c | 4 ++++
 1 file changed, 4 insertions(+)
diff mbox series

Patch

diff --git a/drivers/media/mc/mc-devnode.c b/drivers/media/mc/mc-devnode.c
index e2a30b21e6c8..8742bd7a3521 100644
--- a/drivers/media/mc/mc-devnode.c
+++ b/drivers/media/mc/mc-devnode.c
@@ -240,6 +240,7 @@  void media_devnode_init(struct media_devnode *devnode)
 {
 	device_initialize(&devnode->dev);
 	devnode->dev.release = media_devnode_release;
+	devnode->minor = -1;
 }
 
 int __must_check media_devnode_register(struct media_devnode *devnode,
@@ -251,6 +252,9 @@  int __must_check media_devnode_register(struct media_devnode *devnode,
 	int minor;
 	int ret;
 
+	if (devnode->minor != -1)
+		return -EINVAL;
+
 	/* Part 1: Find a free minor number */
 	mutex_lock(&media_devnode_lock);
 	minor = find_first_zero_bit(media_devnode_nums, MEDIA_NUM_DEVICES);