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

vfs.h (5936B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 *   Copyright (C) 2016 Namjae Jeon <linkinjeon@kernel.org>
      4 *   Copyright (C) 2018 Samsung Electronics Co., Ltd.
      5 */
      6
      7#ifndef __KSMBD_VFS_H__
      8#define __KSMBD_VFS_H__
      9
     10#include <linux/file.h>
     11#include <linux/fs.h>
     12#include <linux/namei.h>
     13#include <uapi/linux/xattr.h>
     14#include <linux/posix_acl.h>
     15
     16#include "smbacl.h"
     17#include "xattr.h"
     18
     19/*
     20 * Enumeration for stream type.
     21 */
     22enum {
     23	DATA_STREAM	= 1,	/* type $DATA */
     24	DIR_STREAM		/* type $INDEX_ALLOCATION */
     25};
     26
     27/* CreateOptions */
     28#define CREATE_TREE_CONNECTION			cpu_to_le32(0x00000080)
     29#define FILE_RESERVE_OPFILTER_LE		cpu_to_le32(0x00100000)
     30
     31#define CREATE_OPTION_READONLY			0x10000000
     32/* system. NB not sent over wire */
     33#define CREATE_OPTION_SPECIAL			0x20000000
     34
     35struct ksmbd_work;
     36struct ksmbd_file;
     37struct ksmbd_conn;
     38
     39struct ksmbd_dir_info {
     40	const char	*name;
     41	char		*wptr;
     42	char		*rptr;
     43	int		name_len;
     44	int		out_buf_len;
     45	int		num_entry;
     46	int		data_count;
     47	int		last_entry_offset;
     48	bool		hide_dot_file;
     49	int		flags;
     50	int		last_entry_off_align;
     51};
     52
     53struct ksmbd_readdir_data {
     54	struct dir_context	ctx;
     55	union {
     56		void		*private;
     57		char		*dirent;
     58	};
     59
     60	unsigned int		used;
     61	unsigned int		dirent_count;
     62	unsigned int		file_attr;
     63};
     64
     65/* ksmbd kstat wrapper to get valid create time when reading dir entry */
     66struct ksmbd_kstat {
     67	struct kstat		*kstat;
     68	unsigned long long	create_time;
     69	__le32			file_attributes;
     70};
     71
     72int ksmbd_vfs_lock_parent(struct user_namespace *user_ns, struct dentry *parent,
     73			  struct dentry *child);
     74int ksmbd_vfs_may_delete(struct user_namespace *user_ns, struct dentry *dentry);
     75int ksmbd_vfs_query_maximal_access(struct user_namespace *user_ns,
     76				   struct dentry *dentry, __le32 *daccess);
     77int ksmbd_vfs_create(struct ksmbd_work *work, const char *name, umode_t mode);
     78int ksmbd_vfs_mkdir(struct ksmbd_work *work, const char *name, umode_t mode);
     79int ksmbd_vfs_read(struct ksmbd_work *work, struct ksmbd_file *fp,
     80		   size_t count, loff_t *pos);
     81int ksmbd_vfs_write(struct ksmbd_work *work, struct ksmbd_file *fp,
     82		    char *buf, size_t count, loff_t *pos, bool sync,
     83		    ssize_t *written);
     84int ksmbd_vfs_fsync(struct ksmbd_work *work, u64 fid, u64 p_id);
     85int ksmbd_vfs_remove_file(struct ksmbd_work *work, char *name);
     86int ksmbd_vfs_link(struct ksmbd_work *work,
     87		   const char *oldname, const char *newname);
     88int ksmbd_vfs_getattr(struct path *path, struct kstat *stat);
     89int ksmbd_vfs_fp_rename(struct ksmbd_work *work, struct ksmbd_file *fp,
     90			char *newname);
     91int ksmbd_vfs_truncate(struct ksmbd_work *work,
     92		       struct ksmbd_file *fp, loff_t size);
     93struct srv_copychunk;
     94int ksmbd_vfs_copy_file_ranges(struct ksmbd_work *work,
     95			       struct ksmbd_file *src_fp,
     96			       struct ksmbd_file *dst_fp,
     97			       struct srv_copychunk *chunks,
     98			       unsigned int chunk_count,
     99			       unsigned int *chunk_count_written,
    100			       unsigned int *chunk_size_written,
    101			       loff_t  *total_size_written);
    102ssize_t ksmbd_vfs_listxattr(struct dentry *dentry, char **list);
    103ssize_t ksmbd_vfs_getxattr(struct user_namespace *user_ns,
    104			   struct dentry *dentry,
    105			   char *xattr_name,
    106			   char **xattr_buf);
    107ssize_t ksmbd_vfs_casexattr_len(struct user_namespace *user_ns,
    108				struct dentry *dentry, char *attr_name,
    109				int attr_name_len);
    110int ksmbd_vfs_setxattr(struct user_namespace *user_ns,
    111		       struct dentry *dentry, const char *attr_name,
    112		       const void *attr_value, size_t attr_size, int flags);
    113int ksmbd_vfs_xattr_stream_name(char *stream_name, char **xattr_stream_name,
    114				size_t *xattr_stream_name_size, int s_type);
    115int ksmbd_vfs_remove_xattr(struct user_namespace *user_ns,
    116			   struct dentry *dentry, char *attr_name);
    117int ksmbd_vfs_kern_path(struct ksmbd_work *work,
    118			char *name, unsigned int flags, struct path *path,
    119			bool caseless);
    120struct dentry *ksmbd_vfs_kern_path_create(struct ksmbd_work *work,
    121					  const char *name,
    122					  unsigned int flags,
    123					  struct path *path);
    124int ksmbd_vfs_empty_dir(struct ksmbd_file *fp);
    125void ksmbd_vfs_set_fadvise(struct file *filp, __le32 option);
    126int ksmbd_vfs_zero_data(struct ksmbd_work *work, struct ksmbd_file *fp,
    127			loff_t off, loff_t len);
    128struct file_allocated_range_buffer;
    129int ksmbd_vfs_fqar_lseek(struct ksmbd_file *fp, loff_t start, loff_t length,
    130			 struct file_allocated_range_buffer *ranges,
    131			 unsigned int in_count, unsigned int *out_count);
    132int ksmbd_vfs_unlink(struct user_namespace *user_ns,
    133		     struct dentry *dir, struct dentry *dentry);
    134void *ksmbd_vfs_init_kstat(char **p, struct ksmbd_kstat *ksmbd_kstat);
    135int ksmbd_vfs_fill_dentry_attrs(struct ksmbd_work *work,
    136				struct user_namespace *user_ns,
    137				struct dentry *dentry,
    138				struct ksmbd_kstat *ksmbd_kstat);
    139void ksmbd_vfs_posix_lock_wait(struct file_lock *flock);
    140int ksmbd_vfs_posix_lock_wait_timeout(struct file_lock *flock, long timeout);
    141void ksmbd_vfs_posix_lock_unblock(struct file_lock *flock);
    142int ksmbd_vfs_remove_acl_xattrs(struct user_namespace *user_ns,
    143				struct dentry *dentry);
    144int ksmbd_vfs_remove_sd_xattrs(struct user_namespace *user_ns,
    145			       struct dentry *dentry);
    146int ksmbd_vfs_set_sd_xattr(struct ksmbd_conn *conn,
    147			   struct user_namespace *user_ns,
    148			   struct dentry *dentry,
    149			   struct smb_ntsd *pntsd, int len);
    150int ksmbd_vfs_get_sd_xattr(struct ksmbd_conn *conn,
    151			   struct user_namespace *user_ns,
    152			   struct dentry *dentry,
    153			   struct smb_ntsd **pntsd);
    154int ksmbd_vfs_set_dos_attrib_xattr(struct user_namespace *user_ns,
    155				   struct dentry *dentry,
    156				   struct xattr_dos_attrib *da);
    157int ksmbd_vfs_get_dos_attrib_xattr(struct user_namespace *user_ns,
    158				   struct dentry *dentry,
    159				   struct xattr_dos_attrib *da);
    160int ksmbd_vfs_set_init_posix_acl(struct user_namespace *user_ns,
    161				 struct inode *inode);
    162int ksmbd_vfs_inherit_posix_acl(struct user_namespace *user_ns,
    163				struct inode *inode,
    164				struct inode *parent_inode);
    165#endif /* __KSMBD_VFS_H__ */