|
@@ -19,6 +19,7 @@
|
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
*/
|
|
|
|
|
|
+#include <linux/gfp.h>
|
|
|
#include <linux/stddef.h>
|
|
|
#include <linux/errno.h>
|
|
|
#include <linux/compiler.h>
|
|
@@ -41,8 +42,8 @@ struct file;
|
|
|
struct subprocess_info;
|
|
|
|
|
|
/* Allocate a subprocess_info structure */
|
|
|
-struct subprocess_info *call_usermodehelper_setup(char *path,
|
|
|
- char **argv, char **envp);
|
|
|
+struct subprocess_info *call_usermodehelper_setup(char *path, char **argv,
|
|
|
+ char **envp, gfp_t gfp_mask);
|
|
|
|
|
|
/* Set various pieces of state into the subprocess_info structure */
|
|
|
void call_usermodehelper_setkeys(struct subprocess_info *info,
|
|
@@ -69,8 +70,9 @@ static inline int
|
|
|
call_usermodehelper(char *path, char **argv, char **envp, enum umh_wait wait)
|
|
|
{
|
|
|
struct subprocess_info *info;
|
|
|
+ gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL;
|
|
|
|
|
|
- info = call_usermodehelper_setup(path, argv, envp);
|
|
|
+ info = call_usermodehelper_setup(path, argv, envp, gfp_mask);
|
|
|
if (info == NULL)
|
|
|
return -ENOMEM;
|
|
|
return call_usermodehelper_exec(info, wait);
|
|
@@ -81,8 +83,9 @@ call_usermodehelper_keys(char *path, char **argv, char **envp,
|
|
|
struct key *session_keyring, enum umh_wait wait)
|
|
|
{
|
|
|
struct subprocess_info *info;
|
|
|
+ gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL;
|
|
|
|
|
|
- info = call_usermodehelper_setup(path, argv, envp);
|
|
|
+ info = call_usermodehelper_setup(path, argv, envp, gfp_mask);
|
|
|
if (info == NULL)
|
|
|
return -ENOMEM;
|
|
|
|