mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-24 07:31:41 +00:00
eCryptfs: Make all miscdev functions use daemon ptr in file private_data
Now that a pointer to a valid struct ecryptfs_daemon is stored in the private_data of an opened /dev/ecryptfs file, the remaining miscdev functions can utilize the pointer rather than looking up the ecryptfs_daemon at the beginning of each operation. The security model of /dev/ecryptfs is simplified a little bit with this patch. Upon opening /dev/ecryptfs, a per-user ecryptfs_daemon is registered. Another daemon cannot be registered for that user until the last file reference is released. During the lifetime of the ecryptfs_daemon, access checks are not performed on the /dev/ecryptfs operations because it is assumed that the application securely handles the opened file descriptor and does not unintentionally leak it to processes that are not trusted. Signed-off-by: Tyler Hicks <tyhicks@canonical.com> Cc: Sasha Levin <levinsasha928@gmail.com>
This commit is contained in:
parent
5669688665
commit
2ecaf55db6
3 changed files with 47 additions and 172 deletions
|
@ -392,10 +392,7 @@ struct ecryptfs_daemon {
|
|||
#define ECRYPTFS_DAEMON_MISCDEV_OPEN 0x00000008
|
||||
u32 flags;
|
||||
u32 num_queued_msg_ctx;
|
||||
struct pid *pid;
|
||||
uid_t euid;
|
||||
struct user_namespace *user_ns;
|
||||
struct task_struct *task;
|
||||
struct file *file;
|
||||
struct mutex mux;
|
||||
struct list_head msg_ctx_out_queue;
|
||||
wait_queue_head_t wait;
|
||||
|
@ -619,9 +616,8 @@ int
|
|||
ecryptfs_setxattr(struct dentry *dentry, const char *name, const void *value,
|
||||
size_t size, int flags);
|
||||
int ecryptfs_read_xattr_region(char *page_virt, struct inode *ecryptfs_inode);
|
||||
int ecryptfs_process_response(struct ecryptfs_message *msg, uid_t euid,
|
||||
struct user_namespace *user_ns, struct pid *pid,
|
||||
u32 seq);
|
||||
int ecryptfs_process_response(struct ecryptfs_daemon *daemon,
|
||||
struct ecryptfs_message *msg, u32 seq);
|
||||
int ecryptfs_send_message(char *data, int data_len,
|
||||
struct ecryptfs_msg_ctx **msg_ctx);
|
||||
int ecryptfs_wait_for_response(struct ecryptfs_msg_ctx *msg_ctx,
|
||||
|
@ -666,8 +662,7 @@ int ecryptfs_read_lower_page_segment(struct page *page_for_ecryptfs,
|
|||
struct inode *ecryptfs_inode);
|
||||
struct page *ecryptfs_get_locked_page(struct inode *inode, loff_t index);
|
||||
int ecryptfs_exorcise_daemon(struct ecryptfs_daemon *daemon);
|
||||
int ecryptfs_find_daemon_by_euid(struct ecryptfs_daemon **daemon, uid_t euid,
|
||||
struct user_namespace *user_ns);
|
||||
int ecryptfs_find_daemon_by_euid(struct ecryptfs_daemon **daemon);
|
||||
int ecryptfs_parse_packet_length(unsigned char *data, size_t *size,
|
||||
size_t *length_size);
|
||||
int ecryptfs_write_packet_length(char *dest, size_t size,
|
||||
|
@ -679,8 +674,7 @@ int ecryptfs_send_miscdev(char *data, size_t data_size,
|
|||
u16 msg_flags, struct ecryptfs_daemon *daemon);
|
||||
void ecryptfs_msg_ctx_alloc_to_free(struct ecryptfs_msg_ctx *msg_ctx);
|
||||
int
|
||||
ecryptfs_spawn_daemon(struct ecryptfs_daemon **daemon, uid_t euid,
|
||||
struct user_namespace *user_ns, struct pid *pid);
|
||||
ecryptfs_spawn_daemon(struct ecryptfs_daemon **daemon, struct file *file);
|
||||
int ecryptfs_init_kthread(void);
|
||||
void ecryptfs_destroy_kthread(void);
|
||||
int ecryptfs_privileged_open(struct file **lower_file,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue