Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 253735
b: refs/heads/master
c: 8796699
h: refs/heads/master
i:
  253733: 4135c72
  253731: 60958c3
  253727: 3f3c0de
v: v3
  • Loading branch information
David Howells authored and Linus Torvalds committed Jun 17, 2011
1 parent 470b757 commit ca18557
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: eb96c925152fc289311e5d7e956b919e9b60ab53
refs/heads/master: 879669961b11e7f40b518784863a259f735a72bf
2 changes: 1 addition & 1 deletion trunk/fs/exec.c
Original file line number Diff line number Diff line change
Expand Up @@ -1996,7 +1996,7 @@ static void wait_for_dump_helpers(struct file *file)
* is a special value that we use to trap recursive
* core dumps
*/
static int umh_pipe_setup(struct subprocess_info *info)
static int umh_pipe_setup(struct subprocess_info *info, struct cred *new)
{
struct file *rp, *wp;
struct fdtable *fdt;
Expand Down
8 changes: 4 additions & 4 deletions trunk/include/linux/kmod.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ static inline int request_module_nowait(const char *name, ...) { return -ENOSYS;
#endif


struct key;
struct cred;
struct file;

enum umh_wait {
Expand All @@ -62,7 +62,7 @@ struct subprocess_info {
char **envp;
enum umh_wait wait;
int retval;
int (*init)(struct subprocess_info *info);
int (*init)(struct subprocess_info *info, struct cred *new);
void (*cleanup)(struct subprocess_info *info);
void *data;
};
Expand All @@ -73,7 +73,7 @@ struct subprocess_info *call_usermodehelper_setup(char *path, char **argv,

/* Set various pieces of state into the subprocess_info structure */
void call_usermodehelper_setfns(struct subprocess_info *info,
int (*init)(struct subprocess_info *info),
int (*init)(struct subprocess_info *info, struct cred *new),
void (*cleanup)(struct subprocess_info *info),
void *data);

Expand All @@ -87,7 +87,7 @@ void call_usermodehelper_freeinfo(struct subprocess_info *info);
static inline int
call_usermodehelper_fns(char *path, char **argv, char **envp,
enum umh_wait wait,
int (*init)(struct subprocess_info *info),
int (*init)(struct subprocess_info *info, struct cred *new),
void (*cleanup)(struct subprocess_info *), void *data)
{
struct subprocess_info *info;
Expand Down
16 changes: 9 additions & 7 deletions trunk/kernel/kmod.c
Original file line number Diff line number Diff line change
Expand Up @@ -156,12 +156,6 @@ static int ____call_usermodehelper(void *data)
*/
set_user_nice(current, 0);

if (sub_info->init) {
retval = sub_info->init(sub_info);
if (retval)
goto fail;
}

retval = -ENOMEM;
new = prepare_kernel_cred(current);
if (!new)
Expand All @@ -173,6 +167,14 @@ static int ____call_usermodehelper(void *data)
new->cap_inheritable);
spin_unlock(&umh_sysctl_lock);

if (sub_info->init) {
retval = sub_info->init(sub_info, new);
if (retval) {
abort_creds(new);
goto fail;
}
}

commit_creds(new);

retval = kernel_execve(sub_info->path,
Expand Down Expand Up @@ -388,7 +390,7 @@ EXPORT_SYMBOL(call_usermodehelper_setup);
* context in which call_usermodehelper_exec is called.
*/
void call_usermodehelper_setfns(struct subprocess_info *info,
int (*init)(struct subprocess_info *info),
int (*init)(struct subprocess_info *info, struct cred *new),
void (*cleanup)(struct subprocess_info *info),
void *data)
{
Expand Down
3 changes: 1 addition & 2 deletions trunk/security/keys/request_key.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,8 @@ EXPORT_SYMBOL(complete_request_key);
* This is called in context of freshly forked kthread before kernel_execve(),
* so we can simply install the desired session_keyring at this point.
*/
static int umh_keys_init(struct subprocess_info *info)
static int umh_keys_init(struct subprocess_info *info, struct cred *cred)
{
struct cred *cred = (struct cred*)current_cred();
struct key *keyring = info->data;

return install_session_keyring_to_cred(cred, keyring);
Expand Down

0 comments on commit ca18557

Please sign in to comment.