diff options
author | Otavio Salvador <otavio@ossystems.com.br> | 2017-11-09 11:34:59 -0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-11-21 13:06:12 +0000 |
commit | 6c2fca8f3517c9d064cec3aeec99bc68cb33b134 (patch) | |
tree | 72c8e1eeb27af97d9ab83b958d3d1f4e2701039c /meta/recipes-kernel/lttng/lttng-modules/0003-Fix-Sleeping-function-called-from-invalid-context.patch | |
parent | 0603cdead596bed30000fd6e539b6a1269cec671 (diff) | |
download | poky-6c2fca8f3517c9d064cec3aeec99bc68cb33b134.tar.gz |
lttng-modules: Upgrade to 2.9.5 release
This upgrade is critical as it fixes the support for Linux 4.14 LTS kernel.
The changlog is:
2017-10-05 LTTng modules 2.9.5
* Fix: update block instrumentation for 4.14 kernel
* Revert "Fix: update block instrumentation for kernel 4.14"
2017-10-03 (National Techies Day) LTTng modules 2.9.4
* Fix: version check error in btrfs instrumentation
* Fix: update btrfs instrumentation for kernel 4.14
* Fix: update writeback instrumentation for kernel 4.14
* Fix: update block instrumentation for kernel 4.14
* Fix: vmalloc wrapper on kernel < 2.6.38
* Fix: vmalloc wrapper on kernel >= 4.12
* Add kmalloc failover to vmalloc
* Fix: mmap: caches aliased on virtual addresses
* Fix: update ext4 instrumentation for kernel 4.13
* Fix: Sleeping function called from invalid context
* Fix: sched for v4.11.5-rt1
* Fix: handle missing ftrace header on v4.12
This also removes the previously backported patches as they are part
of 2.9.4 release and the missing fix is part of 2.9.5 release.
(From OE-Core rev: 3ca3f8b2dbf0fec6a188ee2c10238704e4642c93)
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-kernel/lttng/lttng-modules/0003-Fix-Sleeping-function-called-from-invalid-context.patch')
-rw-r--r-- | meta/recipes-kernel/lttng/lttng-modules/0003-Fix-Sleeping-function-called-from-invalid-context.patch | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/meta/recipes-kernel/lttng/lttng-modules/0003-Fix-Sleeping-function-called-from-invalid-context.patch b/meta/recipes-kernel/lttng/lttng-modules/0003-Fix-Sleeping-function-called-from-invalid-context.patch deleted file mode 100644 index d444a0728a..0000000000 --- a/meta/recipes-kernel/lttng/lttng-modules/0003-Fix-Sleeping-function-called-from-invalid-context.patch +++ /dev/null | |||
@@ -1,133 +0,0 @@ | |||
1 | From c1af5643e0df56b92481f7a7bc4110a58e4e5abb Mon Sep 17 00:00:00 2001 | ||
2 | From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | ||
3 | Date: Fri, 21 Jul 2017 08:22:04 -0400 | ||
4 | Subject: [PATCH 3/8] Fix: Sleeping function called from invalid context | ||
5 | Organization: O.S. Systems Software LTDA. | ||
6 | |||
7 | It affects system call instrumentation for accept, accept4 and connect, | ||
8 | only on the x86-64 architecture. | ||
9 | |||
10 | We need to use the LTTng accessing functions to touch user-space memory, | ||
11 | which take care of disabling the page fault handler, so we don't preempt | ||
12 | while in preempt-off context (tracepoints disable preemption). | ||
13 | |||
14 | Fixes #1111 | ||
15 | |||
16 | Upstream-Status: Backport [2.9.4] | ||
17 | |||
18 | Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | ||
19 | --- | ||
20 | .../x86-64-syscalls-3.10.0-rc7_pointers_override.h | 47 ++++++++++++++-------- | ||
21 | 1 file changed, 31 insertions(+), 16 deletions(-) | ||
22 | |||
23 | diff --git a/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h b/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h | ||
24 | index 5e91004..6bf5291 100644 | ||
25 | --- a/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h | ||
26 | +++ b/instrumentation/syscalls/headers/x86-64-syscalls-3.10.0-rc7_pointers_override.h | ||
27 | @@ -2,7 +2,7 @@ | ||
28 | |||
29 | #define OVERRIDE_64_connect | ||
30 | SC_LTTNG_TRACEPOINT_EVENT_CODE(connect, | ||
31 | - TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * uservaddr, int addrlen), | ||
32 | + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * uservaddr, int addrlen), | ||
33 | TP_ARGS(sc_exit(ret,) fd, uservaddr, addrlen), | ||
34 | TP_locvar( | ||
35 | __typeof__(uservaddr->sa_family) sa_family; | ||
36 | @@ -16,21 +16,28 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(connect, | ||
37 | memset(tp_locvar, 0, sizeof(*tp_locvar)); | ||
38 | if (addrlen < sizeof(tp_locvar->sa_family)) | ||
39 | goto skip_code; | ||
40 | - (void) get_user(tp_locvar->sa_family, &uservaddr->sa_family); | ||
41 | + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sa_family, | ||
42 | + &uservaddr->sa_family, sizeof(tp_locvar->sa_family)); | ||
43 | switch (tp_locvar->sa_family) { | ||
44 | case AF_INET: | ||
45 | if (addrlen < sizeof(struct sockaddr_in)) | ||
46 | goto skip_code; | ||
47 | - (void) get_user(tp_locvar->dport, &((struct sockaddr_in *) uservaddr)->sin_port); | ||
48 | - (void) get_user(tp_locvar->v4addr, &((struct sockaddr_in *) uservaddr)->sin_addr.s_addr); | ||
49 | + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->dport, | ||
50 | + &((struct sockaddr_in __user *) uservaddr)->sin_port, | ||
51 | + sizeof(tp_locvar->dport)); | ||
52 | + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->v4addr, | ||
53 | + &((struct sockaddr_in __user *) uservaddr)->sin_addr.s_addr, | ||
54 | + sizeof(tp_locvar->v4addr)); | ||
55 | tp_locvar->v4addr_len = 4; | ||
56 | break; | ||
57 | case AF_INET6: | ||
58 | if (addrlen < sizeof(struct sockaddr_in6)) | ||
59 | goto skip_code; | ||
60 | - (void) get_user(tp_locvar->dport, &((struct sockaddr_in6 *) uservaddr)->sin6_port); | ||
61 | - if (copy_from_user(tp_locvar->v6addr, | ||
62 | - &((struct sockaddr_in6 *) uservaddr)->sin6_addr.in6_u.u6_addr8, | ||
63 | + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->dport, | ||
64 | + &((struct sockaddr_in6 __user *) uservaddr)->sin6_port, | ||
65 | + sizeof(tp_locvar->dport)); | ||
66 | + if (lib_ring_buffer_copy_from_user_check_nofault(tp_locvar->v6addr, | ||
67 | + &((struct sockaddr_in6 __user *) uservaddr)->sin6_addr.in6_u.u6_addr8, | ||
68 | sizeof(tp_locvar->v6addr))) | ||
69 | memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr)); | ||
70 | tp_locvar->v6addr_len = 8; | ||
71 | @@ -63,26 +70,34 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(connect, | ||
72 | #define LTTNG_SYSCALL_ACCEPT_code_pre \ | ||
73 | sc_inout( \ | ||
74 | memset(tp_locvar, 0, sizeof(*tp_locvar)); \ | ||
75 | - (void) get_user(tp_locvar->uaddr_len, upeer_addrlen); \ | ||
76 | + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->uaddr_len, \ | ||
77 | + upeer_addrlen, sizeof(tp_locvar->uaddr_len)); \ | ||
78 | ) \ | ||
79 | sc_out( \ | ||
80 | if (tp_locvar->uaddr_len < sizeof(tp_locvar->sa_family)) \ | ||
81 | goto skip_code; \ | ||
82 | - (void) get_user(tp_locvar->sa_family, &upeer_sockaddr->sa_family); \ | ||
83 | + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sa_family, \ | ||
84 | + &upeer_sockaddr->sa_family, sizeof(tp_locvar->sa_family)); \ | ||
85 | switch (tp_locvar->sa_family) { \ | ||
86 | case AF_INET: \ | ||
87 | if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in)) \ | ||
88 | goto skip_code; \ | ||
89 | - (void) get_user(tp_locvar->sport, &((struct sockaddr_in *) upeer_sockaddr)->sin_port); \ | ||
90 | - (void) get_user(tp_locvar->v4addr, &((struct sockaddr_in *) upeer_sockaddr)->sin_addr.s_addr); \ | ||
91 | + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sport, \ | ||
92 | + &((struct sockaddr_in __user *) upeer_sockaddr)->sin_port, \ | ||
93 | + sizeof(tp_locvar->sport)); \ | ||
94 | + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->v4addr, \ | ||
95 | + &((struct sockaddr_in __user *) upeer_sockaddr)->sin_addr.s_addr, \ | ||
96 | + sizeof(tp_locvar->v4addr)); \ | ||
97 | tp_locvar->v4addr_len = 4; \ | ||
98 | break; \ | ||
99 | case AF_INET6: \ | ||
100 | if (tp_locvar->uaddr_len < sizeof(struct sockaddr_in6)) \ | ||
101 | goto skip_code; \ | ||
102 | - (void) get_user(tp_locvar->sport, &((struct sockaddr_in6 *) upeer_sockaddr)->sin6_port); \ | ||
103 | - if (copy_from_user(tp_locvar->v6addr, \ | ||
104 | - &((struct sockaddr_in6 *) upeer_sockaddr)->sin6_addr.in6_u.u6_addr8, \ | ||
105 | + (void) lib_ring_buffer_copy_from_user_check_nofault(&tp_locvar->sport, \ | ||
106 | + &((struct sockaddr_in6 __user *) upeer_sockaddr)->sin6_port, \ | ||
107 | + sizeof(tp_locvar->sport)); \ | ||
108 | + if (lib_ring_buffer_copy_from_user_check_nofault(tp_locvar->v6addr, \ | ||
109 | + &((struct sockaddr_in6 __user *) upeer_sockaddr)->sin6_addr.in6_u.u6_addr8, \ | ||
110 | sizeof(tp_locvar->v6addr))) \ | ||
111 | memset(tp_locvar->v6addr, 0, sizeof(tp_locvar->v6addr)); \ | ||
112 | tp_locvar->v6addr_len = 8; \ | ||
113 | @@ -93,7 +108,7 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(connect, | ||
114 | |||
115 | #define OVERRIDE_64_accept | ||
116 | SC_LTTNG_TRACEPOINT_EVENT_CODE(accept, | ||
117 | - TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen), | ||
118 | + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * upeer_sockaddr, int __user * upeer_addrlen), | ||
119 | TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen), | ||
120 | TP_locvar( | ||
121 | LTTNG_SYSCALL_ACCEPT_locvar | ||
122 | @@ -116,7 +131,7 @@ SC_LTTNG_TRACEPOINT_EVENT_CODE(accept, | ||
123 | |||
124 | #define OVERRIDE_64_accept4 | ||
125 | SC_LTTNG_TRACEPOINT_EVENT_CODE(accept4, | ||
126 | - TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr * upeer_sockaddr, int * upeer_addrlen, int flags), | ||
127 | + TP_PROTO(sc_exit(long ret,) int fd, struct sockaddr __user * upeer_sockaddr, int __user * upeer_addrlen, int flags), | ||
128 | TP_ARGS(sc_exit(ret,) fd, upeer_sockaddr, upeer_addrlen, flags), | ||
129 | TP_locvar( | ||
130 | LTTNG_SYSCALL_ACCEPT_locvar | ||
131 | -- | ||
132 | 2.14.1 | ||
133 | |||