public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Louis Chauvet <louis.chauvet@bootlin.com>
To: "José Expósito" <jose.exposito89@gmail.com>
Cc: hamohammed.sa@gmail.com, simona@ffwll.ch, melissa.srw@gmail.com,
	maarten.lankhorst@linux.intel.com, mripard@kernel.org,
	tzimmermann@suse.de, airlied@gmail.com,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: [PATCH 2/2] configfs: Add mechanism to prevent item/group deletion
Date: Fri, 28 Feb 2025 15:43:27 +0100	[thread overview]
Message-ID: <b163d92b-5d5a-42fb-bc49-5e55953db795@bootlin.com> (raw)
In-Reply-To: <20250225175936.7223-4-jose.exposito89@gmail.com>

Introduce a new mechanism in configfs to prevent the deletion of certain 
item/group.
This is particularly useful in scenarios where userspace should not be 
allowed
to modify the configfs structure under some conditions, such as in VKMS.

Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
---
  drivers/gpu/drm/vkms/vkms_configfs.c | 21 +++++++++++++++++++++
  fs/configfs/dir.c                    |  8 +++++++-
  include/linux/configfs.h             |  1 +
  3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/vkms/vkms_configfs.c 
b/drivers/gpu/drm/vkms/vkms_configfs.c
index 8a7d954399e9..0a196a28ed4a 100644
--- a/drivers/gpu/drm/vkms/vkms_configfs.c
+++ b/drivers/gpu/drm/vkms/vkms_configfs.c
@@ -393,9 +393,30 @@ static struct configfs_item_operations 
plane_item_operations = {
  	.release	= &plane_release,
  };

+int allow_drop_plane_group(struct config_group *group, struct 
config_item *item)
+{
+	struct vkms_configfs_plane *plane;
+	bool enabled;
+
+	plane = plane_item_to_vkms_configfs_plane(item);
+
+	mutex_lock(&plane->dev->lock);
+	enabled = plane->dev->enabled;
+	mutex_unlock(&plane->dev->lock);
+
+	if (enabled)
+		return -EBUSY;
+	return 0;
+}
+
+static struct configfs_group_operations plane_group_operation ={
+	.allow_drop_item = &allow_drop_plane_group,
+};
+
  static const struct config_item_type plane_item_type = {
  	.ct_attrs	= plane_item_attrs,
  	.ct_item_ops	= &plane_item_operations,
+	.ct_group_ops   = &plane_group_operation,
  	.ct_owner	= THIS_MODULE,
  };

diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c
index 7d10278db30d..a103196af0f9 100644
--- a/fs/configfs/dir.c
+++ b/fs/configfs/dir.c
@@ -1544,7 +1544,13 @@ static int configfs_rmdir(struct inode *dir, 
struct dentry *dentry)

  	/* Drop reference from above, item already holds one. */
  	config_item_put(parent_item);
-
+	if (item->ci_type && item->ci_type->ct_group_ops && 
item->ci_type->ct_group_ops->allow_drop_item) {
+		ret = 
item->ci_type->ct_group_ops->allow_drop_item(to_config_group(parent_item), 
item);
+		if (ret) {
+			config_item_put(item);
+			return ret;
+		}
+	}
  	if (item->ci_type)
  		dead_item_owner = item->ci_type->ct_owner;

diff --git a/include/linux/configfs.h b/include/linux/configfs.h
index 7fc52a78d6cd..92933397590d 100644
--- a/include/linux/configfs.h
+++ b/include/linux/configfs.h
@@ -216,6 +216,7 @@ struct configfs_group_operations {
  	struct config_item *(*make_item)(struct config_group *group, const 
char *name);
  	struct config_group *(*make_group)(struct config_group *group, const 
char *name);
  	void (*disconnect_notify)(struct config_group *group, struct 
config_item *item);
+	int (*allow_drop_item)(struct config_group *group, struct config_item 
*item);
  	void (*drop_item)(struct config_group *group, struct config_item *item);
  	bool (*is_visible)(struct config_item *item, struct 
configfs_attribute *attr, int n);
  	bool (*is_bin_visible)(struct config_item *item, struct 
configfs_bin_attribute *attr,
-- 
2.48.1


  parent reply	other threads:[~2025-02-28 14:43 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-25 17:59 [PATCH v2 00/16] drm/vkms: Add configfs support José Expósito
2025-02-25 17:59 ` [PATCH v2 01/16] drm/vkms: Expose device creation and destruction José Expósito
2025-02-25 17:59 ` [PATCH v2 02/16] drm/vkms: Add and remove VKMS instances via configfs José Expósito
2025-02-28 15:19   ` Louis Chauvet
2025-03-03  8:33     ` José Expósito
2025-02-25 17:59 ` [PATCH v2 03/16] drm/vkms: Allow to configure multiple planes " José Expósito
2025-02-28 14:43   ` Louis Chauvet
2025-03-03  8:50     ` José Expósito
2025-03-03 10:34       ` Louis Chauvet
2025-03-04 14:54         ` José Expósito
2025-03-04 15:35           ` Louis Chauvet
2025-03-04 16:23             ` José Expósito
2025-03-04 18:17               ` Louis Chauvet
2025-03-06 10:49                 ` José Expósito
2025-02-28 14:43   ` Louis Chauvet [this message]
2025-02-28 14:43   ` [PATCH 1/2] configfs: Add mechanism to prevent symlink deletion Louis Chauvet
2025-02-25 17:59 ` [PATCH v2 04/16] drm/vkms: Allow to configure the plane type via configfs José Expósito
2025-02-25 17:59 ` [PATCH v2 05/16] drm/vkms: Allow to configure multiple CRTCs " José Expósito
2025-02-25 17:59 ` [PATCH v2 06/16] drm/vkms: Allow to configure CRTC writeback support " José Expósito
2025-02-25 17:59 ` [PATCH v2 07/16] drm/vkms: Allow to attach planes and CRTCs " José Expósito
2025-02-25 17:59 ` [PATCH v2 08/16] drm/vkms: Allow to configure multiple encoders " José Expósito
2025-02-25 17:59 ` [PATCH v2 09/16] drm/vkms: Allow to attach encoders and CRTCs " José Expósito
2025-02-25 17:59 ` [PATCH v2 10/16] drm/vkms: Allow to configure multiple connectors " José Expósito
2025-02-25 17:59 ` [PATCH v2 11/16] drm/vkms: Allow to attach connectors and encoders " José Expósito
2025-02-25 17:59 ` [PATCH v2 12/16] drm/vkms: Allow to configure the default device creation José Expósito
2025-02-25 17:59 ` [PATCH v2 13/16] drm/vkms: Remove completed task from the TODO list José Expósito
2025-02-25 17:59 ` [PATCH v2 14/16] drm/vkms: Allow to configure connector status José Expósito
2025-02-25 17:59 ` [PATCH v2 15/16] drm/vkms: Allow to update the " José Expósito
2025-02-25 17:59 ` [PATCH v2 16/16] drm/vkms: Allow to configure connector status via configfs José Expósito

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b163d92b-5d5a-42fb-bc49-5e55953db795@bootlin.com \
    --to=louis.chauvet@bootlin.com \
    --cc=airlied@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=hamohammed.sa@gmail.com \
    --cc=jose.exposito89@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=melissa.srw@gmail.com \
    --cc=mripard@kernel.org \
    --cc=simona@ffwll.ch \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox