diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-04-20 18:36:05 -0400 | 
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-04-20 18:36:05 -0400 | 
| commit | 857c68f733eea07f11a061caea43a38fed61adb7 (patch) | |
| tree | 4567a9e91f717b22143ac1ccb0fb5323ac15afd3 /kernel | |
| parent | 4741c336d27dec3ea68a35659abb8dc82b142388 (diff) | |
| parent | 402a26f0c040077ed6f941eefac5a6971f0d5f40 (diff) | |
Merge branch 'master'
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/exit.c | 2 | ||||
| -rw-r--r-- | kernel/fork.c | 3 | ||||
| -rw-r--r-- | kernel/kprobes.c | 3 | ||||
| -rw-r--r-- | kernel/power/snapshot.c | 9 | ||||
| -rw-r--r-- | kernel/uid16.c | 59 | 
5 files changed, 57 insertions, 19 deletions
| diff --git a/kernel/exit.c b/kernel/exit.c index 1a9787ac6173..f86434d7b3d1 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
| @@ -56,7 +56,7 @@ static void __unhash_process(struct task_struct *p) | |||
| 56 | detach_pid(p, PIDTYPE_PGID); | 56 | detach_pid(p, PIDTYPE_PGID); | 
| 57 | detach_pid(p, PIDTYPE_SID); | 57 | detach_pid(p, PIDTYPE_SID); | 
| 58 | 58 | ||
| 59 | list_del_init(&p->tasks); | 59 | list_del_rcu(&p->tasks); | 
| 60 | __get_cpu_var(process_counts)--; | 60 | __get_cpu_var(process_counts)--; | 
| 61 | } | 61 | } | 
| 62 | list_del_rcu(&p->thread_group); | 62 | list_del_rcu(&p->thread_group); | 
| diff --git a/kernel/fork.c b/kernel/fork.c index 54b15f8cda53..d2fa57d480d4 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -180,6 +180,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) | |||
| 180 | atomic_set(&tsk->usage,2); | 180 | atomic_set(&tsk->usage,2); | 
| 181 | atomic_set(&tsk->fs_excl, 0); | 181 | atomic_set(&tsk->fs_excl, 0); | 
| 182 | tsk->btrace_seq = 0; | 182 | tsk->btrace_seq = 0; | 
| 183 | tsk->splice_pipe = NULL; | ||
| 183 | return tsk; | 184 | return tsk; | 
| 184 | } | 185 | } | 
| 185 | 186 | ||
| @@ -1204,7 +1205,7 @@ static task_t *copy_process(unsigned long clone_flags, | |||
| 1204 | attach_pid(p, PIDTYPE_PGID, process_group(p)); | 1205 | attach_pid(p, PIDTYPE_PGID, process_group(p)); | 
| 1205 | attach_pid(p, PIDTYPE_SID, p->signal->session); | 1206 | attach_pid(p, PIDTYPE_SID, p->signal->session); | 
| 1206 | 1207 | ||
| 1207 | list_add_tail(&p->tasks, &init_task.tasks); | 1208 | list_add_tail_rcu(&p->tasks, &init_task.tasks); | 
| 1208 | __get_cpu_var(process_counts)++; | 1209 | __get_cpu_var(process_counts)++; | 
| 1209 | } | 1210 | } | 
| 1210 | attach_pid(p, PIDTYPE_PID, p->pid); | 1211 | attach_pid(p, PIDTYPE_PID, p->pid); | 
| diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 1156eb0977d0..1fbf466a29aa 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c | |||
| @@ -585,6 +585,9 @@ int __kprobes register_kretprobe(struct kretprobe *rp) | |||
| 585 | int i; | 585 | int i; | 
| 586 | 586 | ||
| 587 | rp->kp.pre_handler = pre_handler_kretprobe; | 587 | rp->kp.pre_handler = pre_handler_kretprobe; | 
| 588 | rp->kp.post_handler = NULL; | ||
| 589 | rp->kp.fault_handler = NULL; | ||
| 590 | rp->kp.break_handler = NULL; | ||
| 588 | 591 | ||
| 589 | /* Pre-allocate memory for max kretprobe instances */ | 592 | /* Pre-allocate memory for max kretprobe instances */ | 
| 590 | if (rp->maxactive <= 0) { | 593 | if (rp->maxactive <= 0) { | 
| diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c index c5863d02c89e..3eeedbb13b78 100644 --- a/kernel/power/snapshot.c +++ b/kernel/power/snapshot.c | |||
| @@ -240,14 +240,15 @@ static void copy_data_pages(struct pbe *pblist) | |||
| 240 | * free_pagedir - free pages allocated with alloc_pagedir() | 240 | * free_pagedir - free pages allocated with alloc_pagedir() | 
| 241 | */ | 241 | */ | 
| 242 | 242 | ||
| 243 | static void free_pagedir(struct pbe *pblist) | 243 | static void free_pagedir(struct pbe *pblist, int clear_nosave_free) | 
| 244 | { | 244 | { | 
| 245 | struct pbe *pbe; | 245 | struct pbe *pbe; | 
| 246 | 246 | ||
| 247 | while (pblist) { | 247 | while (pblist) { | 
| 248 | pbe = (pblist + PB_PAGE_SKIP)->next; | 248 | pbe = (pblist + PB_PAGE_SKIP)->next; | 
| 249 | ClearPageNosave(virt_to_page(pblist)); | 249 | ClearPageNosave(virt_to_page(pblist)); | 
| 250 | ClearPageNosaveFree(virt_to_page(pblist)); | 250 | if (clear_nosave_free) | 
| 251 | ClearPageNosaveFree(virt_to_page(pblist)); | ||
| 251 | free_page((unsigned long)pblist); | 252 | free_page((unsigned long)pblist); | 
| 252 | pblist = pbe; | 253 | pblist = pbe; | 
| 253 | } | 254 | } | 
| @@ -389,7 +390,7 @@ struct pbe *alloc_pagedir(unsigned int nr_pages, gfp_t gfp_mask, int safe_needed | |||
| 389 | pbe->next = alloc_image_page(gfp_mask, safe_needed); | 390 | pbe->next = alloc_image_page(gfp_mask, safe_needed); | 
| 390 | } | 391 | } | 
| 391 | if (!pbe) { /* get_zeroed_page() failed */ | 392 | if (!pbe) { /* get_zeroed_page() failed */ | 
| 392 | free_pagedir(pblist); | 393 | free_pagedir(pblist, 1); | 
| 393 | pblist = NULL; | 394 | pblist = NULL; | 
| 394 | } else | 395 | } else | 
| 395 | create_pbe_list(pblist, nr_pages); | 396 | create_pbe_list(pblist, nr_pages); | 
| @@ -736,7 +737,7 @@ static int create_image(struct snapshot_handle *handle) | |||
| 736 | pblist = alloc_pagedir(nr_copy_pages, GFP_ATOMIC, 1); | 737 | pblist = alloc_pagedir(nr_copy_pages, GFP_ATOMIC, 1); | 
| 737 | if (pblist) | 738 | if (pblist) | 
| 738 | copy_page_backup_list(pblist, p); | 739 | copy_page_backup_list(pblist, p); | 
| 739 | free_pagedir(p); | 740 | free_pagedir(p, 0); | 
| 740 | if (!pblist) | 741 | if (!pblist) | 
| 741 | error = -ENOMEM; | 742 | error = -ENOMEM; | 
| 742 | } | 743 | } | 
| diff --git a/kernel/uid16.c b/kernel/uid16.c index aa25605027c8..187e2a423878 100644 --- a/kernel/uid16.c +++ b/kernel/uid16.c | |||
| @@ -20,43 +20,67 @@ | |||
| 20 | 20 | ||
| 21 | asmlinkage long sys_chown16(const char __user * filename, old_uid_t user, old_gid_t group) | 21 | asmlinkage long sys_chown16(const char __user * filename, old_uid_t user, old_gid_t group) | 
| 22 | { | 22 | { | 
| 23 | return sys_chown(filename, low2highuid(user), low2highgid(group)); | 23 | long ret = sys_chown(filename, low2highuid(user), low2highgid(group)); | 
| 24 | /* avoid REGPARM breakage on x86: */ | ||
| 25 | prevent_tail_call(ret); | ||
| 26 | return ret; | ||
| 24 | } | 27 | } | 
| 25 | 28 | ||
| 26 | asmlinkage long sys_lchown16(const char __user * filename, old_uid_t user, old_gid_t group) | 29 | asmlinkage long sys_lchown16(const char __user * filename, old_uid_t user, old_gid_t group) | 
| 27 | { | 30 | { | 
| 28 | return sys_lchown(filename, low2highuid(user), low2highgid(group)); | 31 | long ret = sys_lchown(filename, low2highuid(user), low2highgid(group)); | 
| 32 | /* avoid REGPARM breakage on x86: */ | ||
| 33 | prevent_tail_call(ret); | ||
| 34 | return ret; | ||
| 29 | } | 35 | } | 
| 30 | 36 | ||
| 31 | asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group) | 37 | asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group) | 
| 32 | { | 38 | { | 
| 33 | return sys_fchown(fd, low2highuid(user), low2highgid(group)); | 39 | long ret = sys_fchown(fd, low2highuid(user), low2highgid(group)); | 
| 40 | /* avoid REGPARM breakage on x86: */ | ||
| 41 | prevent_tail_call(ret); | ||
| 42 | return ret; | ||
| 34 | } | 43 | } | 
| 35 | 44 | ||
| 36 | asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid) | 45 | asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid) | 
| 37 | { | 46 | { | 
| 38 | return sys_setregid(low2highgid(rgid), low2highgid(egid)); | 47 | long ret = sys_setregid(low2highgid(rgid), low2highgid(egid)); | 
| 48 | /* avoid REGPARM breakage on x86: */ | ||
| 49 | prevent_tail_call(ret); | ||
| 50 | return ret; | ||
| 39 | } | 51 | } | 
| 40 | 52 | ||
| 41 | asmlinkage long sys_setgid16(old_gid_t gid) | 53 | asmlinkage long sys_setgid16(old_gid_t gid) | 
| 42 | { | 54 | { | 
| 43 | return sys_setgid(low2highgid(gid)); | 55 | long ret = sys_setgid(low2highgid(gid)); | 
| 56 | /* avoid REGPARM breakage on x86: */ | ||
| 57 | prevent_tail_call(ret); | ||
| 58 | return ret; | ||
| 44 | } | 59 | } | 
| 45 | 60 | ||
| 46 | asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid) | 61 | asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid) | 
| 47 | { | 62 | { | 
| 48 | return sys_setreuid(low2highuid(ruid), low2highuid(euid)); | 63 | long ret = sys_setreuid(low2highuid(ruid), low2highuid(euid)); | 
| 64 | /* avoid REGPARM breakage on x86: */ | ||
| 65 | prevent_tail_call(ret); | ||
| 66 | return ret; | ||
| 49 | } | 67 | } | 
| 50 | 68 | ||
| 51 | asmlinkage long sys_setuid16(old_uid_t uid) | 69 | asmlinkage long sys_setuid16(old_uid_t uid) | 
| 52 | { | 70 | { | 
| 53 | return sys_setuid(low2highuid(uid)); | 71 | long ret = sys_setuid(low2highuid(uid)); | 
| 72 | /* avoid REGPARM breakage on x86: */ | ||
| 73 | prevent_tail_call(ret); | ||
| 74 | return ret; | ||
| 54 | } | 75 | } | 
| 55 | 76 | ||
| 56 | asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid) | 77 | asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid) | 
| 57 | { | 78 | { | 
| 58 | return sys_setresuid(low2highuid(ruid), low2highuid(euid), | 79 | long ret = sys_setresuid(low2highuid(ruid), low2highuid(euid), | 
| 59 | low2highuid(suid)); | 80 | low2highuid(suid)); | 
| 81 | /* avoid REGPARM breakage on x86: */ | ||
| 82 | prevent_tail_call(ret); | ||
| 83 | return ret; | ||
| 60 | } | 84 | } | 
| 61 | 85 | ||
| 62 | asmlinkage long sys_getresuid16(old_uid_t __user *ruid, old_uid_t __user *euid, old_uid_t __user *suid) | 86 | asmlinkage long sys_getresuid16(old_uid_t __user *ruid, old_uid_t __user *euid, old_uid_t __user *suid) | 
| @@ -72,8 +96,11 @@ asmlinkage long sys_getresuid16(old_uid_t __user *ruid, old_uid_t __user *euid, | |||
| 72 | 96 | ||
| 73 | asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid) | 97 | asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid) | 
| 74 | { | 98 | { | 
| 75 | return sys_setresgid(low2highgid(rgid), low2highgid(egid), | 99 | long ret = sys_setresgid(low2highgid(rgid), low2highgid(egid), | 
| 76 | low2highgid(sgid)); | 100 | low2highgid(sgid)); | 
| 101 | /* avoid REGPARM breakage on x86: */ | ||
| 102 | prevent_tail_call(ret); | ||
| 103 | return ret; | ||
| 77 | } | 104 | } | 
| 78 | 105 | ||
| 79 | asmlinkage long sys_getresgid16(old_gid_t __user *rgid, old_gid_t __user *egid, old_gid_t __user *sgid) | 106 | asmlinkage long sys_getresgid16(old_gid_t __user *rgid, old_gid_t __user *egid, old_gid_t __user *sgid) | 
| @@ -89,12 +116,18 @@ asmlinkage long sys_getresgid16(old_gid_t __user *rgid, old_gid_t __user *egid, | |||
| 89 | 116 | ||
| 90 | asmlinkage long sys_setfsuid16(old_uid_t uid) | 117 | asmlinkage long sys_setfsuid16(old_uid_t uid) | 
| 91 | { | 118 | { | 
| 92 | return sys_setfsuid(low2highuid(uid)); | 119 | long ret = sys_setfsuid(low2highuid(uid)); | 
| 120 | /* avoid REGPARM breakage on x86: */ | ||
| 121 | prevent_tail_call(ret); | ||
| 122 | return ret; | ||
| 93 | } | 123 | } | 
| 94 | 124 | ||
| 95 | asmlinkage long sys_setfsgid16(old_gid_t gid) | 125 | asmlinkage long sys_setfsgid16(old_gid_t gid) | 
| 96 | { | 126 | { | 
| 97 | return sys_setfsgid(low2highgid(gid)); | 127 | long ret = sys_setfsgid(low2highgid(gid)); | 
| 128 | /* avoid REGPARM breakage on x86: */ | ||
| 129 | prevent_tail_call(ret); | ||
| 130 | return ret; | ||
| 98 | } | 131 | } | 
| 99 | 132 | ||
| 100 | static int groups16_to_user(old_gid_t __user *grouplist, | 133 | static int groups16_to_user(old_gid_t __user *grouplist, | 
