summaryrefslogtreecommitdiffstats
path: root/meta/recipes-kernel/lttng/lttng-modules/0003-Fix-Sleeping-function-called-from-invalid-context.patch
diff options
context:
space:
mode:
authorOtavio Salvador <otavio@ossystems.com.br>2017-11-09 11:34:59 -0200
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-11-21 13:06:12 +0000
commit6c2fca8f3517c9d064cec3aeec99bc68cb33b134 (patch)
tree72c8e1eeb27af97d9ab83b958d3d1f4e2701039c /meta/recipes-kernel/lttng/lttng-modules/0003-Fix-Sleeping-function-called-from-invalid-context.patch
parent0603cdead596bed30000fd6e539b6a1269cec671 (diff)
downloadpoky-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.patch133
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 @@
1From c1af5643e0df56b92481f7a7bc4110a58e4e5abb Mon Sep 17 00:00:00 2001
2From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
3Date: Fri, 21 Jul 2017 08:22:04 -0400
4Subject: [PATCH 3/8] Fix: Sleeping function called from invalid context
5Organization: O.S. Systems Software LTDA.
6
7It affects system call instrumentation for accept, accept4 and connect,
8only on the x86-64 architecture.
9
10We need to use the LTTng accessing functions to touch user-space memory,
11which take care of disabling the page fault handler, so we don't preempt
12while in preempt-off context (tracepoints disable preemption).
13
14Fixes #1111
15
16Upstream-Status: Backport [2.9.4]
17
18Signed-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
23diff --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
24index 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--
1322.14.1
133