cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

inode.c (25487B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 *  inode.c - part of debugfs, a tiny little debug file system
      4 *
      5 *  Copyright (C) 2004,2019 Greg Kroah-Hartman <greg@kroah.com>
      6 *  Copyright (C) 2004 IBM Inc.
      7 *  Copyright (C) 2019 Linux Foundation <gregkh@linuxfoundation.org>
      8 *
      9 *  debugfs is for people to use instead of /proc or /sys.
     10 *  See ./Documentation/core-api/kernel-api.rst for more details.
     11 */
     12
     13#define pr_fmt(fmt)	"debugfs: " fmt
     14
     15#include <linux/module.h>
     16#include <linux/fs.h>
     17#include <linux/mount.h>
     18#include <linux/pagemap.h>
     19#include <linux/init.h>
     20#include <linux/kobject.h>
     21#include <linux/namei.h>
     22#include <linux/debugfs.h>
     23#include <linux/fsnotify.h>
     24#include <linux/string.h>
     25#include <linux/seq_file.h>
     26#include <linux/parser.h>
     27#include <linux/magic.h>
     28#include <linux/slab.h>
     29#include <linux/security.h>
     30
     31#include "internal.h"
     32
     33#define DEBUGFS_DEFAULT_MODE	0700
     34
     35static struct vfsmount *debugfs_mount;
     36static int debugfs_mount_count;
     37static bool debugfs_registered;
     38static unsigned int debugfs_allow __ro_after_init = DEFAULT_DEBUGFS_ALLOW_BITS;
     39
     40/*
     41 * Don't allow access attributes to be changed whilst the kernel is locked down
     42 * so that we can use the file mode as part of a heuristic to determine whether
     43 * to lock down individual files.
     44 */
     45static int debugfs_setattr(struct user_namespace *mnt_userns,
     46			   struct dentry *dentry, struct iattr *ia)
     47{
     48	int ret;
     49
     50	if (ia->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)) {
     51		ret = security_locked_down(LOCKDOWN_DEBUGFS);
     52		if (ret)
     53			return ret;
     54	}
     55	return simple_setattr(&init_user_ns, dentry, ia);
     56}
     57
     58static const struct inode_operations debugfs_file_inode_operations = {
     59	.setattr	= debugfs_setattr,
     60};
     61static const struct inode_operations debugfs_dir_inode_operations = {
     62	.lookup		= simple_lookup,
     63	.setattr	= debugfs_setattr,
     64};
     65static const struct inode_operations debugfs_symlink_inode_operations = {
     66	.get_link	= simple_get_link,
     67	.setattr	= debugfs_setattr,
     68};
     69
     70static struct inode *debugfs_get_inode(struct super_block *sb)
     71{
     72	struct inode *inode = new_inode(sb);
     73	if (inode) {
     74		inode->i_ino = get_next_ino();
     75		inode->i_atime = inode->i_mtime =
     76			inode->i_ctime = current_time(inode);
     77	}
     78	return inode;
     79}
     80
     81struct debugfs_mount_opts {
     82	kuid_t uid;
     83	kgid_t gid;
     84	umode_t mode;
     85};
     86
     87enum {
     88	Opt_uid,
     89	Opt_gid,
     90	Opt_mode,
     91	Opt_err
     92};
     93
     94static const match_table_t tokens = {
     95	{Opt_uid, "uid=%u"},
     96	{Opt_gid, "gid=%u"},
     97	{Opt_mode, "mode=%o"},
     98	{Opt_err, NULL}
     99};
    100
    101struct debugfs_fs_info {
    102	struct debugfs_mount_opts mount_opts;
    103};
    104
    105static int debugfs_parse_options(char *data, struct debugfs_mount_opts *opts)
    106{
    107	substring_t args[MAX_OPT_ARGS];
    108	int option;
    109	int token;
    110	kuid_t uid;
    111	kgid_t gid;
    112	char *p;
    113
    114	opts->mode = DEBUGFS_DEFAULT_MODE;
    115
    116	while ((p = strsep(&data, ",")) != NULL) {
    117		if (!*p)
    118			continue;
    119
    120		token = match_token(p, tokens, args);
    121		switch (token) {
    122		case Opt_uid:
    123			if (match_int(&args[0], &option))
    124				return -EINVAL;
    125			uid = make_kuid(current_user_ns(), option);
    126			if (!uid_valid(uid))
    127				return -EINVAL;
    128			opts->uid = uid;
    129			break;
    130		case Opt_gid:
    131			if (match_int(&args[0], &option))
    132				return -EINVAL;
    133			gid = make_kgid(current_user_ns(), option);
    134			if (!gid_valid(gid))
    135				return -EINVAL;
    136			opts->gid = gid;
    137			break;
    138		case Opt_mode:
    139			if (match_octal(&args[0], &option))
    140				return -EINVAL;
    141			opts->mode = option & S_IALLUGO;
    142			break;
    143		/*
    144		 * We might like to report bad mount options here;
    145		 * but traditionally debugfs has ignored all mount options
    146		 */
    147		}
    148	}
    149
    150	return 0;
    151}
    152
    153static int debugfs_apply_options(struct super_block *sb)
    154{
    155	struct debugfs_fs_info *fsi = sb->s_fs_info;
    156	struct inode *inode = d_inode(sb->s_root);
    157	struct debugfs_mount_opts *opts = &fsi->mount_opts;
    158
    159	inode->i_mode &= ~S_IALLUGO;
    160	inode->i_mode |= opts->mode;
    161
    162	inode->i_uid = opts->uid;
    163	inode->i_gid = opts->gid;
    164
    165	return 0;
    166}
    167
    168static int debugfs_remount(struct super_block *sb, int *flags, char *data)
    169{
    170	int err;
    171	struct debugfs_fs_info *fsi = sb->s_fs_info;
    172
    173	sync_filesystem(sb);
    174	err = debugfs_parse_options(data, &fsi->mount_opts);
    175	if (err)
    176		goto fail;
    177
    178	debugfs_apply_options(sb);
    179
    180fail:
    181	return err;
    182}
    183
    184static int debugfs_show_options(struct seq_file *m, struct dentry *root)
    185{
    186	struct debugfs_fs_info *fsi = root->d_sb->s_fs_info;
    187	struct debugfs_mount_opts *opts = &fsi->mount_opts;
    188
    189	if (!uid_eq(opts->uid, GLOBAL_ROOT_UID))
    190		seq_printf(m, ",uid=%u",
    191			   from_kuid_munged(&init_user_ns, opts->uid));
    192	if (!gid_eq(opts->gid, GLOBAL_ROOT_GID))
    193		seq_printf(m, ",gid=%u",
    194			   from_kgid_munged(&init_user_ns, opts->gid));
    195	if (opts->mode != DEBUGFS_DEFAULT_MODE)
    196		seq_printf(m, ",mode=%o", opts->mode);
    197
    198	return 0;
    199}
    200
    201static void debugfs_free_inode(struct inode *inode)
    202{
    203	if (S_ISLNK(inode->i_mode))
    204		kfree(inode->i_link);
    205	free_inode_nonrcu(inode);
    206}
    207
    208static const struct super_operations debugfs_super_operations = {
    209	.statfs		= simple_statfs,
    210	.remount_fs	= debugfs_remount,
    211	.show_options	= debugfs_show_options,
    212	.free_inode	= debugfs_free_inode,
    213};
    214
    215static void debugfs_release_dentry(struct dentry *dentry)
    216{
    217	void *fsd = dentry->d_fsdata;
    218
    219	if (!((unsigned long)fsd & DEBUGFS_FSDATA_IS_REAL_FOPS_BIT))
    220		kfree(dentry->d_fsdata);
    221}
    222
    223static struct vfsmount *debugfs_automount(struct path *path)
    224{
    225	debugfs_automount_t f;
    226	f = (debugfs_automount_t)path->dentry->d_fsdata;
    227	return f(path->dentry, d_inode(path->dentry)->i_private);
    228}
    229
    230static const struct dentry_operations debugfs_dops = {
    231	.d_delete = always_delete_dentry,
    232	.d_release = debugfs_release_dentry,
    233	.d_automount = debugfs_automount,
    234};
    235
    236static int debug_fill_super(struct super_block *sb, void *data, int silent)
    237{
    238	static const struct tree_descr debug_files[] = {{""}};
    239	struct debugfs_fs_info *fsi;
    240	int err;
    241
    242	fsi = kzalloc(sizeof(struct debugfs_fs_info), GFP_KERNEL);
    243	sb->s_fs_info = fsi;
    244	if (!fsi) {
    245		err = -ENOMEM;
    246		goto fail;
    247	}
    248
    249	err = debugfs_parse_options(data, &fsi->mount_opts);
    250	if (err)
    251		goto fail;
    252
    253	err  =  simple_fill_super(sb, DEBUGFS_MAGIC, debug_files);
    254	if (err)
    255		goto fail;
    256
    257	sb->s_op = &debugfs_super_operations;
    258	sb->s_d_op = &debugfs_dops;
    259
    260	debugfs_apply_options(sb);
    261
    262	return 0;
    263
    264fail:
    265	kfree(fsi);
    266	sb->s_fs_info = NULL;
    267	return err;
    268}
    269
    270static struct dentry *debug_mount(struct file_system_type *fs_type,
    271			int flags, const char *dev_name,
    272			void *data)
    273{
    274	if (!(debugfs_allow & DEBUGFS_ALLOW_API))
    275		return ERR_PTR(-EPERM);
    276
    277	return mount_single(fs_type, flags, data, debug_fill_super);
    278}
    279
    280static struct file_system_type debug_fs_type = {
    281	.owner =	THIS_MODULE,
    282	.name =		"debugfs",
    283	.mount =	debug_mount,
    284	.kill_sb =	kill_litter_super,
    285};
    286MODULE_ALIAS_FS("debugfs");
    287
    288/**
    289 * debugfs_lookup() - look up an existing debugfs file
    290 * @name: a pointer to a string containing the name of the file to look up.
    291 * @parent: a pointer to the parent dentry of the file.
    292 *
    293 * This function will return a pointer to a dentry if it succeeds.  If the file
    294 * doesn't exist or an error occurs, %NULL will be returned.  The returned
    295 * dentry must be passed to dput() when it is no longer needed.
    296 *
    297 * If debugfs is not enabled in the kernel, the value -%ENODEV will be
    298 * returned.
    299 */
    300struct dentry *debugfs_lookup(const char *name, struct dentry *parent)
    301{
    302	struct dentry *dentry;
    303
    304	if (!debugfs_initialized() || IS_ERR_OR_NULL(name) || IS_ERR(parent))
    305		return NULL;
    306
    307	if (!parent)
    308		parent = debugfs_mount->mnt_root;
    309
    310	dentry = lookup_positive_unlocked(name, parent, strlen(name));
    311	if (IS_ERR(dentry))
    312		return NULL;
    313	return dentry;
    314}
    315EXPORT_SYMBOL_GPL(debugfs_lookup);
    316
    317static struct dentry *start_creating(const char *name, struct dentry *parent)
    318{
    319	struct dentry *dentry;
    320	int error;
    321
    322	if (!(debugfs_allow & DEBUGFS_ALLOW_API))
    323		return ERR_PTR(-EPERM);
    324
    325	if (!debugfs_initialized())
    326		return ERR_PTR(-ENOENT);
    327
    328	pr_debug("creating file '%s'\n", name);
    329
    330	if (IS_ERR(parent))
    331		return parent;
    332
    333	error = simple_pin_fs(&debug_fs_type, &debugfs_mount,
    334			      &debugfs_mount_count);
    335	if (error) {
    336		pr_err("Unable to pin filesystem for file '%s'\n", name);
    337		return ERR_PTR(error);
    338	}
    339
    340	/* If the parent is not specified, we create it in the root.
    341	 * We need the root dentry to do this, which is in the super
    342	 * block. A pointer to that is in the struct vfsmount that we
    343	 * have around.
    344	 */
    345	if (!parent)
    346		parent = debugfs_mount->mnt_root;
    347
    348	inode_lock(d_inode(parent));
    349	if (unlikely(IS_DEADDIR(d_inode(parent))))
    350		dentry = ERR_PTR(-ENOENT);
    351	else
    352		dentry = lookup_one_len(name, parent, strlen(name));
    353	if (!IS_ERR(dentry) && d_really_is_positive(dentry)) {
    354		if (d_is_dir(dentry))
    355			pr_err("Directory '%s' with parent '%s' already present!\n",
    356			       name, parent->d_name.name);
    357		else
    358			pr_err("File '%s' in directory '%s' already present!\n",
    359			       name, parent->d_name.name);
    360		dput(dentry);
    361		dentry = ERR_PTR(-EEXIST);
    362	}
    363
    364	if (IS_ERR(dentry)) {
    365		inode_unlock(d_inode(parent));
    366		simple_release_fs(&debugfs_mount, &debugfs_mount_count);
    367	}
    368
    369	return dentry;
    370}
    371
    372static struct dentry *failed_creating(struct dentry *dentry)
    373{
    374	inode_unlock(d_inode(dentry->d_parent));
    375	dput(dentry);
    376	simple_release_fs(&debugfs_mount, &debugfs_mount_count);
    377	return ERR_PTR(-ENOMEM);
    378}
    379
    380static struct dentry *end_creating(struct dentry *dentry)
    381{
    382	inode_unlock(d_inode(dentry->d_parent));
    383	return dentry;
    384}
    385
    386static struct dentry *__debugfs_create_file(const char *name, umode_t mode,
    387				struct dentry *parent, void *data,
    388				const struct file_operations *proxy_fops,
    389				const struct file_operations *real_fops)
    390{
    391	struct dentry *dentry;
    392	struct inode *inode;
    393
    394	if (!(mode & S_IFMT))
    395		mode |= S_IFREG;
    396	BUG_ON(!S_ISREG(mode));
    397	dentry = start_creating(name, parent);
    398
    399	if (IS_ERR(dentry))
    400		return dentry;
    401
    402	if (!(debugfs_allow & DEBUGFS_ALLOW_API)) {
    403		failed_creating(dentry);
    404		return ERR_PTR(-EPERM);
    405	}
    406
    407	inode = debugfs_get_inode(dentry->d_sb);
    408	if (unlikely(!inode)) {
    409		pr_err("out of free dentries, can not create file '%s'\n",
    410		       name);
    411		return failed_creating(dentry);
    412	}
    413
    414	inode->i_mode = mode;
    415	inode->i_private = data;
    416
    417	inode->i_op = &debugfs_file_inode_operations;
    418	inode->i_fop = proxy_fops;
    419	dentry->d_fsdata = (void *)((unsigned long)real_fops |
    420				DEBUGFS_FSDATA_IS_REAL_FOPS_BIT);
    421
    422	d_instantiate(dentry, inode);
    423	fsnotify_create(d_inode(dentry->d_parent), dentry);
    424	return end_creating(dentry);
    425}
    426
    427/**
    428 * debugfs_create_file - create a file in the debugfs filesystem
    429 * @name: a pointer to a string containing the name of the file to create.
    430 * @mode: the permission that the file should have.
    431 * @parent: a pointer to the parent dentry for this file.  This should be a
    432 *          directory dentry if set.  If this parameter is NULL, then the
    433 *          file will be created in the root of the debugfs filesystem.
    434 * @data: a pointer to something that the caller will want to get to later
    435 *        on.  The inode.i_private pointer will point to this value on
    436 *        the open() call.
    437 * @fops: a pointer to a struct file_operations that should be used for
    438 *        this file.
    439 *
    440 * This is the basic "create a file" function for debugfs.  It allows for a
    441 * wide range of flexibility in creating a file, or a directory (if you want
    442 * to create a directory, the debugfs_create_dir() function is
    443 * recommended to be used instead.)
    444 *
    445 * This function will return a pointer to a dentry if it succeeds.  This
    446 * pointer must be passed to the debugfs_remove() function when the file is
    447 * to be removed (no automatic cleanup happens if your module is unloaded,
    448 * you are responsible here.)  If an error occurs, ERR_PTR(-ERROR) will be
    449 * returned.
    450 *
    451 * If debugfs is not enabled in the kernel, the value -%ENODEV will be
    452 * returned.
    453 *
    454 * NOTE: it's expected that most callers should _ignore_ the errors returned
    455 * by this function. Other debugfs functions handle the fact that the "dentry"
    456 * passed to them could be an error and they don't crash in that case.
    457 * Drivers should generally work fine even if debugfs fails to init anyway.
    458 */
    459struct dentry *debugfs_create_file(const char *name, umode_t mode,
    460				   struct dentry *parent, void *data,
    461				   const struct file_operations *fops)
    462{
    463
    464	return __debugfs_create_file(name, mode, parent, data,
    465				fops ? &debugfs_full_proxy_file_operations :
    466					&debugfs_noop_file_operations,
    467				fops);
    468}
    469EXPORT_SYMBOL_GPL(debugfs_create_file);
    470
    471/**
    472 * debugfs_create_file_unsafe - create a file in the debugfs filesystem
    473 * @name: a pointer to a string containing the name of the file to create.
    474 * @mode: the permission that the file should have.
    475 * @parent: a pointer to the parent dentry for this file.  This should be a
    476 *          directory dentry if set.  If this parameter is NULL, then the
    477 *          file will be created in the root of the debugfs filesystem.
    478 * @data: a pointer to something that the caller will want to get to later
    479 *        on.  The inode.i_private pointer will point to this value on
    480 *        the open() call.
    481 * @fops: a pointer to a struct file_operations that should be used for
    482 *        this file.
    483 *
    484 * debugfs_create_file_unsafe() is completely analogous to
    485 * debugfs_create_file(), the only difference being that the fops
    486 * handed it will not get protected against file removals by the
    487 * debugfs core.
    488 *
    489 * It is your responsibility to protect your struct file_operation
    490 * methods against file removals by means of debugfs_file_get()
    491 * and debugfs_file_put(). ->open() is still protected by
    492 * debugfs though.
    493 *
    494 * Any struct file_operations defined by means of
    495 * DEFINE_DEBUGFS_ATTRIBUTE() is protected against file removals and
    496 * thus, may be used here.
    497 */
    498struct dentry *debugfs_create_file_unsafe(const char *name, umode_t mode,
    499				   struct dentry *parent, void *data,
    500				   const struct file_operations *fops)
    501{
    502
    503	return __debugfs_create_file(name, mode, parent, data,
    504				fops ? &debugfs_open_proxy_file_operations :
    505					&debugfs_noop_file_operations,
    506				fops);
    507}
    508EXPORT_SYMBOL_GPL(debugfs_create_file_unsafe);
    509
    510/**
    511 * debugfs_create_file_size - create a file in the debugfs filesystem
    512 * @name: a pointer to a string containing the name of the file to create.
    513 * @mode: the permission that the file should have.
    514 * @parent: a pointer to the parent dentry for this file.  This should be a
    515 *          directory dentry if set.  If this parameter is NULL, then the
    516 *          file will be created in the root of the debugfs filesystem.
    517 * @data: a pointer to something that the caller will want to get to later
    518 *        on.  The inode.i_private pointer will point to this value on
    519 *        the open() call.
    520 * @fops: a pointer to a struct file_operations that should be used for
    521 *        this file.
    522 * @file_size: initial file size
    523 *
    524 * This is the basic "create a file" function for debugfs.  It allows for a
    525 * wide range of flexibility in creating a file, or a directory (if you want
    526 * to create a directory, the debugfs_create_dir() function is
    527 * recommended to be used instead.)
    528 */
    529void debugfs_create_file_size(const char *name, umode_t mode,
    530			      struct dentry *parent, void *data,
    531			      const struct file_operations *fops,
    532			      loff_t file_size)
    533{
    534	struct dentry *de = debugfs_create_file(name, mode, parent, data, fops);
    535
    536	if (!IS_ERR(de))
    537		d_inode(de)->i_size = file_size;
    538}
    539EXPORT_SYMBOL_GPL(debugfs_create_file_size);
    540
    541/**
    542 * debugfs_create_dir - create a directory in the debugfs filesystem
    543 * @name: a pointer to a string containing the name of the directory to
    544 *        create.
    545 * @parent: a pointer to the parent dentry for this file.  This should be a
    546 *          directory dentry if set.  If this parameter is NULL, then the
    547 *          directory will be created in the root of the debugfs filesystem.
    548 *
    549 * This function creates a directory in debugfs with the given name.
    550 *
    551 * This function will return a pointer to a dentry if it succeeds.  This
    552 * pointer must be passed to the debugfs_remove() function when the file is
    553 * to be removed (no automatic cleanup happens if your module is unloaded,
    554 * you are responsible here.)  If an error occurs, ERR_PTR(-ERROR) will be
    555 * returned.
    556 *
    557 * If debugfs is not enabled in the kernel, the value -%ENODEV will be
    558 * returned.
    559 *
    560 * NOTE: it's expected that most callers should _ignore_ the errors returned
    561 * by this function. Other debugfs functions handle the fact that the "dentry"
    562 * passed to them could be an error and they don't crash in that case.
    563 * Drivers should generally work fine even if debugfs fails to init anyway.
    564 */
    565struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
    566{
    567	struct dentry *dentry = start_creating(name, parent);
    568	struct inode *inode;
    569
    570	if (IS_ERR(dentry))
    571		return dentry;
    572
    573	if (!(debugfs_allow & DEBUGFS_ALLOW_API)) {
    574		failed_creating(dentry);
    575		return ERR_PTR(-EPERM);
    576	}
    577
    578	inode = debugfs_get_inode(dentry->d_sb);
    579	if (unlikely(!inode)) {
    580		pr_err("out of free dentries, can not create directory '%s'\n",
    581		       name);
    582		return failed_creating(dentry);
    583	}
    584
    585	inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO;
    586	inode->i_op = &debugfs_dir_inode_operations;
    587	inode->i_fop = &simple_dir_operations;
    588
    589	/* directory inodes start off with i_nlink == 2 (for "." entry) */
    590	inc_nlink(inode);
    591	d_instantiate(dentry, inode);
    592	inc_nlink(d_inode(dentry->d_parent));
    593	fsnotify_mkdir(d_inode(dentry->d_parent), dentry);
    594	return end_creating(dentry);
    595}
    596EXPORT_SYMBOL_GPL(debugfs_create_dir);
    597
    598/**
    599 * debugfs_create_automount - create automount point in the debugfs filesystem
    600 * @name: a pointer to a string containing the name of the file to create.
    601 * @parent: a pointer to the parent dentry for this file.  This should be a
    602 *          directory dentry if set.  If this parameter is NULL, then the
    603 *          file will be created in the root of the debugfs filesystem.
    604 * @f: function to be called when pathname resolution steps on that one.
    605 * @data: opaque argument to pass to f().
    606 *
    607 * @f should return what ->d_automount() would.
    608 */
    609struct dentry *debugfs_create_automount(const char *name,
    610					struct dentry *parent,
    611					debugfs_automount_t f,
    612					void *data)
    613{
    614	struct dentry *dentry = start_creating(name, parent);
    615	struct inode *inode;
    616
    617	if (IS_ERR(dentry))
    618		return dentry;
    619
    620	if (!(debugfs_allow & DEBUGFS_ALLOW_API)) {
    621		failed_creating(dentry);
    622		return ERR_PTR(-EPERM);
    623	}
    624
    625	inode = debugfs_get_inode(dentry->d_sb);
    626	if (unlikely(!inode)) {
    627		pr_err("out of free dentries, can not create automount '%s'\n",
    628		       name);
    629		return failed_creating(dentry);
    630	}
    631
    632	make_empty_dir_inode(inode);
    633	inode->i_flags |= S_AUTOMOUNT;
    634	inode->i_private = data;
    635	dentry->d_fsdata = (void *)f;
    636	/* directory inodes start off with i_nlink == 2 (for "." entry) */
    637	inc_nlink(inode);
    638	d_instantiate(dentry, inode);
    639	inc_nlink(d_inode(dentry->d_parent));
    640	fsnotify_mkdir(d_inode(dentry->d_parent), dentry);
    641	return end_creating(dentry);
    642}
    643EXPORT_SYMBOL(debugfs_create_automount);
    644
    645/**
    646 * debugfs_create_symlink- create a symbolic link in the debugfs filesystem
    647 * @name: a pointer to a string containing the name of the symbolic link to
    648 *        create.
    649 * @parent: a pointer to the parent dentry for this symbolic link.  This
    650 *          should be a directory dentry if set.  If this parameter is NULL,
    651 *          then the symbolic link will be created in the root of the debugfs
    652 *          filesystem.
    653 * @target: a pointer to a string containing the path to the target of the
    654 *          symbolic link.
    655 *
    656 * This function creates a symbolic link with the given name in debugfs that
    657 * links to the given target path.
    658 *
    659 * This function will return a pointer to a dentry if it succeeds.  This
    660 * pointer must be passed to the debugfs_remove() function when the symbolic
    661 * link is to be removed (no automatic cleanup happens if your module is
    662 * unloaded, you are responsible here.)  If an error occurs, ERR_PTR(-ERROR)
    663 * will be returned.
    664 *
    665 * If debugfs is not enabled in the kernel, the value -%ENODEV will be
    666 * returned.
    667 */
    668struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent,
    669				      const char *target)
    670{
    671	struct dentry *dentry;
    672	struct inode *inode;
    673	char *link = kstrdup(target, GFP_KERNEL);
    674	if (!link)
    675		return ERR_PTR(-ENOMEM);
    676
    677	dentry = start_creating(name, parent);
    678	if (IS_ERR(dentry)) {
    679		kfree(link);
    680		return dentry;
    681	}
    682
    683	inode = debugfs_get_inode(dentry->d_sb);
    684	if (unlikely(!inode)) {
    685		pr_err("out of free dentries, can not create symlink '%s'\n",
    686		       name);
    687		kfree(link);
    688		return failed_creating(dentry);
    689	}
    690	inode->i_mode = S_IFLNK | S_IRWXUGO;
    691	inode->i_op = &debugfs_symlink_inode_operations;
    692	inode->i_link = link;
    693	d_instantiate(dentry, inode);
    694	return end_creating(dentry);
    695}
    696EXPORT_SYMBOL_GPL(debugfs_create_symlink);
    697
    698static void __debugfs_file_removed(struct dentry *dentry)
    699{
    700	struct debugfs_fsdata *fsd;
    701
    702	/*
    703	 * Paired with the closing smp_mb() implied by a successful
    704	 * cmpxchg() in debugfs_file_get(): either
    705	 * debugfs_file_get() must see a dead dentry or we must see a
    706	 * debugfs_fsdata instance at ->d_fsdata here (or both).
    707	 */
    708	smp_mb();
    709	fsd = READ_ONCE(dentry->d_fsdata);
    710	if ((unsigned long)fsd & DEBUGFS_FSDATA_IS_REAL_FOPS_BIT)
    711		return;
    712	if (!refcount_dec_and_test(&fsd->active_users))
    713		wait_for_completion(&fsd->active_users_drained);
    714}
    715
    716static void remove_one(struct dentry *victim)
    717{
    718        if (d_is_reg(victim))
    719		__debugfs_file_removed(victim);
    720	simple_release_fs(&debugfs_mount, &debugfs_mount_count);
    721}
    722
    723/**
    724 * debugfs_remove - recursively removes a directory
    725 * @dentry: a pointer to a the dentry of the directory to be removed.  If this
    726 *          parameter is NULL or an error value, nothing will be done.
    727 *
    728 * This function recursively removes a directory tree in debugfs that
    729 * was previously created with a call to another debugfs function
    730 * (like debugfs_create_file() or variants thereof.)
    731 *
    732 * This function is required to be called in order for the file to be
    733 * removed, no automatic cleanup of files will happen when a module is
    734 * removed, you are responsible here.
    735 */
    736void debugfs_remove(struct dentry *dentry)
    737{
    738	if (IS_ERR_OR_NULL(dentry))
    739		return;
    740
    741	simple_pin_fs(&debug_fs_type, &debugfs_mount, &debugfs_mount_count);
    742	simple_recursive_removal(dentry, remove_one);
    743	simple_release_fs(&debugfs_mount, &debugfs_mount_count);
    744}
    745EXPORT_SYMBOL_GPL(debugfs_remove);
    746
    747/**
    748 * debugfs_rename - rename a file/directory in the debugfs filesystem
    749 * @old_dir: a pointer to the parent dentry for the renamed object. This
    750 *          should be a directory dentry.
    751 * @old_dentry: dentry of an object to be renamed.
    752 * @new_dir: a pointer to the parent dentry where the object should be
    753 *          moved. This should be a directory dentry.
    754 * @new_name: a pointer to a string containing the target name.
    755 *
    756 * This function renames a file/directory in debugfs.  The target must not
    757 * exist for rename to succeed.
    758 *
    759 * This function will return a pointer to old_dentry (which is updated to
    760 * reflect renaming) if it succeeds. If an error occurs, %NULL will be
    761 * returned.
    762 *
    763 * If debugfs is not enabled in the kernel, the value -%ENODEV will be
    764 * returned.
    765 */
    766struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
    767		struct dentry *new_dir, const char *new_name)
    768{
    769	int error;
    770	struct dentry *dentry = NULL, *trap;
    771	struct name_snapshot old_name;
    772
    773	if (IS_ERR(old_dir))
    774		return old_dir;
    775	if (IS_ERR(new_dir))
    776		return new_dir;
    777	if (IS_ERR_OR_NULL(old_dentry))
    778		return old_dentry;
    779
    780	trap = lock_rename(new_dir, old_dir);
    781	/* Source or destination directories don't exist? */
    782	if (d_really_is_negative(old_dir) || d_really_is_negative(new_dir))
    783		goto exit;
    784	/* Source does not exist, cyclic rename, or mountpoint? */
    785	if (d_really_is_negative(old_dentry) || old_dentry == trap ||
    786	    d_mountpoint(old_dentry))
    787		goto exit;
    788	dentry = lookup_one_len(new_name, new_dir, strlen(new_name));
    789	/* Lookup failed, cyclic rename or target exists? */
    790	if (IS_ERR(dentry) || dentry == trap || d_really_is_positive(dentry))
    791		goto exit;
    792
    793	take_dentry_name_snapshot(&old_name, old_dentry);
    794
    795	error = simple_rename(&init_user_ns, d_inode(old_dir), old_dentry,
    796			      d_inode(new_dir), dentry, 0);
    797	if (error) {
    798		release_dentry_name_snapshot(&old_name);
    799		goto exit;
    800	}
    801	d_move(old_dentry, dentry);
    802	fsnotify_move(d_inode(old_dir), d_inode(new_dir), &old_name.name,
    803		d_is_dir(old_dentry),
    804		NULL, old_dentry);
    805	release_dentry_name_snapshot(&old_name);
    806	unlock_rename(new_dir, old_dir);
    807	dput(dentry);
    808	return old_dentry;
    809exit:
    810	if (dentry && !IS_ERR(dentry))
    811		dput(dentry);
    812	unlock_rename(new_dir, old_dir);
    813	if (IS_ERR(dentry))
    814		return dentry;
    815	return ERR_PTR(-EINVAL);
    816}
    817EXPORT_SYMBOL_GPL(debugfs_rename);
    818
    819/**
    820 * debugfs_initialized - Tells whether debugfs has been registered
    821 */
    822bool debugfs_initialized(void)
    823{
    824	return debugfs_registered;
    825}
    826EXPORT_SYMBOL_GPL(debugfs_initialized);
    827
    828static int __init debugfs_kernel(char *str)
    829{
    830	if (str) {
    831		if (!strcmp(str, "on"))
    832			debugfs_allow = DEBUGFS_ALLOW_API | DEBUGFS_ALLOW_MOUNT;
    833		else if (!strcmp(str, "no-mount"))
    834			debugfs_allow = DEBUGFS_ALLOW_API;
    835		else if (!strcmp(str, "off"))
    836			debugfs_allow = 0;
    837	}
    838
    839	return 0;
    840}
    841early_param("debugfs", debugfs_kernel);
    842static int __init debugfs_init(void)
    843{
    844	int retval;
    845
    846	if (!(debugfs_allow & DEBUGFS_ALLOW_MOUNT))
    847		return -EPERM;
    848
    849	retval = sysfs_create_mount_point(kernel_kobj, "debug");
    850	if (retval)
    851		return retval;
    852
    853	retval = register_filesystem(&debug_fs_type);
    854	if (retval)
    855		sysfs_remove_mount_point(kernel_kobj, "debug");
    856	else
    857		debugfs_registered = true;
    858
    859	return retval;
    860}
    861core_initcall(debugfs_init);