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