1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _LINUX_KERNEL_READ_FILE_H 3 #define _LINUX_KERNEL_READ_FILE_H 4 5 #include <linux/file.h> 6 #include <linux/types.h> 7 8 /* This is a list of *what* is being read, not *how* nor *where*. */ 9 #define __kernel_read_file_id(id) \ 10 id(UNKNOWN, unknown) \ 11 id(FIRMWARE, firmware) \ 12 id(MODULE, kernel-module) \ 13 id(KEXEC_IMAGE, kexec-image) \ 14 id(KEXEC_INITRAMFS, kexec-initramfs) \ 15 id(POLICY, security-policy) \ 16 id(X509_CERTIFICATE, x509-certificate) \ 17 id(MODULE_COMPRESSED, kernel-module-compressed) \ 18 id(MAX_ID, ) 19 20 #define __fid_enumify(ENUM, dummy) READING_ ## ENUM, 21 #define __fid_stringify(dummy, str) #str, 22 23 enum kernel_read_file_id { 24 __kernel_read_file_id(__fid_enumify) 25 }; 26 27 static const char * const kernel_read_file_str[] = { 28 __kernel_read_file_id(__fid_stringify) 29 }; 30 31 static inline const char *kernel_read_file_id_str(enum kernel_read_file_id id) 32 { 33 if ((unsigned int)id >= READING_MAX_ID) 34 return kernel_read_file_str[READING_UNKNOWN]; 35 36 return kernel_read_file_str[id]; 37 } 38 39 ssize_t kernel_read_file(struct file *file, loff_t offset, 40 void **buf, size_t buf_size, 41 size_t *file_size, 42 enum kernel_read_file_id id); 43 ssize_t kernel_read_file_from_path(const char *path, loff_t offset, 44 void **buf, size_t buf_size, 45 size_t *file_size, 46 enum kernel_read_file_id id); 47 ssize_t kernel_read_file_from_path_initns(const char *path, loff_t offset, 48 void **buf, size_t buf_size, 49 size_t *file_size, 50 enum kernel_read_file_id id); 51 ssize_t kernel_read_file_from_fd(int fd, loff_t offset, 52 void **buf, size_t buf_size, 53 size_t *file_size, 54 enum kernel_read_file_id id); 55 56 #endif /* _LINUX_KERNEL_READ_FILE_H */ 57