linux/include/linux/umh.h
<<
>>
Prefs
   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
  11struct cred;
  12struct 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
  19struct subprocess_info {
  20        struct work_struct work;
  21        struct completion *complete;
  22        const char *path;
  23        char **argv;
  24        char **envp;
  25        struct file *file;
  26        int wait;
  27        int retval;
  28        pid_t pid;
  29        int (*init)(struct subprocess_info *info, struct cred *new);
  30        void (*cleanup)(struct subprocess_info *info);
  31        void *data;
  32} __randomize_layout;
  33
  34extern int
  35call_usermodehelper(const char *path, char **argv, char **envp, int wait);
  36
  37extern struct subprocess_info *
  38call_usermodehelper_setup(const char *path, char **argv, char **envp,
  39                          gfp_t gfp_mask,
  40                          int (*init)(struct subprocess_info *info, struct cred *new),
  41                          void (*cleanup)(struct subprocess_info *), void *data);
  42
  43struct subprocess_info *call_usermodehelper_setup_file(struct file *file,
  44                          int (*init)(struct subprocess_info *info, struct cred *new),
  45                          void (*cleanup)(struct subprocess_info *), void *data);
  46struct umh_info {
  47        const char *cmdline;
  48        struct file *pipe_to_umh;
  49        struct file *pipe_from_umh;
  50        struct list_head list;
  51        void (*cleanup)(struct umh_info *info);
  52        pid_t pid;
  53};
  54int fork_usermode_blob(void *data, size_t len, struct umh_info *info);
  55
  56extern int
  57call_usermodehelper_exec(struct subprocess_info *info, int wait);
  58
  59extern struct ctl_table usermodehelper_table[];
  60
  61enum umh_disable_depth {
  62        UMH_ENABLED = 0,
  63        UMH_FREEZING,
  64        UMH_DISABLED,
  65};
  66
  67extern int __usermodehelper_disable(enum umh_disable_depth depth);
  68extern void __usermodehelper_set_disable_depth(enum umh_disable_depth depth);
  69
  70static inline int usermodehelper_disable(void)
  71{
  72        return __usermodehelper_disable(UMH_DISABLED);
  73}
  74
  75static inline void usermodehelper_enable(void)
  76{
  77        __usermodehelper_set_disable_depth(UMH_ENABLED);
  78}
  79
  80extern int usermodehelper_read_trylock(void);
  81extern long usermodehelper_read_lock_wait(long timeout);
  82extern void usermodehelper_read_unlock(void);
  83
  84#endif /* __LINUX_UMH_H__ */
  85