aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLuis R. Rodriguez <mcgrof@kernel.org>2017-09-08 19:17:08 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-09-08 21:26:51 -0400
commitc1f3fa2a4fde2818623b42e3f749bd478be5dec7 (patch)
tree91c80bd9847185ef4db29b5f5f9ba0c33d475dc0 /include
parent00653d3aba6461ac9c882b8756b0666fd828a4a5 (diff)
kmod: split off umh headers into its own file
In the future usermode helper users do not need to carry in all the of kmod headers declarations. Since kmod.h still includes umh.h this change has no functional changes, each umh user can be cleaned up separately later and with time. Link: http://lkml.kernel.org/r/20170810180618.22457-4-mcgrof@kernel.org Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org> Cc: Kees Cook <keescook@chromium.org> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com> Cc: Jessica Yu <jeyu@redhat.com> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: Michal Marek <mmarek@suse.com> Cc: Petr Mladek <pmladek@suse.com> Cc: Miroslav Benes <mbenes@suse.cz> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Guenter Roeck <linux@roeck-us.net> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Matt Redfearn <matt.redfearn@imgtec.com> Cc: Dan Carpenter <dan.carpenter@oracle.com> Cc: Colin Ian King <colin.king@canonical.com> Cc: Daniel Mentz <danielmentz@google.com> Cc: David Binderman <dcb314@hotmail.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include')
-rw-r--r--include/linux/kmod.h60
-rw-r--r--include/linux/umh.h69
2 files changed, 70 insertions, 59 deletions
diff --git a/include/linux/kmod.h b/include/linux/kmod.h
index 655082c88fd9..40c89ad4bea6 100644
--- a/include/linux/kmod.h
+++ b/include/linux/kmod.h
@@ -19,6 +19,7 @@
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */ 20 */
21 21
22#include <linux/umh.h>
22#include <linux/gfp.h> 23#include <linux/gfp.h>
23#include <linux/stddef.h> 24#include <linux/stddef.h>
24#include <linux/errno.h> 25#include <linux/errno.h>
@@ -44,63 +45,4 @@ static inline int request_module_nowait(const char *name, ...) { return -ENOSYS;
44#define try_then_request_module(x, mod...) (x) 45#define try_then_request_module(x, mod...) (x)
45#endif 46#endif
46 47
47
48struct cred;
49struct file;
50
51#define UMH_NO_WAIT 0 /* don't wait at all */
52#define UMH_WAIT_EXEC 1 /* wait for the exec, but not the process */
53#define UMH_WAIT_PROC 2 /* wait for the process to complete */
54#define UMH_KILLABLE 4 /* wait for EXEC/PROC killable */
55
56struct subprocess_info {
57 struct work_struct work;
58 struct completion *complete;
59 const char *path;
60 char **argv;
61 char **envp;
62 int wait;
63 int retval;
64 int (*init)(struct subprocess_info *info, struct cred *new);
65 void (*cleanup)(struct subprocess_info *info);
66 void *data;
67} __randomize_layout;
68
69extern int
70call_usermodehelper(const char *path, char **argv, char **envp, int wait);
71
72extern struct subprocess_info *
73call_usermodehelper_setup(const char *path, char **argv, char **envp,
74 gfp_t gfp_mask,
75 int (*init)(struct subprocess_info *info, struct cred *new),
76 void (*cleanup)(struct subprocess_info *), void *data);
77
78extern int
79call_usermodehelper_exec(struct subprocess_info *info, int wait);
80
81extern struct ctl_table usermodehelper_table[];
82
83enum umh_disable_depth {
84 UMH_ENABLED = 0,
85 UMH_FREEZING,
86 UMH_DISABLED,
87};
88
89extern int __usermodehelper_disable(enum umh_disable_depth depth);
90extern void __usermodehelper_set_disable_depth(enum umh_disable_depth depth);
91
92static inline int usermodehelper_disable(void)
93{
94 return __usermodehelper_disable(UMH_DISABLED);
95}
96
97static inline void usermodehelper_enable(void)
98{
99 __usermodehelper_set_disable_depth(UMH_ENABLED);
100}
101
102extern int usermodehelper_read_trylock(void);
103extern long usermodehelper_read_lock_wait(long timeout);
104extern void usermodehelper_read_unlock(void);
105
106#endif /* __LINUX_KMOD_H__ */ 48#endif /* __LINUX_KMOD_H__ */
diff --git a/include/linux/umh.h b/include/linux/umh.h
new file mode 100644
index 000000000000..244aff638220
--- /dev/null
+++ b/include/linux/umh.h
@@ -0,0 +1,69 @@
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 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
32extern int
33call_usermodehelper(const char *path, char **argv, char **envp, int wait);
34
35extern struct subprocess_info *
36call_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
41extern int
42call_usermodehelper_exec(struct subprocess_info *info, int wait);
43
44extern struct ctl_table usermodehelper_table[];
45
46enum umh_disable_depth {
47 UMH_ENABLED = 0,
48 UMH_FREEZING,
49 UMH_DISABLED,
50};
51
52extern int __usermodehelper_disable(enum umh_disable_depth depth);
53extern void __usermodehelper_set_disable_depth(enum umh_disable_depth depth);
54
55static inline int usermodehelper_disable(void)
56{
57 return __usermodehelper_disable(UMH_DISABLED);
58}
59
60static inline void usermodehelper_enable(void)
61{
62 __usermodehelper_set_disable_depth(UMH_ENABLED);
63}
64
65extern int usermodehelper_read_trylock(void);
66extern long usermodehelper_read_lock_wait(long timeout);
67extern void usermodehelper_read_unlock(void);
68
69#endif /* __LINUX_UMH_H__ */