diff options
Diffstat (limited to 'kernel/fork.c')
-rw-r--r-- | kernel/fork.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index b373322ca497..c21bae8c93b9 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -181,6 +181,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) | |||
181 | /* One for us, one for whoever does the "release_task()" (usually parent) */ | 181 | /* One for us, one for whoever does the "release_task()" (usually parent) */ |
182 | atomic_set(&tsk->usage,2); | 182 | atomic_set(&tsk->usage,2); |
183 | atomic_set(&tsk->fs_excl, 0); | 183 | atomic_set(&tsk->fs_excl, 0); |
184 | tsk->btrace_seq = 0; | ||
184 | return tsk; | 185 | return tsk; |
185 | } | 186 | } |
186 | 187 | ||
@@ -607,12 +608,12 @@ static struct files_struct *alloc_files(void) | |||
607 | atomic_set(&newf->count, 1); | 608 | atomic_set(&newf->count, 1); |
608 | 609 | ||
609 | spin_lock_init(&newf->file_lock); | 610 | spin_lock_init(&newf->file_lock); |
611 | newf->next_fd = 0; | ||
610 | fdt = &newf->fdtab; | 612 | fdt = &newf->fdtab; |
611 | fdt->next_fd = 0; | ||
612 | fdt->max_fds = NR_OPEN_DEFAULT; | 613 | fdt->max_fds = NR_OPEN_DEFAULT; |
613 | fdt->max_fdset = __FD_SETSIZE; | 614 | fdt->max_fdset = EMBEDDED_FD_SET_SIZE; |
614 | fdt->close_on_exec = &newf->close_on_exec_init; | 615 | fdt->close_on_exec = (fd_set *)&newf->close_on_exec_init; |
615 | fdt->open_fds = &newf->open_fds_init; | 616 | fdt->open_fds = (fd_set *)&newf->open_fds_init; |
616 | fdt->fd = &newf->fd_array[0]; | 617 | fdt->fd = &newf->fd_array[0]; |
617 | INIT_RCU_HEAD(&fdt->rcu); | 618 | INIT_RCU_HEAD(&fdt->rcu); |
618 | fdt->free_files = NULL; | 619 | fdt->free_files = NULL; |
@@ -1534,6 +1535,12 @@ asmlinkage long sys_unshare(unsigned long unshare_flags) | |||
1534 | 1535 | ||
1535 | check_unshare_flags(&unshare_flags); | 1536 | check_unshare_flags(&unshare_flags); |
1536 | 1537 | ||
1538 | /* Return -EINVAL for all unsupported flags */ | ||
1539 | err = -EINVAL; | ||
1540 | if (unshare_flags & ~(CLONE_THREAD|CLONE_FS|CLONE_NEWNS|CLONE_SIGHAND| | ||
1541 | CLONE_VM|CLONE_FILES|CLONE_SYSVSEM)) | ||
1542 | goto bad_unshare_out; | ||
1543 | |||
1537 | if ((err = unshare_thread(unshare_flags))) | 1544 | if ((err = unshare_thread(unshare_flags))) |
1538 | goto bad_unshare_out; | 1545 | goto bad_unshare_out; |
1539 | if ((err = unshare_fs(unshare_flags, &new_fs))) | 1546 | if ((err = unshare_fs(unshare_flags, &new_fs))) |