linux/fs/ecryptfs/main.c

// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * eCryptfs: Linux filesystem encryption layer
 *
 * Copyright (C) 1997-2003 Erez Zadok
 * Copyright (C) 2001-2003 Stony Brook University
 * Copyright (C) 2004-2007 International Business Machines Corp.
 *   Author(s): Michael A. Halcrow <[email protected]>
 *              Michael C. Thompson <[email protected]>
 *              Tyler Hicks <[email protected]>
 */

#include <linux/dcache.h>
#include <linux/file.h>
#include <linux/module.h>
#include <linux/namei.h>
#include <linux/skbuff.h>
#include <linux/mount.h>
#include <linux/pagemap.h>
#include <linux/key.h>
#include <linux/parser.h>
#include <linux/fs_stack.h>
#include <linux/slab.h>
#include <linux/magic.h>
#include "ecryptfs_kernel.h"

/*
 * Module parameter that defines the ecryptfs_verbosity level.
 */
int ecryptfs_verbosity =;

module_param(ecryptfs_verbosity, int, 0);
MODULE_PARM_DESC();

/*
 * Module parameter that defines the number of message buffer elements
 */
unsigned int ecryptfs_message_buf_len =;

module_param(ecryptfs_message_buf_len, uint, 0);
MODULE_PARM_DESC();

/*
 * Module parameter that defines the maximum guaranteed amount of time to wait
 * for a response from ecryptfsd.  The actual sleep time will be, more than
 * likely, a small amount greater than this specified value, but only less if
 * the message successfully arrives.
 */
signed long ecryptfs_message_wait_timeout =;

module_param(ecryptfs_message_wait_timeout, long, 0);
MODULE_PARM_DESC();

/*
 * Module parameter that is an estimate of the maximum number of users
 * that will be concurrently using eCryptfs. Set this to the right
 * value to balance performance and memory use.
 */
unsigned int ecryptfs_number_of_users =;

module_param(ecryptfs_number_of_users, uint, 0);
MODULE_PARM_DESC();

void __ecryptfs_printk(const char *fmt, ...)
{}

/*
 * ecryptfs_init_lower_file
 * @ecryptfs_dentry: Fully initialized eCryptfs dentry object, with
 *                   the lower dentry and the lower mount set
 *
 * eCryptfs only ever keeps a single open file for every lower
 * inode. All I/O operations to the lower inode occur through that
 * file. When the first eCryptfs dentry that interposes with the first
 * lower dentry for that inode is created, this function creates the
 * lower file struct and associates it with the eCryptfs
 * inode. When all eCryptfs files associated with the inode are released, the
 * file is closed.
 *
 * The lower file will be opened with read/write permissions, if
 * possible. Otherwise, it is opened read-only.
 *
 * This function does nothing if a lower file is already
 * associated with the eCryptfs inode.
 *
 * Returns zero on success; non-zero otherwise
 */
static int ecryptfs_init_lower_file(struct dentry *dentry,
				    struct file **lower_file)
{}

int ecryptfs_get_lower_file(struct dentry *dentry, struct inode *inode)
{}

void ecryptfs_put_lower_file(struct inode *inode)
{}

enum {};

static const match_table_t tokens =;

static int ecryptfs_init_global_auth_toks(
	struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
{}

static void ecryptfs_init_mount_crypt_stat(
	struct ecryptfs_mount_crypt_stat *mount_crypt_stat)
{}

/**
 * ecryptfs_parse_options
 * @sbi: The ecryptfs super block
 * @options: The options passed to the kernel
 * @check_ruid: set to 1 if device uid should be checked against the ruid
 *
 * Parse mount options:
 * debug=N 	   - ecryptfs_verbosity level for debug output
 * sig=XXX	   - description(signature) of the key to use
 *
 * Returns the dentry object of the lower-level (lower/interposed)
 * directory; We want to mount our stackable file system on top of
 * that lower directory.
 *
 * The signature of the key to use must be the description of a key
 * already in the keyring. Mounting will fail if the key can not be
 * found.
 *
 * Returns zero on success; non-zero on error
 */
static int ecryptfs_parse_options(struct ecryptfs_sb_info *sbi, char *options,
				  uid_t *check_ruid)
{}

struct kmem_cache *ecryptfs_sb_info_cache;
static struct file_system_type ecryptfs_fs_type;

/*
 * ecryptfs_mount
 * @fs_type: The filesystem type that the superblock should belong to
 * @flags: The flags associated with the mount
 * @dev_name: The path to mount over
 * @raw_data: The options passed into the kernel
 */
static struct dentry *ecryptfs_mount(struct file_system_type *fs_type, int flags,
			const char *dev_name, void *raw_data)
{}

/**
 * ecryptfs_kill_block_super
 * @sb: The ecryptfs super block
 *
 * Used to bring the superblock down and free the private data.
 */
static void ecryptfs_kill_block_super(struct super_block *sb)
{}

static struct file_system_type ecryptfs_fs_type =;
MODULE_ALIAS_FS();

/*
 * inode_info_init_once
 *
 * Initializes the ecryptfs_inode_info_cache when it is created
 */
static void
inode_info_init_once(void *vptr)
{}

static struct ecryptfs_cache_info {} ecryptfs_cache_infos[] =;

static void ecryptfs_free_kmem_caches(void)
{}

/**
 * ecryptfs_init_kmem_caches
 *
 * Returns zero on success; non-zero otherwise
 */
static int ecryptfs_init_kmem_caches(void)
{}

static struct kobject *ecryptfs_kobj;

static ssize_t version_show(struct kobject *kobj,
			    struct kobj_attribute *attr, char *buff)
{}

static struct kobj_attribute version_attr =;

static struct attribute *attributes[] =;

static const struct attribute_group attr_group =;

static int do_sysfs_registration(void)
{}

static void do_sysfs_unregistration(void)
{}

static int __init ecryptfs_init(void)
{}

static void __exit ecryptfs_exit(void)
{}

MODULE_AUTHOR();
MODULE_DESCRIPTION();

MODULE_LICENSE();

module_init()
module_exit()