diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-03-23 02:25:38 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-03-23 02:25:38 +0000 |
commit | 16b5d462f73eb29d1f67fa01cc1ea66afdc72569 (patch) | |
tree | 5407bd573f4840e473ea27cbe61e5c7a07131fcd /kernel | |
parent | ce8a076e11e7e5ee36007f9a3eee5bb3744cb8f6 (diff) |
Merge with Linux 2.3.99-pre2.
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/acct.c | 2 | ||||
-rw-r--r-- | kernel/ksyms.c | 7 | ||||
-rw-r--r-- | kernel/sys.c | 24 | ||||
-rw-r--r-- | kernel/sysctl.c | 3 |
4 files changed, 30 insertions, 6 deletions
diff --git a/kernel/acct.c b/kernel/acct.c index 63e66a558..f15b6971f 100644 --- a/kernel/acct.c +++ b/kernel/acct.c @@ -154,7 +154,7 @@ asmlinkage long sys_acct(const char *name) if (IS_ERR(tmp)) goto out; /* Difference from BSD - they don't do O_APPEND */ - file = filp_open(tmp, O_WRONLY|O_APPEND, 0); + file = filp_open(tmp, O_WRONLY|O_APPEND, 0, NULL); putname(tmp); if (IS_ERR(file)) { error = PTR_ERR(file); diff --git a/kernel/ksyms.c b/kernel/ksyms.c index 78b40185d..a6748e70c 100644 --- a/kernel/ksyms.c +++ b/kernel/ksyms.c @@ -141,7 +141,8 @@ EXPORT_SYMBOL(iget4); EXPORT_SYMBOL(iput); EXPORT_SYMBOL(__namei); EXPORT_SYMBOL(lookup_dentry); -EXPORT_SYMBOL(open_namei); +EXPORT_SYMBOL(lookup_one); +EXPORT_SYMBOL(__open_namei); EXPORT_SYMBOL(sys_close); EXPORT_SYMBOL(d_alloc_root); EXPORT_SYMBOL(d_delete); @@ -360,6 +361,7 @@ EXPORT_SYMBOL(free_kiovec); EXPORT_SYMBOL(expand_kiobuf); EXPORT_SYMBOL(map_user_kiobuf); +EXPORT_SYMBOL(unmap_kiobuf); EXPORT_SYMBOL(lock_kiovec); EXPORT_SYMBOL(unlock_kiovec); EXPORT_SYMBOL(brw_kiovec); @@ -506,3 +508,6 @@ EXPORT_SYMBOL(tasklet_kill); /* init task, for moving kthread roots - ought to export a function ?? */ EXPORT_SYMBOL(init_task_union); + +EXPORT_SYMBOL(tasklist_lock); +EXPORT_SYMBOL(pidhash); diff --git a/kernel/sys.c b/kernel/sys.c index 1748d8afd..6e30f0347 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -336,12 +336,23 @@ asmlinkage long sys_setgid(gid_t gid) * never happen. * * -astor + * + * cevans - New behaviour, Oct '99 + * A process may, via prctl(), elect to keep its capabilities when it + * calls setuid() and switches away from uid==0. Both permitted and + * effective sets will be retained. + * Without this change, it was impossible for a daemon to drop only some + * of its privilege. The call to setuid(!=0) would drop all privileges! + * Keeping uid 0 is not an option because uid 0 owns too many vital + * files.. + * Thanks to Olaf Kirch and Peter Benie for spotting this. */ extern inline void cap_emulate_setxuid(int old_ruid, int old_euid, int old_suid) { if ((old_ruid == 0 || old_euid == 0 || old_suid == 0) && - (current->uid != 0 && current->euid != 0 && current->suid != 0)) { + (current->uid != 0 && current->euid != 0 && current->suid != 0) && + !current->keep_capabilities) { cap_clear(current->cap_permitted); cap_clear(current->cap_effective); } @@ -1080,6 +1091,17 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3, #endif break; + case PR_GET_KEEPCAPS: + if (current->keep_capabilities) + error = 1; + break; + case PR_SET_KEEPCAPS: + if (arg2 != 0 && arg2 != 1) { + error = -EINVAL; + break; + } + current->keep_capabilities = arg2; + break; default: error = -EINVAL; break; diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 0001a1473..4e654fa3a 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -57,7 +57,6 @@ extern int sg_big_buff; #endif #ifdef CONFIG_SYSVIPC extern size_t shm_ctlmax; -extern char shm_path[]; extern int msg_ctlmax; extern int msg_ctlmnb; extern int msg_ctlmni; @@ -199,8 +198,6 @@ static ctl_table kern_table[] = { {KERN_RTSIGMAX, "rtsig-max", &max_queued_signals, sizeof(int), 0644, NULL, &proc_dointvec}, #ifdef CONFIG_SYSVIPC - {KERN_SHMPATH, "shmpath", &shm_path, 256, - 0644, NULL, &proc_dostring, &sysctl_string }, {KERN_SHMMAX, "shmmax", &shm_ctlmax, sizeof (size_t), 0644, NULL, &proc_doulongvec_minmax}, {KERN_MSGMAX, "msgmax", &msg_ctlmax, sizeof (int), |