mirror of
https://github.com/torvalds/linux.git
synced 2024-12-05 18:41:23 +00:00
a24c6f7bc9
Since debugfs include sensitive information it need to be treated carefully. But it also has many very useful debug functions for userspace. With this option we can have same configuration for system with need of debugfs and a way to turn it off. This gives a extra protection for exposure on systems where user-space services with system access are attacked. It is controlled by a configurable default value that can be override with a kernel command line parameter. (debugfs=) It can be on or off, but also internally on but not seen from user-space. This no-mount mode do not register a debugfs as filesystem, but client can register their parts in the internal structures. This data can be readed with a debugger or saved with a crashkernel. When it is off clients get EPERM error when accessing the functions for registering their components. Signed-off-by: Peter Enderborg <peter.enderborg@sony.com> Link: https://lore.kernel.org/r/20200716071511.26864-3-peter.enderborg@sony.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
47 lines
1.3 KiB
C
47 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* internal.h - declarations internal to debugfs
|
|
*
|
|
* Copyright (C) 2016 Nicolai Stange <nicstange@gmail.com>
|
|
*/
|
|
|
|
#ifndef _DEBUGFS_INTERNAL_H_
|
|
#define _DEBUGFS_INTERNAL_H_
|
|
|
|
struct file_operations;
|
|
|
|
/* declared over in file.c */
|
|
extern const struct file_operations debugfs_noop_file_operations;
|
|
extern const struct file_operations debugfs_open_proxy_file_operations;
|
|
extern const struct file_operations debugfs_full_proxy_file_operations;
|
|
|
|
struct debugfs_fsdata {
|
|
const struct file_operations *real_fops;
|
|
refcount_t active_users;
|
|
struct completion active_users_drained;
|
|
};
|
|
|
|
/*
|
|
* A dentry's ->d_fsdata either points to the real fops or to a
|
|
* dynamically allocated debugfs_fsdata instance.
|
|
* In order to distinguish between these two cases, a real fops
|
|
* pointer gets its lowest bit set.
|
|
*/
|
|
#define DEBUGFS_FSDATA_IS_REAL_FOPS_BIT BIT(0)
|
|
|
|
/* Access BITS */
|
|
#define DEBUGFS_ALLOW_API BIT(0)
|
|
#define DEBUGFS_ALLOW_MOUNT BIT(1)
|
|
|
|
#ifdef CONFIG_DEBUG_FS_ALLOW_ALL
|
|
#define DEFAULT_DEBUGFS_ALLOW_BITS (DEBUGFS_ALLOW_MOUNT | DEBUGFS_ALLOW_API)
|
|
#endif
|
|
#ifdef CONFIG_DEBUG_FS_DISALLOW_MOUNT
|
|
#define DEFAULT_DEBUGFS_ALLOW_BITS (DEBUGFS_ALLOW_API)
|
|
#endif
|
|
#ifdef CONFIG_DEBUG_FS_ALLOW_NONE
|
|
#define DEFAULT_DEBUGFS_ALLOW_BITS (0)
|
|
#endif
|
|
|
|
#endif /* _DEBUGFS_INTERNAL_H_ */
|