aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/fork.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c15
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)))