1 |
naota 14/06/05 02:33:45 |
2 |
|
3 |
Added: freebsd-sources-9.1-ktrace.patch |
4 |
freebsd-sources-9.1-exec.patch |
5 |
Log: |
6 |
Apply security patches #512376 #512374 |
7 |
|
8 |
(Portage version: 2.2.10/cvs/Linux x86_64, signed Manifest commit with key F8551514) |
9 |
|
10 |
Revision Changes Path |
11 |
1.1 sys-freebsd/freebsd-sources/files/freebsd-sources-9.1-ktrace.patch |
12 |
|
13 |
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-freebsd/freebsd-sources/files/freebsd-sources-9.1-ktrace.patch?rev=1.1&view=markup |
14 |
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-freebsd/freebsd-sources/files/freebsd-sources-9.1-ktrace.patch?rev=1.1&content-type=text/plain |
15 |
|
16 |
Index: freebsd-sources-9.1-ktrace.patch |
17 |
=================================================================== |
18 |
Index: sys/kern/kern_ktrace.c |
19 |
=================================================================== |
20 |
--- sys/kern/kern_ktrace.c (revision 266771) |
21 |
+++ sys/kern/kern_ktrace.c (working copy) |
22 |
@@ -119,6 +119,7 @@ static int data_lengths[] = { |
23 |
0, /* KTR_SYSCTL */ |
24 |
sizeof(struct ktr_proc_ctor), /* KTR_PROCCTOR */ |
25 |
0, /* KTR_PROCDTOR */ |
26 |
+ 0, /* unused */ |
27 |
sizeof(struct ktr_fault), /* KTR_FAULT */ |
28 |
sizeof(struct ktr_faultend), /* KTR_FAULTEND */ |
29 |
}; |
30 |
|
31 |
|
32 |
|
33 |
1.1 sys-freebsd/freebsd-sources/files/freebsd-sources-9.1-exec.patch |
34 |
|
35 |
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-freebsd/freebsd-sources/files/freebsd-sources-9.1-exec.patch?rev=1.1&view=markup |
36 |
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-freebsd/freebsd-sources/files/freebsd-sources-9.1-exec.patch?rev=1.1&content-type=text/plain |
37 |
|
38 |
Index: freebsd-sources-9.1-exec.patch |
39 |
=================================================================== |
40 |
Index: sys/kern/kern_exec.c |
41 |
=================================================================== |
42 |
--- sys/kern/kern_exec.c (revision 266979) |
43 |
+++ sys/kern/kern_exec.c (working copy) |
44 |
@@ -280,6 +280,7 @@ kern_execve(td, args, mac_p) |
45 |
struct mac *mac_p; |
46 |
{ |
47 |
struct proc *p = td->td_proc; |
48 |
+ struct vmspace *oldvmspace; |
49 |
int error; |
50 |
|
51 |
AUDIT_ARG_ARGV(args->begin_argv, args->argc, |
52 |
@@ -296,6 +297,8 @@ kern_execve(td, args, mac_p) |
53 |
PROC_UNLOCK(p); |
54 |
} |
55 |
|
56 |
+ KASSERT((td->td_pflags & TDP_EXECVMSPC) == 0, ("nested execve")); |
57 |
+ oldvmspace = td->td_proc->p_vmspace; |
58 |
error = do_execve(td, args, mac_p); |
59 |
|
60 |
if (p->p_flag & P_HADTHREADS) { |
61 |
@@ -310,6 +313,12 @@ kern_execve(td, args, mac_p) |
62 |
thread_single_end(); |
63 |
PROC_UNLOCK(p); |
64 |
} |
65 |
+ if ((td->td_pflags & TDP_EXECVMSPC) != 0) { |
66 |
+ KASSERT(td->td_proc->p_vmspace != oldvmspace, |
67 |
+ ("oldvmspace still used")); |
68 |
+ vmspace_free(oldvmspace); |
69 |
+ td->td_pflags &= ~TDP_EXECVMSPC; |
70 |
+ } |
71 |
|
72 |
return (error); |
73 |
} |
74 |
Index: sys/sys/proc.h |
75 |
=================================================================== |
76 |
--- sys/sys/proc.h (revision 266979) |
77 |
+++ sys/sys/proc.h (working copy) |
78 |
@@ -968,4 +968,5 @@ curthread_pflags_restore(int save) |
79 |
|
80 |
#endif /* _KERNEL */ |
81 |
|
82 |
+#define TDP_EXECVMSPC 0x40000000 /* Execve destroyed old vmspace */ |
83 |
#endif /* !_SYS_PROC_H_ */ |
84 |
Index: sys/vm/vm_map.c |
85 |
=================================================================== |
86 |
--- sys/vm/vm_map.c (revision 266979) |
87 |
+++ sys/vm/vm_map.c (working copy) |
88 |
@@ -3631,6 +3631,8 @@ vmspace_exec(struct proc *p, vm_offset_t minuser, |
89 |
struct vmspace *oldvmspace = p->p_vmspace; |
90 |
struct vmspace *newvmspace; |
91 |
|
92 |
+ KASSERT((curthread->td_pflags & TDP_EXECVMSPC) == 0, |
93 |
+ ("vmspace_exec recursed")); |
94 |
newvmspace = vmspace_alloc(minuser, maxuser); |
95 |
if (newvmspace == NULL) |
96 |
return (ENOMEM); |
97 |
@@ -3647,7 +3649,7 @@ vmspace_exec(struct proc *p, vm_offset_t minuser, |
98 |
PROC_VMSPACE_UNLOCK(p); |
99 |
if (p == curthread->td_proc) |
100 |
pmap_activate(curthread); |
101 |
- vmspace_free(oldvmspace); |
102 |
+ curthread->td_pflags |= TDP_EXECVMSPC; |
103 |
return (0); |
104 |
} |