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

file.h (2837B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Wrapper functions for accessing the file_struct fd array.
      4 */
      5
      6#ifndef __LINUX_FILE_H
      7#define __LINUX_FILE_H
      8
      9#include <linux/compiler.h>
     10#include <linux/types.h>
     11#include <linux/posix_types.h>
     12#include <linux/errno.h>
     13
     14struct file;
     15
     16extern void fput(struct file *);
     17
     18struct file_operations;
     19struct task_struct;
     20struct vfsmount;
     21struct dentry;
     22struct inode;
     23struct path;
     24extern struct file *alloc_file_pseudo(struct inode *, struct vfsmount *,
     25	const char *, int flags, const struct file_operations *);
     26extern struct file *alloc_file_clone(struct file *, int flags,
     27	const struct file_operations *);
     28
     29static inline void fput_light(struct file *file, int fput_needed)
     30{
     31	if (fput_needed)
     32		fput(file);
     33}
     34
     35struct fd {
     36	struct file *file;
     37	unsigned int flags;
     38};
     39#define FDPUT_FPUT       1
     40#define FDPUT_POS_UNLOCK 2
     41
     42static inline void fdput(struct fd fd)
     43{
     44	if (fd.flags & FDPUT_FPUT)
     45		fput(fd.file);
     46}
     47
     48extern struct file *fget(unsigned int fd);
     49extern struct file *fget_raw(unsigned int fd);
     50extern struct file *fget_task(struct task_struct *task, unsigned int fd);
     51extern unsigned long __fdget(unsigned int fd);
     52extern unsigned long __fdget_raw(unsigned int fd);
     53extern unsigned long __fdget_pos(unsigned int fd);
     54extern void __f_unlock_pos(struct file *);
     55
     56static inline struct fd __to_fd(unsigned long v)
     57{
     58	return (struct fd){(struct file *)(v & ~3),v & 3};
     59}
     60
     61static inline struct fd fdget(unsigned int fd)
     62{
     63	return __to_fd(__fdget(fd));
     64}
     65
     66static inline struct fd fdget_raw(unsigned int fd)
     67{
     68	return __to_fd(__fdget_raw(fd));
     69}
     70
     71static inline struct fd fdget_pos(int fd)
     72{
     73	return __to_fd(__fdget_pos(fd));
     74}
     75
     76static inline void fdput_pos(struct fd f)
     77{
     78	if (f.flags & FDPUT_POS_UNLOCK)
     79		__f_unlock_pos(f.file);
     80	fdput(f);
     81}
     82
     83extern int f_dupfd(unsigned int from, struct file *file, unsigned flags);
     84extern int replace_fd(unsigned fd, struct file *file, unsigned flags);
     85extern void set_close_on_exec(unsigned int fd, int flag);
     86extern bool get_close_on_exec(unsigned int fd);
     87extern int __get_unused_fd_flags(unsigned flags, unsigned long nofile);
     88extern int get_unused_fd_flags(unsigned flags);
     89extern void put_unused_fd(unsigned int fd);
     90
     91extern void fd_install(unsigned int fd, struct file *file);
     92
     93extern int __receive_fd(struct file *file, int __user *ufd,
     94			unsigned int o_flags);
     95
     96extern int receive_fd(struct file *file, unsigned int o_flags);
     97
     98static inline int receive_fd_user(struct file *file, int __user *ufd,
     99				  unsigned int o_flags)
    100{
    101	if (ufd == NULL)
    102		return -EFAULT;
    103	return __receive_fd(file, ufd, o_flags);
    104}
    105int receive_fd_replace(int new_fd, struct file *file, unsigned int o_flags);
    106
    107extern void flush_delayed_fput(void);
    108extern void __fput_sync(struct file *);
    109
    110extern unsigned int sysctl_nr_open_min, sysctl_nr_open_max;
    111
    112#endif /* __LINUX_FILE_H */