Line data Source code
1 : #ifndef __LINUX_UMH_H__ 2 : #define __LINUX_UMH_H__ 3 : 4 : #include <linux/gfp.h> 5 : #include <linux/stddef.h> 6 : #include <linux/errno.h> 7 : #include <linux/compiler.h> 8 : #include <linux/workqueue.h> 9 : #include <linux/sysctl.h> 10 : 11 : struct cred; 12 : struct file; 13 : 14 : #define UMH_NO_WAIT 0 /* don't wait at all */ 15 : #define UMH_WAIT_EXEC 1 /* wait for the exec, but not the process */ 16 : #define UMH_WAIT_PROC 2 /* wait for the process to complete */ 17 : #define UMH_KILLABLE 4 /* wait for EXEC/PROC killable */ 18 : 19 : struct subprocess_info { 20 : struct work_struct work; 21 : struct completion *complete; 22 : const char *path; 23 : char **argv; 24 : char **envp; 25 : int wait; 26 : int retval; 27 : int (*init)(struct subprocess_info *info, struct cred *new); 28 : void (*cleanup)(struct subprocess_info *info); 29 : void *data; 30 : } __randomize_layout; 31 : 32 : extern int 33 : call_usermodehelper(const char *path, char **argv, char **envp, int wait); 34 : 35 : extern struct subprocess_info * 36 : call_usermodehelper_setup(const char *path, char **argv, char **envp, 37 : gfp_t gfp_mask, 38 : int (*init)(struct subprocess_info *info, struct cred *new), 39 : void (*cleanup)(struct subprocess_info *), void *data); 40 : 41 : extern int 42 : call_usermodehelper_exec(struct subprocess_info *info, int wait); 43 : 44 : extern struct ctl_table usermodehelper_table[]; 45 : 46 : enum umh_disable_depth { 47 : UMH_ENABLED = 0, 48 : UMH_FREEZING, 49 : UMH_DISABLED, 50 : }; 51 : 52 : extern int __usermodehelper_disable(enum umh_disable_depth depth); 53 : extern void __usermodehelper_set_disable_depth(enum umh_disable_depth depth); 54 : 55 0 : static inline int usermodehelper_disable(void) 56 : { 57 0 : return __usermodehelper_disable(UMH_DISABLED); 58 : } 59 : 60 1 : static inline void usermodehelper_enable(void) 61 : { 62 1 : __usermodehelper_set_disable_depth(UMH_ENABLED); 63 : } 64 : 65 : extern int usermodehelper_read_trylock(void); 66 : extern long usermodehelper_read_lock_wait(long timeout); 67 : extern void usermodehelper_read_unlock(void); 68 : 69 : #endif /* __LINUX_UMH_H__ */