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/fs_context.h> 18 #include <linux/fs_parser.h> 19 #include <linux/pagemap.h> 20 #include <linux/init.h> 21 #include <linux/kobject.h> 22 #include <linux/namei.h> 23 #include <linux/debugfs.h> 24 #include <linux/fsnotify.h> 25 #include <linux/string.h> 26 #include <linux/seq_file.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 35 static struct vfsmount *debugfs_mount; 36 static int debugfs_mount_count; 37 static bool debugfs_registered; 38 static 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 */ 45 static int debugfs_setattr(struct mnt_idmap *idmap, 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(&nop_mnt_idmap, dentry, ia); 56 } 57 58 static const struct inode_operations debugfs_file_inode_operations = { 59 .setattr = debugfs_setattr, 60 }; 61 static const struct inode_operations debugfs_dir_inode_operations = { 62 .lookup = simple_lookup, 63 .setattr = debugfs_setattr, 64 }; 65 static const struct inode_operations debugfs_symlink_inode_operations = { 66 .get_link = simple_get_link, 67 .setattr = debugfs_setattr, 68 }; 69 70 static 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 simple_inode_init_ts(inode); 76 } 77 return inode; 78 } 79 80 struct debugfs_fs_info { 81 kuid_t uid; 82 kgid_t gid; 83 umode_t mode; 84 /* Opt_* bitfield. */ 85 unsigned int opts; 86 }; 87 88 enum { 89 Opt_uid, 90 Opt_gid, 91 Opt_mode, 92 }; 93 94 static const struct fs_parameter_spec debugfs_param_specs[] = { 95 fsparam_gid ("gid", Opt_gid), 96 fsparam_u32oct ("mode", Opt_mode), 97 fsparam_uid ("uid", Opt_uid), 98 {} 99 }; 100 101 static int debugfs_parse_param(struct fs_context *fc, struct fs_parameter *param) 102 { 103 struct debugfs_fs_info *opts = fc->s_fs_info; 104 struct fs_parse_result result; 105 int opt; 106 107 opt = fs_parse(fc, debugfs_param_specs, param, &result); 108 if (opt < 0) { 109 /* 110 * We might like to report bad mount options here; but 111 * traditionally debugfs has ignored all mount options 112 */ 113 if (opt == -ENOPARAM) 114 return 0; 115 116 return opt; 117 } 118 119 switch (opt) { 120 case Opt_uid: 121 opts->uid = result.uid; 122 break; 123 case Opt_gid: 124 opts->gid = result.gid; 125 break; 126 case Opt_mode: 127 opts->mode = result.uint_32 & S_IALLUGO; 128 break; 129 /* 130 * We might like to report bad mount options here; 131 * but traditionally debugfs has ignored all mount options 132 */ 133 } 134 135 opts->opts |= BIT(opt); 136 137 return 0; 138 } 139 140 static void _debugfs_apply_options(struct super_block *sb, bool remount) 141 { 142 struct debugfs_fs_info *fsi = sb->s_fs_info; 143 struct inode *inode = d_inode(sb->s_root); 144 145 /* 146 * On remount, only reset mode/uid/gid if they were provided as mount 147 * options. 148 */ 149 150 if (!remount || fsi->opts & BIT(Opt_mode)) { 151 inode->i_mode &= ~S_IALLUGO; 152 inode->i_mode |= fsi->mode; 153 } 154 155 if (!remount || fsi->opts & BIT(Opt_uid)) 156 inode->i_uid = fsi->uid; 157 158 if (!remount || fsi->opts & BIT(Opt_gid)) 159 inode->i_gid = fsi->gid; 160 } 161 162 static void debugfs_apply_options(struct super_block *sb) 163 { 164 _debugfs_apply_options(sb, false); 165 } 166 167 static void debugfs_apply_options_remount(struct super_block *sb) 168 { 169 _debugfs_apply_options(sb, true); 170 } 171 172 static int debugfs_reconfigure(struct fs_context *fc) 173 { 174 struct super_block *sb = fc->root->d_sb; 175 struct debugfs_fs_info *sb_opts = sb->s_fs_info; 176 struct debugfs_fs_info *new_opts = fc->s_fs_info; 177 178 sync_filesystem(sb); 179 180 /* structure copy of new mount options to sb */ 181 *sb_opts = *new_opts; 182 debugfs_apply_options_remount(sb); 183 184 return 0; 185 } 186 187 static int debugfs_show_options(struct seq_file *m, struct dentry *root) 188 { 189 struct debugfs_fs_info *fsi = root->d_sb->s_fs_info; 190 191 if (!uid_eq(fsi->uid, GLOBAL_ROOT_UID)) 192 seq_printf(m, ",uid=%u", 193 from_kuid_munged(&init_user_ns, fsi->uid)); 194 if (!gid_eq(fsi->gid, GLOBAL_ROOT_GID)) 195 seq_printf(m, ",gid=%u", 196 from_kgid_munged(&init_user_ns, fsi->gid)); 197 if (fsi->mode != DEBUGFS_DEFAULT_MODE) 198 seq_printf(m, ",mode=%o", fsi->mode); 199 200 return 0; 201 } 202 203 static void debugfs_free_inode(struct inode *inode) 204 { 205 if (S_ISLNK(inode->i_mode)) 206 kfree(inode->i_link); 207 free_inode_nonrcu(inode); 208 } 209 210 static const struct super_operations debugfs_super_operations = { 211 .statfs = simple_statfs, 212 .show_options = debugfs_show_options, 213 .free_inode = debugfs_free_inode, 214 }; 215 216 static void debugfs_release_dentry(struct dentry *dentry) 217 { 218 struct debugfs_fsdata *fsd = dentry->d_fsdata; 219 220 if ((unsigned long)fsd & DEBUGFS_FSDATA_IS_REAL_FOPS_BIT) 221 return; 222 223 /* check it wasn't a dir (no fsdata) or automount (no real_fops) */ 224 if (fsd && fsd->real_fops) { 225 WARN_ON(!list_empty(&fsd->cancellations)); 226 mutex_destroy(&fsd->cancellations_mtx); 227 } 228 229 kfree(fsd); 230 } 231 232 static struct vfsmount *debugfs_automount(struct path *path) 233 { 234 struct debugfs_fsdata *fsd = path->dentry->d_fsdata; 235 236 return fsd->automount(path->dentry, d_inode(path->dentry)->i_private); 237 } 238 239 static const struct dentry_operations debugfs_dops = { 240 .d_delete = always_delete_dentry, 241 .d_release = debugfs_release_dentry, 242 .d_automount = debugfs_automount, 243 }; 244 245 static int debugfs_fill_super(struct super_block *sb, struct fs_context *fc) 246 { 247 static const struct tree_descr debug_files[] = {{""}}; 248 int err; 249 250 err = simple_fill_super(sb, DEBUGFS_MAGIC, debug_files); 251 if (err) 252 return err; 253 254 sb->s_op = &debugfs_super_operations; 255 sb->s_d_op = &debugfs_dops; 256 257 debugfs_apply_options(sb); 258 259 return 0; 260 } 261 262 static int debugfs_get_tree(struct fs_context *fc) 263 { 264 if (!(debugfs_allow & DEBUGFS_ALLOW_API)) 265 return -EPERM; 266 267 return get_tree_single(fc, debugfs_fill_super); 268 } 269 270 static void debugfs_free_fc(struct fs_context *fc) 271 { 272 kfree(fc->s_fs_info); 273 } 274 275 static const struct fs_context_operations debugfs_context_ops = { 276 .free = debugfs_free_fc, 277 .parse_param = debugfs_parse_param, 278 .get_tree = debugfs_get_tree, 279 .reconfigure = debugfs_reconfigure, 280 }; 281 282 static int debugfs_init_fs_context(struct fs_context *fc) 283 { 284 struct debugfs_fs_info *fsi; 285 286 fsi = kzalloc(sizeof(struct debugfs_fs_info), GFP_KERNEL); 287 if (!fsi) 288 return -ENOMEM; 289 290 fsi->mode = DEBUGFS_DEFAULT_MODE; 291 292 fc->s_fs_info = fsi; 293 fc->ops = &debugfs_context_ops; 294 return 0; 295 } 296 297 static struct file_system_type debug_fs_type = { 298 .owner = THIS_MODULE, 299 .name = "debugfs", 300 .init_fs_context = debugfs_init_fs_context, 301 .parameters = debugfs_param_specs, 302 .kill_sb = kill_litter_super, 303 }; 304 MODULE_ALIAS_FS("debugfs"); 305 306 /** 307 * debugfs_lookup() - look up an existing debugfs file 308 * @name: a pointer to a string containing the name of the file to look up. 309 * @parent: a pointer to the parent dentry of the file. 310 * 311 * This function will return a pointer to a dentry if it succeeds. If the file 312 * doesn't exist or an error occurs, %NULL will be returned. The returned 313 * dentry must be passed to dput() when it is no longer needed. 314 * 315 * If debugfs is not enabled in the kernel, the value -%ENODEV will be 316 * returned. 317 */ 318 struct dentry *debugfs_lookup(const char *name, struct dentry *parent) 319 { 320 struct dentry *dentry; 321 322 if (!debugfs_initialized() || IS_ERR_OR_NULL(name) || IS_ERR(parent)) 323 return NULL; 324 325 if (!parent) 326 parent = debugfs_mount->mnt_root; 327 328 dentry = lookup_positive_unlocked(name, parent, strlen(name)); 329 if (IS_ERR(dentry)) 330 return NULL; 331 return dentry; 332 } 333 EXPORT_SYMBOL_GPL(debugfs_lookup); 334 335 static struct dentry *start_creating(const char *name, struct dentry *parent) 336 { 337 struct dentry *dentry; 338 int error; 339 340 if (!(debugfs_allow & DEBUGFS_ALLOW_API)) 341 return ERR_PTR(-EPERM); 342 343 if (!debugfs_initialized()) 344 return ERR_PTR(-ENOENT); 345 346 pr_debug("creating file '%s'\n", name); 347 348 if (IS_ERR(parent)) 349 return parent; 350 351 error = simple_pin_fs(&debug_fs_type, &debugfs_mount, 352 &debugfs_mount_count); 353 if (error) { 354 pr_err("Unable to pin filesystem for file '%s'\n", name); 355 return ERR_PTR(error); 356 } 357 358 /* If the parent is not specified, we create it in the root. 359 * We need the root dentry to do this, which is in the super 360 * block. A pointer to that is in the struct vfsmount that we 361 * have around. 362 */ 363 if (!parent) 364 parent = debugfs_mount->mnt_root; 365 366 inode_lock(d_inode(parent)); 367 if (unlikely(IS_DEADDIR(d_inode(parent)))) 368 dentry = ERR_PTR(-ENOENT); 369 else 370 dentry = lookup_one_len(name, parent, strlen(name)); 371 if (!IS_ERR(dentry) && d_really_is_positive(dentry)) { 372 if (d_is_dir(dentry)) 373 pr_err("Directory '%s' with parent '%s' already present!\n", 374 name, parent->d_name.name); 375 else 376 pr_err("File '%s' in directory '%s' already present!\n", 377 name, parent->d_name.name); 378 dput(dentry); 379 dentry = ERR_PTR(-EEXIST); 380 } 381 382 if (IS_ERR(dentry)) { 383 inode_unlock(d_inode(parent)); 384 simple_release_fs(&debugfs_mount, &debugfs_mount_count); 385 } 386 387 return dentry; 388 } 389 390 static struct dentry *failed_creating(struct dentry *dentry) 391 { 392 inode_unlock(d_inode(dentry->d_parent)); 393 dput(dentry); 394 simple_release_fs(&debugfs_mount, &debugfs_mount_count); 395 return ERR_PTR(-ENOMEM); 396 } 397 398 static struct dentry *end_creating(struct dentry *dentry) 399 { 400 inode_unlock(d_inode(dentry->d_parent)); 401 return dentry; 402 } 403 404 static struct dentry *__debugfs_create_file(const char *name, umode_t mode, 405 struct dentry *parent, void *data, 406 const struct file_operations *proxy_fops, 407 const struct file_operations *real_fops) 408 { 409 struct dentry *dentry; 410 struct inode *inode; 411 412 if (!(mode & S_IFMT)) 413 mode |= S_IFREG; 414 BUG_ON(!S_ISREG(mode)); 415 dentry = start_creating(name, parent); 416 417 if (IS_ERR(dentry)) 418 return dentry; 419 420 if (!(debugfs_allow & DEBUGFS_ALLOW_API)) { 421 failed_creating(dentry); 422 return ERR_PTR(-EPERM); 423 } 424 425 inode = debugfs_get_inode(dentry->d_sb); 426 if (unlikely(!inode)) { 427 pr_err("out of free dentries, can not create file '%s'\n", 428 name); 429 return failed_creating(dentry); 430 } 431 432 inode->i_mode = mode; 433 inode->i_private = data; 434 435 inode->i_op = &debugfs_file_inode_operations; 436 inode->i_fop = proxy_fops; 437 dentry->d_fsdata = (void *)((unsigned long)real_fops | 438 DEBUGFS_FSDATA_IS_REAL_FOPS_BIT); 439 440 d_instantiate(dentry, inode); 441 fsnotify_create(d_inode(dentry->d_parent), dentry); 442 return end_creating(dentry); 443 } 444 445 /** 446 * debugfs_create_file - create a file in the debugfs filesystem 447 * @name: a pointer to a string containing the name of the file to create. 448 * @mode: the permission that the file should have. 449 * @parent: a pointer to the parent dentry for this file. This should be a 450 * directory dentry if set. If this parameter is NULL, then the 451 * file will be created in the root of the debugfs filesystem. 452 * @data: a pointer to something that the caller will want to get to later 453 * on. The inode.i_private pointer will point to this value on 454 * the open() call. 455 * @fops: a pointer to a struct file_operations that should be used for 456 * this file. 457 * 458 * This is the basic "create a file" function for debugfs. It allows for a 459 * wide range of flexibility in creating a file, or a directory (if you want 460 * to create a directory, the debugfs_create_dir() function is 461 * recommended to be used instead.) 462 * 463 * This function will return a pointer to a dentry if it succeeds. This 464 * pointer must be passed to the debugfs_remove() function when the file is 465 * to be removed (no automatic cleanup happens if your module is unloaded, 466 * you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be 467 * returned. 468 * 469 * If debugfs is not enabled in the kernel, the value -%ENODEV will be 470 * returned. 471 * 472 * NOTE: it's expected that most callers should _ignore_ the errors returned 473 * by this function. Other debugfs functions handle the fact that the "dentry" 474 * passed to them could be an error and they don't crash in that case. 475 * Drivers should generally work fine even if debugfs fails to init anyway. 476 */ 477 struct dentry *debugfs_create_file(const char *name, umode_t mode, 478 struct dentry *parent, void *data, 479 const struct file_operations *fops) 480 { 481 482 return __debugfs_create_file(name, mode, parent, data, 483 fops ? &debugfs_full_proxy_file_operations : 484 &debugfs_noop_file_operations, 485 fops); 486 } 487 EXPORT_SYMBOL_GPL(debugfs_create_file); 488 489 /** 490 * debugfs_create_file_unsafe - create a file in the debugfs filesystem 491 * @name: a pointer to a string containing the name of the file to create. 492 * @mode: the permission that the file should have. 493 * @parent: a pointer to the parent dentry for this file. This should be a 494 * directory dentry if set. If this parameter is NULL, then the 495 * file will be created in the root of the debugfs filesystem. 496 * @data: a pointer to something that the caller will want to get to later 497 * on. The inode.i_private pointer will point to this value on 498 * the open() call. 499 * @fops: a pointer to a struct file_operations that should be used for 500 * this file. 501 * 502 * debugfs_create_file_unsafe() is completely analogous to 503 * debugfs_create_file(), the only difference being that the fops 504 * handed it will not get protected against file removals by the 505 * debugfs core. 506 * 507 * It is your responsibility to protect your struct file_operation 508 * methods against file removals by means of debugfs_file_get() 509 * and debugfs_file_put(). ->open() is still protected by 510 * debugfs though. 511 * 512 * Any struct file_operations defined by means of 513 * DEFINE_DEBUGFS_ATTRIBUTE() is protected against file removals and 514 * thus, may be used here. 515 */ 516 struct dentry *debugfs_create_file_unsafe(const char *name, umode_t mode, 517 struct dentry *parent, void *data, 518 const struct file_operations *fops) 519 { 520 521 return __debugfs_create_file(name, mode, parent, data, 522 fops ? &debugfs_open_proxy_file_operations : 523 &debugfs_noop_file_operations, 524 fops); 525 } 526 EXPORT_SYMBOL_GPL(debugfs_create_file_unsafe); 527 528 /** 529 * debugfs_create_file_size - create a file in the debugfs filesystem 530 * @name: a pointer to a string containing the name of the file to create. 531 * @mode: the permission that the file should have. 532 * @parent: a pointer to the parent dentry for this file. This should be a 533 * directory dentry if set. If this parameter is NULL, then the 534 * file will be created in the root of the debugfs filesystem. 535 * @data: a pointer to something that the caller will want to get to later 536 * on. The inode.i_private pointer will point to this value on 537 * the open() call. 538 * @fops: a pointer to a struct file_operations that should be used for 539 * this file. 540 * @file_size: initial file size 541 * 542 * This is the basic "create a file" function for debugfs. It allows for a 543 * wide range of flexibility in creating a file, or a directory (if you want 544 * to create a directory, the debugfs_create_dir() function is 545 * recommended to be used instead.) 546 */ 547 void debugfs_create_file_size(const char *name, umode_t mode, 548 struct dentry *parent, void *data, 549 const struct file_operations *fops, 550 loff_t file_size) 551 { 552 struct dentry *de = debugfs_create_file(name, mode, parent, data, fops); 553 554 if (!IS_ERR(de)) 555 d_inode(de)->i_size = file_size; 556 } 557 EXPORT_SYMBOL_GPL(debugfs_create_file_size); 558 559 /** 560 * debugfs_create_dir - create a directory in the debugfs filesystem 561 * @name: a pointer to a string containing the name of the directory to 562 * create. 563 * @parent: a pointer to the parent dentry for this file. This should be a 564 * directory dentry if set. If this parameter is NULL, then the 565 * directory will be created in the root of the debugfs filesystem. 566 * 567 * This function creates a directory in debugfs with the given name. 568 * 569 * This function will return a pointer to a dentry if it succeeds. This 570 * pointer must be passed to the debugfs_remove() function when the file is 571 * to be removed (no automatic cleanup happens if your module is unloaded, 572 * you are responsible here.) If an error occurs, ERR_PTR(-ERROR) will be 573 * returned. 574 * 575 * If debugfs is not enabled in the kernel, the value -%ENODEV will be 576 * returned. 577 * 578 * NOTE: it's expected that most callers should _ignore_ the errors returned 579 * by this function. Other debugfs functions handle the fact that the "dentry" 580 * passed to them could be an error and they don't crash in that case. 581 * Drivers should generally work fine even if debugfs fails to init anyway. 582 */ 583 struct dentry *debugfs_create_dir(const char *name, struct dentry *parent) 584 { 585 struct dentry *dentry = start_creating(name, parent); 586 struct inode *inode; 587 588 if (IS_ERR(dentry)) 589 return dentry; 590 591 if (!(debugfs_allow & DEBUGFS_ALLOW_API)) { 592 failed_creating(dentry); 593 return ERR_PTR(-EPERM); 594 } 595 596 inode = debugfs_get_inode(dentry->d_sb); 597 if (unlikely(!inode)) { 598 pr_err("out of free dentries, can not create directory '%s'\n", 599 name); 600 return failed_creating(dentry); 601 } 602 603 inode->i_mode = S_IFDIR | S_IRWXU | S_IRUGO | S_IXUGO; 604 inode->i_op = &debugfs_dir_inode_operations; 605 inode->i_fop = &simple_dir_operations; 606 607 /* directory inodes start off with i_nlink == 2 (for "." entry) */ 608 inc_nlink(inode); 609 d_instantiate(dentry, inode); 610 inc_nlink(d_inode(dentry->d_parent)); 611 fsnotify_mkdir(d_inode(dentry->d_parent), dentry); 612 return end_creating(dentry); 613 } 614 EXPORT_SYMBOL_GPL(debugfs_create_dir); 615 616 /** 617 * debugfs_create_automount - create automount point in the debugfs filesystem 618 * @name: a pointer to a string containing the name of the file to create. 619 * @parent: a pointer to the parent dentry for this file. This should be a 620 * directory dentry if set. If this parameter is NULL, then the 621 * file will be created in the root of the debugfs filesystem. 622 * @f: function to be called when pathname resolution steps on that one. 623 * @data: opaque argument to pass to f(). 624 * 625 * @f should return what ->d_automount() would. 626 */ 627 struct dentry *debugfs_create_automount(const char *name, 628 struct dentry *parent, 629 debugfs_automount_t f, 630 void *data) 631 { 632 struct dentry *dentry = start_creating(name, parent); 633 struct debugfs_fsdata *fsd; 634 struct inode *inode; 635 636 if (IS_ERR(dentry)) 637 return dentry; 638 639 fsd = kzalloc(sizeof(*fsd), GFP_KERNEL); 640 if (!fsd) { 641 failed_creating(dentry); 642 return ERR_PTR(-ENOMEM); 643 } 644 645 fsd->automount = f; 646 647 if (!(debugfs_allow & DEBUGFS_ALLOW_API)) { 648 failed_creating(dentry); 649 kfree(fsd); 650 return ERR_PTR(-EPERM); 651 } 652 653 inode = debugfs_get_inode(dentry->d_sb); 654 if (unlikely(!inode)) { 655 pr_err("out of free dentries, can not create automount '%s'\n", 656 name); 657 kfree(fsd); 658 return failed_creating(dentry); 659 } 660 661 make_empty_dir_inode(inode); 662 inode->i_flags |= S_AUTOMOUNT; 663 inode->i_private = data; 664 dentry->d_fsdata = fsd; 665 /* directory inodes start off with i_nlink == 2 (for "." entry) */ 666 inc_nlink(inode); 667 d_instantiate(dentry, inode); 668 inc_nlink(d_inode(dentry->d_parent)); 669 fsnotify_mkdir(d_inode(dentry->d_parent), dentry); 670 return end_creating(dentry); 671 } 672 EXPORT_SYMBOL(debugfs_create_automount); 673 674 /** 675 * debugfs_create_symlink- create a symbolic link in the debugfs filesystem 676 * @name: a pointer to a string containing the name of the symbolic link to 677 * create. 678 * @parent: a pointer to the parent dentry for this symbolic link. This 679 * should be a directory dentry if set. If this parameter is NULL, 680 * then the symbolic link will be created in the root of the debugfs 681 * filesystem. 682 * @target: a pointer to a string containing the path to the target of the 683 * symbolic link. 684 * 685 * This function creates a symbolic link with the given name in debugfs that 686 * links to the given target path. 687 * 688 * This function will return a pointer to a dentry if it succeeds. This 689 * pointer must be passed to the debugfs_remove() function when the symbolic 690 * link is to be removed (no automatic cleanup happens if your module is 691 * unloaded, you are responsible here.) If an error occurs, ERR_PTR(-ERROR) 692 * will be returned. 693 * 694 * If debugfs is not enabled in the kernel, the value -%ENODEV will be 695 * returned. 696 */ 697 struct dentry *debugfs_create_symlink(const char *name, struct dentry *parent, 698 const char *target) 699 { 700 struct dentry *dentry; 701 struct inode *inode; 702 char *link = kstrdup(target, GFP_KERNEL); 703 if (!link) 704 return ERR_PTR(-ENOMEM); 705 706 dentry = start_creating(name, parent); 707 if (IS_ERR(dentry)) { 708 kfree(link); 709 return dentry; 710 } 711 712 inode = debugfs_get_inode(dentry->d_sb); 713 if (unlikely(!inode)) { 714 pr_err("out of free dentries, can not create symlink '%s'\n", 715 name); 716 kfree(link); 717 return failed_creating(dentry); 718 } 719 inode->i_mode = S_IFLNK | S_IRWXUGO; 720 inode->i_op = &debugfs_symlink_inode_operations; 721 inode->i_link = link; 722 d_instantiate(dentry, inode); 723 return end_creating(dentry); 724 } 725 EXPORT_SYMBOL_GPL(debugfs_create_symlink); 726 727 static void __debugfs_file_removed(struct dentry *dentry) 728 { 729 struct debugfs_fsdata *fsd; 730 731 /* 732 * Paired with the closing smp_mb() implied by a successful 733 * cmpxchg() in debugfs_file_get(): either 734 * debugfs_file_get() must see a dead dentry or we must see a 735 * debugfs_fsdata instance at ->d_fsdata here (or both). 736 */ 737 smp_mb(); 738 fsd = READ_ONCE(dentry->d_fsdata); 739 if ((unsigned long)fsd & DEBUGFS_FSDATA_IS_REAL_FOPS_BIT) 740 return; 741 742 /* if this was the last reference, we're done */ 743 if (refcount_dec_and_test(&fsd->active_users)) 744 return; 745 746 /* 747 * If there's still a reference, the code that obtained it can 748 * be in different states: 749 * - The common case of not using cancellations, or already 750 * after debugfs_leave_cancellation(), where we just need 751 * to wait for debugfs_file_put() which signals the completion; 752 * - inside a cancellation section, i.e. between 753 * debugfs_enter_cancellation() and debugfs_leave_cancellation(), 754 * in which case we need to trigger the ->cancel() function, 755 * and then wait for debugfs_file_put() just like in the 756 * previous case; 757 * - before debugfs_enter_cancellation() (but obviously after 758 * debugfs_file_get()), in which case we may not see the 759 * cancellation in the list on the first round of the loop, 760 * but debugfs_enter_cancellation() signals the completion 761 * after adding it, so this code gets woken up to call the 762 * ->cancel() function. 763 */ 764 while (refcount_read(&fsd->active_users)) { 765 struct debugfs_cancellation *c; 766 767 /* 768 * Lock the cancellations. Note that the cancellations 769 * structs are meant to be on the stack, so we need to 770 * ensure we either use them here or don't touch them, 771 * and debugfs_leave_cancellation() will wait for this 772 * to be finished processing before exiting one. It may 773 * of course win and remove the cancellation, but then 774 * chances are we never even got into this bit, we only 775 * do if the refcount isn't zero already. 776 */ 777 mutex_lock(&fsd->cancellations_mtx); 778 while ((c = list_first_entry_or_null(&fsd->cancellations, 779 typeof(*c), list))) { 780 list_del_init(&c->list); 781 c->cancel(dentry, c->cancel_data); 782 } 783 mutex_unlock(&fsd->cancellations_mtx); 784 785 wait_for_completion(&fsd->active_users_drained); 786 } 787 } 788 789 static void remove_one(struct dentry *victim) 790 { 791 if (d_is_reg(victim)) 792 __debugfs_file_removed(victim); 793 simple_release_fs(&debugfs_mount, &debugfs_mount_count); 794 } 795 796 /** 797 * debugfs_remove - recursively removes a directory 798 * @dentry: a pointer to a the dentry of the directory to be removed. If this 799 * parameter is NULL or an error value, nothing will be done. 800 * 801 * This function recursively removes a directory tree in debugfs that 802 * was previously created with a call to another debugfs function 803 * (like debugfs_create_file() or variants thereof.) 804 * 805 * This function is required to be called in order for the file to be 806 * removed, no automatic cleanup of files will happen when a module is 807 * removed, you are responsible here. 808 */ 809 void debugfs_remove(struct dentry *dentry) 810 { 811 if (IS_ERR_OR_NULL(dentry)) 812 return; 813 814 simple_pin_fs(&debug_fs_type, &debugfs_mount, &debugfs_mount_count); 815 simple_recursive_removal(dentry, remove_one); 816 simple_release_fs(&debugfs_mount, &debugfs_mount_count); 817 } 818 EXPORT_SYMBOL_GPL(debugfs_remove); 819 820 /** 821 * debugfs_lookup_and_remove - lookup a directory or file and recursively remove it 822 * @name: a pointer to a string containing the name of the item to look up. 823 * @parent: a pointer to the parent dentry of the item. 824 * 825 * This is the equlivant of doing something like 826 * debugfs_remove(debugfs_lookup(..)) but with the proper reference counting 827 * handled for the directory being looked up. 828 */ 829 void debugfs_lookup_and_remove(const char *name, struct dentry *parent) 830 { 831 struct dentry *dentry; 832 833 dentry = debugfs_lookup(name, parent); 834 if (!dentry) 835 return; 836 837 debugfs_remove(dentry); 838 dput(dentry); 839 } 840 EXPORT_SYMBOL_GPL(debugfs_lookup_and_remove); 841 842 /** 843 * debugfs_rename - rename a file/directory in the debugfs filesystem 844 * @old_dir: a pointer to the parent dentry for the renamed object. This 845 * should be a directory dentry. 846 * @old_dentry: dentry of an object to be renamed. 847 * @new_dir: a pointer to the parent dentry where the object should be 848 * moved. This should be a directory dentry. 849 * @new_name: a pointer to a string containing the target name. 850 * 851 * This function renames a file/directory in debugfs. The target must not 852 * exist for rename to succeed. 853 * 854 * This function will return a pointer to old_dentry (which is updated to 855 * reflect renaming) if it succeeds. If an error occurs, ERR_PTR(-ERROR) 856 * will be returned. 857 * 858 * If debugfs is not enabled in the kernel, the value -%ENODEV will be 859 * returned. 860 */ 861 struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry, 862 struct dentry *new_dir, const char *new_name) 863 { 864 int error; 865 struct dentry *dentry = NULL, *trap; 866 struct name_snapshot old_name; 867 868 if (IS_ERR(old_dir)) 869 return old_dir; 870 if (IS_ERR(new_dir)) 871 return new_dir; 872 if (IS_ERR_OR_NULL(old_dentry)) 873 return old_dentry; 874 875 trap = lock_rename(new_dir, old_dir); 876 /* Source or destination directories don't exist? */ 877 if (d_really_is_negative(old_dir) || d_really_is_negative(new_dir)) 878 goto exit; 879 /* Source does not exist, cyclic rename, or mountpoint? */ 880 if (d_really_is_negative(old_dentry) || old_dentry == trap || 881 d_mountpoint(old_dentry)) 882 goto exit; 883 dentry = lookup_one_len(new_name, new_dir, strlen(new_name)); 884 /* Lookup failed, cyclic rename or target exists? */ 885 if (IS_ERR(dentry) || dentry == trap || d_really_is_positive(dentry)) 886 goto exit; 887 888 take_dentry_name_snapshot(&old_name, old_dentry); 889 890 error = simple_rename(&nop_mnt_idmap, d_inode(old_dir), old_dentry, 891 d_inode(new_dir), dentry, 0); 892 if (error) { 893 release_dentry_name_snapshot(&old_name); 894 goto exit; 895 } 896 d_move(old_dentry, dentry); 897 fsnotify_move(d_inode(old_dir), d_inode(new_dir), &old_name.name, 898 d_is_dir(old_dentry), 899 NULL, old_dentry); 900 release_dentry_name_snapshot(&old_name); 901 unlock_rename(new_dir, old_dir); 902 dput(dentry); 903 return old_dentry; 904 exit: 905 if (dentry && !IS_ERR(dentry)) 906 dput(dentry); 907 unlock_rename(new_dir, old_dir); 908 if (IS_ERR(dentry)) 909 return dentry; 910 return ERR_PTR(-EINVAL); 911 } 912 EXPORT_SYMBOL_GPL(debugfs_rename); 913 914 /** 915 * debugfs_initialized - Tells whether debugfs has been registered 916 */ 917 bool debugfs_initialized(void) 918 { 919 return debugfs_registered; 920 } 921 EXPORT_SYMBOL_GPL(debugfs_initialized); 922 923 static int __init debugfs_kernel(char *str) 924 { 925 if (str) { 926 if (!strcmp(str, "on")) 927 debugfs_allow = DEBUGFS_ALLOW_API | DEBUGFS_ALLOW_MOUNT; 928 else if (!strcmp(str, "no-mount")) 929 debugfs_allow = DEBUGFS_ALLOW_API; 930 else if (!strcmp(str, "off")) 931 debugfs_allow = 0; 932 } 933 934 return 0; 935 } 936 early_param("debugfs", debugfs_kernel); 937 static int __init debugfs_init(void) 938 { 939 int retval; 940 941 if (!(debugfs_allow & DEBUGFS_ALLOW_MOUNT)) 942 return -EPERM; 943 944 retval = sysfs_create_mount_point(kernel_kobj, "debug"); 945 if (retval) 946 return retval; 947 948 retval = register_filesystem(&debug_fs_type); 949 if (retval) 950 sysfs_remove_mount_point(kernel_kobj, "debug"); 951 else 952 debugfs_registered = true; 953 954 return retval; 955 } 956 core_initcall(debugfs_init); 957