1 |
commit: 696f92382c9ecec8fa669fbdd522303cd6917ba9 |
2 |
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org> |
3 |
AuthorDate: Wed Sep 3 11:54:47 2014 +0000 |
4 |
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org> |
5 |
CommitDate: Wed Sep 3 11:54:47 2014 +0000 |
6 |
URL: http://sources.gentoo.org/gitweb/?p=proj/hardened-patchset.git;a=commit;h=696f9238 |
7 |
|
8 |
Grsec/PaX: 3.0-{3.2.62,3.14.17,3.16.1}-201409010104 |
9 |
|
10 |
--- |
11 |
3.14.17/0000_README | 2 +- |
12 |
...4420_grsecurity-3.0-3.14.17-201408312006.patch} | 201 +- |
13 |
{3.15.10 => 3.16.1}/0000_README | 2 +- |
14 |
.../4420_grsecurity-3.0-3.16.1-201409010104.patch | 17969 +++++++++++++------ |
15 |
{3.15.10 => 3.16.1}/4425_grsec_remove_EI_PAX.patch | 0 |
16 |
.../4427_force_XATTR_PAX_tmpfs.patch | 0 |
17 |
.../4430_grsec-remove-localversion-grsec.patch | 0 |
18 |
{3.15.10 => 3.16.1}/4435_grsec-mute-warnings.patch | 0 |
19 |
.../4440_grsec-remove-protected-paths.patch | 0 |
20 |
.../4450_grsec-kconfig-default-gids.patch | 0 |
21 |
.../4465_selinux-avc_audit-log-curr_ip.patch | 0 |
22 |
{3.15.10 => 3.16.1}/4470_disable-compat_vdso.patch | 0 |
23 |
{3.15.10 => 3.16.1}/4475_emutramp_default_on.patch | 0 |
24 |
3.2.62/0000_README | 2 +- |
25 |
... 4420_grsecurity-3.0-3.2.62-201408312002.patch} | 30 +- |
26 |
15 files changed, 13074 insertions(+), 5132 deletions(-) |
27 |
|
28 |
diff --git a/3.14.17/0000_README b/3.14.17/0000_README |
29 |
index 4ec94f3..99b0d3a 100644 |
30 |
--- a/3.14.17/0000_README |
31 |
+++ b/3.14.17/0000_README |
32 |
@@ -2,7 +2,7 @@ README |
33 |
----------------------------------------------------------------------------- |
34 |
Individual Patch Descriptions: |
35 |
----------------------------------------------------------------------------- |
36 |
-Patch: 4420_grsecurity-3.0-3.14.17-201408260041.patch |
37 |
+Patch: 4420_grsecurity-3.0-3.14.17-201408312006.patch |
38 |
From: http://www.grsecurity.net |
39 |
Desc: hardened-sources base patch from upstream grsecurity |
40 |
|
41 |
|
42 |
diff --git a/3.14.17/4420_grsecurity-3.0-3.14.17-201408260041.patch b/3.14.17/4420_grsecurity-3.0-3.14.17-201408312006.patch |
43 |
similarity index 99% |
44 |
rename from 3.14.17/4420_grsecurity-3.0-3.14.17-201408260041.patch |
45 |
rename to 3.14.17/4420_grsecurity-3.0-3.14.17-201408312006.patch |
46 |
index c27879a..5fb863b 100644 |
47 |
--- a/3.14.17/4420_grsecurity-3.0-3.14.17-201408260041.patch |
48 |
+++ b/3.14.17/4420_grsecurity-3.0-3.14.17-201408312006.patch |
49 |
@@ -41765,6 +41765,34 @@ index f45279c..0b14d32 100644 |
50 |
|
51 |
spin_lock_irqsave(&djrcv_dev->lock, flags); |
52 |
if (dj_report->report_id == REPORT_ID_DJ_SHORT) { |
53 |
+diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c |
54 |
+index 3b43d1c..991ba79 100644 |
55 |
+--- a/drivers/hid/hid-magicmouse.c |
56 |
++++ b/drivers/hid/hid-magicmouse.c |
57 |
+@@ -290,6 +290,11 @@ static int magicmouse_raw_event(struct hid_device *hdev, |
58 |
+ if (size < 4 || ((size - 4) % 9) != 0) |
59 |
+ return 0; |
60 |
+ npoints = (size - 4) / 9; |
61 |
++ if (npoints > 15) { |
62 |
++ hid_warn(hdev, "invalid size value (%d) for TRACKPAD_REPORT_ID\n", |
63 |
++ size); |
64 |
++ return 0; |
65 |
++ } |
66 |
+ msc->ntouches = 0; |
67 |
+ for (ii = 0; ii < npoints; ii++) |
68 |
+ magicmouse_emit_touch(msc, ii, data + ii * 9 + 4); |
69 |
+@@ -307,6 +312,11 @@ static int magicmouse_raw_event(struct hid_device *hdev, |
70 |
+ if (size < 6 || ((size - 6) % 8) != 0) |
71 |
+ return 0; |
72 |
+ npoints = (size - 6) / 8; |
73 |
++ if (npoints > 15) { |
74 |
++ hid_warn(hdev, "invalid size value (%d) for MOUSE_REPORT_ID\n", |
75 |
++ size); |
76 |
++ return 0; |
77 |
++ } |
78 |
+ msc->ntouches = 0; |
79 |
+ for (ii = 0; ii < npoints; ii++) |
80 |
+ magicmouse_emit_touch(msc, ii, data + ii * 8 + 6); |
81 |
diff --git a/drivers/hid/hid-monterey.c b/drivers/hid/hid-monterey.c |
82 |
index 9e14c00..25daf28 100644 |
83 |
--- a/drivers/hid/hid-monterey.c |
84 |
@@ -41791,6 +41819,23 @@ index 736b250..6aca4f2 100644 |
85 |
rdesc[41] == 0x00 && rdesc[59] == 0x26 && |
86 |
rdesc[60] == 0xf9 && rdesc[61] == 0x00) { |
87 |
hid_info(hdev, "fixing up Petalynx Maxter Remote report descriptor\n"); |
88 |
+diff --git a/drivers/hid/hid-picolcd_core.c b/drivers/hid/hid-picolcd_core.c |
89 |
+index acbb0210..020df3c 100644 |
90 |
+--- a/drivers/hid/hid-picolcd_core.c |
91 |
++++ b/drivers/hid/hid-picolcd_core.c |
92 |
+@@ -350,6 +350,12 @@ static int picolcd_raw_event(struct hid_device *hdev, |
93 |
+ if (!data) |
94 |
+ return 1; |
95 |
+ |
96 |
++ if (size > 64) { |
97 |
++ hid_warn(hdev, "invalid size value (%d) for picolcd raw event\n", |
98 |
++ size); |
99 |
++ return 0; |
100 |
++ } |
101 |
++ |
102 |
+ if (report->id == REPORT_KEY_STATE) { |
103 |
+ if (data->input_keys) |
104 |
+ ret = picolcd_raw_keypad(data, report, raw_data+1, size-1); |
105 |
diff --git a/drivers/hid/hid-sunplus.c b/drivers/hid/hid-sunplus.c |
106 |
index 87fc91e..91072fa 100644 |
107 |
--- a/drivers/hid/hid-sunplus.c |
108 |
@@ -63072,7 +63117,7 @@ index 8657335..cd3e37f 100644 |
109 |
[OP_CLOSE] = (nfsd4_dec)nfsd4_decode_close, |
110 |
[OP_COMMIT] = (nfsd4_dec)nfsd4_decode_commit, |
111 |
diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c |
112 |
-index f8f060f..c4ba09a 100644 |
113 |
+index f8f060f..d9a7258 100644 |
114 |
--- a/fs/nfsd/nfscache.c |
115 |
+++ b/fs/nfsd/nfscache.c |
116 |
@@ -519,14 +519,17 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) |
117 |
@@ -63096,6 +63141,15 @@ index f8f060f..c4ba09a 100644 |
118 |
|
119 |
/* Don't cache excessive amounts of data and XDR failures */ |
120 |
if (!statp || len > (256 >> 2)) { |
121 |
+@@ -537,7 +540,7 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) |
122 |
+ switch (cachetype) { |
123 |
+ case RC_REPLSTAT: |
124 |
+ if (len != 1) |
125 |
+- printk("nfsd: RC_REPLSTAT/reply len %d!\n",len); |
126 |
++ printk("nfsd: RC_REPLSTAT/reply len %ld!\n",len); |
127 |
+ rp->c_replstat = *statp; |
128 |
+ break; |
129 |
+ case RC_REPLBUFF: |
130 |
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c |
131 |
index eea5ad1..5a84ac7 100644 |
132 |
--- a/fs/nfsd/vfs.c |
133 |
@@ -63128,7 +63182,7 @@ index eea5ad1..5a84ac7 100644 |
134 |
|
135 |
if (host_err < 0) |
136 |
diff --git a/fs/nls/nls_base.c b/fs/nls/nls_base.c |
137 |
-index 52ccd34..43a53b1 100644 |
138 |
+index 52ccd34..7a6b202 100644 |
139 |
--- a/fs/nls/nls_base.c |
140 |
+++ b/fs/nls/nls_base.c |
141 |
@@ -234,21 +234,25 @@ EXPORT_SYMBOL(utf16s_to_utf8s); |
142 |
@@ -63180,6 +63234,24 @@ index 52ccd34..43a53b1 100644 |
143 |
spin_unlock(&nls_lock); |
144 |
return 0; |
145 |
} |
146 |
+@@ -272,7 +278,7 @@ int unregister_nls(struct nls_table * nls) |
147 |
+ return -EINVAL; |
148 |
+ } |
149 |
+ |
150 |
+-static struct nls_table *find_nls(char *charset) |
151 |
++static struct nls_table *find_nls(const char *charset) |
152 |
+ { |
153 |
+ struct nls_table *nls; |
154 |
+ spin_lock(&nls_lock); |
155 |
+@@ -288,7 +294,7 @@ static struct nls_table *find_nls(char *charset) |
156 |
+ return nls; |
157 |
+ } |
158 |
+ |
159 |
+-struct nls_table *load_nls(char *charset) |
160 |
++struct nls_table *load_nls(const char *charset) |
161 |
+ { |
162 |
+ return try_then_request_module(find_nls(charset), "nls_%s", charset); |
163 |
+ } |
164 |
diff --git a/fs/nls/nls_euc-jp.c b/fs/nls/nls_euc-jp.c |
165 |
index 162b3f1..6076a7c 100644 |
166 |
--- a/fs/nls/nls_euc-jp.c |
167 |
@@ -81948,7 +82020,7 @@ index 0000000..33f4af8 |
168 |
+ |
169 |
+#endif |
170 |
diff --git a/include/linux/nls.h b/include/linux/nls.h |
171 |
-index 520681b..1d67ed2 100644 |
172 |
+index 520681b..2b7fabb 100644 |
173 |
--- a/include/linux/nls.h |
174 |
+++ b/include/linux/nls.h |
175 |
@@ -31,7 +31,7 @@ struct nls_table { |
176 |
@@ -81960,6 +82032,15 @@ index 520681b..1d67ed2 100644 |
177 |
|
178 |
/* this value hold the maximum octet of charset */ |
179 |
#define NLS_MAX_CHARSET_SIZE 6 /* for UTF-8 */ |
180 |
+@@ -46,7 +46,7 @@ enum utf16_endian { |
181 |
+ /* nls_base.c */ |
182 |
+ extern int __register_nls(struct nls_table *, struct module *); |
183 |
+ extern int unregister_nls(struct nls_table *); |
184 |
+-extern struct nls_table *load_nls(char *); |
185 |
++extern struct nls_table *load_nls(const char *); |
186 |
+ extern void unload_nls(struct nls_table *); |
187 |
+ extern struct nls_table *load_nls_default(void); |
188 |
+ #define register_nls(nls) __register_nls((nls), THIS_MODULE) |
189 |
diff --git a/include/linux/notifier.h b/include/linux/notifier.h |
190 |
index d14a4c3..a078786 100644 |
191 |
--- a/include/linux/notifier.h |
192 |
@@ -84215,7 +84296,7 @@ index c55aeed..b3393f4 100644 |
193 |
/** inet_connection_sock - INET connection oriented sock |
194 |
* |
195 |
diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h |
196 |
-index 823ec7b..1af4453 100644 |
197 |
+index 823ec7b..44c938c 100644 |
198 |
--- a/include/net/inetpeer.h |
199 |
+++ b/include/net/inetpeer.h |
200 |
@@ -47,7 +47,7 @@ struct inet_peer { |
201 |
@@ -84223,7 +84304,7 @@ index 823ec7b..1af4453 100644 |
202 |
union { |
203 |
struct { |
204 |
- atomic_t rid; /* Frag reception counter */ |
205 |
-+ atomic_unchecked_t rid; /* Frag reception counter */ |
206 |
++ atomic_unchecked_t rid; /* Frag reception counter */ |
207 |
}; |
208 |
struct rcu_head rcu; |
209 |
struct inet_peer *gc_next; |
210 |
@@ -91730,7 +91811,7 @@ index e3be87e..7480b36 100644 |
211 |
|
212 |
ftrace_graph_active++; |
213 |
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c |
214 |
-index 0954450..0ed035c 100644 |
215 |
+index 0954450..1e3e687 100644 |
216 |
--- a/kernel/trace/ring_buffer.c |
217 |
+++ b/kernel/trace/ring_buffer.c |
218 |
@@ -352,9 +352,9 @@ struct buffer_data_page { |
219 |
@@ -91756,7 +91837,31 @@ index 0954450..0ed035c 100644 |
220 |
local_t dropped_events; |
221 |
local_t committing; |
222 |
local_t commits; |
223 |
-@@ -991,8 +991,8 @@ static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer, |
224 |
+@@ -626,8 +626,22 @@ int ring_buffer_poll_wait(struct ring_buffer *buffer, int cpu, |
225 |
+ work = &cpu_buffer->irq_work; |
226 |
+ } |
227 |
+ |
228 |
+- work->waiters_pending = true; |
229 |
+ poll_wait(filp, &work->waiters, poll_table); |
230 |
++ work->waiters_pending = true; |
231 |
++ /* |
232 |
++ * There's a tight race between setting the waiters_pending and |
233 |
++ * checking if the ring buffer is empty. Once the waiters_pending bit |
234 |
++ * is set, the next event will wake the task up, but we can get stuck |
235 |
++ * if there's only a single event in. |
236 |
++ * |
237 |
++ * FIXME: Ideally, we need a memory barrier on the writer side as well, |
238 |
++ * but adding a memory barrier to all events will cause too much of a |
239 |
++ * performance hit in the fast path. We only need a memory barrier when |
240 |
++ * the buffer goes from empty to having content. But as this race is |
241 |
++ * extremely small, and it's not a problem if another event comes in, we |
242 |
++ * will fix it later. |
243 |
++ */ |
244 |
++ smp_mb(); |
245 |
+ |
246 |
+ if ((cpu == RING_BUFFER_ALL_CPUS && !ring_buffer_empty(buffer)) || |
247 |
+ (cpu != RING_BUFFER_ALL_CPUS && !ring_buffer_empty_cpu(buffer, cpu))) |
248 |
+@@ -991,8 +1005,8 @@ static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer, |
249 |
* |
250 |
* We add a counter to the write field to denote this. |
251 |
*/ |
252 |
@@ -91767,7 +91872,7 @@ index 0954450..0ed035c 100644 |
253 |
|
254 |
/* |
255 |
* Just make sure we have seen our old_write and synchronize |
256 |
-@@ -1020,8 +1020,8 @@ static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer, |
257 |
+@@ -1020,8 +1034,8 @@ static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer, |
258 |
* cmpxchg to only update if an interrupt did not already |
259 |
* do it for us. If the cmpxchg fails, we don't care. |
260 |
*/ |
261 |
@@ -91778,7 +91883,7 @@ index 0954450..0ed035c 100644 |
262 |
|
263 |
/* |
264 |
* No need to worry about races with clearing out the commit. |
265 |
-@@ -1385,12 +1385,12 @@ static void rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer); |
266 |
+@@ -1385,12 +1399,12 @@ static void rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer); |
267 |
|
268 |
static inline unsigned long rb_page_entries(struct buffer_page *bpage) |
269 |
{ |
270 |
@@ -91793,7 +91898,7 @@ index 0954450..0ed035c 100644 |
271 |
} |
272 |
|
273 |
static int |
274 |
-@@ -1485,7 +1485,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned int nr_pages) |
275 |
+@@ -1485,7 +1499,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned int nr_pages) |
276 |
* bytes consumed in ring buffer from here. |
277 |
* Increment overrun to account for the lost events. |
278 |
*/ |
279 |
@@ -91802,7 +91907,7 @@ index 0954450..0ed035c 100644 |
280 |
local_sub(BUF_PAGE_SIZE, &cpu_buffer->entries_bytes); |
281 |
} |
282 |
|
283 |
-@@ -2063,7 +2063,7 @@ rb_handle_head_page(struct ring_buffer_per_cpu *cpu_buffer, |
284 |
+@@ -2063,7 +2077,7 @@ rb_handle_head_page(struct ring_buffer_per_cpu *cpu_buffer, |
285 |
* it is our responsibility to update |
286 |
* the counters. |
287 |
*/ |
288 |
@@ -91811,7 +91916,7 @@ index 0954450..0ed035c 100644 |
289 |
local_sub(BUF_PAGE_SIZE, &cpu_buffer->entries_bytes); |
290 |
|
291 |
/* |
292 |
-@@ -2213,7 +2213,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
293 |
+@@ -2213,7 +2227,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
294 |
if (tail == BUF_PAGE_SIZE) |
295 |
tail_page->real_end = 0; |
296 |
|
297 |
@@ -91820,7 +91925,7 @@ index 0954450..0ed035c 100644 |
298 |
return; |
299 |
} |
300 |
|
301 |
-@@ -2248,7 +2248,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
302 |
+@@ -2248,7 +2262,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
303 |
rb_event_set_padding(event); |
304 |
|
305 |
/* Set the write back to the previous setting */ |
306 |
@@ -91829,7 +91934,7 @@ index 0954450..0ed035c 100644 |
307 |
return; |
308 |
} |
309 |
|
310 |
-@@ -2260,7 +2260,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
311 |
+@@ -2260,7 +2274,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
312 |
|
313 |
/* Set write to end of buffer */ |
314 |
length = (tail + length) - BUF_PAGE_SIZE; |
315 |
@@ -91838,7 +91943,7 @@ index 0954450..0ed035c 100644 |
316 |
} |
317 |
|
318 |
/* |
319 |
-@@ -2286,7 +2286,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer, |
320 |
+@@ -2286,7 +2300,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer, |
321 |
* about it. |
322 |
*/ |
323 |
if (unlikely(next_page == commit_page)) { |
324 |
@@ -91847,7 +91952,7 @@ index 0954450..0ed035c 100644 |
325 |
goto out_reset; |
326 |
} |
327 |
|
328 |
-@@ -2342,7 +2342,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer, |
329 |
+@@ -2342,7 +2356,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer, |
330 |
cpu_buffer->tail_page) && |
331 |
(cpu_buffer->commit_page == |
332 |
cpu_buffer->reader_page))) { |
333 |
@@ -91856,7 +91961,7 @@ index 0954450..0ed035c 100644 |
334 |
goto out_reset; |
335 |
} |
336 |
} |
337 |
-@@ -2390,7 +2390,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer, |
338 |
+@@ -2390,7 +2404,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer, |
339 |
length += RB_LEN_TIME_EXTEND; |
340 |
|
341 |
tail_page = cpu_buffer->tail_page; |
342 |
@@ -91865,7 +91970,7 @@ index 0954450..0ed035c 100644 |
343 |
|
344 |
/* set write to only the index of the write */ |
345 |
write &= RB_WRITE_MASK; |
346 |
-@@ -2414,7 +2414,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer, |
347 |
+@@ -2414,7 +2428,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer, |
348 |
kmemcheck_annotate_bitfield(event, bitfield); |
349 |
rb_update_event(cpu_buffer, event, length, add_timestamp, delta); |
350 |
|
351 |
@@ -91874,7 +91979,7 @@ index 0954450..0ed035c 100644 |
352 |
|
353 |
/* |
354 |
* If this is the first commit on the page, then update |
355 |
-@@ -2447,7 +2447,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer, |
356 |
+@@ -2447,7 +2461,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer, |
357 |
|
358 |
if (bpage->page == (void *)addr && rb_page_write(bpage) == old_index) { |
359 |
unsigned long write_mask = |
360 |
@@ -91883,7 +91988,7 @@ index 0954450..0ed035c 100644 |
361 |
unsigned long event_length = rb_event_length(event); |
362 |
/* |
363 |
* This is on the tail page. It is possible that |
364 |
-@@ -2457,7 +2457,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer, |
365 |
+@@ -2457,7 +2471,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer, |
366 |
*/ |
367 |
old_index += write_mask; |
368 |
new_index += write_mask; |
369 |
@@ -91892,7 +91997,7 @@ index 0954450..0ed035c 100644 |
370 |
if (index == old_index) { |
371 |
/* update counters */ |
372 |
local_sub(event_length, &cpu_buffer->entries_bytes); |
373 |
-@@ -2849,7 +2849,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer, |
374 |
+@@ -2849,7 +2863,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer, |
375 |
|
376 |
/* Do the likely case first */ |
377 |
if (likely(bpage->page == (void *)addr)) { |
378 |
@@ -91901,7 +92006,7 @@ index 0954450..0ed035c 100644 |
379 |
return; |
380 |
} |
381 |
|
382 |
-@@ -2861,7 +2861,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer, |
383 |
+@@ -2861,7 +2875,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer, |
384 |
start = bpage; |
385 |
do { |
386 |
if (bpage->page == (void *)addr) { |
387 |
@@ -91910,7 +92015,7 @@ index 0954450..0ed035c 100644 |
388 |
return; |
389 |
} |
390 |
rb_inc_page(cpu_buffer, &bpage); |
391 |
-@@ -3145,7 +3145,7 @@ static inline unsigned long |
392 |
+@@ -3145,7 +3159,7 @@ static inline unsigned long |
393 |
rb_num_of_entries(struct ring_buffer_per_cpu *cpu_buffer) |
394 |
{ |
395 |
return local_read(&cpu_buffer->entries) - |
396 |
@@ -91919,7 +92024,7 @@ index 0954450..0ed035c 100644 |
397 |
} |
398 |
|
399 |
/** |
400 |
-@@ -3234,7 +3234,7 @@ unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu) |
401 |
+@@ -3234,7 +3248,7 @@ unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu) |
402 |
return 0; |
403 |
|
404 |
cpu_buffer = buffer->buffers[cpu]; |
405 |
@@ -91928,7 +92033,7 @@ index 0954450..0ed035c 100644 |
406 |
|
407 |
return ret; |
408 |
} |
409 |
-@@ -3257,7 +3257,7 @@ ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu) |
410 |
+@@ -3257,7 +3271,7 @@ ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu) |
411 |
return 0; |
412 |
|
413 |
cpu_buffer = buffer->buffers[cpu]; |
414 |
@@ -91937,7 +92042,7 @@ index 0954450..0ed035c 100644 |
415 |
|
416 |
return ret; |
417 |
} |
418 |
-@@ -3342,7 +3342,7 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer) |
419 |
+@@ -3342,7 +3356,7 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer) |
420 |
/* if you care about this being correct, lock the buffer */ |
421 |
for_each_buffer_cpu(buffer, cpu) { |
422 |
cpu_buffer = buffer->buffers[cpu]; |
423 |
@@ -91946,7 +92051,7 @@ index 0954450..0ed035c 100644 |
424 |
} |
425 |
|
426 |
return overruns; |
427 |
-@@ -3518,8 +3518,8 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) |
428 |
+@@ -3518,8 +3532,8 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) |
429 |
/* |
430 |
* Reset the reader page to size zero. |
431 |
*/ |
432 |
@@ -91957,7 +92062,7 @@ index 0954450..0ed035c 100644 |
433 |
local_set(&cpu_buffer->reader_page->page->commit, 0); |
434 |
cpu_buffer->reader_page->real_end = 0; |
435 |
|
436 |
-@@ -3553,7 +3553,7 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) |
437 |
+@@ -3553,7 +3567,7 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) |
438 |
* want to compare with the last_overrun. |
439 |
*/ |
440 |
smp_mb(); |
441 |
@@ -91966,7 +92071,7 @@ index 0954450..0ed035c 100644 |
442 |
|
443 |
/* |
444 |
* Here's the tricky part. |
445 |
-@@ -4123,8 +4123,8 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) |
446 |
+@@ -4123,8 +4137,8 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) |
447 |
|
448 |
cpu_buffer->head_page |
449 |
= list_entry(cpu_buffer->pages, struct buffer_page, list); |
450 |
@@ -91977,7 +92082,7 @@ index 0954450..0ed035c 100644 |
451 |
local_set(&cpu_buffer->head_page->page->commit, 0); |
452 |
|
453 |
cpu_buffer->head_page->read = 0; |
454 |
-@@ -4134,14 +4134,14 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) |
455 |
+@@ -4134,14 +4148,14 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) |
456 |
|
457 |
INIT_LIST_HEAD(&cpu_buffer->reader_page->list); |
458 |
INIT_LIST_HEAD(&cpu_buffer->new_pages); |
459 |
@@ -91996,7 +92101,7 @@ index 0954450..0ed035c 100644 |
460 |
local_set(&cpu_buffer->dropped_events, 0); |
461 |
local_set(&cpu_buffer->entries, 0); |
462 |
local_set(&cpu_buffer->committing, 0); |
463 |
-@@ -4546,8 +4546,8 @@ int ring_buffer_read_page(struct ring_buffer *buffer, |
464 |
+@@ -4546,8 +4560,8 @@ int ring_buffer_read_page(struct ring_buffer *buffer, |
465 |
rb_init_page(bpage); |
466 |
bpage = reader->page; |
467 |
reader->page = *data_page; |
468 |
@@ -100203,7 +100308,7 @@ index 11c8d81..d67116b 100644 |
469 |
|
470 |
static int raw_seq_show(struct seq_file *seq, void *v) |
471 |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c |
472 |
-index ca5a01e..1f6f4e2 100644 |
473 |
+index ca5a01e..8c5cdb4 100644 |
474 |
--- a/net/ipv4/route.c |
475 |
+++ b/net/ipv4/route.c |
476 |
@@ -234,7 +234,7 @@ static const struct seq_operations rt_cache_seq_ops = { |
477 |
@@ -100233,7 +100338,7 @@ index ca5a01e..1f6f4e2 100644 |
478 |
} |
479 |
|
480 |
static const struct file_operations rt_acct_proc_fops = { |
481 |
-@@ -465,7 +465,7 @@ static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst, |
482 |
+@@ -465,11 +465,11 @@ static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst, |
483 |
|
484 |
#define IP_IDENTS_SZ 2048u |
485 |
struct ip_ident_bucket { |
486 |
@@ -100242,6 +100347,11 @@ index ca5a01e..1f6f4e2 100644 |
487 |
u32 stamp32; |
488 |
}; |
489 |
|
490 |
+-static struct ip_ident_bucket *ip_idents __read_mostly; |
491 |
++static struct ip_ident_bucket ip_idents[IP_IDENTS_SZ] __read_mostly; |
492 |
+ |
493 |
+ /* In order to protect privacy, we add a perturbation to identifiers |
494 |
+ * if one generator is seldom used. This makes hard for an attacker |
495 |
@@ -485,7 +485,7 @@ u32 ip_idents_reserve(u32 hash, int segs) |
496 |
if (old != now && cmpxchg(&bucket->stamp32, old, now) == old) |
497 |
delta = prandom_u32_max(now - old); |
498 |
@@ -100305,6 +100415,19 @@ index ca5a01e..1f6f4e2 100644 |
499 |
get_random_bytes(&net->ipv4.dev_addr_genid, |
500 |
sizeof(net->ipv4.dev_addr_genid)); |
501 |
return 0; |
502 |
+@@ -2725,11 +2725,7 @@ int __init ip_rt_init(void) |
503 |
+ { |
504 |
+ int rc = 0; |
505 |
+ |
506 |
+- ip_idents = kmalloc(IP_IDENTS_SZ * sizeof(*ip_idents), GFP_KERNEL); |
507 |
+- if (!ip_idents) |
508 |
+- panic("IP: failed to allocate ip_idents\n"); |
509 |
+- |
510 |
+- prandom_bytes(ip_idents, IP_IDENTS_SZ * sizeof(*ip_idents)); |
511 |
++ prandom_bytes(ip_idents, sizeof(ip_idents)); |
512 |
+ |
513 |
+ #ifdef CONFIG_IP_ROUTE_CLASSID |
514 |
+ ip_rt_acct = __alloc_percpu(256 * sizeof(struct ip_rt_acct), __alignof__(struct ip_rt_acct)); |
515 |
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c |
516 |
index 44eba05..b36864b 100644 |
517 |
--- a/net/ipv4/sysctl_net_ipv4.c |
518 |
@@ -101080,18 +101203,6 @@ index 767ab8d..c5ec70a 100644 |
519 |
err_alloc: |
520 |
return -ENOMEM; |
521 |
} |
522 |
-diff --git a/net/ipv6/output_core.c b/net/ipv6/output_core.c |
523 |
-index 798eb0f..ab2f47d 100644 |
524 |
---- a/net/ipv6/output_core.c |
525 |
-+++ b/net/ipv6/output_core.c |
526 |
-@@ -7,7 +7,6 @@ |
527 |
- #include <net/ip6_fib.h> |
528 |
- #include <net/addrconf.h> |
529 |
- |
530 |
-- |
531 |
- int ip6_find_1stfragopt(struct sk_buff *skb, u8 **nexthdr) |
532 |
- { |
533 |
- u16 offset = sizeof(struct ipv6hdr); |
534 |
diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c |
535 |
index bda7429..469b26b 100644 |
536 |
--- a/net/ipv6/ping.c |
537 |
|
538 |
diff --git a/3.15.10/0000_README b/3.16.1/0000_README |
539 |
similarity index 96% |
540 |
rename from 3.15.10/0000_README |
541 |
rename to 3.16.1/0000_README |
542 |
index 53bdf83..76ef299 100644 |
543 |
--- a/3.15.10/0000_README |
544 |
+++ b/3.16.1/0000_README |
545 |
@@ -2,7 +2,7 @@ README |
546 |
----------------------------------------------------------------------------- |
547 |
Individual Patch Descriptions: |
548 |
----------------------------------------------------------------------------- |
549 |
-Patch: 4420_grsecurity-3.0-3.15.10-201408212335.patch |
550 |
+Patch: 4420_grsecurity-3.0-3.16.1-201409010104.patch |
551 |
From: http://www.grsecurity.net |
552 |
Desc: hardened-sources base patch from upstream grsecurity |
553 |
|
554 |
|
555 |
diff --git a/3.15.10/4420_grsecurity-3.0-3.15.10-201408212335.patch b/3.16.1/4420_grsecurity-3.0-3.16.1-201409010104.patch |
556 |
similarity index 90% |
557 |
rename from 3.15.10/4420_grsecurity-3.0-3.15.10-201408212335.patch |
558 |
rename to 3.16.1/4420_grsecurity-3.0-3.16.1-201409010104.patch |
559 |
index a41c140..6753168 100644 |
560 |
--- a/3.15.10/4420_grsecurity-3.0-3.15.10-201408212335.patch |
561 |
+++ b/3.16.1/4420_grsecurity-3.0-3.16.1-201409010104.patch |
562 |
@@ -235,10 +235,10 @@ index 9de9813..1462492 100644 |
563 |
+zconf.lex.c |
564 |
zoffset.h |
565 |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt |
566 |
-index 30a8ad0d..2ed9efd 100644 |
567 |
+index b7fa2f5..90cd9f8 100644 |
568 |
--- a/Documentation/kernel-parameters.txt |
569 |
+++ b/Documentation/kernel-parameters.txt |
570 |
-@@ -1103,6 +1103,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. |
571 |
+@@ -1138,6 +1138,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. |
572 |
Format: <unsigned int> such that (rxsize & ~0x1fffc0) == 0. |
573 |
Default: 1024 |
574 |
|
575 |
@@ -249,7 +249,7 @@ index 30a8ad0d..2ed9efd 100644 |
576 |
hashdist= [KNL,NUMA] Large hashes allocated during boot |
577 |
are distributed across NUMA nodes. Defaults on |
578 |
for 64-bit NUMA, off otherwise. |
579 |
-@@ -2099,6 +2103,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. |
580 |
+@@ -2141,6 +2145,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. |
581 |
noexec=on: enable non-executable mappings (default) |
582 |
noexec=off: disable non-executable mappings |
583 |
|
584 |
@@ -260,7 +260,7 @@ index 30a8ad0d..2ed9efd 100644 |
585 |
nosmap [X86] |
586 |
Disable SMAP (Supervisor Mode Access Prevention) |
587 |
even if it is supported by processor. |
588 |
-@@ -2366,6 +2374,25 @@ bytes respectively. Such letter suffixes can also be entirely omitted. |
589 |
+@@ -2418,6 +2426,25 @@ bytes respectively. Such letter suffixes can also be entirely omitted. |
590 |
the specified number of seconds. This is to be used if |
591 |
your oopses keep scrolling off the screen. |
592 |
|
593 |
@@ -286,11 +286,509 @@ index 30a8ad0d..2ed9efd 100644 |
594 |
pcbit= [HW,ISDN] |
595 |
|
596 |
pcd. [PARIDE] |
597 |
+diff --git a/Documentation/networking/filter.txt b/Documentation/networking/filter.txt |
598 |
+index ee78eba..a06b48d 100644 |
599 |
+--- a/Documentation/networking/filter.txt |
600 |
++++ b/Documentation/networking/filter.txt |
601 |
+@@ -277,11 +277,10 @@ Possible BPF extensions are shown in the following table: |
602 |
+ mark skb->mark |
603 |
+ queue skb->queue_mapping |
604 |
+ hatype skb->dev->type |
605 |
+- rxhash skb->hash |
606 |
++ rxhash skb->rxhash |
607 |
+ cpu raw_smp_processor_id() |
608 |
+ vlan_tci vlan_tx_tag_get(skb) |
609 |
+ vlan_pr vlan_tx_tag_present(skb) |
610 |
+- rand prandom_u32() |
611 |
+ |
612 |
+ These extensions can also be prefixed with '#'. |
613 |
+ Examples for low-level BPF: |
614 |
+@@ -309,18 +308,6 @@ Examples for low-level BPF: |
615 |
+ ret #-1 |
616 |
+ drop: ret #0 |
617 |
+ |
618 |
+-** icmp random packet sampling, 1 in 4 |
619 |
+- ldh [12] |
620 |
+- jne #0x800, drop |
621 |
+- ldb [23] |
622 |
+- jneq #1, drop |
623 |
+- # get a random uint32 number |
624 |
+- ld rand |
625 |
+- mod #4 |
626 |
+- jneq #1, drop |
627 |
+- ret #-1 |
628 |
+- drop: ret #0 |
629 |
+- |
630 |
+ ** SECCOMP filter example: |
631 |
+ |
632 |
+ ld [4] /* offsetof(struct seccomp_data, arch) */ |
633 |
+@@ -559,456 +546,6 @@ ffffffffa0069c8f + <x>: |
634 |
+ For BPF JIT developers, bpf_jit_disasm, bpf_asm and bpf_dbg provides a useful |
635 |
+ toolchain for developing and testing the kernel's JIT compiler. |
636 |
+ |
637 |
+-BPF kernel internals |
638 |
+--------------------- |
639 |
+-Internally, for the kernel interpreter, a different instruction set |
640 |
+-format with similar underlying principles from BPF described in previous |
641 |
+-paragraphs is being used. However, the instruction set format is modelled |
642 |
+-closer to the underlying architecture to mimic native instruction sets, so |
643 |
+-that a better performance can be achieved (more details later). This new |
644 |
+-ISA is called 'eBPF' or 'internal BPF' interchangeably. (Note: eBPF which |
645 |
+-originates from [e]xtended BPF is not the same as BPF extensions! While |
646 |
+-eBPF is an ISA, BPF extensions date back to classic BPF's 'overloading' |
647 |
+-of BPF_LD | BPF_{B,H,W} | BPF_ABS instruction.) |
648 |
+- |
649 |
+-It is designed to be JITed with one to one mapping, which can also open up |
650 |
+-the possibility for GCC/LLVM compilers to generate optimized eBPF code through |
651 |
+-an eBPF backend that performs almost as fast as natively compiled code. |
652 |
+- |
653 |
+-The new instruction set was originally designed with the possible goal in |
654 |
+-mind to write programs in "restricted C" and compile into eBPF with a optional |
655 |
+-GCC/LLVM backend, so that it can just-in-time map to modern 64-bit CPUs with |
656 |
+-minimal performance overhead over two steps, that is, C -> eBPF -> native code. |
657 |
+- |
658 |
+-Currently, the new format is being used for running user BPF programs, which |
659 |
+-includes seccomp BPF, classic socket filters, cls_bpf traffic classifier, |
660 |
+-team driver's classifier for its load-balancing mode, netfilter's xt_bpf |
661 |
+-extension, PTP dissector/classifier, and much more. They are all internally |
662 |
+-converted by the kernel into the new instruction set representation and run |
663 |
+-in the eBPF interpreter. For in-kernel handlers, this all works transparently |
664 |
+-by using sk_unattached_filter_create() for setting up the filter, resp. |
665 |
+-sk_unattached_filter_destroy() for destroying it. The macro |
666 |
+-SK_RUN_FILTER(filter, ctx) transparently invokes eBPF interpreter or JITed |
667 |
+-code to run the filter. 'filter' is a pointer to struct sk_filter that we |
668 |
+-got from sk_unattached_filter_create(), and 'ctx' the given context (e.g. |
669 |
+-skb pointer). All constraints and restrictions from sk_chk_filter() apply |
670 |
+-before a conversion to the new layout is being done behind the scenes! |
671 |
+- |
672 |
+-Currently, the classic BPF format is being used for JITing on most of the |
673 |
+-architectures. Only x86-64 performs JIT compilation from eBPF instruction set, |
674 |
+-however, future work will migrate other JIT compilers as well, so that they |
675 |
+-will profit from the very same benefits. |
676 |
+- |
677 |
+-Some core changes of the new internal format: |
678 |
+- |
679 |
+-- Number of registers increase from 2 to 10: |
680 |
+- |
681 |
+- The old format had two registers A and X, and a hidden frame pointer. The |
682 |
+- new layout extends this to be 10 internal registers and a read-only frame |
683 |
+- pointer. Since 64-bit CPUs are passing arguments to functions via registers |
684 |
+- the number of args from eBPF program to in-kernel function is restricted |
685 |
+- to 5 and one register is used to accept return value from an in-kernel |
686 |
+- function. Natively, x86_64 passes first 6 arguments in registers, aarch64/ |
687 |
+- sparcv9/mips64 have 7 - 8 registers for arguments; x86_64 has 6 callee saved |
688 |
+- registers, and aarch64/sparcv9/mips64 have 11 or more callee saved registers. |
689 |
+- |
690 |
+- Therefore, eBPF calling convention is defined as: |
691 |
+- |
692 |
+- * R0 - return value from in-kernel function, and exit value for eBPF program |
693 |
+- * R1 - R5 - arguments from eBPF program to in-kernel function |
694 |
+- * R6 - R9 - callee saved registers that in-kernel function will preserve |
695 |
+- * R10 - read-only frame pointer to access stack |
696 |
+- |
697 |
+- Thus, all eBPF registers map one to one to HW registers on x86_64, aarch64, |
698 |
+- etc, and eBPF calling convention maps directly to ABIs used by the kernel on |
699 |
+- 64-bit architectures. |
700 |
+- |
701 |
+- On 32-bit architectures JIT may map programs that use only 32-bit arithmetic |
702 |
+- and may let more complex programs to be interpreted. |
703 |
+- |
704 |
+- R0 - R5 are scratch registers and eBPF program needs spill/fill them if |
705 |
+- necessary across calls. Note that there is only one eBPF program (== one |
706 |
+- eBPF main routine) and it cannot call other eBPF functions, it can only |
707 |
+- call predefined in-kernel functions, though. |
708 |
+- |
709 |
+-- Register width increases from 32-bit to 64-bit: |
710 |
+- |
711 |
+- Still, the semantics of the original 32-bit ALU operations are preserved |
712 |
+- via 32-bit subregisters. All eBPF registers are 64-bit with 32-bit lower |
713 |
+- subregisters that zero-extend into 64-bit if they are being written to. |
714 |
+- That behavior maps directly to x86_64 and arm64 subregister definition, but |
715 |
+- makes other JITs more difficult. |
716 |
+- |
717 |
+- 32-bit architectures run 64-bit internal BPF programs via interpreter. |
718 |
+- Their JITs may convert BPF programs that only use 32-bit subregisters into |
719 |
+- native instruction set and let the rest being interpreted. |
720 |
+- |
721 |
+- Operation is 64-bit, because on 64-bit architectures, pointers are also |
722 |
+- 64-bit wide, and we want to pass 64-bit values in/out of kernel functions, |
723 |
+- so 32-bit eBPF registers would otherwise require to define register-pair |
724 |
+- ABI, thus, there won't be able to use a direct eBPF register to HW register |
725 |
+- mapping and JIT would need to do combine/split/move operations for every |
726 |
+- register in and out of the function, which is complex, bug prone and slow. |
727 |
+- Another reason is the use of atomic 64-bit counters. |
728 |
+- |
729 |
+-- Conditional jt/jf targets replaced with jt/fall-through: |
730 |
+- |
731 |
+- While the original design has constructs such as "if (cond) jump_true; |
732 |
+- else jump_false;", they are being replaced into alternative constructs like |
733 |
+- "if (cond) jump_true; /* else fall-through */". |
734 |
+- |
735 |
+-- Introduces bpf_call insn and register passing convention for zero overhead |
736 |
+- calls from/to other kernel functions: |
737 |
+- |
738 |
+- Before an in-kernel function call, the internal BPF program needs to |
739 |
+- place function arguments into R1 to R5 registers to satisfy calling |
740 |
+- convention, then the interpreter will take them from registers and pass |
741 |
+- to in-kernel function. If R1 - R5 registers are mapped to CPU registers |
742 |
+- that are used for argument passing on given architecture, the JIT compiler |
743 |
+- doesn't need to emit extra moves. Function arguments will be in the correct |
744 |
+- registers and BPF_CALL instruction will be JITed as single 'call' HW |
745 |
+- instruction. This calling convention was picked to cover common call |
746 |
+- situations without performance penalty. |
747 |
+- |
748 |
+- After an in-kernel function call, R1 - R5 are reset to unreadable and R0 has |
749 |
+- a return value of the function. Since R6 - R9 are callee saved, their state |
750 |
+- is preserved across the call. |
751 |
+- |
752 |
+- For example, consider three C functions: |
753 |
+- |
754 |
+- u64 f1() { return (*_f2)(1); } |
755 |
+- u64 f2(u64 a) { return f3(a + 1, a); } |
756 |
+- u64 f3(u64 a, u64 b) { return a - b; } |
757 |
+- |
758 |
+- GCC can compile f1, f3 into x86_64: |
759 |
+- |
760 |
+- f1: |
761 |
+- movl $1, %edi |
762 |
+- movq _f2(%rip), %rax |
763 |
+- jmp *%rax |
764 |
+- f3: |
765 |
+- movq %rdi, %rax |
766 |
+- subq %rsi, %rax |
767 |
+- ret |
768 |
+- |
769 |
+- Function f2 in eBPF may look like: |
770 |
+- |
771 |
+- f2: |
772 |
+- bpf_mov R2, R1 |
773 |
+- bpf_add R1, 1 |
774 |
+- bpf_call f3 |
775 |
+- bpf_exit |
776 |
+- |
777 |
+- If f2 is JITed and the pointer stored to '_f2'. The calls f1 -> f2 -> f3 and |
778 |
+- returns will be seamless. Without JIT, __sk_run_filter() interpreter needs to |
779 |
+- be used to call into f2. |
780 |
+- |
781 |
+- For practical reasons all eBPF programs have only one argument 'ctx' which is |
782 |
+- already placed into R1 (e.g. on __sk_run_filter() startup) and the programs |
783 |
+- can call kernel functions with up to 5 arguments. Calls with 6 or more arguments |
784 |
+- are currently not supported, but these restrictions can be lifted if necessary |
785 |
+- in the future. |
786 |
+- |
787 |
+- On 64-bit architectures all register map to HW registers one to one. For |
788 |
+- example, x86_64 JIT compiler can map them as ... |
789 |
+- |
790 |
+- R0 - rax |
791 |
+- R1 - rdi |
792 |
+- R2 - rsi |
793 |
+- R3 - rdx |
794 |
+- R4 - rcx |
795 |
+- R5 - r8 |
796 |
+- R6 - rbx |
797 |
+- R7 - r13 |
798 |
+- R8 - r14 |
799 |
+- R9 - r15 |
800 |
+- R10 - rbp |
801 |
+- |
802 |
+- ... since x86_64 ABI mandates rdi, rsi, rdx, rcx, r8, r9 for argument passing |
803 |
+- and rbx, r12 - r15 are callee saved. |
804 |
+- |
805 |
+- Then the following internal BPF pseudo-program: |
806 |
+- |
807 |
+- bpf_mov R6, R1 /* save ctx */ |
808 |
+- bpf_mov R2, 2 |
809 |
+- bpf_mov R3, 3 |
810 |
+- bpf_mov R4, 4 |
811 |
+- bpf_mov R5, 5 |
812 |
+- bpf_call foo |
813 |
+- bpf_mov R7, R0 /* save foo() return value */ |
814 |
+- bpf_mov R1, R6 /* restore ctx for next call */ |
815 |
+- bpf_mov R2, 6 |
816 |
+- bpf_mov R3, 7 |
817 |
+- bpf_mov R4, 8 |
818 |
+- bpf_mov R5, 9 |
819 |
+- bpf_call bar |
820 |
+- bpf_add R0, R7 |
821 |
+- bpf_exit |
822 |
+- |
823 |
+- After JIT to x86_64 may look like: |
824 |
+- |
825 |
+- push %rbp |
826 |
+- mov %rsp,%rbp |
827 |
+- sub $0x228,%rsp |
828 |
+- mov %rbx,-0x228(%rbp) |
829 |
+- mov %r13,-0x220(%rbp) |
830 |
+- mov %rdi,%rbx |
831 |
+- mov $0x2,%esi |
832 |
+- mov $0x3,%edx |
833 |
+- mov $0x4,%ecx |
834 |
+- mov $0x5,%r8d |
835 |
+- callq foo |
836 |
+- mov %rax,%r13 |
837 |
+- mov %rbx,%rdi |
838 |
+- mov $0x2,%esi |
839 |
+- mov $0x3,%edx |
840 |
+- mov $0x4,%ecx |
841 |
+- mov $0x5,%r8d |
842 |
+- callq bar |
843 |
+- add %r13,%rax |
844 |
+- mov -0x228(%rbp),%rbx |
845 |
+- mov -0x220(%rbp),%r13 |
846 |
+- leaveq |
847 |
+- retq |
848 |
+- |
849 |
+- Which is in this example equivalent in C to: |
850 |
+- |
851 |
+- u64 bpf_filter(u64 ctx) |
852 |
+- { |
853 |
+- return foo(ctx, 2, 3, 4, 5) + bar(ctx, 6, 7, 8, 9); |
854 |
+- } |
855 |
+- |
856 |
+- In-kernel functions foo() and bar() with prototype: u64 (*)(u64 arg1, u64 |
857 |
+- arg2, u64 arg3, u64 arg4, u64 arg5); will receive arguments in proper |
858 |
+- registers and place their return value into '%rax' which is R0 in eBPF. |
859 |
+- Prologue and epilogue are emitted by JIT and are implicit in the |
860 |
+- interpreter. R0-R5 are scratch registers, so eBPF program needs to preserve |
861 |
+- them across the calls as defined by calling convention. |
862 |
+- |
863 |
+- For example the following program is invalid: |
864 |
+- |
865 |
+- bpf_mov R1, 1 |
866 |
+- bpf_call foo |
867 |
+- bpf_mov R0, R1 |
868 |
+- bpf_exit |
869 |
+- |
870 |
+- After the call the registers R1-R5 contain junk values and cannot be read. |
871 |
+- In the future an eBPF verifier can be used to validate internal BPF programs. |
872 |
+- |
873 |
+-Also in the new design, eBPF is limited to 4096 insns, which means that any |
874 |
+-program will terminate quickly and will only call a fixed number of kernel |
875 |
+-functions. Original BPF and the new format are two operand instructions, |
876 |
+-which helps to do one-to-one mapping between eBPF insn and x86 insn during JIT. |
877 |
+- |
878 |
+-The input context pointer for invoking the interpreter function is generic, |
879 |
+-its content is defined by a specific use case. For seccomp register R1 points |
880 |
+-to seccomp_data, for converted BPF filters R1 points to a skb. |
881 |
+- |
882 |
+-A program, that is translated internally consists of the following elements: |
883 |
+- |
884 |
+- op:16, jt:8, jf:8, k:32 ==> op:8, dst_reg:4, src_reg:4, off:16, imm:32 |
885 |
+- |
886 |
+-So far 87 internal BPF instructions were implemented. 8-bit 'op' opcode field |
887 |
+-has room for new instructions. Some of them may use 16/24/32 byte encoding. New |
888 |
+-instructions must be multiple of 8 bytes to preserve backward compatibility. |
889 |
+- |
890 |
+-Internal BPF is a general purpose RISC instruction set. Not every register and |
891 |
+-every instruction are used during translation from original BPF to new format. |
892 |
+-For example, socket filters are not using 'exclusive add' instruction, but |
893 |
+-tracing filters may do to maintain counters of events, for example. Register R9 |
894 |
+-is not used by socket filters either, but more complex filters may be running |
895 |
+-out of registers and would have to resort to spill/fill to stack. |
896 |
+- |
897 |
+-Internal BPF can used as generic assembler for last step performance |
898 |
+-optimizations, socket filters and seccomp are using it as assembler. Tracing |
899 |
+-filters may use it as assembler to generate code from kernel. In kernel usage |
900 |
+-may not be bounded by security considerations, since generated internal BPF code |
901 |
+-may be optimizing internal code path and not being exposed to the user space. |
902 |
+-Safety of internal BPF can come from a verifier (TBD). In such use cases as |
903 |
+-described, it may be used as safe instruction set. |
904 |
+- |
905 |
+-Just like the original BPF, the new format runs within a controlled environment, |
906 |
+-is deterministic and the kernel can easily prove that. The safety of the program |
907 |
+-can be determined in two steps: first step does depth-first-search to disallow |
908 |
+-loops and other CFG validation; second step starts from the first insn and |
909 |
+-descends all possible paths. It simulates execution of every insn and observes |
910 |
+-the state change of registers and stack. |
911 |
+- |
912 |
+-eBPF opcode encoding |
913 |
+--------------------- |
914 |
+- |
915 |
+-eBPF is reusing most of the opcode encoding from classic to simplify conversion |
916 |
+-of classic BPF to eBPF. For arithmetic and jump instructions the 8-bit 'code' |
917 |
+-field is divided into three parts: |
918 |
+- |
919 |
+- +----------------+--------+--------------------+ |
920 |
+- | 4 bits | 1 bit | 3 bits | |
921 |
+- | operation code | source | instruction class | |
922 |
+- +----------------+--------+--------------------+ |
923 |
+- (MSB) (LSB) |
924 |
+- |
925 |
+-Three LSB bits store instruction class which is one of: |
926 |
+- |
927 |
+- Classic BPF classes: eBPF classes: |
928 |
+- |
929 |
+- BPF_LD 0x00 BPF_LD 0x00 |
930 |
+- BPF_LDX 0x01 BPF_LDX 0x01 |
931 |
+- BPF_ST 0x02 BPF_ST 0x02 |
932 |
+- BPF_STX 0x03 BPF_STX 0x03 |
933 |
+- BPF_ALU 0x04 BPF_ALU 0x04 |
934 |
+- BPF_JMP 0x05 BPF_JMP 0x05 |
935 |
+- BPF_RET 0x06 [ class 6 unused, for future if needed ] |
936 |
+- BPF_MISC 0x07 BPF_ALU64 0x07 |
937 |
+- |
938 |
+-When BPF_CLASS(code) == BPF_ALU or BPF_JMP, 4th bit encodes source operand ... |
939 |
+- |
940 |
+- BPF_K 0x00 |
941 |
+- BPF_X 0x08 |
942 |
+- |
943 |
+- * in classic BPF, this means: |
944 |
+- |
945 |
+- BPF_SRC(code) == BPF_X - use register X as source operand |
946 |
+- BPF_SRC(code) == BPF_K - use 32-bit immediate as source operand |
947 |
+- |
948 |
+- * in eBPF, this means: |
949 |
+- |
950 |
+- BPF_SRC(code) == BPF_X - use 'src_reg' register as source operand |
951 |
+- BPF_SRC(code) == BPF_K - use 32-bit immediate as source operand |
952 |
+- |
953 |
+-... and four MSB bits store operation code. |
954 |
+- |
955 |
+-If BPF_CLASS(code) == BPF_ALU or BPF_ALU64 [ in eBPF ], BPF_OP(code) is one of: |
956 |
+- |
957 |
+- BPF_ADD 0x00 |
958 |
+- BPF_SUB 0x10 |
959 |
+- BPF_MUL 0x20 |
960 |
+- BPF_DIV 0x30 |
961 |
+- BPF_OR 0x40 |
962 |
+- BPF_AND 0x50 |
963 |
+- BPF_LSH 0x60 |
964 |
+- BPF_RSH 0x70 |
965 |
+- BPF_NEG 0x80 |
966 |
+- BPF_MOD 0x90 |
967 |
+- BPF_XOR 0xa0 |
968 |
+- BPF_MOV 0xb0 /* eBPF only: mov reg to reg */ |
969 |
+- BPF_ARSH 0xc0 /* eBPF only: sign extending shift right */ |
970 |
+- BPF_END 0xd0 /* eBPF only: endianness conversion */ |
971 |
+- |
972 |
+-If BPF_CLASS(code) == BPF_JMP, BPF_OP(code) is one of: |
973 |
+- |
974 |
+- BPF_JA 0x00 |
975 |
+- BPF_JEQ 0x10 |
976 |
+- BPF_JGT 0x20 |
977 |
+- BPF_JGE 0x30 |
978 |
+- BPF_JSET 0x40 |
979 |
+- BPF_JNE 0x50 /* eBPF only: jump != */ |
980 |
+- BPF_JSGT 0x60 /* eBPF only: signed '>' */ |
981 |
+- BPF_JSGE 0x70 /* eBPF only: signed '>=' */ |
982 |
+- BPF_CALL 0x80 /* eBPF only: function call */ |
983 |
+- BPF_EXIT 0x90 /* eBPF only: function return */ |
984 |
+- |
985 |
+-So BPF_ADD | BPF_X | BPF_ALU means 32-bit addition in both classic BPF |
986 |
+-and eBPF. There are only two registers in classic BPF, so it means A += X. |
987 |
+-In eBPF it means dst_reg = (u32) dst_reg + (u32) src_reg; similarly, |
988 |
+-BPF_XOR | BPF_K | BPF_ALU means A ^= imm32 in classic BPF and analogous |
989 |
+-src_reg = (u32) src_reg ^ (u32) imm32 in eBPF. |
990 |
+- |
991 |
+-Classic BPF is using BPF_MISC class to represent A = X and X = A moves. |
992 |
+-eBPF is using BPF_MOV | BPF_X | BPF_ALU code instead. Since there are no |
993 |
+-BPF_MISC operations in eBPF, the class 7 is used as BPF_ALU64 to mean |
994 |
+-exactly the same operations as BPF_ALU, but with 64-bit wide operands |
995 |
+-instead. So BPF_ADD | BPF_X | BPF_ALU64 means 64-bit addition, i.e.: |
996 |
+-dst_reg = dst_reg + src_reg |
997 |
+- |
998 |
+-Classic BPF wastes the whole BPF_RET class to represent a single 'ret' |
999 |
+-operation. Classic BPF_RET | BPF_K means copy imm32 into return register |
1000 |
+-and perform function exit. eBPF is modeled to match CPU, so BPF_JMP | BPF_EXIT |
1001 |
+-in eBPF means function exit only. The eBPF program needs to store return |
1002 |
+-value into register R0 before doing a BPF_EXIT. Class 6 in eBPF is currently |
1003 |
+-unused and reserved for future use. |
1004 |
+- |
1005 |
+-For load and store instructions the 8-bit 'code' field is divided as: |
1006 |
+- |
1007 |
+- +--------+--------+-------------------+ |
1008 |
+- | 3 bits | 2 bits | 3 bits | |
1009 |
+- | mode | size | instruction class | |
1010 |
+- +--------+--------+-------------------+ |
1011 |
+- (MSB) (LSB) |
1012 |
+- |
1013 |
+-Size modifier is one of ... |
1014 |
+- |
1015 |
+- BPF_W 0x00 /* word */ |
1016 |
+- BPF_H 0x08 /* half word */ |
1017 |
+- BPF_B 0x10 /* byte */ |
1018 |
+- BPF_DW 0x18 /* eBPF only, double word */ |
1019 |
+- |
1020 |
+-... which encodes size of load/store operation: |
1021 |
+- |
1022 |
+- B - 1 byte |
1023 |
+- H - 2 byte |
1024 |
+- W - 4 byte |
1025 |
+- DW - 8 byte (eBPF only) |
1026 |
+- |
1027 |
+-Mode modifier is one of: |
1028 |
+- |
1029 |
+- BPF_IMM 0x00 /* classic BPF only, reserved in eBPF */ |
1030 |
+- BPF_ABS 0x20 |
1031 |
+- BPF_IND 0x40 |
1032 |
+- BPF_MEM 0x60 |
1033 |
+- BPF_LEN 0x80 /* classic BPF only, reserved in eBPF */ |
1034 |
+- BPF_MSH 0xa0 /* classic BPF only, reserved in eBPF */ |
1035 |
+- BPF_XADD 0xc0 /* eBPF only, exclusive add */ |
1036 |
+- |
1037 |
+-eBPF has two non-generic instructions: (BPF_ABS | <size> | BPF_LD) and |
1038 |
+-(BPF_IND | <size> | BPF_LD) which are used to access packet data. |
1039 |
+- |
1040 |
+-They had to be carried over from classic to have strong performance of |
1041 |
+-socket filters running in eBPF interpreter. These instructions can only |
1042 |
+-be used when interpreter context is a pointer to 'struct sk_buff' and |
1043 |
+-have seven implicit operands. Register R6 is an implicit input that must |
1044 |
+-contain pointer to sk_buff. Register R0 is an implicit output which contains |
1045 |
+-the data fetched from the packet. Registers R1-R5 are scratch registers |
1046 |
+-and must not be used to store the data across BPF_ABS | BPF_LD or |
1047 |
+-BPF_IND | BPF_LD instructions. |
1048 |
+- |
1049 |
+-These instructions have implicit program exit condition as well. When |
1050 |
+-eBPF program is trying to access the data beyond the packet boundary, |
1051 |
+-the interpreter will abort the execution of the program. JIT compilers |
1052 |
+-therefore must preserve this property. src_reg and imm32 fields are |
1053 |
+-explicit inputs to these instructions. |
1054 |
+- |
1055 |
+-For example: |
1056 |
+- |
1057 |
+- BPF_IND | BPF_W | BPF_LD means: |
1058 |
+- |
1059 |
+- R0 = ntohl(*(u32 *) (((struct sk_buff *) R6)->data + src_reg + imm32)) |
1060 |
+- and R1 - R5 were scratched. |
1061 |
+- |
1062 |
+-Unlike classic BPF instruction set, eBPF has generic load/store operations: |
1063 |
+- |
1064 |
+-BPF_MEM | <size> | BPF_STX: *(size *) (dst_reg + off) = src_reg |
1065 |
+-BPF_MEM | <size> | BPF_ST: *(size *) (dst_reg + off) = imm32 |
1066 |
+-BPF_MEM | <size> | BPF_LDX: dst_reg = *(size *) (src_reg + off) |
1067 |
+-BPF_XADD | BPF_W | BPF_STX: lock xadd *(u32 *)(dst_reg + off16) += src_reg |
1068 |
+-BPF_XADD | BPF_DW | BPF_STX: lock xadd *(u64 *)(dst_reg + off16) += src_reg |
1069 |
+- |
1070 |
+-Where size is one of: BPF_B or BPF_H or BPF_W or BPF_DW. Note that 1 and |
1071 |
+-2 byte atomic increments are not supported. |
1072 |
+- |
1073 |
+-Testing |
1074 |
+-------- |
1075 |
+- |
1076 |
+-Next to the BPF toolchain, the kernel also ships a test module that contains |
1077 |
+-various test cases for classic and internal BPF that can be executed against |
1078 |
+-the BPF interpreter and JIT compiler. It can be found in lib/test_bpf.c and |
1079 |
+-enabled via Kconfig: |
1080 |
+- |
1081 |
+- CONFIG_TEST_BPF=m |
1082 |
+- |
1083 |
+-After the module has been built and installed, the test suite can be executed |
1084 |
+-via insmod or modprobe against 'test_bpf' module. Results of the test cases |
1085 |
+-including timings in nsec can be found in the kernel log (dmesg). |
1086 |
+- |
1087 |
+ Misc |
1088 |
+ ---- |
1089 |
+ |
1090 |
+@@ -1024,4 +561,3 @@ the underlying architecture. |
1091 |
+ |
1092 |
+ Jay Schulist <jschlst@×××××.org> |
1093 |
+ Daniel Borkmann <dborkman@××××××.com> |
1094 |
+-Alexei Starovoitov <ast@××××××××.com> |
1095 |
diff --git a/Makefile b/Makefile |
1096 |
-index 76b75f7b84..34cd7f7 100644 |
1097 |
+index 87663a2..906dc62 100644 |
1098 |
--- a/Makefile |
1099 |
+++ b/Makefile |
1100 |
-@@ -245,8 +245,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ |
1101 |
+@@ -303,8 +303,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ |
1102 |
|
1103 |
HOSTCC = gcc |
1104 |
HOSTCXX = g++ |
1105 |
@@ -302,7 +800,7 @@ index 76b75f7b84..34cd7f7 100644 |
1106 |
|
1107 |
ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1) |
1108 |
HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \ |
1109 |
-@@ -438,8 +439,8 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \ |
1110 |
+@@ -449,8 +450,8 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \ |
1111 |
# Rules shared between *config targets and build targets |
1112 |
|
1113 |
# Basic helpers built in scripts/ |
1114 |
@@ -313,7 +811,7 @@ index 76b75f7b84..34cd7f7 100644 |
1115 |
$(Q)$(MAKE) $(build)=scripts/basic |
1116 |
$(Q)rm -f .tmp_quiet_recordmcount |
1117 |
|
1118 |
-@@ -600,6 +601,75 @@ else |
1119 |
+@@ -621,6 +622,75 @@ else |
1120 |
KBUILD_CFLAGS += -O2 |
1121 |
endif |
1122 |
|
1123 |
@@ -386,10 +884,10 @@ index 76b75f7b84..34cd7f7 100644 |
1124 |
+endif |
1125 |
+endif |
1126 |
+ |
1127 |
- include $(srctree)/arch/$(SRCARCH)/Makefile |
1128 |
- |
1129 |
ifdef CONFIG_READABLE_ASM |
1130 |
-@@ -818,7 +888,7 @@ export mod_sign_cmd |
1131 |
+ # Disable optimizations that make assembler listings hard to read. |
1132 |
+ # reorder blocks reorders the control in the function |
1133 |
+@@ -839,7 +909,7 @@ export mod_sign_cmd |
1134 |
|
1135 |
|
1136 |
ifeq ($(KBUILD_EXTMOD),) |
1137 |
@@ -398,16 +896,16 @@ index 76b75f7b84..34cd7f7 100644 |
1138 |
|
1139 |
vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \ |
1140 |
$(core-y) $(core-m) $(drivers-y) $(drivers-m) \ |
1141 |
-@@ -867,6 +937,8 @@ endif |
1142 |
+@@ -888,6 +958,8 @@ endif |
1143 |
|
1144 |
- # The actual objects are generated when descending, |
1145 |
+ # The actual objects are generated when descending, |
1146 |
# make sure no implicit rule kicks in |
1147 |
+$(filter-out $(init-y),$(vmlinux-deps)): KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) |
1148 |
+$(filter-out $(init-y),$(vmlinux-deps)): KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) |
1149 |
$(sort $(vmlinux-deps)): $(vmlinux-dirs) ; |
1150 |
|
1151 |
# Handle descending into subdirectories listed in $(vmlinux-dirs) |
1152 |
-@@ -876,7 +948,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ; |
1153 |
+@@ -897,7 +969,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ; |
1154 |
# Error messages still appears in the original language |
1155 |
|
1156 |
PHONY += $(vmlinux-dirs) |
1157 |
@@ -416,7 +914,7 @@ index 76b75f7b84..34cd7f7 100644 |
1158 |
$(Q)$(MAKE) $(build)=$@ |
1159 |
|
1160 |
define filechk_kernel.release |
1161 |
-@@ -919,10 +991,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \ |
1162 |
+@@ -940,10 +1012,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \ |
1163 |
|
1164 |
archprepare: archheaders archscripts prepare1 scripts_basic |
1165 |
|
1166 |
@@ -430,8 +928,8 @@ index 76b75f7b84..34cd7f7 100644 |
1167 |
prepare: prepare0 |
1168 |
|
1169 |
# Generate some files |
1170 |
-@@ -1030,6 +1105,8 @@ all: modules |
1171 |
- # using awk while concatenating to the final file. |
1172 |
+@@ -1051,6 +1126,8 @@ all: modules |
1173 |
+ # using awk while concatenating to the final file. |
1174 |
|
1175 |
PHONY += modules |
1176 |
+modules: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) |
1177 |
@@ -439,7 +937,7 @@ index 76b75f7b84..34cd7f7 100644 |
1178 |
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin |
1179 |
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order |
1180 |
@$(kecho) ' Building modules, stage 2.'; |
1181 |
-@@ -1045,7 +1122,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin) |
1182 |
+@@ -1066,7 +1143,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin) |
1183 |
|
1184 |
# Target to prepare building external modules |
1185 |
PHONY += modules_prepare |
1186 |
@@ -448,7 +946,7 @@ index 76b75f7b84..34cd7f7 100644 |
1187 |
|
1188 |
# Target to install modules |
1189 |
PHONY += modules_install |
1190 |
-@@ -1111,7 +1188,10 @@ MRPROPER_FILES += .config .config.old .version .old_version $(version_h) \ |
1191 |
+@@ -1132,7 +1209,10 @@ MRPROPER_FILES += .config .config.old .version .old_version $(version_h) \ |
1192 |
Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \ |
1193 |
signing_key.priv signing_key.x509 x509.genkey \ |
1194 |
extra_certificates signing_key.x509.keyid \ |
1195 |
@@ -460,7 +958,7 @@ index 76b75f7b84..34cd7f7 100644 |
1196 |
|
1197 |
# clean - Delete most, but leave enough to build external modules |
1198 |
# |
1199 |
-@@ -1150,7 +1230,7 @@ distclean: mrproper |
1200 |
+@@ -1171,7 +1251,7 @@ distclean: mrproper |
1201 |
@find $(srctree) $(RCS_FIND_IGNORE) \ |
1202 |
\( -name '*.orig' -o -name '*.rej' -o -name '*~' \ |
1203 |
-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ |
1204 |
@@ -469,7 +967,7 @@ index 76b75f7b84..34cd7f7 100644 |
1205 |
-type f -print | xargs rm -f |
1206 |
|
1207 |
|
1208 |
-@@ -1311,6 +1391,8 @@ PHONY += $(module-dirs) modules |
1209 |
+@@ -1332,6 +1412,8 @@ PHONY += $(module-dirs) modules |
1210 |
$(module-dirs): crmodverdir $(objtree)/Module.symvers |
1211 |
$(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@) |
1212 |
|
1213 |
@@ -478,7 +976,7 @@ index 76b75f7b84..34cd7f7 100644 |
1214 |
modules: $(module-dirs) |
1215 |
@$(kecho) ' Building modules, stage 2.'; |
1216 |
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost |
1217 |
-@@ -1450,17 +1532,21 @@ else |
1218 |
+@@ -1471,17 +1553,21 @@ else |
1219 |
target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@)) |
1220 |
endif |
1221 |
|
1222 |
@@ -504,7 +1002,7 @@ index 76b75f7b84..34cd7f7 100644 |
1223 |
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) |
1224 |
%.symtypes: %.c prepare scripts FORCE |
1225 |
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) |
1226 |
-@@ -1470,11 +1556,15 @@ endif |
1227 |
+@@ -1491,11 +1577,15 @@ endif |
1228 |
$(cmd_crmodverdir) |
1229 |
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ |
1230 |
$(build)=$(build-dir) |
1231 |
@@ -523,10 +1021,10 @@ index 76b75f7b84..34cd7f7 100644 |
1232 |
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ |
1233 |
$(build)=$(build-dir) $(@:.ko=.o) |
1234 |
diff --git a/arch/alpha/include/asm/atomic.h b/arch/alpha/include/asm/atomic.h |
1235 |
-index 78b03ef..da28a51 100644 |
1236 |
+index ed60a1e..47f1a55 100644 |
1237 |
--- a/arch/alpha/include/asm/atomic.h |
1238 |
+++ b/arch/alpha/include/asm/atomic.h |
1239 |
-@@ -292,6 +292,16 @@ static inline long atomic64_dec_if_positive(atomic64_t *v) |
1240 |
+@@ -292,4 +292,14 @@ static inline long atomic64_dec_if_positive(atomic64_t *v) |
1241 |
#define atomic_dec(v) atomic_sub(1,(v)) |
1242 |
#define atomic64_dec(v) atomic64_sub(1,(v)) |
1243 |
|
1244 |
@@ -540,9 +1038,7 @@ index 78b03ef..da28a51 100644 |
1245 |
+#define atomic64_dec_unchecked(v) atomic64_dec(v) |
1246 |
+#define atomic64_cmpxchg_unchecked(v, o, n) atomic64_cmpxchg((v), (o), (n)) |
1247 |
+ |
1248 |
- #define smp_mb__before_atomic_dec() smp_mb() |
1249 |
- #define smp_mb__after_atomic_dec() smp_mb() |
1250 |
- #define smp_mb__before_atomic_inc() smp_mb() |
1251 |
+ #endif /* _ALPHA_ATOMIC_H */ |
1252 |
diff --git a/arch/alpha/include/asm/cache.h b/arch/alpha/include/asm/cache.h |
1253 |
index ad368a9..fbe0f25 100644 |
1254 |
--- a/arch/alpha/include/asm/cache.h |
1255 |
@@ -855,10 +1351,10 @@ index 98838a0..b304fb4 100644 |
1256 |
/* Allow reads even for write-only mappings */ |
1257 |
if (!(vma->vm_flags & (VM_READ | VM_WRITE))) |
1258 |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig |
1259 |
-index 34c7a24..592fca9 100644 |
1260 |
+index 290f02ee..a639059 100644 |
1261 |
--- a/arch/arm/Kconfig |
1262 |
+++ b/arch/arm/Kconfig |
1263 |
-@@ -1878,7 +1878,7 @@ config ALIGNMENT_TRAP |
1264 |
+@@ -1787,7 +1787,7 @@ config ALIGNMENT_TRAP |
1265 |
|
1266 |
config UACCESS_WITH_MEMCPY |
1267 |
bool "Use kernel mem{cpy,set}() for {copy_to,clear}_user()" |
1268 |
@@ -867,7 +1363,7 @@ index 34c7a24..592fca9 100644 |
1269 |
default y if CPU_FEROCEON |
1270 |
help |
1271 |
Implement faster copy_to_user and clear_user methods for CPU |
1272 |
-@@ -2142,6 +2142,7 @@ config XIP_PHYS_ADDR |
1273 |
+@@ -2051,6 +2051,7 @@ config XIP_PHYS_ADDR |
1274 |
config KEXEC |
1275 |
bool "Kexec system call (EXPERIMENTAL)" |
1276 |
depends on (!SMP || PM_SLEEP_SMP) |
1277 |
@@ -876,7 +1372,7 @@ index 34c7a24..592fca9 100644 |
1278 |
kexec is a system call that implements the ability to shutdown your |
1279 |
current kernel, and to start another kernel. It is like a reboot |
1280 |
diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h |
1281 |
-index 9a92fd7..3502a80 100644 |
1282 |
+index 3040359..89b3dfc 100644 |
1283 |
--- a/arch/arm/include/asm/atomic.h |
1284 |
+++ b/arch/arm/include/asm/atomic.h |
1285 |
@@ -18,17 +18,35 @@ |
1286 |
@@ -1193,7 +1689,7 @@ index 9a92fd7..3502a80 100644 |
1287 |
#define atomic_dec_return(v) (atomic_sub_return(1, v)) |
1288 |
#define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0) |
1289 |
|
1290 |
-@@ -251,6 +453,14 @@ typedef struct { |
1291 |
+@@ -246,6 +448,14 @@ typedef struct { |
1292 |
long long counter; |
1293 |
} atomic64_t; |
1294 |
|
1295 |
@@ -1208,7 +1704,7 @@ index 9a92fd7..3502a80 100644 |
1296 |
#define ATOMIC64_INIT(i) { (i) } |
1297 |
|
1298 |
#ifdef CONFIG_ARM_LPAE |
1299 |
-@@ -267,6 +477,19 @@ static inline long long atomic64_read(const atomic64_t *v) |
1300 |
+@@ -262,6 +472,19 @@ static inline long long atomic64_read(const atomic64_t *v) |
1301 |
return result; |
1302 |
} |
1303 |
|
1304 |
@@ -1228,7 +1724,7 @@ index 9a92fd7..3502a80 100644 |
1305 |
static inline void atomic64_set(atomic64_t *v, long long i) |
1306 |
{ |
1307 |
__asm__ __volatile__("@ atomic64_set\n" |
1308 |
-@@ -275,6 +498,15 @@ static inline void atomic64_set(atomic64_t *v, long long i) |
1309 |
+@@ -270,6 +493,15 @@ static inline void atomic64_set(atomic64_t *v, long long i) |
1310 |
: "r" (&v->counter), "r" (i) |
1311 |
); |
1312 |
} |
1313 |
@@ -1244,7 +1740,7 @@ index 9a92fd7..3502a80 100644 |
1314 |
#else |
1315 |
static inline long long atomic64_read(const atomic64_t *v) |
1316 |
{ |
1317 |
-@@ -289,6 +521,19 @@ static inline long long atomic64_read(const atomic64_t *v) |
1318 |
+@@ -284,6 +516,19 @@ static inline long long atomic64_read(const atomic64_t *v) |
1319 |
return result; |
1320 |
} |
1321 |
|
1322 |
@@ -1264,7 +1760,7 @@ index 9a92fd7..3502a80 100644 |
1323 |
static inline void atomic64_set(atomic64_t *v, long long i) |
1324 |
{ |
1325 |
long long tmp; |
1326 |
-@@ -303,6 +548,21 @@ static inline void atomic64_set(atomic64_t *v, long long i) |
1327 |
+@@ -298,6 +543,21 @@ static inline void atomic64_set(atomic64_t *v, long long i) |
1328 |
: "r" (&v->counter), "r" (i) |
1329 |
: "cc"); |
1330 |
} |
1331 |
@@ -1286,7 +1782,7 @@ index 9a92fd7..3502a80 100644 |
1332 |
#endif |
1333 |
|
1334 |
static inline void atomic64_add(long long i, atomic64_t *v) |
1335 |
-@@ -314,6 +574,37 @@ static inline void atomic64_add(long long i, atomic64_t *v) |
1336 |
+@@ -309,6 +569,37 @@ static inline void atomic64_add(long long i, atomic64_t *v) |
1337 |
__asm__ __volatile__("@ atomic64_add\n" |
1338 |
"1: ldrexd %0, %H0, [%3]\n" |
1339 |
" adds %Q0, %Q0, %Q4\n" |
1340 |
@@ -1324,7 +1820,7 @@ index 9a92fd7..3502a80 100644 |
1341 |
" adc %R0, %R0, %R4\n" |
1342 |
" strexd %1, %0, %H0, [%3]\n" |
1343 |
" teq %1, #0\n" |
1344 |
-@@ -334,6 +625,44 @@ static inline long long atomic64_add_return(long long i, atomic64_t *v) |
1345 |
+@@ -329,6 +620,44 @@ static inline long long atomic64_add_return(long long i, atomic64_t *v) |
1346 |
__asm__ __volatile__("@ atomic64_add_return\n" |
1347 |
"1: ldrexd %0, %H0, [%3]\n" |
1348 |
" adds %Q0, %Q0, %Q4\n" |
1349 |
@@ -1369,7 +1865,7 @@ index 9a92fd7..3502a80 100644 |
1350 |
" adc %R0, %R0, %R4\n" |
1351 |
" strexd %1, %0, %H0, [%3]\n" |
1352 |
" teq %1, #0\n" |
1353 |
-@@ -356,6 +685,37 @@ static inline void atomic64_sub(long long i, atomic64_t *v) |
1354 |
+@@ -351,6 +680,37 @@ static inline void atomic64_sub(long long i, atomic64_t *v) |
1355 |
__asm__ __volatile__("@ atomic64_sub\n" |
1356 |
"1: ldrexd %0, %H0, [%3]\n" |
1357 |
" subs %Q0, %Q0, %Q4\n" |
1358 |
@@ -1407,7 +1903,7 @@ index 9a92fd7..3502a80 100644 |
1359 |
" sbc %R0, %R0, %R4\n" |
1360 |
" strexd %1, %0, %H0, [%3]\n" |
1361 |
" teq %1, #0\n" |
1362 |
-@@ -376,16 +736,29 @@ static inline long long atomic64_sub_return(long long i, atomic64_t *v) |
1363 |
+@@ -371,16 +731,29 @@ static inline long long atomic64_sub_return(long long i, atomic64_t *v) |
1364 |
__asm__ __volatile__("@ atomic64_sub_return\n" |
1365 |
"1: ldrexd %0, %H0, [%3]\n" |
1366 |
" subs %Q0, %Q0, %Q4\n" |
1367 |
@@ -1440,7 +1936,7 @@ index 9a92fd7..3502a80 100644 |
1368 |
return result; |
1369 |
} |
1370 |
|
1371 |
-@@ -415,6 +788,31 @@ static inline long long atomic64_cmpxchg(atomic64_t *ptr, long long old, |
1372 |
+@@ -410,6 +783,31 @@ static inline long long atomic64_cmpxchg(atomic64_t *ptr, long long old, |
1373 |
return oldval; |
1374 |
} |
1375 |
|
1376 |
@@ -1472,7 +1968,7 @@ index 9a92fd7..3502a80 100644 |
1377 |
static inline long long atomic64_xchg(atomic64_t *ptr, long long new) |
1378 |
{ |
1379 |
long long result; |
1380 |
-@@ -440,21 +838,35 @@ static inline long long atomic64_xchg(atomic64_t *ptr, long long new) |
1381 |
+@@ -435,21 +833,35 @@ static inline long long atomic64_xchg(atomic64_t *ptr, long long new) |
1382 |
static inline long long atomic64_dec_if_positive(atomic64_t *v) |
1383 |
{ |
1384 |
long long result; |
1385 |
@@ -1514,7 +2010,7 @@ index 9a92fd7..3502a80 100644 |
1386 |
: "=&r" (result), "=&r" (tmp), "+Qo" (v->counter) |
1387 |
: "r" (&v->counter) |
1388 |
: "cc"); |
1389 |
-@@ -478,13 +890,25 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u) |
1390 |
+@@ -473,13 +885,25 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u) |
1391 |
" teq %0, %5\n" |
1392 |
" teqeq %H0, %H5\n" |
1393 |
" moveq %1, #0\n" |
1394 |
@@ -1543,7 +2039,7 @@ index 9a92fd7..3502a80 100644 |
1395 |
: "=&r" (val), "+r" (ret), "=&r" (tmp), "+Qo" (v->counter) |
1396 |
: "r" (&v->counter), "r" (u), "r" (a) |
1397 |
: "cc"); |
1398 |
-@@ -497,10 +921,13 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u) |
1399 |
+@@ -492,10 +916,13 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u) |
1400 |
|
1401 |
#define atomic64_add_negative(a, v) (atomic64_add_return((a), (v)) < 0) |
1402 |
#define atomic64_inc(v) atomic64_add(1LL, (v)) |
1403 |
@@ -1558,7 +2054,7 @@ index 9a92fd7..3502a80 100644 |
1404 |
#define atomic64_dec_and_test(v) (atomic64_dec_return((v)) == 0) |
1405 |
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1LL, 0LL) |
1406 |
diff --git a/arch/arm/include/asm/barrier.h b/arch/arm/include/asm/barrier.h |
1407 |
-index 2f59f74..1594659 100644 |
1408 |
+index c6a3e73..35cca85 100644 |
1409 |
--- a/arch/arm/include/asm/barrier.h |
1410 |
+++ b/arch/arm/include/asm/barrier.h |
1411 |
@@ -63,7 +63,7 @@ |
1412 |
@@ -1594,7 +2090,7 @@ index 75fe66b..ba3dee4 100644 |
1413 |
|
1414 |
#endif |
1415 |
diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h |
1416 |
-index 8b8b616..d973d24 100644 |
1417 |
+index fd43f7f..a817f5a 100644 |
1418 |
--- a/arch/arm/include/asm/cacheflush.h |
1419 |
+++ b/arch/arm/include/asm/cacheflush.h |
1420 |
@@ -116,7 +116,7 @@ struct cpu_cache_fns { |
1421 |
@@ -1863,13 +2359,13 @@ index f98c7f3..e5c626d 100644 |
1422 |
MT_MEMORY_DMA_READY, |
1423 |
}; |
1424 |
diff --git a/arch/arm/include/asm/outercache.h b/arch/arm/include/asm/outercache.h |
1425 |
-index f94784f..9a09a4a 100644 |
1426 |
+index 891a56b..48f337e 100644 |
1427 |
--- a/arch/arm/include/asm/outercache.h |
1428 |
+++ b/arch/arm/include/asm/outercache.h |
1429 |
-@@ -35,7 +35,7 @@ struct outer_cache_fns { |
1430 |
- #endif |
1431 |
- void (*set_debug)(unsigned long); |
1432 |
- void (*resume)(void); |
1433 |
+@@ -36,7 +36,7 @@ struct outer_cache_fns { |
1434 |
+ |
1435 |
+ /* This is an ARM L2C thing */ |
1436 |
+ void (*write_sec)(unsigned long, unsigned); |
1437 |
-}; |
1438 |
+} __no_const; |
1439 |
|
1440 |
@@ -2133,13 +2629,13 @@ index 5478e5d..f5b5cb3 100644 |
1441 |
return pte; |
1442 |
} |
1443 |
diff --git a/arch/arm/include/asm/psci.h b/arch/arm/include/asm/psci.h |
1444 |
-index c4ae171..ea0c0c2 100644 |
1445 |
+index c25ef3e..735f14b 100644 |
1446 |
--- a/arch/arm/include/asm/psci.h |
1447 |
+++ b/arch/arm/include/asm/psci.h |
1448 |
-@@ -29,7 +29,7 @@ struct psci_operations { |
1449 |
- int (*cpu_off)(struct psci_power_state state); |
1450 |
- int (*cpu_on)(unsigned long cpuid, unsigned long entry_point); |
1451 |
- int (*migrate)(unsigned long cpuid); |
1452 |
+@@ -32,7 +32,7 @@ struct psci_operations { |
1453 |
+ int (*affinity_info)(unsigned long target_affinity, |
1454 |
+ unsigned long lowest_affinity_level); |
1455 |
+ int (*migrate_info_type)(void); |
1456 |
-}; |
1457 |
+} __no_const; |
1458 |
|
1459 |
@@ -2159,7 +2655,7 @@ index 2ec765c..beb1fe16 100644 |
1460 |
struct of_cpu_method { |
1461 |
const char *method; |
1462 |
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h |
1463 |
-index f989d7c..e8aa7f0 100644 |
1464 |
+index e4e4208..086684a 100644 |
1465 |
--- a/arch/arm/include/asm/thread_info.h |
1466 |
+++ b/arch/arm/include/asm/thread_info.h |
1467 |
@@ -88,9 +88,9 @@ struct thread_info { |
1468 |
@@ -2175,7 +2671,7 @@ index f989d7c..e8aa7f0 100644 |
1469 |
.restart_block = { \ |
1470 |
.fn = do_no_restart_syscall, \ |
1471 |
}, \ |
1472 |
-@@ -158,7 +158,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, |
1473 |
+@@ -164,7 +164,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, |
1474 |
#define TIF_SYSCALL_AUDIT 9 |
1475 |
#define TIF_SYSCALL_TRACEPOINT 10 |
1476 |
#define TIF_SECCOMP 11 /* seccomp syscall filtering active */ |
1477 |
@@ -2188,7 +2684,7 @@ index f989d7c..e8aa7f0 100644 |
1478 |
#define TIF_USING_IWMMXT 17 |
1479 |
#define TIF_MEMDIE 18 /* is terminating due to OOM killer */ |
1480 |
#define TIF_RESTORE_SIGMASK 20 |
1481 |
-@@ -172,10 +176,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, |
1482 |
+@@ -178,10 +182,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, |
1483 |
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) |
1484 |
#define _TIF_SECCOMP (1 << TIF_SECCOMP) |
1485 |
#define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT) |
1486 |
@@ -2433,7 +2929,7 @@ index f7b450f..f5364c5 100644 |
1487 |
EXPORT_SYMBOL(__get_user_1); |
1488 |
EXPORT_SYMBOL(__get_user_2); |
1489 |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S |
1490 |
-index 1879e8d..5602dd4 100644 |
1491 |
+index 52a949a..d8bbcab 100644 |
1492 |
--- a/arch/arm/kernel/entry-armv.S |
1493 |
+++ b/arch/arm/kernel/entry-armv.S |
1494 |
@@ -47,6 +47,87 @@ |
1495 |
@@ -2575,7 +3071,7 @@ index 1879e8d..5602dd4 100644 |
1496 |
sub sp, sp, #S_FRAME_SIZE |
1497 |
ARM( stmib sp, {r1 - r12} ) |
1498 |
THUMB( stmia sp, {r0 - r12} ) |
1499 |
-@@ -416,7 +513,9 @@ __und_usr: |
1500 |
+@@ -421,7 +518,9 @@ __und_usr: |
1501 |
tst r3, #PSR_T_BIT @ Thumb mode? |
1502 |
bne __und_usr_thumb |
1503 |
sub r4, r2, #4 @ ARM instr at LR - 4 |
1504 |
@@ -2585,7 +3081,7 @@ index 1879e8d..5602dd4 100644 |
1505 |
ARM_BE8(rev r0, r0) @ little endian instruction |
1506 |
|
1507 |
@ r0 = 32-bit ARM instruction which caused the exception |
1508 |
-@@ -450,11 +549,15 @@ __und_usr_thumb: |
1509 |
+@@ -455,11 +554,15 @@ __und_usr_thumb: |
1510 |
*/ |
1511 |
.arch armv6t2 |
1512 |
#endif |
1513 |
@@ -2601,17 +3097,17 @@ index 1879e8d..5602dd4 100644 |
1514 |
ARM_BE8(rev16 r0, r0) @ little endian instruction |
1515 |
add r2, r2, #2 @ r2 is PC + 2, make it PC + 4 |
1516 |
str r2, [sp, #S_PC] @ it's a 2x16bit instr, update |
1517 |
-@@ -484,7 +587,8 @@ ENDPROC(__und_usr) |
1518 |
+@@ -489,7 +592,8 @@ ENDPROC(__und_usr) |
1519 |
*/ |
1520 |
.pushsection .fixup, "ax" |
1521 |
.align 2 |
1522 |
--4: mov pc, r9 |
1523 |
+-4: str r4, [sp, #S_PC] @ retry current instruction |
1524 |
+4: pax_close_userland |
1525 |
-+ mov pc, r9 |
1526 |
++ str r4, [sp, #S_PC] @ retry current instruction |
1527 |
+ mov pc, r9 |
1528 |
.popsection |
1529 |
.pushsection __ex_table,"a" |
1530 |
- .long 1b, 4b |
1531 |
-@@ -694,7 +798,7 @@ ENTRY(__switch_to) |
1532 |
+@@ -698,7 +802,7 @@ ENTRY(__switch_to) |
1533 |
THUMB( str lr, [ip], #4 ) |
1534 |
ldr r4, [r2, #TI_TP_VALUE] |
1535 |
ldr r5, [r2, #TI_TP_VALUE + 4] |
1536 |
@@ -2620,7 +3116,7 @@ index 1879e8d..5602dd4 100644 |
1537 |
ldr r6, [r2, #TI_CPU_DOMAIN] |
1538 |
#endif |
1539 |
switch_tls r1, r4, r5, r3, r7 |
1540 |
-@@ -703,7 +807,7 @@ ENTRY(__switch_to) |
1541 |
+@@ -707,7 +811,7 @@ ENTRY(__switch_to) |
1542 |
ldr r8, =__stack_chk_guard |
1543 |
ldr r7, [r7, #TSK_STACK_CANARY] |
1544 |
#endif |
1545 |
@@ -2630,7 +3126,7 @@ index 1879e8d..5602dd4 100644 |
1546 |
#endif |
1547 |
mov r5, r0 |
1548 |
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S |
1549 |
-index a2dcafd..1048b5a 100644 |
1550 |
+index 7139d4a..feaf37f 100644 |
1551 |
--- a/arch/arm/kernel/entry-common.S |
1552 |
+++ b/arch/arm/kernel/entry-common.S |
1553 |
@@ -10,18 +10,46 @@ |
1554 |
@@ -2683,7 +3179,7 @@ index a2dcafd..1048b5a 100644 |
1555 |
.align 5 |
1556 |
/* |
1557 |
* This is the fast syscall return path. We do as little as |
1558 |
-@@ -411,6 +439,12 @@ ENTRY(vector_swi) |
1559 |
+@@ -405,6 +433,12 @@ ENTRY(vector_swi) |
1560 |
USER( ldr scno, [lr, #-4] ) @ get SWI instruction |
1561 |
#endif |
1562 |
|
1563 |
@@ -2697,7 +3193,7 @@ index a2dcafd..1048b5a 100644 |
1564 |
|
1565 |
#if defined(CONFIG_OABI_COMPAT) |
1566 |
diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S |
1567 |
-index efb208d..d34bd02 100644 |
1568 |
+index 5d702f8..f5fc51a 100644 |
1569 |
--- a/arch/arm/kernel/entry-header.S |
1570 |
+++ b/arch/arm/kernel/entry-header.S |
1571 |
@@ -188,6 +188,60 @@ |
1572 |
@@ -2797,7 +3293,7 @@ index 918875d..cd5fa27 100644 |
1573 |
flush_icache_range((unsigned long)base + offset, offset + |
1574 |
length); |
1575 |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S |
1576 |
-index 591d6e4..8322a26 100644 |
1577 |
+index 2c35f0f..7747ee6 100644 |
1578 |
--- a/arch/arm/kernel/head.S |
1579 |
+++ b/arch/arm/kernel/head.S |
1580 |
@@ -437,7 +437,7 @@ __enable_mmu: |
1581 |
@@ -2975,36 +3471,24 @@ index 81ef686..f4130b8 100644 |
1582 |
} |
1583 |
#endif |
1584 |
diff --git a/arch/arm/kernel/psci.c b/arch/arm/kernel/psci.c |
1585 |
-index 4693188..4596c5e 100644 |
1586 |
+index f73891b..cf3004e 100644 |
1587 |
--- a/arch/arm/kernel/psci.c |
1588 |
+++ b/arch/arm/kernel/psci.c |
1589 |
-@@ -24,7 +24,7 @@ |
1590 |
- #include <asm/opcodes-virt.h> |
1591 |
+@@ -28,7 +28,7 @@ |
1592 |
#include <asm/psci.h> |
1593 |
+ #include <asm/system_misc.h> |
1594 |
|
1595 |
-struct psci_operations psci_ops; |
1596 |
+struct psci_operations psci_ops __read_only; |
1597 |
|
1598 |
static int (*invoke_psci_fn)(u32, u32, u32, u32); |
1599 |
- |
1600 |
+ typedef int (*psci_initcall_t)(const struct device_node *); |
1601 |
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c |
1602 |
-index 0dd3b79..b67388e 100644 |
1603 |
+index 0c27ed6..b67388e 100644 |
1604 |
--- a/arch/arm/kernel/ptrace.c |
1605 |
+++ b/arch/arm/kernel/ptrace.c |
1606 |
-@@ -908,7 +908,7 @@ enum ptrace_syscall_dir { |
1607 |
- PTRACE_SYSCALL_EXIT, |
1608 |
- }; |
1609 |
- |
1610 |
--static int tracehook_report_syscall(struct pt_regs *regs, |
1611 |
-+static void tracehook_report_syscall(struct pt_regs *regs, |
1612 |
- enum ptrace_syscall_dir dir) |
1613 |
- { |
1614 |
- unsigned long ip; |
1615 |
-@@ -926,19 +926,29 @@ static int tracehook_report_syscall(struct pt_regs *regs, |
1616 |
- current_thread_info()->syscall = -1; |
1617 |
- |
1618 |
+@@ -928,10 +928,19 @@ static void tracehook_report_syscall(struct pt_regs *regs, |
1619 |
regs->ARM_ip = ip; |
1620 |
-- return current_thread_info()->syscall; |
1621 |
} |
1622 |
|
1623 |
+#ifdef CONFIG_GRKERNSEC_SETXID |
1624 |
@@ -3023,20 +3507,11 @@ index 0dd3b79..b67388e 100644 |
1625 |
/* Do the secure computing check first; failures should be fast. */ |
1626 |
if (secure_computing(scno) == -1) |
1627 |
return -1; |
1628 |
- |
1629 |
- if (test_thread_flag(TIF_SYSCALL_TRACE)) |
1630 |
-- scno = tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER); |
1631 |
-+ tracehook_report_syscall(regs, PTRACE_SYSCALL_ENTER); |
1632 |
-+ |
1633 |
-+ scno = current_thread_info()->syscall; |
1634 |
- |
1635 |
- if (test_thread_flag(TIF_SYSCALL_TRACEPOINT)) |
1636 |
- trace_sys_enter(regs, scno); |
1637 |
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c |
1638 |
-index 50e198c..a8b5f49 100644 |
1639 |
+index 8a16ee5..4f560e5 100644 |
1640 |
--- a/arch/arm/kernel/setup.c |
1641 |
+++ b/arch/arm/kernel/setup.c |
1642 |
-@@ -103,21 +103,23 @@ EXPORT_SYMBOL(elf_hwcap); |
1643 |
+@@ -104,21 +104,23 @@ EXPORT_SYMBOL(elf_hwcap); |
1644 |
unsigned int elf_hwcap2 __read_mostly; |
1645 |
EXPORT_SYMBOL(elf_hwcap2); |
1646 |
|
1647 |
@@ -3065,7 +3540,7 @@ index 50e198c..a8b5f49 100644 |
1648 |
EXPORT_SYMBOL(outer_cache); |
1649 |
#endif |
1650 |
|
1651 |
-@@ -250,9 +252,13 @@ static int __get_cpu_architecture(void) |
1652 |
+@@ -251,9 +253,13 @@ static int __get_cpu_architecture(void) |
1653 |
asm("mrc p15, 0, %0, c0, c1, 4" |
1654 |
: "=r" (mmfr0)); |
1655 |
if ((mmfr0 & 0x0000000f) >= 0x00000003 || |
1656 |
@@ -3300,7 +3775,7 @@ index 7bcee5c..e2f3249 100644 |
1657 |
__data_loc = .; |
1658 |
#endif |
1659 |
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c |
1660 |
-index f0e50a0..cab3a75 100644 |
1661 |
+index 3c82b37..bd41745 100644 |
1662 |
--- a/arch/arm/kvm/arm.c |
1663 |
+++ b/arch/arm/kvm/arm.c |
1664 |
@@ -57,7 +57,7 @@ static unsigned long hyp_default_vectors; |
1665 |
@@ -3312,7 +3787,7 @@ index f0e50a0..cab3a75 100644 |
1666 |
static u8 kvm_next_vmid; |
1667 |
static DEFINE_SPINLOCK(kvm_vmid_lock); |
1668 |
|
1669 |
-@@ -408,7 +408,7 @@ void force_vm_exit(const cpumask_t *mask) |
1670 |
+@@ -409,7 +409,7 @@ void force_vm_exit(const cpumask_t *mask) |
1671 |
*/ |
1672 |
static bool need_new_vmid_gen(struct kvm *kvm) |
1673 |
{ |
1674 |
@@ -3321,7 +3796,7 @@ index f0e50a0..cab3a75 100644 |
1675 |
} |
1676 |
|
1677 |
/** |
1678 |
-@@ -441,7 +441,7 @@ static void update_vttbr(struct kvm *kvm) |
1679 |
+@@ -442,7 +442,7 @@ static void update_vttbr(struct kvm *kvm) |
1680 |
|
1681 |
/* First user of a new VMID generation? */ |
1682 |
if (unlikely(kvm_next_vmid == 0)) { |
1683 |
@@ -3330,7 +3805,7 @@ index f0e50a0..cab3a75 100644 |
1684 |
kvm_next_vmid = 1; |
1685 |
|
1686 |
/* |
1687 |
-@@ -458,7 +458,7 @@ static void update_vttbr(struct kvm *kvm) |
1688 |
+@@ -459,7 +459,7 @@ static void update_vttbr(struct kvm *kvm) |
1689 |
kvm_call_hyp(__kvm_flush_vm_context); |
1690 |
} |
1691 |
|
1692 |
@@ -3339,15 +3814,6 @@ index f0e50a0..cab3a75 100644 |
1693 |
kvm->arch.vmid = kvm_next_vmid; |
1694 |
kvm_next_vmid++; |
1695 |
|
1696 |
-@@ -1033,7 +1033,7 @@ static void check_kvm_target_cpu(void *ret) |
1697 |
- /** |
1698 |
- * Initialize Hyp-mode and memory mappings on all CPUs. |
1699 |
- */ |
1700 |
--int kvm_arch_init(void *opaque) |
1701 |
-+int kvm_arch_init(const void *opaque) |
1702 |
- { |
1703 |
- int err; |
1704 |
- int ret, cpu; |
1705 |
diff --git a/arch/arm/lib/clear_user.S b/arch/arm/lib/clear_user.S |
1706 |
index 14a0d98..7771a7d 100644 |
1707 |
--- a/arch/arm/lib/clear_user.S |
1708 |
@@ -3558,10 +4024,10 @@ index aead77a..a2253fa 100644 |
1709 |
}; |
1710 |
|
1711 |
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c |
1712 |
-index 9fe8c94..c014a4d 100644 |
1713 |
+index 8bc1338..8b28b69 100644 |
1714 |
--- a/arch/arm/mach-omap2/gpmc.c |
1715 |
+++ b/arch/arm/mach-omap2/gpmc.c |
1716 |
-@@ -148,7 +148,6 @@ struct omap3_gpmc_regs { |
1717 |
+@@ -151,7 +151,6 @@ struct omap3_gpmc_regs { |
1718 |
}; |
1719 |
|
1720 |
static struct gpmc_client_irq gpmc_client_irq[GPMC_NR_IRQ]; |
1721 |
@@ -3569,7 +4035,7 @@ index 9fe8c94..c014a4d 100644 |
1722 |
static int gpmc_irq_start; |
1723 |
|
1724 |
static struct resource gpmc_mem_root; |
1725 |
-@@ -727,6 +726,18 @@ static void gpmc_irq_noop(struct irq_data *data) { } |
1726 |
+@@ -736,6 +735,18 @@ static void gpmc_irq_noop(struct irq_data *data) { } |
1727 |
|
1728 |
static unsigned int gpmc_irq_noop_ret(struct irq_data *data) { return 0; } |
1729 |
|
1730 |
@@ -3588,7 +4054,7 @@ index 9fe8c94..c014a4d 100644 |
1731 |
static int gpmc_setup_irq(void) |
1732 |
{ |
1733 |
int i; |
1734 |
-@@ -741,15 +752,6 @@ static int gpmc_setup_irq(void) |
1735 |
+@@ -750,15 +761,6 @@ static int gpmc_setup_irq(void) |
1736 |
return gpmc_irq_start; |
1737 |
} |
1738 |
|
1739 |
@@ -3605,7 +4071,7 @@ index 9fe8c94..c014a4d 100644 |
1740 |
gpmc_client_irq[1].bitmask = GPMC_IRQ_COUNT_EVENT; |
1741 |
|
1742 |
diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c |
1743 |
-index 667915d..2ee1219 100644 |
1744 |
+index 4001325..b14e2a0 100644 |
1745 |
--- a/arch/arm/mach-omap2/omap-mpuss-lowpower.c |
1746 |
+++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c |
1747 |
@@ -84,7 +84,7 @@ struct cpu_pm_ops { |
1748 |
@@ -3627,7 +4093,7 @@ index 667915d..2ee1219 100644 |
1749 |
.resume = dummy_cpu_resume, |
1750 |
.scu_prepare = dummy_scu_prepare, |
1751 |
diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c |
1752 |
-index 693fe48..c15ea73 100644 |
1753 |
+index 37843a7..a98df13 100644 |
1754 |
--- a/arch/arm/mach-omap2/omap-wakeupgen.c |
1755 |
+++ b/arch/arm/mach-omap2/omap-wakeupgen.c |
1756 |
@@ -343,7 +343,7 @@ static int irq_cpu_hotplug_notify(struct notifier_block *self, |
1757 |
@@ -3681,7 +4147,7 @@ index 78c02b3..c94109a 100644 |
1758 |
struct omap_device *omap_device_alloc(struct platform_device *pdev, |
1759 |
struct omap_hwmod **ohs, int oh_cnt); |
1760 |
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c |
1761 |
-index 66c60fe..c78950d 100644 |
1762 |
+index 6c074f3..cd58cb7 100644 |
1763 |
--- a/arch/arm/mach-omap2/omap_hwmod.c |
1764 |
+++ b/arch/arm/mach-omap2/omap_hwmod.c |
1765 |
@@ -194,10 +194,10 @@ struct omap_hwmod_soc_ops { |
1766 |
@@ -3721,7 +4187,7 @@ index 95fee54..cfa9cf1 100644 |
1767 |
pwrdm_register_pwrdms(powerdomains_am43xx); |
1768 |
pwrdm_complete_init(); |
1769 |
diff --git a/arch/arm/mach-omap2/wd_timer.c b/arch/arm/mach-omap2/wd_timer.c |
1770 |
-index d15c7bb..b2d1f0c 100644 |
1771 |
+index 97d6607..8429d14 100644 |
1772 |
--- a/arch/arm/mach-omap2/wd_timer.c |
1773 |
+++ b/arch/arm/mach-omap2/wd_timer.c |
1774 |
@@ -110,7 +110,9 @@ static int __init omap_init_wdt(void) |
1775 |
@@ -3776,7 +4242,7 @@ index 2dea8b5..6499da2 100644 |
1776 |
extern void ux500_cpu_die(unsigned int cpu); |
1777 |
|
1778 |
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig |
1779 |
-index 5bf7c3c..571e67e 100644 |
1780 |
+index c348eae..456a1a4 100644 |
1781 |
--- a/arch/arm/mm/Kconfig |
1782 |
+++ b/arch/arm/mm/Kconfig |
1783 |
@@ -446,6 +446,7 @@ config CPU_32v5 |
1784 |
@@ -3813,10 +4279,10 @@ index 5bf7c3c..571e67e 100644 |
1785 |
|
1786 |
If all of the binaries and libraries which run on your platform |
1787 |
diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c |
1788 |
-index 9240364..a2b8cf3 100644 |
1789 |
+index b8cb1a2..6a5624a 100644 |
1790 |
--- a/arch/arm/mm/alignment.c |
1791 |
+++ b/arch/arm/mm/alignment.c |
1792 |
-@@ -212,10 +212,12 @@ union offset_union { |
1793 |
+@@ -214,10 +214,12 @@ union offset_union { |
1794 |
#define __get16_unaligned_check(ins,val,addr) \ |
1795 |
do { \ |
1796 |
unsigned int err = 0, v, a = addr; \ |
1797 |
@@ -3829,7 +4295,7 @@ index 9240364..a2b8cf3 100644 |
1798 |
if (err) \ |
1799 |
goto fault; \ |
1800 |
} while (0) |
1801 |
-@@ -229,6 +231,7 @@ union offset_union { |
1802 |
+@@ -231,6 +233,7 @@ union offset_union { |
1803 |
#define __get32_unaligned_check(ins,val,addr) \ |
1804 |
do { \ |
1805 |
unsigned int err = 0, v, a = addr; \ |
1806 |
@@ -3837,7 +4303,7 @@ index 9240364..a2b8cf3 100644 |
1807 |
__get8_unaligned_check(ins,v,a,err); \ |
1808 |
val = v << ((BE) ? 24 : 0); \ |
1809 |
__get8_unaligned_check(ins,v,a,err); \ |
1810 |
-@@ -237,6 +240,7 @@ union offset_union { |
1811 |
+@@ -239,6 +242,7 @@ union offset_union { |
1812 |
val |= v << ((BE) ? 8 : 16); \ |
1813 |
__get8_unaligned_check(ins,v,a,err); \ |
1814 |
val |= v << ((BE) ? 0 : 24); \ |
1815 |
@@ -3845,7 +4311,7 @@ index 9240364..a2b8cf3 100644 |
1816 |
if (err) \ |
1817 |
goto fault; \ |
1818 |
} while (0) |
1819 |
-@@ -250,6 +254,7 @@ union offset_union { |
1820 |
+@@ -252,6 +256,7 @@ union offset_union { |
1821 |
#define __put16_unaligned_check(ins,val,addr) \ |
1822 |
do { \ |
1823 |
unsigned int err = 0, v = val, a = addr; \ |
1824 |
@@ -3853,7 +4319,7 @@ index 9240364..a2b8cf3 100644 |
1825 |
__asm__( FIRST_BYTE_16 \ |
1826 |
ARM( "1: "ins" %1, [%2], #1\n" ) \ |
1827 |
THUMB( "1: "ins" %1, [%2]\n" ) \ |
1828 |
-@@ -269,6 +274,7 @@ union offset_union { |
1829 |
+@@ -271,6 +276,7 @@ union offset_union { |
1830 |
" .popsection\n" \ |
1831 |
: "=r" (err), "=&r" (v), "=&r" (a) \ |
1832 |
: "0" (err), "1" (v), "2" (a)); \ |
1833 |
@@ -3861,7 +4327,7 @@ index 9240364..a2b8cf3 100644 |
1834 |
if (err) \ |
1835 |
goto fault; \ |
1836 |
} while (0) |
1837 |
-@@ -282,6 +288,7 @@ union offset_union { |
1838 |
+@@ -284,6 +290,7 @@ union offset_union { |
1839 |
#define __put32_unaligned_check(ins,val,addr) \ |
1840 |
do { \ |
1841 |
unsigned int err = 0, v = val, a = addr; \ |
1842 |
@@ -3869,7 +4335,7 @@ index 9240364..a2b8cf3 100644 |
1843 |
__asm__( FIRST_BYTE_32 \ |
1844 |
ARM( "1: "ins" %1, [%2], #1\n" ) \ |
1845 |
THUMB( "1: "ins" %1, [%2]\n" ) \ |
1846 |
-@@ -311,6 +318,7 @@ union offset_union { |
1847 |
+@@ -313,6 +320,7 @@ union offset_union { |
1848 |
" .popsection\n" \ |
1849 |
: "=r" (err), "=&r" (v), "=&r" (a) \ |
1850 |
: "0" (err), "1" (v), "2" (a)); \ |
1851 |
@@ -3878,17 +4344,17 @@ index 9240364..a2b8cf3 100644 |
1852 |
goto fault; \ |
1853 |
} while (0) |
1854 |
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c |
1855 |
-index 7abde2c..9df495f 100644 |
1856 |
+index 7c3fb41..bfb87d8 100644 |
1857 |
--- a/arch/arm/mm/cache-l2x0.c |
1858 |
+++ b/arch/arm/mm/cache-l2x0.c |
1859 |
-@@ -46,7 +46,7 @@ struct l2x0_of_data { |
1860 |
- void (*setup)(const struct device_node *, u32 *, u32 *); |
1861 |
- void (*save)(void); |
1862 |
+@@ -41,7 +41,7 @@ struct l2c_init_data { |
1863 |
+ void (*fixup)(void __iomem *, u32, struct outer_cache_fns *); |
1864 |
+ void (*save)(void __iomem *); |
1865 |
struct outer_cache_fns outer_cache; |
1866 |
-}; |
1867 |
+} __do_const; |
1868 |
|
1869 |
- static bool of_init = false; |
1870 |
+ #define CACHE_LINE_SIZE 32 |
1871 |
|
1872 |
diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c |
1873 |
index 6eb97b3..ac509f6 100644 |
1874 |
@@ -4183,10 +4649,10 @@ index cf08bdf..772656c 100644 |
1875 |
unsigned long search_exception_table(unsigned long addr); |
1876 |
|
1877 |
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c |
1878 |
-index 2a77ba8..68e6a7a 100644 |
1879 |
+index 659c75d..6f8c029 100644 |
1880 |
--- a/arch/arm/mm/init.c |
1881 |
+++ b/arch/arm/mm/init.c |
1882 |
-@@ -30,6 +30,8 @@ |
1883 |
+@@ -31,6 +31,8 @@ |
1884 |
#include <asm/setup.h> |
1885 |
#include <asm/tlb.h> |
1886 |
#include <asm/fixmap.h> |
1887 |
@@ -4195,7 +4661,7 @@ index 2a77ba8..68e6a7a 100644 |
1888 |
|
1889 |
#include <asm/mach/arch.h> |
1890 |
#include <asm/mach/map.h> |
1891 |
-@@ -627,7 +629,46 @@ void free_initmem(void) |
1892 |
+@@ -619,7 +621,46 @@ void free_initmem(void) |
1893 |
{ |
1894 |
#ifdef CONFIG_HAVE_TCM |
1895 |
extern char __tcm_start, __tcm_end; |
1896 |
@@ -4243,7 +4709,7 @@ index 2a77ba8..68e6a7a 100644 |
1897 |
free_reserved_area(&__tcm_start, &__tcm_end, -1, "TCM link"); |
1898 |
#endif |
1899 |
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c |
1900 |
-index f9c32ba..8540068 100644 |
1901 |
+index d1e5ad7..84dcbf2 100644 |
1902 |
--- a/arch/arm/mm/ioremap.c |
1903 |
+++ b/arch/arm/mm/ioremap.c |
1904 |
@@ -392,9 +392,9 @@ __arm_ioremap_exec(phys_addr_t phys_addr, size_t size, bool cached) |
1905 |
@@ -4370,10 +4836,10 @@ index 5e85ed3..b10a7ed 100644 |
1906 |
} |
1907 |
} |
1908 |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c |
1909 |
-index f15c22e..d830561 100644 |
1910 |
+index 6e3ba8d..9cbb4d7 100644 |
1911 |
--- a/arch/arm/mm/mmu.c |
1912 |
+++ b/arch/arm/mm/mmu.c |
1913 |
-@@ -39,6 +39,22 @@ |
1914 |
+@@ -40,6 +40,22 @@ |
1915 |
#include "mm.h" |
1916 |
#include "tcm.h" |
1917 |
|
1918 |
@@ -4396,7 +4862,7 @@ index f15c22e..d830561 100644 |
1919 |
/* |
1920 |
* empty_zero_page is a special page that is used for |
1921 |
* zero-initialized data and COW. |
1922 |
-@@ -235,7 +251,15 @@ __setup("noalign", noalign_setup); |
1923 |
+@@ -239,7 +255,15 @@ __setup("noalign", noalign_setup); |
1924 |
#define PROT_PTE_S2_DEVICE PROT_PTE_DEVICE |
1925 |
#define PROT_SECT_DEVICE PMD_TYPE_SECT|PMD_SECT_AP_WRITE |
1926 |
|
1927 |
@@ -4413,7 +4879,7 @@ index f15c22e..d830561 100644 |
1928 |
[MT_DEVICE] = { /* Strongly ordered / ARMv6 shared device */ |
1929 |
.prot_pte = PROT_PTE_DEVICE | L_PTE_MT_DEV_SHARED | |
1930 |
L_PTE_SHARED, |
1931 |
-@@ -264,19 +288,19 @@ static struct mem_type mem_types[] = { |
1932 |
+@@ -268,19 +292,19 @@ static struct mem_type mem_types[] = { |
1933 |
.prot_sect = PROT_SECT_DEVICE, |
1934 |
.domain = DOMAIN_IO, |
1935 |
}, |
1936 |
@@ -4438,7 +4904,7 @@ index f15c22e..d830561 100644 |
1937 |
.domain = DOMAIN_KERNEL, |
1938 |
}, |
1939 |
#endif |
1940 |
-@@ -284,15 +308,15 @@ static struct mem_type mem_types[] = { |
1941 |
+@@ -288,15 +312,15 @@ static struct mem_type mem_types[] = { |
1942 |
.prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | |
1943 |
L_PTE_RDONLY, |
1944 |
.prot_l1 = PMD_TYPE_TABLE, |
1945 |
@@ -4457,7 +4923,7 @@ index f15c22e..d830561 100644 |
1946 |
.prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY, |
1947 |
.prot_l1 = PMD_TYPE_TABLE, |
1948 |
.prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE, |
1949 |
-@@ -305,17 +329,30 @@ static struct mem_type mem_types[] = { |
1950 |
+@@ -309,17 +333,30 @@ static struct mem_type mem_types[] = { |
1951 |
.prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE, |
1952 |
.domain = DOMAIN_KERNEL, |
1953 |
}, |
1954 |
@@ -4491,7 +4957,7 @@ index f15c22e..d830561 100644 |
1955 |
[MT_MEMORY_RW_DTCM] = { |
1956 |
.prot_pte = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | |
1957 |
L_PTE_XN, |
1958 |
-@@ -323,9 +360,10 @@ static struct mem_type mem_types[] = { |
1959 |
+@@ -327,9 +364,10 @@ static struct mem_type mem_types[] = { |
1960 |
.prot_sect = PMD_TYPE_SECT | PMD_SECT_XN, |
1961 |
.domain = DOMAIN_KERNEL, |
1962 |
}, |
1963 |
@@ -4504,7 +4970,7 @@ index f15c22e..d830561 100644 |
1964 |
.domain = DOMAIN_KERNEL, |
1965 |
}, |
1966 |
[MT_MEMORY_RW_SO] = { |
1967 |
-@@ -534,9 +572,14 @@ static void __init build_mem_type_table(void) |
1968 |
+@@ -547,9 +585,14 @@ static void __init build_mem_type_table(void) |
1969 |
* Mark cache clean areas and XIP ROM read only |
1970 |
* from SVC mode and no access from userspace. |
1971 |
*/ |
1972 |
@@ -4521,8 +4987,8 @@ index f15c22e..d830561 100644 |
1973 |
+ mem_types[MT_CACHECLEAN_RO].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE; |
1974 |
#endif |
1975 |
|
1976 |
- if (is_smp()) { |
1977 |
-@@ -552,13 +595,17 @@ static void __init build_mem_type_table(void) |
1978 |
+ /* |
1979 |
+@@ -566,13 +609,17 @@ static void __init build_mem_type_table(void) |
1980 |
mem_types[MT_DEVICE_WC].prot_pte |= L_PTE_SHARED; |
1981 |
mem_types[MT_DEVICE_CACHED].prot_sect |= PMD_SECT_S; |
1982 |
mem_types[MT_DEVICE_CACHED].prot_pte |= L_PTE_SHARED; |
1983 |
@@ -4544,7 +5010,7 @@ index f15c22e..d830561 100644 |
1984 |
} |
1985 |
} |
1986 |
|
1987 |
-@@ -569,15 +616,20 @@ static void __init build_mem_type_table(void) |
1988 |
+@@ -583,15 +630,20 @@ static void __init build_mem_type_table(void) |
1989 |
if (cpu_arch >= CPU_ARCH_ARMv6) { |
1990 |
if (cpu_arch >= CPU_ARCH_ARMv7 && (cr & CR_TRE)) { |
1991 |
/* Non-cacheable Normal is XCB = 001 */ |
1992 |
@@ -4568,7 +5034,7 @@ index f15c22e..d830561 100644 |
1993 |
} |
1994 |
|
1995 |
#ifdef CONFIG_ARM_LPAE |
1996 |
-@@ -593,6 +645,8 @@ static void __init build_mem_type_table(void) |
1997 |
+@@ -607,6 +659,8 @@ static void __init build_mem_type_table(void) |
1998 |
vecs_pgprot |= PTE_EXT_AF; |
1999 |
#endif |
2000 |
|
2001 |
@@ -4577,7 +5043,7 @@ index f15c22e..d830561 100644 |
2002 |
for (i = 0; i < 16; i++) { |
2003 |
pteval_t v = pgprot_val(protection_map[i]); |
2004 |
protection_map[i] = __pgprot(v | user_pgprot); |
2005 |
-@@ -610,21 +664,24 @@ static void __init build_mem_type_table(void) |
2006 |
+@@ -624,21 +678,24 @@ static void __init build_mem_type_table(void) |
2007 |
|
2008 |
mem_types[MT_LOW_VECTORS].prot_l1 |= ecc_mask; |
2009 |
mem_types[MT_HIGH_VECTORS].prot_l1 |= ecc_mask; |
2010 |
@@ -4608,7 +5074,7 @@ index f15c22e..d830561 100644 |
2011 |
break; |
2012 |
} |
2013 |
pr_info("Memory policy: %sData cache %s\n", |
2014 |
-@@ -842,7 +899,7 @@ static void __init create_mapping(struct map_desc *md) |
2015 |
+@@ -856,7 +913,7 @@ static void __init create_mapping(struct map_desc *md) |
2016 |
return; |
2017 |
} |
2018 |
|
2019 |
@@ -4617,7 +5083,7 @@ index f15c22e..d830561 100644 |
2020 |
md->virtual >= PAGE_OFFSET && |
2021 |
(md->virtual < VMALLOC_START || md->virtual >= VMALLOC_END)) { |
2022 |
printk(KERN_WARNING "BUG: mapping for 0x%08llx" |
2023 |
-@@ -1257,18 +1314,15 @@ void __init arm_mm_memblock_reserve(void) |
2024 |
+@@ -1224,18 +1281,15 @@ void __init arm_mm_memblock_reserve(void) |
2025 |
* called function. This means you can't use any function or debugging |
2026 |
* method which may touch any device, otherwise the kernel _will_ crash. |
2027 |
*/ |
2028 |
@@ -4640,7 +5106,7 @@ index f15c22e..d830561 100644 |
2029 |
|
2030 |
for (addr = VMALLOC_START; addr; addr += PMD_SIZE) |
2031 |
pmd_clear(pmd_off_k(addr)); |
2032 |
-@@ -1281,7 +1335,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc) |
2033 |
+@@ -1248,7 +1302,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc) |
2034 |
map.pfn = __phys_to_pfn(CONFIG_XIP_PHYS_ADDR & SECTION_MASK); |
2035 |
map.virtual = MODULES_VADDR; |
2036 |
map.length = ((unsigned long)_etext - map.virtual + ~SECTION_MASK) & SECTION_MASK; |
2037 |
@@ -4649,7 +5115,7 @@ index f15c22e..d830561 100644 |
2038 |
create_mapping(&map); |
2039 |
#endif |
2040 |
|
2041 |
-@@ -1292,14 +1346,14 @@ static void __init devicemaps_init(const struct machine_desc *mdesc) |
2042 |
+@@ -1259,14 +1313,14 @@ static void __init devicemaps_init(const struct machine_desc *mdesc) |
2043 |
map.pfn = __phys_to_pfn(FLUSH_BASE_PHYS); |
2044 |
map.virtual = FLUSH_BASE; |
2045 |
map.length = SZ_1M; |
2046 |
@@ -4666,7 +5132,7 @@ index f15c22e..d830561 100644 |
2047 |
create_mapping(&map); |
2048 |
#endif |
2049 |
|
2050 |
-@@ -1308,7 +1362,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc) |
2051 |
+@@ -1275,7 +1329,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc) |
2052 |
* location (0xffff0000). If we aren't using high-vectors, also |
2053 |
* create a mapping at the low-vectors virtual address. |
2054 |
*/ |
2055 |
@@ -4675,7 +5141,7 @@ index f15c22e..d830561 100644 |
2056 |
map.virtual = 0xffff0000; |
2057 |
map.length = PAGE_SIZE; |
2058 |
#ifdef CONFIG_KUSER_HELPERS |
2059 |
-@@ -1365,8 +1419,10 @@ static void __init kmap_init(void) |
2060 |
+@@ -1335,8 +1389,10 @@ static void __init kmap_init(void) |
2061 |
static void __init map_lowmem(void) |
2062 |
{ |
2063 |
struct memblock_region *reg; |
2064 |
@@ -4686,7 +5152,7 @@ index f15c22e..d830561 100644 |
2065 |
|
2066 |
/* Map all the lowmem memory banks. */ |
2067 |
for_each_memblock(memory, reg) { |
2068 |
-@@ -1379,11 +1435,48 @@ static void __init map_lowmem(void) |
2069 |
+@@ -1349,11 +1405,48 @@ static void __init map_lowmem(void) |
2070 |
if (start >= end) |
2071 |
break; |
2072 |
|
2073 |
@@ -4736,7 +5202,7 @@ index f15c22e..d830561 100644 |
2074 |
|
2075 |
create_mapping(&map); |
2076 |
} else { |
2077 |
-@@ -1400,7 +1493,7 @@ static void __init map_lowmem(void) |
2078 |
+@@ -1370,7 +1463,7 @@ static void __init map_lowmem(void) |
2079 |
map.pfn = __phys_to_pfn(kernel_x_start); |
2080 |
map.virtual = __phys_to_virt(kernel_x_start); |
2081 |
map.length = kernel_x_end - kernel_x_start; |
2082 |
@@ -4745,7 +5211,7 @@ index f15c22e..d830561 100644 |
2083 |
|
2084 |
create_mapping(&map); |
2085 |
|
2086 |
-@@ -1413,6 +1506,7 @@ static void __init map_lowmem(void) |
2087 |
+@@ -1383,6 +1476,7 @@ static void __init map_lowmem(void) |
2088 |
create_mapping(&map); |
2089 |
} |
2090 |
} |
2091 |
@@ -4793,13 +5259,13 @@ index ce6d763..cfea917 100644 |
2092 |
extern void *samsung_dmadev_get_ops(void); |
2093 |
extern void *s3c_dma_get_ops(void); |
2094 |
diff --git a/arch/arm64/include/asm/barrier.h b/arch/arm64/include/asm/barrier.h |
2095 |
-index 66eb764..b529b84 100644 |
2096 |
+index 6389d60..b5d3bdd 100644 |
2097 |
--- a/arch/arm64/include/asm/barrier.h |
2098 |
+++ b/arch/arm64/include/asm/barrier.h |
2099 |
@@ -41,7 +41,7 @@ |
2100 |
do { \ |
2101 |
compiletime_assert_atomic_type(*p); \ |
2102 |
- smp_mb(); \ |
2103 |
+ barrier(); \ |
2104 |
- ACCESS_ONCE(*p) = (v); \ |
2105 |
+ ACCESS_ONCE_RW(*p) = (v); \ |
2106 |
} while (0) |
2107 |
@@ -4969,10 +5435,10 @@ index 7caf25d..ee65ac5 100644 |
2108 |
#define __read_mostly __attribute__((__section__(".data..read_mostly"))) |
2109 |
|
2110 |
diff --git a/arch/frv/include/asm/atomic.h b/arch/frv/include/asm/atomic.h |
2111 |
-index b86329d..6709906 100644 |
2112 |
+index f6c3a16..cd422a4 100644 |
2113 |
--- a/arch/frv/include/asm/atomic.h |
2114 |
+++ b/arch/frv/include/asm/atomic.h |
2115 |
-@@ -186,6 +186,16 @@ static inline void atomic64_dec(atomic64_t *v) |
2116 |
+@@ -181,6 +181,16 @@ static inline void atomic64_dec(atomic64_t *v) |
2117 |
#define atomic64_cmpxchg(v, old, new) (__cmpxchg_64(old, new, &(v)->counter)) |
2118 |
#define atomic64_xchg(v, new) (__xchg_64(new, &(v)->counter)) |
2119 |
|
2120 |
@@ -5067,10 +5533,10 @@ index f4ca594..adc72fd6 100644 |
2121 |
#define __cacheline_aligned __aligned(L1_CACHE_BYTES) |
2122 |
#define ____cacheline_aligned __aligned(L1_CACHE_BYTES) |
2123 |
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig |
2124 |
-index 12c3afe..b1abab2 100644 |
2125 |
+index 2f3abcf..e63c7fa 100644 |
2126 |
--- a/arch/ia64/Kconfig |
2127 |
+++ b/arch/ia64/Kconfig |
2128 |
-@@ -546,6 +546,7 @@ source "drivers/sn/Kconfig" |
2129 |
+@@ -547,6 +547,7 @@ source "drivers/sn/Kconfig" |
2130 |
config KEXEC |
2131 |
bool "kexec system call" |
2132 |
depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU) |
2133 |
@@ -5079,10 +5545,10 @@ index 12c3afe..b1abab2 100644 |
2134 |
kexec is a system call that implements the ability to shutdown your |
2135 |
current kernel, and to start another kernel. It is like a reboot |
2136 |
diff --git a/arch/ia64/include/asm/atomic.h b/arch/ia64/include/asm/atomic.h |
2137 |
-index 6e6fe18..a6ae668 100644 |
2138 |
+index 0f8bf48..40ea950 100644 |
2139 |
--- a/arch/ia64/include/asm/atomic.h |
2140 |
+++ b/arch/ia64/include/asm/atomic.h |
2141 |
-@@ -208,6 +208,16 @@ atomic64_add_negative (__s64 i, atomic64_t *v) |
2142 |
+@@ -209,4 +209,14 @@ atomic64_add_negative (__s64 i, atomic64_t *v) |
2143 |
#define atomic64_inc(v) atomic64_add(1, (v)) |
2144 |
#define atomic64_dec(v) atomic64_sub(1, (v)) |
2145 |
|
2146 |
@@ -5096,14 +5562,12 @@ index 6e6fe18..a6ae668 100644 |
2147 |
+#define atomic64_dec_unchecked(v) atomic64_dec(v) |
2148 |
+#define atomic64_cmpxchg_unchecked(v, o, n) atomic64_cmpxchg((v), (o), (n)) |
2149 |
+ |
2150 |
- /* Atomic operations are already serializing */ |
2151 |
- #define smp_mb__before_atomic_dec() barrier() |
2152 |
- #define smp_mb__after_atomic_dec() barrier() |
2153 |
+ #endif /* _ASM_IA64_ATOMIC_H */ |
2154 |
diff --git a/arch/ia64/include/asm/barrier.h b/arch/ia64/include/asm/barrier.h |
2155 |
-index d0a69aa..142f878 100644 |
2156 |
+index a48957c..e097b56 100644 |
2157 |
--- a/arch/ia64/include/asm/barrier.h |
2158 |
+++ b/arch/ia64/include/asm/barrier.h |
2159 |
-@@ -64,7 +64,7 @@ |
2160 |
+@@ -67,7 +67,7 @@ |
2161 |
do { \ |
2162 |
compiletime_assert_atomic_type(*p); \ |
2163 |
barrier(); \ |
2164 |
@@ -5600,7 +6064,7 @@ index 0395c51..5f26031 100644 |
2165 |
#define ARCH_DMA_MINALIGN L1_CACHE_BYTES |
2166 |
|
2167 |
diff --git a/arch/metag/include/asm/barrier.h b/arch/metag/include/asm/barrier.h |
2168 |
-index 2d6f0de..de5f5ac 100644 |
2169 |
+index c7591e8..ecef036 100644 |
2170 |
--- a/arch/metag/include/asm/barrier.h |
2171 |
+++ b/arch/metag/include/asm/barrier.h |
2172 |
@@ -89,7 +89,7 @@ static inline void fence(void) |
2173 |
@@ -5643,10 +6107,10 @@ index 4efe96a..60e8699 100644 |
2174 |
#define SMP_CACHE_BYTES L1_CACHE_BYTES |
2175 |
|
2176 |
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig |
2177 |
-index 5cd695f..9a24ad0 100644 |
2178 |
+index 4e238e6..7c9ed92 100644 |
2179 |
--- a/arch/mips/Kconfig |
2180 |
+++ b/arch/mips/Kconfig |
2181 |
-@@ -2395,6 +2395,7 @@ source "kernel/Kconfig.preempt" |
2182 |
+@@ -2392,6 +2392,7 @@ source "kernel/Kconfig.preempt" |
2183 |
|
2184 |
config KEXEC |
2185 |
bool "Kexec system call" |
2186 |
@@ -5668,7 +6132,7 @@ index 02f2444..506969c 100644 |
2187 |
|
2188 |
static dma_addr_t octeon_unity_phys_to_dma(struct device *dev, phys_addr_t paddr) |
2189 |
diff --git a/arch/mips/include/asm/atomic.h b/arch/mips/include/asm/atomic.h |
2190 |
-index e8eb3d5..2e665d1 100644 |
2191 |
+index 37b2bef..02122b8 100644 |
2192 |
--- a/arch/mips/include/asm/atomic.h |
2193 |
+++ b/arch/mips/include/asm/atomic.h |
2194 |
@@ -21,15 +21,39 @@ |
2195 |
@@ -6575,7 +7039,7 @@ index e8eb3d5..2e665d1 100644 |
2196 |
/* |
2197 |
* atomic64_add_negative - add and test if negative |
2198 |
diff --git a/arch/mips/include/asm/barrier.h b/arch/mips/include/asm/barrier.h |
2199 |
-index e1aa4e4..670b68b 100644 |
2200 |
+index d0101dd..266982c 100644 |
2201 |
--- a/arch/mips/include/asm/barrier.h |
2202 |
+++ b/arch/mips/include/asm/barrier.h |
2203 |
@@ -184,7 +184,7 @@ |
2204 |
@@ -6775,7 +7239,7 @@ index b336037..5b874cc 100644 |
2205 |
|
2206 |
/* |
2207 |
diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h |
2208 |
-index 008324d..f67c239 100644 |
2209 |
+index 539ddd1..8783f9a 100644 |
2210 |
--- a/arch/mips/include/asm/pgtable.h |
2211 |
+++ b/arch/mips/include/asm/pgtable.h |
2212 |
@@ -20,6 +20,9 @@ |
2213 |
@@ -6788,20 +7252,8 @@ index 008324d..f67c239 100644 |
2214 |
struct mm_struct; |
2215 |
struct vm_area_struct; |
2216 |
|
2217 |
-diff --git a/arch/mips/include/asm/smtc_proc.h b/arch/mips/include/asm/smtc_proc.h |
2218 |
-index 25da651..ae2a259 100644 |
2219 |
---- a/arch/mips/include/asm/smtc_proc.h |
2220 |
-+++ b/arch/mips/include/asm/smtc_proc.h |
2221 |
-@@ -18,6 +18,6 @@ extern struct smtc_cpu_proc smtc_cpu_stats[NR_CPUS]; |
2222 |
- |
2223 |
- /* Count of number of recoveries of "stolen" FPU access rights on 34K */ |
2224 |
- |
2225 |
--extern atomic_t smtc_fpu_recoveries; |
2226 |
-+extern atomic_unchecked_t smtc_fpu_recoveries; |
2227 |
- |
2228 |
- #endif /* __ASM_SMTC_PROC_H */ |
2229 |
diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h |
2230 |
-index d2d961d..a674df0 100644 |
2231 |
+index 7de8658..c109224 100644 |
2232 |
--- a/arch/mips/include/asm/thread_info.h |
2233 |
+++ b/arch/mips/include/asm/thread_info.h |
2234 |
@@ -105,6 +105,9 @@ static inline struct thread_info *current_thread_info(void) |
2235 |
@@ -6891,10 +7343,10 @@ index 7faf5f2..f3d3cf4 100644 |
2236 |
|
2237 |
/* |
2238 |
diff --git a/arch/mips/kernel/i8259.c b/arch/mips/kernel/i8259.c |
2239 |
-index 2b91fe8..fe4f6b4 100644 |
2240 |
+index 50b3648..c2f3cec 100644 |
2241 |
--- a/arch/mips/kernel/i8259.c |
2242 |
+++ b/arch/mips/kernel/i8259.c |
2243 |
-@@ -205,7 +205,7 @@ spurious_8259A_irq: |
2244 |
+@@ -201,7 +201,7 @@ spurious_8259A_irq: |
2245 |
printk(KERN_DEBUG "spurious 8259A interrupt: IRQ%d.\n", irq); |
2246 |
spurious_irq_mask |= irqmask; |
2247 |
} |
2248 |
@@ -6917,10 +7369,10 @@ index 44a1f79..2bd6aa3 100644 |
2249 |
|
2250 |
void __init gt641xx_irq_init(void) |
2251 |
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c |
2252 |
-index d1fea7a..2e591b0 100644 |
2253 |
+index d2bfbc2..a8eacd2 100644 |
2254 |
--- a/arch/mips/kernel/irq.c |
2255 |
+++ b/arch/mips/kernel/irq.c |
2256 |
-@@ -77,17 +77,17 @@ void ack_bad_irq(unsigned int irq) |
2257 |
+@@ -76,17 +76,17 @@ void ack_bad_irq(unsigned int irq) |
2258 |
printk("unexpected IRQ # %d\n", irq); |
2259 |
} |
2260 |
|
2261 |
@@ -6941,7 +7393,7 @@ index d1fea7a..2e591b0 100644 |
2262 |
} |
2263 |
|
2264 |
void __init init_IRQ(void) |
2265 |
-@@ -110,7 +110,10 @@ void __init init_IRQ(void) |
2266 |
+@@ -109,7 +109,10 @@ void __init init_IRQ(void) |
2267 |
#endif |
2268 |
} |
2269 |
|
2270 |
@@ -6952,7 +7404,7 @@ index d1fea7a..2e591b0 100644 |
2271 |
static inline void check_stack_overflow(void) |
2272 |
{ |
2273 |
unsigned long sp; |
2274 |
-@@ -126,6 +129,7 @@ static inline void check_stack_overflow(void) |
2275 |
+@@ -125,6 +128,7 @@ static inline void check_stack_overflow(void) |
2276 |
printk("do_IRQ: stack overflow: %ld\n", |
2277 |
sp - sizeof(struct thread_info)); |
2278 |
dump_stack(); |
2279 |
@@ -6960,11 +7412,24 @@ index d1fea7a..2e591b0 100644 |
2280 |
} |
2281 |
} |
2282 |
#else |
2283 |
+diff --git a/arch/mips/kernel/pm-cps.c b/arch/mips/kernel/pm-cps.c |
2284 |
+index c4c2069..bde8051 100644 |
2285 |
+--- a/arch/mips/kernel/pm-cps.c |
2286 |
++++ b/arch/mips/kernel/pm-cps.c |
2287 |
+@@ -168,7 +168,7 @@ int cps_pm_enter_state(enum cps_pm_state state) |
2288 |
+ nc_core_ready_count = nc_addr; |
2289 |
+ |
2290 |
+ /* Ensure ready_count is zero-initialised before the assembly runs */ |
2291 |
+- ACCESS_ONCE(*nc_core_ready_count) = 0; |
2292 |
++ ACCESS_ONCE_RW(*nc_core_ready_count) = 0; |
2293 |
+ coupled_barrier(&per_cpu(pm_barrier, core), online); |
2294 |
+ |
2295 |
+ /* Run the generated entry code */ |
2296 |
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c |
2297 |
-index 60e39dc..b4829bf 100644 |
2298 |
+index 0a1ec0f..d9e93b6 100644 |
2299 |
--- a/arch/mips/kernel/process.c |
2300 |
+++ b/arch/mips/kernel/process.c |
2301 |
-@@ -579,15 +579,3 @@ unsigned long get_wchan(struct task_struct *task) |
2302 |
+@@ -572,15 +572,3 @@ unsigned long get_wchan(struct task_struct *task) |
2303 |
out: |
2304 |
return pc; |
2305 |
} |
2306 |
@@ -7039,55 +7504,11 @@ index 07fc524..b9d7f28 100644 |
2307 |
pm_power_off(); |
2308 |
+ BUG(); |
2309 |
} |
2310 |
-diff --git a/arch/mips/kernel/smtc-proc.c b/arch/mips/kernel/smtc-proc.c |
2311 |
-index 38635a9..3fcd5e0 100644 |
2312 |
---- a/arch/mips/kernel/smtc-proc.c |
2313 |
-+++ b/arch/mips/kernel/smtc-proc.c |
2314 |
-@@ -31,7 +31,7 @@ unsigned long selfipis[NR_CPUS]; |
2315 |
- |
2316 |
- struct smtc_cpu_proc smtc_cpu_stats[NR_CPUS]; |
2317 |
- |
2318 |
--atomic_t smtc_fpu_recoveries; |
2319 |
-+atomic_unchecked_t smtc_fpu_recoveries; |
2320 |
- |
2321 |
- static int smtc_proc_show(struct seq_file *m, void *v) |
2322 |
- { |
2323 |
-@@ -48,7 +48,7 @@ static int smtc_proc_show(struct seq_file *m, void *v) |
2324 |
- for(i = 0; i < NR_CPUS; i++) |
2325 |
- seq_printf(m, "%d: %ld\n", i, smtc_cpu_stats[i].selfipis); |
2326 |
- seq_printf(m, "%d Recoveries of \"stolen\" FPU\n", |
2327 |
-- atomic_read(&smtc_fpu_recoveries)); |
2328 |
-+ atomic_read_unchecked(&smtc_fpu_recoveries)); |
2329 |
- return 0; |
2330 |
- } |
2331 |
- |
2332 |
-@@ -73,7 +73,7 @@ void init_smtc_stats(void) |
2333 |
- smtc_cpu_stats[i].selfipis = 0; |
2334 |
- } |
2335 |
- |
2336 |
-- atomic_set(&smtc_fpu_recoveries, 0); |
2337 |
-+ atomic_set_unchecked(&smtc_fpu_recoveries, 0); |
2338 |
- |
2339 |
- proc_create("smtc", 0444, NULL, &smtc_proc_fops); |
2340 |
- } |
2341 |
-diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c |
2342 |
-index c1681d6..9f881d1 100644 |
2343 |
---- a/arch/mips/kernel/smtc.c |
2344 |
-+++ b/arch/mips/kernel/smtc.c |
2345 |
-@@ -1359,7 +1359,7 @@ void smtc_soft_dump(void) |
2346 |
- } |
2347 |
- smtc_ipi_qdump(); |
2348 |
- printk("%d Recoveries of \"stolen\" FPU\n", |
2349 |
-- atomic_read(&smtc_fpu_recoveries)); |
2350 |
-+ atomic_read_unchecked(&smtc_fpu_recoveries)); |
2351 |
- } |
2352 |
- |
2353 |
- |
2354 |
diff --git a/arch/mips/kernel/sync-r4k.c b/arch/mips/kernel/sync-r4k.c |
2355 |
-index c24ad5f..9983ab2 100644 |
2356 |
+index 2242bdd..b284048 100644 |
2357 |
--- a/arch/mips/kernel/sync-r4k.c |
2358 |
+++ b/arch/mips/kernel/sync-r4k.c |
2359 |
-@@ -20,8 +20,8 @@ |
2360 |
+@@ -18,8 +18,8 @@ |
2361 |
#include <asm/mipsregs.h> |
2362 |
|
2363 |
static atomic_t count_start_flag = ATOMIC_INIT(0); |
2364 |
@@ -7098,7 +7519,7 @@ index c24ad5f..9983ab2 100644 |
2365 |
static atomic_t count_reference = ATOMIC_INIT(0); |
2366 |
|
2367 |
#define COUNTON 100 |
2368 |
-@@ -68,13 +68,13 @@ void synchronise_count_master(int cpu) |
2369 |
+@@ -58,13 +58,13 @@ void synchronise_count_master(int cpu) |
2370 |
|
2371 |
for (i = 0; i < NR_LOOPS; i++) { |
2372 |
/* slaves loop on '!= 2' */ |
2373 |
@@ -7115,7 +7536,7 @@ index c24ad5f..9983ab2 100644 |
2374 |
|
2375 |
/* |
2376 |
* Everyone initialises count in the last loop: |
2377 |
-@@ -85,11 +85,11 @@ void synchronise_count_master(int cpu) |
2378 |
+@@ -75,11 +75,11 @@ void synchronise_count_master(int cpu) |
2379 |
/* |
2380 |
* Wait for all slaves to leave the synchronization point: |
2381 |
*/ |
2382 |
@@ -7130,7 +7551,7 @@ index c24ad5f..9983ab2 100644 |
2383 |
} |
2384 |
/* Arrange for an interrupt in a short while */ |
2385 |
write_c0_compare(read_c0_count() + COUNTON); |
2386 |
-@@ -130,8 +130,8 @@ void synchronise_count_slave(int cpu) |
2387 |
+@@ -112,8 +112,8 @@ void synchronise_count_slave(int cpu) |
2388 |
initcount = atomic_read(&count_reference); |
2389 |
|
2390 |
for (i = 0; i < NR_LOOPS; i++) { |
2391 |
@@ -7141,7 +7562,7 @@ index c24ad5f..9983ab2 100644 |
2392 |
mb(); |
2393 |
|
2394 |
/* |
2395 |
-@@ -140,8 +140,8 @@ void synchronise_count_slave(int cpu) |
2396 |
+@@ -122,8 +122,8 @@ void synchronise_count_slave(int cpu) |
2397 |
if (i == NR_LOOPS-1) |
2398 |
write_c0_count(initcount); |
2399 |
|
2400 |
@@ -7153,10 +7574,10 @@ index c24ad5f..9983ab2 100644 |
2401 |
} |
2402 |
/* Arrange for an interrupt in a short while */ |
2403 |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c |
2404 |
-index 8119ac2..b229939 100644 |
2405 |
+index 51706d6..ec1178c 100644 |
2406 |
--- a/arch/mips/kernel/traps.c |
2407 |
+++ b/arch/mips/kernel/traps.c |
2408 |
-@@ -695,7 +695,18 @@ asmlinkage void do_ov(struct pt_regs *regs) |
2409 |
+@@ -687,7 +687,18 @@ asmlinkage void do_ov(struct pt_regs *regs) |
2410 |
siginfo_t info; |
2411 |
|
2412 |
prev_state = exception_enter(); |
2413 |
@@ -7176,19 +7597,6 @@ index 8119ac2..b229939 100644 |
2414 |
|
2415 |
info.si_code = FPE_INTOVF; |
2416 |
info.si_signo = SIGFPE; |
2417 |
-diff --git a/arch/mips/kvm/kvm_mips.c b/arch/mips/kvm/kvm_mips.c |
2418 |
-index 3e0ff8d..9eafbf0b 100644 |
2419 |
---- a/arch/mips/kvm/kvm_mips.c |
2420 |
-+++ b/arch/mips/kvm/kvm_mips.c |
2421 |
-@@ -832,7 +832,7 @@ long kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg) |
2422 |
- return r; |
2423 |
- } |
2424 |
- |
2425 |
--int kvm_arch_init(void *opaque) |
2426 |
-+int kvm_arch_init(const void *opaque) |
2427 |
- { |
2428 |
- int ret; |
2429 |
- |
2430 |
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c |
2431 |
index becc42b..9e43d4b 100644 |
2432 |
--- a/arch/mips/mm/fault.c |
2433 |
@@ -7523,10 +7931,10 @@ index 4ce7a01..449202a 100644 |
2434 |
|
2435 |
#endif /* __ASM_OPENRISC_CACHE_H */ |
2436 |
diff --git a/arch/parisc/include/asm/atomic.h b/arch/parisc/include/asm/atomic.h |
2437 |
-index 472886c..00e7df9 100644 |
2438 |
+index 0be2db2..1b0f26d 100644 |
2439 |
--- a/arch/parisc/include/asm/atomic.h |
2440 |
+++ b/arch/parisc/include/asm/atomic.h |
2441 |
-@@ -252,6 +252,16 @@ static inline long atomic64_dec_if_positive(atomic64_t *v) |
2442 |
+@@ -248,6 +248,16 @@ static inline long atomic64_dec_if_positive(atomic64_t *v) |
2443 |
return dec; |
2444 |
} |
2445 |
|
2446 |
@@ -8016,7 +8424,7 @@ index 3ca9c11..d163ef7 100644 |
2447 |
/* |
2448 |
* If for any reason at all we couldn't handle the fault, make |
2449 |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig |
2450 |
-index 004851f..c15e65a 100644 |
2451 |
+index 80b94b0..a3274fb 100644 |
2452 |
--- a/arch/powerpc/Kconfig |
2453 |
+++ b/arch/powerpc/Kconfig |
2454 |
@@ -398,6 +398,7 @@ config PPC64_SUPPORTS_MEMORY_FAILURE |
2455 |
@@ -8028,10 +8436,10 @@ index 004851f..c15e65a 100644 |
2456 |
kexec is a system call that implements the ability to shutdown your |
2457 |
current kernel, and to start another kernel. It is like a reboot |
2458 |
diff --git a/arch/powerpc/include/asm/atomic.h b/arch/powerpc/include/asm/atomic.h |
2459 |
-index e3b1d41..8e81edf 100644 |
2460 |
+index 28992d0..c797b20 100644 |
2461 |
--- a/arch/powerpc/include/asm/atomic.h |
2462 |
+++ b/arch/powerpc/include/asm/atomic.h |
2463 |
-@@ -523,6 +523,16 @@ static __inline__ long atomic64_inc_not_zero(atomic64_t *v) |
2464 |
+@@ -519,6 +519,16 @@ static __inline__ long atomic64_inc_not_zero(atomic64_t *v) |
2465 |
return t1; |
2466 |
} |
2467 |
|
2468 |
@@ -8049,7 +8457,7 @@ index e3b1d41..8e81edf 100644 |
2469 |
|
2470 |
#endif /* __KERNEL__ */ |
2471 |
diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/asm/barrier.h |
2472 |
-index f89da80..7f5b05a 100644 |
2473 |
+index bab79a1..4a3eabc 100644 |
2474 |
--- a/arch/powerpc/include/asm/barrier.h |
2475 |
+++ b/arch/powerpc/include/asm/barrier.h |
2476 |
@@ -73,7 +73,7 @@ |
2477 |
@@ -8083,7 +8491,7 @@ index ed0afc1..0332825 100644 |
2478 |
#define SMP_CACHE_BYTES L1_CACHE_BYTES |
2479 |
|
2480 |
diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/asm/elf.h |
2481 |
-index 935b5e7..7001d2d 100644 |
2482 |
+index 888d8f3..66f581c 100644 |
2483 |
--- a/arch/powerpc/include/asm/elf.h |
2484 |
+++ b/arch/powerpc/include/asm/elf.h |
2485 |
@@ -28,8 +28,19 @@ |
2486 |
@@ -8108,7 +8516,7 @@ index 935b5e7..7001d2d 100644 |
2487 |
|
2488 |
#define ELF_CORE_EFLAGS (is_elf2_task() ? 2 : 0) |
2489 |
|
2490 |
-@@ -127,10 +138,6 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm, |
2491 |
+@@ -129,10 +140,6 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm, |
2492 |
(0x7ff >> (PAGE_SHIFT - 12)) : \ |
2493 |
(0x3ffff >> (PAGE_SHIFT - 12))) |
2494 |
|
2495 |
@@ -8297,7 +8705,7 @@ index 4b0be20..c15a27d 100644 |
2496 |
static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, |
2497 |
pte_t *pte) |
2498 |
diff --git a/arch/powerpc/include/asm/pgtable.h b/arch/powerpc/include/asm/pgtable.h |
2499 |
-index 3ebb188..e17dddf 100644 |
2500 |
+index d98c1ec..9f61569 100644 |
2501 |
--- a/arch/powerpc/include/asm/pgtable.h |
2502 |
+++ b/arch/powerpc/include/asm/pgtable.h |
2503 |
@@ -2,6 +2,7 @@ |
2504 |
@@ -8321,10 +8729,10 @@ index 4aad413..85d86bf 100644 |
2505 |
#define _PAGE_NO_CACHE 0x020 /* I: cache inhibit */ |
2506 |
#define _PAGE_WRITETHRU 0x040 /* W: cache write-through */ |
2507 |
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h |
2508 |
-index e5d2e0b..9ac74b1 100644 |
2509 |
+index bffd89d..a6641ed 100644 |
2510 |
--- a/arch/powerpc/include/asm/reg.h |
2511 |
+++ b/arch/powerpc/include/asm/reg.h |
2512 |
-@@ -249,6 +249,7 @@ |
2513 |
+@@ -251,6 +251,7 @@ |
2514 |
#define SPRN_DBCR 0x136 /* e300 Data Breakpoint Control Reg */ |
2515 |
#define SPRN_DSISR 0x012 /* Data Storage Interrupt Status Register */ |
2516 |
#define DSISR_NOHPTE 0x40000000 /* no translation found */ |
2517 |
@@ -8333,7 +8741,7 @@ index e5d2e0b..9ac74b1 100644 |
2518 |
#define DSISR_ISSTORE 0x02000000 /* access was a store */ |
2519 |
#define DSISR_DABRMATCH 0x00400000 /* hit data breakpoint */ |
2520 |
diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h |
2521 |
-index ff51046..b982dd4 100644 |
2522 |
+index 5a6614a..d89995d1 100644 |
2523 |
--- a/arch/powerpc/include/asm/smp.h |
2524 |
+++ b/arch/powerpc/include/asm/smp.h |
2525 |
@@ -51,7 +51,7 @@ struct smp_ops_t { |
2526 |
@@ -8551,10 +8959,10 @@ index 9485b43..3bd3c16 100644 |
2527 |
|
2528 |
static inline unsigned long clear_user(void __user *addr, unsigned long size) |
2529 |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile |
2530 |
-index fcc9a89..07be2bb 100644 |
2531 |
+index 670c312..60c2b52 100644 |
2532 |
--- a/arch/powerpc/kernel/Makefile |
2533 |
+++ b/arch/powerpc/kernel/Makefile |
2534 |
-@@ -26,6 +26,8 @@ CFLAGS_REMOVE_ftrace.o = -pg -mno-sched-epilog |
2535 |
+@@ -27,6 +27,8 @@ CFLAGS_REMOVE_ftrace.o = -pg -mno-sched-epilog |
2536 |
CFLAGS_REMOVE_time.o = -pg -mno-sched-epilog |
2537 |
endif |
2538 |
|
2539 |
@@ -8564,45 +8972,45 @@ index fcc9a89..07be2bb 100644 |
2540 |
irq.o align.o signal_32.o pmc.o vdso.o \ |
2541 |
process.o systbl.o idle.o \ |
2542 |
diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S |
2543 |
-index c1bee3c..5b42583 100644 |
2544 |
+index bb9cac6..5181202 100644 |
2545 |
--- a/arch/powerpc/kernel/exceptions-64e.S |
2546 |
+++ b/arch/powerpc/kernel/exceptions-64e.S |
2547 |
@@ -1010,6 +1010,7 @@ storage_fault_common: |
2548 |
std r14,_DAR(r1) |
2549 |
std r15,_DSISR(r1) |
2550 |
addi r3,r1,STACK_FRAME_OVERHEAD |
2551 |
-+ bl .save_nvgprs |
2552 |
++ bl save_nvgprs |
2553 |
mr r4,r14 |
2554 |
mr r5,r15 |
2555 |
ld r14,PACA_EXGEN+EX_R14(r13) |
2556 |
@@ -1018,8 +1019,7 @@ storage_fault_common: |
2557 |
cmpdi r3,0 |
2558 |
bne- 1f |
2559 |
- b .ret_from_except_lite |
2560 |
--1: bl .save_nvgprs |
2561 |
+ b ret_from_except_lite |
2562 |
+-1: bl save_nvgprs |
2563 |
- mr r5,r3 |
2564 |
+1: mr r5,r3 |
2565 |
addi r3,r1,STACK_FRAME_OVERHEAD |
2566 |
ld r4,_DAR(r1) |
2567 |
- bl .bad_page_fault |
2568 |
+ bl bad_page_fault |
2569 |
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S |
2570 |
-index 3afd391..18f9e36 100644 |
2571 |
+index a7d36b1..53af150 100644 |
2572 |
--- a/arch/powerpc/kernel/exceptions-64s.S |
2573 |
+++ b/arch/powerpc/kernel/exceptions-64s.S |
2574 |
-@@ -1587,10 +1587,10 @@ handle_page_fault: |
2575 |
+@@ -1637,10 +1637,10 @@ handle_page_fault: |
2576 |
11: ld r4,_DAR(r1) |
2577 |
ld r5,_DSISR(r1) |
2578 |
addi r3,r1,STACK_FRAME_OVERHEAD |
2579 |
-+ bl .save_nvgprs |
2580 |
- bl .do_page_fault |
2581 |
++ bl save_nvgprs |
2582 |
+ bl do_page_fault |
2583 |
cmpdi r3,0 |
2584 |
beq+ 12f |
2585 |
-- bl .save_nvgprs |
2586 |
+- bl save_nvgprs |
2587 |
mr r5,r3 |
2588 |
addi r3,r1,STACK_FRAME_OVERHEAD |
2589 |
lwz r4,_DAR(r1) |
2590 |
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c |
2591 |
-index ca1cd74..6f0241a 100644 |
2592 |
+index 248ee7e..1eb60dd 100644 |
2593 |
--- a/arch/powerpc/kernel/irq.c |
2594 |
+++ b/arch/powerpc/kernel/irq.c |
2595 |
@@ -447,6 +447,8 @@ void migrate_irqs(void) |
2596 |
@@ -8665,10 +9073,10 @@ index 6cff040..74ac5d1b 100644 |
2597 |
sechdrs, module); |
2598 |
#endif |
2599 |
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c |
2600 |
-index 31d0215..206af70 100644 |
2601 |
+index be99774..9879c82 100644 |
2602 |
--- a/arch/powerpc/kernel/process.c |
2603 |
+++ b/arch/powerpc/kernel/process.c |
2604 |
-@@ -1031,8 +1031,8 @@ void show_regs(struct pt_regs * regs) |
2605 |
+@@ -1039,8 +1039,8 @@ void show_regs(struct pt_regs * regs) |
2606 |
* Lookup NIP late so we have the best change of getting the |
2607 |
* above info out without failing |
2608 |
*/ |
2609 |
@@ -8800,10 +9208,10 @@ index 2e3d2bf..35df241 100644 |
2610 |
|
2611 |
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) |
2612 |
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c |
2613 |
-index 4e47db6..6dcc96e 100644 |
2614 |
+index 1bc5a17..910d3f3 100644 |
2615 |
--- a/arch/powerpc/kernel/signal_32.c |
2616 |
+++ b/arch/powerpc/kernel/signal_32.c |
2617 |
-@@ -1013,7 +1013,7 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, |
2618 |
+@@ -1012,7 +1012,7 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, |
2619 |
/* Save user registers on the stack */ |
2620 |
frame = &rt_sf->uc.uc_mcontext; |
2621 |
addr = frame; |
2622 |
@@ -8813,10 +9221,10 @@ index 4e47db6..6dcc96e 100644 |
2623 |
tramp = current->mm->context.vdso_base + vdso32_rt_sigtramp; |
2624 |
} else { |
2625 |
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c |
2626 |
-index d501dc4..e5a0de0 100644 |
2627 |
+index 97c1e4b..f427f81 100644 |
2628 |
--- a/arch/powerpc/kernel/signal_64.c |
2629 |
+++ b/arch/powerpc/kernel/signal_64.c |
2630 |
-@@ -760,7 +760,7 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, |
2631 |
+@@ -755,7 +755,7 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, |
2632 |
current->thread.fp_state.fpscr = 0; |
2633 |
|
2634 |
/* Set up to return from userspace. */ |
2635 |
@@ -8826,7 +9234,7 @@ index d501dc4..e5a0de0 100644 |
2636 |
} else { |
2637 |
err |= setup_trampoline(__NR_rt_sigreturn, &frame->tramp[0]); |
2638 |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c |
2639 |
-index 1bd7ca2..9b78c2f 100644 |
2640 |
+index 239f1cd..5359f76 100644 |
2641 |
--- a/arch/powerpc/kernel/traps.c |
2642 |
+++ b/arch/powerpc/kernel/traps.c |
2643 |
@@ -142,6 +142,8 @@ static unsigned __kprobes long oops_begin(struct pt_regs *regs) |
2644 |
@@ -8879,10 +9287,10 @@ index ce74c33..0803371 100644 |
2645 |
rc = vdso_base; |
2646 |
goto fail_mmapsem; |
2647 |
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c |
2648 |
-index 3cf541a..ab2d825 100644 |
2649 |
+index 61c738a..b1092d6 100644 |
2650 |
--- a/arch/powerpc/kvm/powerpc.c |
2651 |
+++ b/arch/powerpc/kvm/powerpc.c |
2652 |
-@@ -1153,7 +1153,7 @@ void kvmppc_init_lpid(unsigned long nr_lpids_param) |
2653 |
+@@ -1195,7 +1195,7 @@ void kvmppc_init_lpid(unsigned long nr_lpids_param) |
2654 |
} |
2655 |
EXPORT_SYMBOL_GPL(kvmppc_init_lpid); |
2656 |
|
2657 |
@@ -9157,10 +9565,10 @@ index 9098692..3d54cd1 100644 |
2658 |
struct spu_context *ctx = vma->vm_file->private_data; |
2659 |
unsigned long offset = address - vma->vm_start; |
2660 |
diff --git a/arch/s390/include/asm/atomic.h b/arch/s390/include/asm/atomic.h |
2661 |
-index 1d47061..0714963 100644 |
2662 |
+index fa934fe..c296056 100644 |
2663 |
--- a/arch/s390/include/asm/atomic.h |
2664 |
+++ b/arch/s390/include/asm/atomic.h |
2665 |
-@@ -412,6 +412,16 @@ static inline long long atomic64_dec_if_positive(atomic64_t *v) |
2666 |
+@@ -412,4 +412,14 @@ static inline long long atomic64_dec_if_positive(atomic64_t *v) |
2667 |
#define atomic64_dec_and_test(_v) (atomic64_sub_return(1, _v) == 0) |
2668 |
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) |
2669 |
|
2670 |
@@ -9174,14 +9582,12 @@ index 1d47061..0714963 100644 |
2671 |
+#define atomic64_dec_unchecked(v) atomic64_dec(v) |
2672 |
+#define atomic64_cmpxchg_unchecked(v, o, n) atomic64_cmpxchg((v), (o), (n)) |
2673 |
+ |
2674 |
- #define smp_mb__before_atomic_dec() smp_mb() |
2675 |
- #define smp_mb__after_atomic_dec() smp_mb() |
2676 |
- #define smp_mb__before_atomic_inc() smp_mb() |
2677 |
+ #endif /* __ARCH_S390_ATOMIC__ */ |
2678 |
diff --git a/arch/s390/include/asm/barrier.h b/arch/s390/include/asm/barrier.h |
2679 |
-index 578680f..0eb3b11 100644 |
2680 |
+index 19ff956..8d39cb1 100644 |
2681 |
--- a/arch/s390/include/asm/barrier.h |
2682 |
+++ b/arch/s390/include/asm/barrier.h |
2683 |
-@@ -36,7 +36,7 @@ |
2684 |
+@@ -37,7 +37,7 @@ |
2685 |
do { \ |
2686 |
compiletime_assert_atomic_type(*p); \ |
2687 |
barrier(); \ |
2688 |
@@ -9250,7 +9656,7 @@ index c4a93d6..4d2a9b4 100644 |
2689 |
|
2690 |
#endif /* __ASM_EXEC_H */ |
2691 |
diff --git a/arch/s390/include/asm/uaccess.h b/arch/s390/include/asm/uaccess.h |
2692 |
-index 1be64a1..086839d1 100644 |
2693 |
+index cd4c68e..6764641 100644 |
2694 |
--- a/arch/s390/include/asm/uaccess.h |
2695 |
+++ b/arch/s390/include/asm/uaccess.h |
2696 |
@@ -59,6 +59,7 @@ static inline int __range_ok(unsigned long addr, unsigned long size) |
2697 |
@@ -9261,7 +9667,7 @@ index 1be64a1..086839d1 100644 |
2698 |
#define access_ok(type, addr, size) __access_ok(addr, size) |
2699 |
|
2700 |
/* |
2701 |
-@@ -245,6 +246,10 @@ static inline unsigned long __must_check |
2702 |
+@@ -275,6 +276,10 @@ static inline unsigned long __must_check |
2703 |
copy_to_user(void __user *to, const void *from, unsigned long n) |
2704 |
{ |
2705 |
might_fault(); |
2706 |
@@ -9272,7 +9678,7 @@ index 1be64a1..086839d1 100644 |
2707 |
return __copy_to_user(to, from, n); |
2708 |
} |
2709 |
|
2710 |
-@@ -273,10 +278,14 @@ __compiletime_warning("copy_from_user() buffer size is not provably correct") |
2711 |
+@@ -303,10 +308,14 @@ __compiletime_warning("copy_from_user() buffer size is not provably correct") |
2712 |
static inline unsigned long __must_check |
2713 |
copy_from_user(void *to, const void __user *from, unsigned long n) |
2714 |
{ |
2715 |
@@ -9365,7 +9771,7 @@ index b89b591..fd9609d 100644 |
2716 |
if (r_type == R_390_GOTPC) |
2717 |
rc = apply_rela_bits(loc, val, 1, 32, 0); |
2718 |
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c |
2719 |
-index dd14532..1dfc145 100644 |
2720 |
+index 93b9ca4..4ea1454 100644 |
2721 |
--- a/arch/s390/kernel/process.c |
2722 |
+++ b/arch/s390/kernel/process.c |
2723 |
@@ -242,37 +242,3 @@ unsigned long get_wchan(struct task_struct *p) |
2724 |
@@ -9594,10 +10000,10 @@ index 6777177..cb5e44f 100644 |
2725 |
addr = vm_unmapped_area(&info); |
2726 |
} |
2727 |
diff --git a/arch/sparc/include/asm/atomic_64.h b/arch/sparc/include/asm/atomic_64.h |
2728 |
-index be56a24..443328f 100644 |
2729 |
+index bb894c8..8141d5c 100644 |
2730 |
--- a/arch/sparc/include/asm/atomic_64.h |
2731 |
+++ b/arch/sparc/include/asm/atomic_64.h |
2732 |
-@@ -14,18 +14,40 @@ |
2733 |
+@@ -15,18 +15,40 @@ |
2734 |
#define ATOMIC64_INIT(i) { (i) } |
2735 |
|
2736 |
#define atomic_read(v) (*(volatile int *)&(v)->counter) |
2737 |
@@ -9622,23 +10028,23 @@ index be56a24..443328f 100644 |
2738 |
+ v->counter = i; |
2739 |
+} |
2740 |
|
2741 |
- extern void atomic_add(int, atomic_t *); |
2742 |
-+extern void atomic_add_unchecked(int, atomic_unchecked_t *); |
2743 |
- extern void atomic64_add(long, atomic64_t *); |
2744 |
-+extern void atomic64_add_unchecked(long, atomic64_unchecked_t *); |
2745 |
- extern void atomic_sub(int, atomic_t *); |
2746 |
-+extern void atomic_sub_unchecked(int, atomic_unchecked_t *); |
2747 |
- extern void atomic64_sub(long, atomic64_t *); |
2748 |
-+extern void atomic64_sub_unchecked(long, atomic64_unchecked_t *); |
2749 |
+ void atomic_add(int, atomic_t *); |
2750 |
++void atomic_add_unchecked(int, atomic_unchecked_t *); |
2751 |
+ void atomic64_add(long, atomic64_t *); |
2752 |
++void atomic64_add_unchecked(long, atomic64_unchecked_t *); |
2753 |
+ void atomic_sub(int, atomic_t *); |
2754 |
++void atomic_sub_unchecked(int, atomic_unchecked_t *); |
2755 |
+ void atomic64_sub(long, atomic64_t *); |
2756 |
++void atomic64_sub_unchecked(long, atomic64_unchecked_t *); |
2757 |
|
2758 |
- extern int atomic_add_ret(int, atomic_t *); |
2759 |
-+extern int atomic_add_ret_unchecked(int, atomic_unchecked_t *); |
2760 |
- extern long atomic64_add_ret(long, atomic64_t *); |
2761 |
-+extern long atomic64_add_ret_unchecked(long, atomic64_unchecked_t *); |
2762 |
- extern int atomic_sub_ret(int, atomic_t *); |
2763 |
- extern long atomic64_sub_ret(long, atomic64_t *); |
2764 |
+ int atomic_add_ret(int, atomic_t *); |
2765 |
++int atomic_add_ret_unchecked(int, atomic_unchecked_t *); |
2766 |
+ long atomic64_add_ret(long, atomic64_t *); |
2767 |
++long atomic64_add_ret_unchecked(long, atomic64_unchecked_t *); |
2768 |
+ int atomic_sub_ret(int, atomic_t *); |
2769 |
+ long atomic64_sub_ret(long, atomic64_t *); |
2770 |
|
2771 |
-@@ -33,13 +55,29 @@ extern long atomic64_sub_ret(long, atomic64_t *); |
2772 |
+@@ -34,13 +56,29 @@ long atomic64_sub_ret(long, atomic64_t *); |
2773 |
#define atomic64_dec_return(v) atomic64_sub_ret(1, v) |
2774 |
|
2775 |
#define atomic_inc_return(v) atomic_add_ret(1, v) |
2776 |
@@ -9668,7 +10074,7 @@ index be56a24..443328f 100644 |
2777 |
|
2778 |
/* |
2779 |
* atomic_inc_and_test - increment and test |
2780 |
-@@ -50,6 +88,10 @@ extern long atomic64_sub_ret(long, atomic64_t *); |
2781 |
+@@ -51,6 +89,10 @@ long atomic64_sub_ret(long, atomic64_t *); |
2782 |
* other cases. |
2783 |
*/ |
2784 |
#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0) |
2785 |
@@ -9679,7 +10085,7 @@ index be56a24..443328f 100644 |
2786 |
#define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0) |
2787 |
|
2788 |
#define atomic_sub_and_test(i, v) (atomic_sub_ret(i, v) == 0) |
2789 |
-@@ -59,25 +101,60 @@ extern long atomic64_sub_ret(long, atomic64_t *); |
2790 |
+@@ -60,25 +102,60 @@ long atomic64_sub_ret(long, atomic64_t *); |
2791 |
#define atomic64_dec_and_test(v) (atomic64_sub_ret(1, v) == 0) |
2792 |
|
2793 |
#define atomic_inc(v) atomic_add(1, v) |
2794 |
@@ -9743,7 +10149,7 @@ index be56a24..443328f 100644 |
2795 |
if (likely(old == c)) |
2796 |
break; |
2797 |
c = old; |
2798 |
-@@ -88,20 +165,35 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) |
2799 |
+@@ -89,20 +166,35 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) |
2800 |
#define atomic64_cmpxchg(v, o, n) \ |
2801 |
((__typeof__((v)->counter))cmpxchg(&((v)->counter), (o), (n))) |
2802 |
#define atomic64_xchg(v, new) (xchg(&((v)->counter), new)) |
2803 |
@@ -9784,7 +10190,7 @@ index be56a24..443328f 100644 |
2804 |
|
2805 |
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) |
2806 |
diff --git a/arch/sparc/include/asm/barrier_64.h b/arch/sparc/include/asm/barrier_64.h |
2807 |
-index b5aad96..99d7465 100644 |
2808 |
+index 305dcc3..7835030 100644 |
2809 |
--- a/arch/sparc/include/asm/barrier_64.h |
2810 |
+++ b/arch/sparc/include/asm/barrier_64.h |
2811 |
@@ -57,7 +57,7 @@ do { __asm__ __volatile__("ba,pt %%xcc, 1f\n\t" \ |
2812 |
@@ -9851,10 +10257,10 @@ index 370ca1e..d4f4a98 100644 |
2813 |
#define ELF_HWCAP sparc64_elf_hwcap |
2814 |
|
2815 |
diff --git a/arch/sparc/include/asm/pgalloc_32.h b/arch/sparc/include/asm/pgalloc_32.h |
2816 |
-index 9b1c36d..209298b 100644 |
2817 |
+index a3890da..f6a408e 100644 |
2818 |
--- a/arch/sparc/include/asm/pgalloc_32.h |
2819 |
+++ b/arch/sparc/include/asm/pgalloc_32.h |
2820 |
-@@ -33,6 +33,7 @@ static inline void pgd_set(pgd_t * pgdp, pmd_t * pmdp) |
2821 |
+@@ -35,6 +35,7 @@ static inline void pgd_set(pgd_t * pgdp, pmd_t * pmdp) |
2822 |
} |
2823 |
|
2824 |
#define pgd_populate(MM, PGD, PMD) pgd_set(PGD, PMD) |
2825 |
@@ -9863,7 +10269,7 @@ index 9b1c36d..209298b 100644 |
2826 |
static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, |
2827 |
unsigned long address) |
2828 |
diff --git a/arch/sparc/include/asm/pgalloc_64.h b/arch/sparc/include/asm/pgalloc_64.h |
2829 |
-index bcfe063..b333142 100644 |
2830 |
+index 39a7ac4..2c9b586 100644 |
2831 |
--- a/arch/sparc/include/asm/pgalloc_64.h |
2832 |
+++ b/arch/sparc/include/asm/pgalloc_64.h |
2833 |
@@ -26,6 +26,7 @@ static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd) |
2834 |
@@ -9888,10 +10294,10 @@ index 59ba6f6..4518128 100644 |
2835 |
+ |
2836 |
#endif |
2837 |
diff --git a/arch/sparc/include/asm/pgtable_32.h b/arch/sparc/include/asm/pgtable_32.h |
2838 |
-index 502f632..da1917f 100644 |
2839 |
+index b9b91ae..950b91e 100644 |
2840 |
--- a/arch/sparc/include/asm/pgtable_32.h |
2841 |
+++ b/arch/sparc/include/asm/pgtable_32.h |
2842 |
-@@ -50,6 +50,9 @@ extern unsigned long calc_highpages(void); |
2843 |
+@@ -51,6 +51,9 @@ unsigned long __init bootmem_init(unsigned long *pages_avail); |
2844 |
#define PAGE_SHARED SRMMU_PAGE_SHARED |
2845 |
#define PAGE_COPY SRMMU_PAGE_COPY |
2846 |
#define PAGE_READONLY SRMMU_PAGE_RDONLY |
2847 |
@@ -9901,7 +10307,7 @@ index 502f632..da1917f 100644 |
2848 |
#define PAGE_KERNEL SRMMU_PAGE_KERNEL |
2849 |
|
2850 |
/* Top-level page directory - dummy used by init-mm. |
2851 |
-@@ -62,18 +65,18 @@ extern unsigned long ptr_in_current_pgd; |
2852 |
+@@ -63,18 +66,18 @@ extern unsigned long ptr_in_current_pgd; |
2853 |
|
2854 |
/* xwr */ |
2855 |
#define __P000 PAGE_NONE |
2856 |
@@ -9942,6 +10348,21 @@ index 79da178..c2eede8 100644 |
2857 |
#define SRMMU_PAGE_KERNEL __pgprot(SRMMU_VALID | SRMMU_CACHE | SRMMU_PRIV | \ |
2858 |
SRMMU_DIRTY | SRMMU_REF) |
2859 |
|
2860 |
+diff --git a/arch/sparc/include/asm/setup.h b/arch/sparc/include/asm/setup.h |
2861 |
+index f5fffd8..a0669f0 100644 |
2862 |
+--- a/arch/sparc/include/asm/setup.h |
2863 |
++++ b/arch/sparc/include/asm/setup.h |
2864 |
+@@ -53,8 +53,8 @@ int handle_ldf_stq(u32 insn, struct pt_regs *regs); |
2865 |
+ void handle_ld_nf(u32 insn, struct pt_regs *regs); |
2866 |
+ |
2867 |
+ /* init_64.c */ |
2868 |
+-extern atomic_t dcpage_flushes; |
2869 |
+-extern atomic_t dcpage_flushes_xcall; |
2870 |
++extern atomic_unchecked_t dcpage_flushes; |
2871 |
++extern atomic_unchecked_t dcpage_flushes_xcall; |
2872 |
+ |
2873 |
+ extern int sysctl_tsb_ratio; |
2874 |
+ #endif |
2875 |
diff --git a/arch/sparc/include/asm/spinlock_64.h b/arch/sparc/include/asm/spinlock_64.h |
2876 |
index 9689176..63c18ea 100644 |
2877 |
--- a/arch/sparc/include/asm/spinlock_64.h |
2878 |
@@ -10104,7 +10525,7 @@ index a5f01ac..703b554 100644 |
2879 |
* Thread-synchronous status. |
2880 |
* |
2881 |
diff --git a/arch/sparc/include/asm/uaccess.h b/arch/sparc/include/asm/uaccess.h |
2882 |
-index 0167d26..767bb0c 100644 |
2883 |
+index bd56c28..4b63d83 100644 |
2884 |
--- a/arch/sparc/include/asm/uaccess.h |
2885 |
+++ b/arch/sparc/include/asm/uaccess.h |
2886 |
@@ -1,5 +1,6 @@ |
2887 |
@@ -10115,10 +10536,10 @@ index 0167d26..767bb0c 100644 |
2888 |
#include <asm/uaccess_64.h> |
2889 |
#else |
2890 |
diff --git a/arch/sparc/include/asm/uaccess_32.h b/arch/sparc/include/asm/uaccess_32.h |
2891 |
-index 53a28dd..50c38c3 100644 |
2892 |
+index 9634d08..f55fe4f 100644 |
2893 |
--- a/arch/sparc/include/asm/uaccess_32.h |
2894 |
+++ b/arch/sparc/include/asm/uaccess_32.h |
2895 |
-@@ -250,27 +250,46 @@ extern unsigned long __copy_user(void __user *to, const void __user *from, unsig |
2896 |
+@@ -250,27 +250,46 @@ unsigned long __copy_user(void __user *to, const void __user *from, unsigned lon |
2897 |
|
2898 |
static inline unsigned long copy_to_user(void __user *to, const void *from, unsigned long n) |
2899 |
{ |
2900 |
@@ -10170,7 +10591,7 @@ index 53a28dd..50c38c3 100644 |
2901 |
} |
2902 |
|
2903 |
diff --git a/arch/sparc/include/asm/uaccess_64.h b/arch/sparc/include/asm/uaccess_64.h |
2904 |
-index ad7e178..c9e7423 100644 |
2905 |
+index c990a5e..f17b9c1 100644 |
2906 |
--- a/arch/sparc/include/asm/uaccess_64.h |
2907 |
+++ b/arch/sparc/include/asm/uaccess_64.h |
2908 |
@@ -10,6 +10,7 @@ |
2909 |
@@ -10181,7 +10602,7 @@ index ad7e178..c9e7423 100644 |
2910 |
#include <asm/asi.h> |
2911 |
#include <asm/spitfire.h> |
2912 |
#include <asm-generic/uaccess-unaligned.h> |
2913 |
-@@ -214,8 +215,15 @@ extern unsigned long copy_from_user_fixup(void *to, const void __user *from, |
2914 |
+@@ -214,8 +215,15 @@ unsigned long copy_from_user_fixup(void *to, const void __user *from, |
2915 |
static inline unsigned long __must_check |
2916 |
copy_from_user(void *to, const void __user *from, unsigned long size) |
2917 |
{ |
2918 |
@@ -10198,7 +10619,7 @@ index ad7e178..c9e7423 100644 |
2919 |
if (unlikely(ret)) |
2920 |
ret = copy_from_user_fixup(to, from, size); |
2921 |
|
2922 |
-@@ -231,8 +239,15 @@ extern unsigned long copy_to_user_fixup(void __user *to, const void *from, |
2923 |
+@@ -231,8 +239,15 @@ unsigned long copy_to_user_fixup(void __user *to, const void *from, |
2924 |
static inline unsigned long __must_check |
2925 |
copy_to_user(void __user *to, const void *from, unsigned long size) |
2926 |
{ |
2927 |
@@ -10216,7 +10637,7 @@ index ad7e178..c9e7423 100644 |
2928 |
ret = copy_to_user_fixup(to, from, size); |
2929 |
return ret; |
2930 |
diff --git a/arch/sparc/kernel/Makefile b/arch/sparc/kernel/Makefile |
2931 |
-index d15cc17..d0ae796 100644 |
2932 |
+index 7cf9c6e..6206648 100644 |
2933 |
--- a/arch/sparc/kernel/Makefile |
2934 |
+++ b/arch/sparc/kernel/Makefile |
2935 |
@@ -4,7 +4,7 @@ |
2936 |
@@ -10229,10 +10650,10 @@ index d15cc17..d0ae796 100644 |
2937 |
extra-y := head_$(BITS).o |
2938 |
|
2939 |
diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c |
2940 |
-index 510baec..9ff2607 100644 |
2941 |
+index 50e7b62..79fae35 100644 |
2942 |
--- a/arch/sparc/kernel/process_32.c |
2943 |
+++ b/arch/sparc/kernel/process_32.c |
2944 |
-@@ -115,14 +115,14 @@ void show_regs(struct pt_regs *r) |
2945 |
+@@ -123,14 +123,14 @@ void show_regs(struct pt_regs *r) |
2946 |
|
2947 |
printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx %s\n", |
2948 |
r->psr, r->pc, r->npc, r->y, print_tainted()); |
2949 |
@@ -10249,7 +10670,7 @@ index 510baec..9ff2607 100644 |
2950 |
|
2951 |
printk("%%L: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n", |
2952 |
rw->locals[0], rw->locals[1], rw->locals[2], rw->locals[3], |
2953 |
-@@ -159,7 +159,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp) |
2954 |
+@@ -167,7 +167,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp) |
2955 |
rw = (struct reg_window32 *) fp; |
2956 |
pc = rw->ins[7]; |
2957 |
printk("[%08lx : ", pc); |
2958 |
@@ -10259,7 +10680,7 @@ index 510baec..9ff2607 100644 |
2959 |
} while (++count < 16); |
2960 |
printk("\n"); |
2961 |
diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c |
2962 |
-index d7b4967..2edf827 100644 |
2963 |
+index 027e099..6d4178f 100644 |
2964 |
--- a/arch/sparc/kernel/process_64.c |
2965 |
+++ b/arch/sparc/kernel/process_64.c |
2966 |
@@ -161,7 +161,7 @@ static void show_regwindow(struct pt_regs *regs) |
2967 |
@@ -10289,7 +10710,7 @@ index d7b4967..2edf827 100644 |
2968 |
show_regwindow(regs); |
2969 |
show_stack(current, (unsigned long *) regs->u_regs[UREG_FP]); |
2970 |
} |
2971 |
-@@ -272,7 +272,7 @@ void arch_trigger_all_cpu_backtrace(void) |
2972 |
+@@ -278,7 +278,7 @@ void arch_trigger_all_cpu_backtrace(bool include_self) |
2973 |
((tp && tp->task) ? tp->task->pid : -1)); |
2974 |
|
2975 |
if (gp->tstate & TSTATE_PRIV) { |
2976 |
@@ -10351,21 +10772,10 @@ index c13c9f2..d572c34 100644 |
2977 |
|
2978 |
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) |
2979 |
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c |
2980 |
-index 745a363..b5566b1 100644 |
2981 |
+index 41aa247..eadfb74 100644 |
2982 |
--- a/arch/sparc/kernel/smp_64.c |
2983 |
+++ b/arch/sparc/kernel/smp_64.c |
2984 |
-@@ -868,8 +868,8 @@ extern unsigned long xcall_flush_dcache_page_cheetah; |
2985 |
- extern unsigned long xcall_flush_dcache_page_spitfire; |
2986 |
- |
2987 |
- #ifdef CONFIG_DEBUG_DCFLUSH |
2988 |
--extern atomic_t dcpage_flushes; |
2989 |
--extern atomic_t dcpage_flushes_xcall; |
2990 |
-+extern atomic_unchecked_t dcpage_flushes; |
2991 |
-+extern atomic_unchecked_t dcpage_flushes_xcall; |
2992 |
- #endif |
2993 |
- |
2994 |
- static inline void __local_flush_dcache_page(struct page *page) |
2995 |
-@@ -893,7 +893,7 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu) |
2996 |
+@@ -883,7 +883,7 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu) |
2997 |
return; |
2998 |
|
2999 |
#ifdef CONFIG_DEBUG_DCFLUSH |
3000 |
@@ -10374,7 +10784,7 @@ index 745a363..b5566b1 100644 |
3001 |
#endif |
3002 |
|
3003 |
this_cpu = get_cpu(); |
3004 |
-@@ -917,7 +917,7 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu) |
3005 |
+@@ -907,7 +907,7 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu) |
3006 |
xcall_deliver(data0, __pa(pg_addr), |
3007 |
(u64) pg_addr, cpumask_of(cpu)); |
3008 |
#ifdef CONFIG_DEBUG_DCFLUSH |
3009 |
@@ -10383,7 +10793,7 @@ index 745a363..b5566b1 100644 |
3010 |
#endif |
3011 |
} |
3012 |
} |
3013 |
-@@ -936,7 +936,7 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page) |
3014 |
+@@ -926,7 +926,7 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page) |
3015 |
preempt_disable(); |
3016 |
|
3017 |
#ifdef CONFIG_DEBUG_DCFLUSH |
3018 |
@@ -10392,7 +10802,7 @@ index 745a363..b5566b1 100644 |
3019 |
#endif |
3020 |
data0 = 0; |
3021 |
pg_addr = page_address(page); |
3022 |
-@@ -953,7 +953,7 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page) |
3023 |
+@@ -943,7 +943,7 @@ void flush_dcache_page_all(struct mm_struct *mm, struct page *page) |
3024 |
xcall_deliver(data0, __pa(pg_addr), |
3025 |
(u64) pg_addr, cpu_online_mask); |
3026 |
#ifdef CONFIG_DEBUG_DCFLUSH |
3027 |
@@ -10402,10 +10812,10 @@ index 745a363..b5566b1 100644 |
3028 |
} |
3029 |
__local_flush_dcache_page(page); |
3030 |
diff --git a/arch/sparc/kernel/sys_sparc_32.c b/arch/sparc/kernel/sys_sparc_32.c |
3031 |
-index 3a8d184..49498a8 100644 |
3032 |
+index 646988d..b88905f 100644 |
3033 |
--- a/arch/sparc/kernel/sys_sparc_32.c |
3034 |
+++ b/arch/sparc/kernel/sys_sparc_32.c |
3035 |
-@@ -52,7 +52,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi |
3036 |
+@@ -54,7 +54,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi |
3037 |
if (len > TASK_SIZE - PAGE_SIZE) |
3038 |
return -ENOMEM; |
3039 |
if (!addr) |
3040 |
@@ -10415,10 +10825,10 @@ index 3a8d184..49498a8 100644 |
3041 |
info.flags = 0; |
3042 |
info.length = len; |
3043 |
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c |
3044 |
-index beb0b5a..5a153f7 100644 |
3045 |
+index c85403d..6af95c9 100644 |
3046 |
--- a/arch/sparc/kernel/sys_sparc_64.c |
3047 |
+++ b/arch/sparc/kernel/sys_sparc_64.c |
3048 |
-@@ -88,13 +88,14 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi |
3049 |
+@@ -89,13 +89,14 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi |
3050 |
struct vm_area_struct * vma; |
3051 |
unsigned long task_size = TASK_SIZE; |
3052 |
int do_color_align; |
3053 |
@@ -10434,7 +10844,7 @@ index beb0b5a..5a153f7 100644 |
3054 |
((addr - (pgoff << PAGE_SHIFT)) & (SHMLBA - 1))) |
3055 |
return -EINVAL; |
3056 |
return addr; |
3057 |
-@@ -109,6 +110,10 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi |
3058 |
+@@ -110,6 +111,10 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi |
3059 |
if (filp || (flags & MAP_SHARED)) |
3060 |
do_color_align = 1; |
3061 |
|
3062 |
@@ -10445,7 +10855,7 @@ index beb0b5a..5a153f7 100644 |
3063 |
if (addr) { |
3064 |
if (do_color_align) |
3065 |
addr = COLOR_ALIGN(addr, pgoff); |
3066 |
-@@ -116,22 +121,28 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi |
3067 |
+@@ -117,22 +122,28 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi |
3068 |
addr = PAGE_ALIGN(addr); |
3069 |
|
3070 |
vma = find_vma(mm, addr); |
3071 |
@@ -10477,7 +10887,7 @@ index beb0b5a..5a153f7 100644 |
3072 |
info.high_limit = task_size; |
3073 |
addr = vm_unmapped_area(&info); |
3074 |
} |
3075 |
-@@ -149,6 +160,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3076 |
+@@ -150,6 +161,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3077 |
unsigned long task_size = STACK_TOP32; |
3078 |
unsigned long addr = addr0; |
3079 |
int do_color_align; |
3080 |
@@ -10485,7 +10895,7 @@ index beb0b5a..5a153f7 100644 |
3081 |
struct vm_unmapped_area_info info; |
3082 |
|
3083 |
/* This should only ever run for 32-bit processes. */ |
3084 |
-@@ -158,7 +170,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3085 |
+@@ -159,7 +171,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3086 |
/* We do not accept a shared mapping if it would violate |
3087 |
* cache aliasing constraints. |
3088 |
*/ |
3089 |
@@ -10494,7 +10904,7 @@ index beb0b5a..5a153f7 100644 |
3090 |
((addr - (pgoff << PAGE_SHIFT)) & (SHMLBA - 1))) |
3091 |
return -EINVAL; |
3092 |
return addr; |
3093 |
-@@ -171,6 +183,10 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3094 |
+@@ -172,6 +184,10 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3095 |
if (filp || (flags & MAP_SHARED)) |
3096 |
do_color_align = 1; |
3097 |
|
3098 |
@@ -10505,7 +10915,7 @@ index beb0b5a..5a153f7 100644 |
3099 |
/* requesting a specific address */ |
3100 |
if (addr) { |
3101 |
if (do_color_align) |
3102 |
-@@ -179,8 +195,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3103 |
+@@ -180,8 +196,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3104 |
addr = PAGE_ALIGN(addr); |
3105 |
|
3106 |
vma = find_vma(mm, addr); |
3107 |
@@ -10515,7 +10925,7 @@ index beb0b5a..5a153f7 100644 |
3108 |
return addr; |
3109 |
} |
3110 |
|
3111 |
-@@ -190,6 +205,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3112 |
+@@ -191,6 +206,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3113 |
info.high_limit = mm->mmap_base; |
3114 |
info.align_mask = do_color_align ? (PAGE_MASK & (SHMLBA - 1)) : 0; |
3115 |
info.align_offset = pgoff << PAGE_SHIFT; |
3116 |
@@ -10523,7 +10933,7 @@ index beb0b5a..5a153f7 100644 |
3117 |
addr = vm_unmapped_area(&info); |
3118 |
|
3119 |
/* |
3120 |
-@@ -202,6 +218,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3121 |
+@@ -203,6 +219,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
3122 |
VM_BUG_ON(addr != -ENOMEM); |
3123 |
info.flags = 0; |
3124 |
info.low_limit = TASK_UNMAPPED_BASE; |
3125 |
@@ -10536,7 +10946,7 @@ index beb0b5a..5a153f7 100644 |
3126 |
info.high_limit = STACK_TOP32; |
3127 |
addr = vm_unmapped_area(&info); |
3128 |
} |
3129 |
-@@ -258,10 +280,14 @@ unsigned long get_fb_unmapped_area(struct file *filp, unsigned long orig_addr, u |
3130 |
+@@ -259,10 +281,14 @@ unsigned long get_fb_unmapped_area(struct file *filp, unsigned long orig_addr, u |
3131 |
EXPORT_SYMBOL(get_fb_unmapped_area); |
3132 |
|
3133 |
/* Essentially the same as PowerPC. */ |
3134 |
@@ -10552,7 +10962,7 @@ index beb0b5a..5a153f7 100644 |
3135 |
if (current->flags & PF_RANDOMIZE) { |
3136 |
unsigned long val = get_random_int(); |
3137 |
if (test_thread_flag(TIF_32BIT)) |
3138 |
-@@ -274,7 +300,7 @@ static unsigned long mmap_rnd(void) |
3139 |
+@@ -275,7 +301,7 @@ static unsigned long mmap_rnd(void) |
3140 |
|
3141 |
void arch_pick_mmap_layout(struct mm_struct *mm) |
3142 |
{ |
3143 |
@@ -10561,7 +10971,7 @@ index beb0b5a..5a153f7 100644 |
3144 |
unsigned long gap; |
3145 |
|
3146 |
/* |
3147 |
-@@ -287,6 +313,12 @@ void arch_pick_mmap_layout(struct mm_struct *mm) |
3148 |
+@@ -288,6 +314,12 @@ void arch_pick_mmap_layout(struct mm_struct *mm) |
3149 |
gap == RLIM_INFINITY || |
3150 |
sysctl_legacy_va_layout) { |
3151 |
mm->mmap_base = TASK_UNMAPPED_BASE + random_factor; |
3152 |
@@ -10574,7 +10984,7 @@ index beb0b5a..5a153f7 100644 |
3153 |
mm->get_unmapped_area = arch_get_unmapped_area; |
3154 |
} else { |
3155 |
/* We know it's 32-bit */ |
3156 |
-@@ -298,6 +330,12 @@ void arch_pick_mmap_layout(struct mm_struct *mm) |
3157 |
+@@ -299,6 +331,12 @@ void arch_pick_mmap_layout(struct mm_struct *mm) |
3158 |
gap = (task_size / 6 * 5); |
3159 |
|
3160 |
mm->mmap_base = PAGE_ALIGN(task_size - gap - random_factor); |
3161 |
@@ -10628,7 +11038,7 @@ index 33a17e7..d87fb1f 100644 |
3162 |
|
3163 |
2: |
3164 |
diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c |
3165 |
-index 6629829..036032d 100644 |
3166 |
+index 6fd386c5..6907d81 100644 |
3167 |
--- a/arch/sparc/kernel/traps_32.c |
3168 |
+++ b/arch/sparc/kernel/traps_32.c |
3169 |
@@ -44,6 +44,8 @@ static void instruction_dump(unsigned long *pc) |
3170 |
@@ -10637,10 +11047,10 @@ index 6629829..036032d 100644 |
3171 |
|
3172 |
+extern void gr_handle_kernel_exploit(void); |
3173 |
+ |
3174 |
- void die_if_kernel(char *str, struct pt_regs *regs) |
3175 |
+ void __noreturn die_if_kernel(char *str, struct pt_regs *regs) |
3176 |
{ |
3177 |
static int die_counter; |
3178 |
-@@ -76,15 +78,17 @@ void die_if_kernel(char *str, struct pt_regs *regs) |
3179 |
+@@ -76,15 +78,17 @@ void __noreturn die_if_kernel(char *str, struct pt_regs *regs) |
3180 |
count++ < 30 && |
3181 |
(((unsigned long) rw) >= PAGE_OFFSET) && |
3182 |
!(((unsigned long) rw) & 0x7)) { |
3183 |
@@ -10661,10 +11071,10 @@ index 6629829..036032d 100644 |
3184 |
} |
3185 |
|
3186 |
diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c |
3187 |
-index 4ced92f..965eeed 100644 |
3188 |
+index fb6640e..2daada8 100644 |
3189 |
--- a/arch/sparc/kernel/traps_64.c |
3190 |
+++ b/arch/sparc/kernel/traps_64.c |
3191 |
-@@ -77,7 +77,7 @@ static void dump_tl1_traplog(struct tl1_traplog *p) |
3192 |
+@@ -79,7 +79,7 @@ static void dump_tl1_traplog(struct tl1_traplog *p) |
3193 |
i + 1, |
3194 |
p->trapstack[i].tstate, p->trapstack[i].tpc, |
3195 |
p->trapstack[i].tnpc, p->trapstack[i].tt); |
3196 |
@@ -10673,7 +11083,7 @@ index 4ced92f..965eeed 100644 |
3197 |
} |
3198 |
} |
3199 |
|
3200 |
-@@ -97,6 +97,12 @@ void bad_trap(struct pt_regs *regs, long lvl) |
3201 |
+@@ -99,6 +99,12 @@ void bad_trap(struct pt_regs *regs, long lvl) |
3202 |
|
3203 |
lvl -= 0x100; |
3204 |
if (regs->tstate & TSTATE_PRIV) { |
3205 |
@@ -10686,7 +11096,7 @@ index 4ced92f..965eeed 100644 |
3206 |
sprintf(buffer, "Kernel bad sw trap %lx", lvl); |
3207 |
die_if_kernel(buffer, regs); |
3208 |
} |
3209 |
-@@ -115,11 +121,16 @@ void bad_trap(struct pt_regs *regs, long lvl) |
3210 |
+@@ -117,11 +123,16 @@ void bad_trap(struct pt_regs *regs, long lvl) |
3211 |
void bad_trap_tl1(struct pt_regs *regs, long lvl) |
3212 |
{ |
3213 |
char buffer[32]; |
3214 |
@@ -10704,7 +11114,7 @@ index 4ced92f..965eeed 100644 |
3215 |
dump_tl1_traplog((struct tl1_traplog *)(regs + 1)); |
3216 |
|
3217 |
sprintf (buffer, "Bad trap %lx at tl>0", lvl); |
3218 |
-@@ -1149,7 +1160,7 @@ static void cheetah_log_errors(struct pt_regs *regs, struct cheetah_err_info *in |
3219 |
+@@ -1151,7 +1162,7 @@ static void cheetah_log_errors(struct pt_regs *regs, struct cheetah_err_info *in |
3220 |
regs->tpc, regs->tnpc, regs->u_regs[UREG_I7], regs->tstate); |
3221 |
printk("%s" "ERROR(%d): ", |
3222 |
(recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id()); |
3223 |
@@ -10713,7 +11123,7 @@ index 4ced92f..965eeed 100644 |
3224 |
printk("%s" "ERROR(%d): M_SYND(%lx), E_SYND(%lx)%s%s\n", |
3225 |
(recoverable ? KERN_WARNING : KERN_CRIT), smp_processor_id(), |
3226 |
(afsr & CHAFSR_M_SYNDROME) >> CHAFSR_M_SYNDROME_SHIFT, |
3227 |
-@@ -1756,7 +1767,7 @@ void cheetah_plus_parity_error(int type, struct pt_regs *regs) |
3228 |
+@@ -1758,7 +1769,7 @@ void cheetah_plus_parity_error(int type, struct pt_regs *regs) |
3229 |
smp_processor_id(), |
3230 |
(type & 0x1) ? 'I' : 'D', |
3231 |
regs->tpc); |
3232 |
@@ -10722,7 +11132,7 @@ index 4ced92f..965eeed 100644 |
3233 |
panic("Irrecoverable Cheetah+ parity error."); |
3234 |
} |
3235 |
|
3236 |
-@@ -1764,7 +1775,7 @@ void cheetah_plus_parity_error(int type, struct pt_regs *regs) |
3237 |
+@@ -1766,7 +1777,7 @@ void cheetah_plus_parity_error(int type, struct pt_regs *regs) |
3238 |
smp_processor_id(), |
3239 |
(type & 0x1) ? 'I' : 'D', |
3240 |
regs->tpc); |
3241 |
@@ -10731,7 +11141,7 @@ index 4ced92f..965eeed 100644 |
3242 |
} |
3243 |
|
3244 |
struct sun4v_error_entry { |
3245 |
-@@ -1837,8 +1848,8 @@ struct sun4v_error_entry { |
3246 |
+@@ -1839,8 +1850,8 @@ struct sun4v_error_entry { |
3247 |
/*0x38*/u64 reserved_5; |
3248 |
}; |
3249 |
|
3250 |
@@ -10742,7 +11152,7 @@ index 4ced92f..965eeed 100644 |
3251 |
|
3252 |
static const char *sun4v_err_type_to_str(u8 type) |
3253 |
{ |
3254 |
-@@ -1930,7 +1941,7 @@ static void sun4v_report_real_raddr(const char *pfx, struct pt_regs *regs) |
3255 |
+@@ -1932,7 +1943,7 @@ static void sun4v_report_real_raddr(const char *pfx, struct pt_regs *regs) |
3256 |
} |
3257 |
|
3258 |
static void sun4v_log_error(struct pt_regs *regs, struct sun4v_error_entry *ent, |
3259 |
@@ -10751,7 +11161,7 @@ index 4ced92f..965eeed 100644 |
3260 |
{ |
3261 |
u64 *raw_ptr = (u64 *) ent; |
3262 |
u32 attrs; |
3263 |
-@@ -1988,8 +1999,8 @@ static void sun4v_log_error(struct pt_regs *regs, struct sun4v_error_entry *ent, |
3264 |
+@@ -1990,8 +2001,8 @@ static void sun4v_log_error(struct pt_regs *regs, struct sun4v_error_entry *ent, |
3265 |
|
3266 |
show_regs(regs); |
3267 |
|
3268 |
@@ -10762,7 +11172,7 @@ index 4ced92f..965eeed 100644 |
3269 |
wmb(); |
3270 |
printk("%s: Queue overflowed %d times.\n", |
3271 |
pfx, cnt); |
3272 |
-@@ -2046,7 +2057,7 @@ out: |
3273 |
+@@ -2048,7 +2059,7 @@ out: |
3274 |
*/ |
3275 |
void sun4v_resum_overflow(struct pt_regs *regs) |
3276 |
{ |
3277 |
@@ -10771,7 +11181,7 @@ index 4ced92f..965eeed 100644 |
3278 |
} |
3279 |
|
3280 |
/* We run with %pil set to PIL_NORMAL_MAX and PSTATE_IE enabled in %pstate. |
3281 |
-@@ -2099,7 +2110,7 @@ void sun4v_nonresum_overflow(struct pt_regs *regs) |
3282 |
+@@ -2101,7 +2112,7 @@ void sun4v_nonresum_overflow(struct pt_regs *regs) |
3283 |
/* XXX Actually even this can make not that much sense. Perhaps |
3284 |
* XXX we should just pull the plug and panic directly from here? |
3285 |
*/ |
3286 |
@@ -10780,7 +11190,7 @@ index 4ced92f..965eeed 100644 |
3287 |
} |
3288 |
|
3289 |
unsigned long sun4v_err_itlb_vaddr; |
3290 |
-@@ -2114,9 +2125,9 @@ void sun4v_itlb_error_report(struct pt_regs *regs, int tl) |
3291 |
+@@ -2116,9 +2127,9 @@ void sun4v_itlb_error_report(struct pt_regs *regs, int tl) |
3292 |
|
3293 |
printk(KERN_EMERG "SUN4V-ITLB: Error at TPC[%lx], tl %d\n", |
3294 |
regs->tpc, tl); |
3295 |
@@ -10792,7 +11202,7 @@ index 4ced92f..965eeed 100644 |
3296 |
(void *) regs->u_regs[UREG_I7]); |
3297 |
printk(KERN_EMERG "SUN4V-ITLB: vaddr[%lx] ctx[%lx] " |
3298 |
"pte[%lx] error[%lx]\n", |
3299 |
-@@ -2138,9 +2149,9 @@ void sun4v_dtlb_error_report(struct pt_regs *regs, int tl) |
3300 |
+@@ -2140,9 +2151,9 @@ void sun4v_dtlb_error_report(struct pt_regs *regs, int tl) |
3301 |
|
3302 |
printk(KERN_EMERG "SUN4V-DTLB: Error at TPC[%lx], tl %d\n", |
3303 |
regs->tpc, tl); |
3304 |
@@ -10826,10 +11236,10 @@ index 4ced92f..965eeed 100644 |
3305 |
|
3306 |
+extern void gr_handle_kernel_exploit(void); |
3307 |
+ |
3308 |
- void die_if_kernel(char *str, struct pt_regs *regs) |
3309 |
+ void __noreturn die_if_kernel(char *str, struct pt_regs *regs) |
3310 |
{ |
3311 |
static int die_counter; |
3312 |
-@@ -2411,7 +2424,7 @@ void die_if_kernel(char *str, struct pt_regs *regs) |
3313 |
+@@ -2411,7 +2424,7 @@ void __noreturn die_if_kernel(char *str, struct pt_regs *regs) |
3314 |
while (rw && |
3315 |
count++ < 30 && |
3316 |
kstack_valid(tp, (unsigned long) rw)) { |
3317 |
@@ -10838,7 +11248,7 @@ index 4ced92f..965eeed 100644 |
3318 |
(void *) rw->ins[7]); |
3319 |
|
3320 |
rw = kernel_stack_up(rw); |
3321 |
-@@ -2424,8 +2437,10 @@ void die_if_kernel(char *str, struct pt_regs *regs) |
3322 |
+@@ -2424,8 +2437,10 @@ void __noreturn die_if_kernel(char *str, struct pt_regs *regs) |
3323 |
} |
3324 |
user_instruction_dump ((unsigned int __user *) regs->tpc); |
3325 |
} |
3326 |
@@ -10851,10 +11261,10 @@ index 4ced92f..965eeed 100644 |
3327 |
} |
3328 |
EXPORT_SYMBOL(die_if_kernel); |
3329 |
diff --git a/arch/sparc/kernel/unaligned_64.c b/arch/sparc/kernel/unaligned_64.c |
3330 |
-index 35ab8b6..9046547 100644 |
3331 |
+index 62098a8..547ab2c 100644 |
3332 |
--- a/arch/sparc/kernel/unaligned_64.c |
3333 |
+++ b/arch/sparc/kernel/unaligned_64.c |
3334 |
-@@ -295,7 +295,7 @@ static void log_unaligned(struct pt_regs *regs) |
3335 |
+@@ -297,7 +297,7 @@ static void log_unaligned(struct pt_regs *regs) |
3336 |
static DEFINE_RATELIMIT_STATE(ratelimit, 5 * HZ, 5); |
3337 |
|
3338 |
if (__ratelimit(&ratelimit)) { |
3339 |
@@ -10864,7 +11274,7 @@ index 35ab8b6..9046547 100644 |
3340 |
} |
3341 |
} |
3342 |
diff --git a/arch/sparc/lib/Makefile b/arch/sparc/lib/Makefile |
3343 |
-index dbe119b..089c7c1 100644 |
3344 |
+index 3269b02..64f5231 100644 |
3345 |
--- a/arch/sparc/lib/Makefile |
3346 |
+++ b/arch/sparc/lib/Makefile |
3347 |
@@ -2,7 +2,7 @@ |
3348 |
@@ -11127,7 +11537,7 @@ index 30c3ecc..736f015 100644 |
3349 |
obj-$(CONFIG_SPARC64) += ultra.o tlb.o tsb.o gup.o |
3350 |
obj-y += fault_$(BITS).o |
3351 |
diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c |
3352 |
-index 59dbd46..1dd7f5e 100644 |
3353 |
+index 908e8c1..1524793 100644 |
3354 |
--- a/arch/sparc/mm/fault_32.c |
3355 |
+++ b/arch/sparc/mm/fault_32.c |
3356 |
@@ -21,6 +21,9 @@ |
3357 |
@@ -11140,7 +11550,7 @@ index 59dbd46..1dd7f5e 100644 |
3358 |
|
3359 |
#include <asm/page.h> |
3360 |
#include <asm/pgtable.h> |
3361 |
-@@ -159,6 +162,277 @@ static unsigned long compute_si_addr(struct pt_regs *regs, int text_fault) |
3362 |
+@@ -156,6 +159,277 @@ static unsigned long compute_si_addr(struct pt_regs *regs, int text_fault) |
3363 |
return safe_compute_effective_address(regs, insn); |
3364 |
} |
3365 |
|
3366 |
@@ -11418,7 +11828,7 @@ index 59dbd46..1dd7f5e 100644 |
3367 |
static noinline void do_fault_siginfo(int code, int sig, struct pt_regs *regs, |
3368 |
int text_fault) |
3369 |
{ |
3370 |
-@@ -229,6 +503,24 @@ good_area: |
3371 |
+@@ -226,6 +500,24 @@ good_area: |
3372 |
if (!(vma->vm_flags & VM_WRITE)) |
3373 |
goto bad_area; |
3374 |
} else { |
3375 |
@@ -11444,7 +11854,7 @@ index 59dbd46..1dd7f5e 100644 |
3376 |
if (!(vma->vm_flags & (VM_READ | VM_EXEC))) |
3377 |
goto bad_area; |
3378 |
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c |
3379 |
-index 4ced3fc..234f1e4 100644 |
3380 |
+index 587cd05..fbdf17a 100644 |
3381 |
--- a/arch/sparc/mm/fault_64.c |
3382 |
+++ b/arch/sparc/mm/fault_64.c |
3383 |
@@ -22,6 +22,9 @@ |
3384 |
@@ -11457,7 +11867,7 @@ index 4ced3fc..234f1e4 100644 |
3385 |
|
3386 |
#include <asm/page.h> |
3387 |
#include <asm/pgtable.h> |
3388 |
-@@ -75,7 +78,7 @@ static void __kprobes bad_kernel_pc(struct pt_regs *regs, unsigned long vaddr) |
3389 |
+@@ -76,7 +79,7 @@ static void __kprobes bad_kernel_pc(struct pt_regs *regs, unsigned long vaddr) |
3390 |
printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n", |
3391 |
regs->tpc); |
3392 |
printk(KERN_CRIT "OOPS: RPC [%016lx]\n", regs->u_regs[15]); |
3393 |
@@ -11466,7 +11876,7 @@ index 4ced3fc..234f1e4 100644 |
3394 |
printk(KERN_CRIT "OOPS: Fault was to vaddr[%lx]\n", vaddr); |
3395 |
dump_stack(); |
3396 |
unhandled_fault(regs->tpc, current, regs); |
3397 |
-@@ -281,6 +284,466 @@ static void noinline __kprobes bogus_32bit_fault_tpc(struct pt_regs *regs) |
3398 |
+@@ -279,6 +282,466 @@ static void noinline __kprobes bogus_32bit_fault_tpc(struct pt_regs *regs) |
3399 |
show_regs(regs); |
3400 |
} |
3401 |
|
3402 |
@@ -11933,7 +12343,7 @@ index 4ced3fc..234f1e4 100644 |
3403 |
asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs) |
3404 |
{ |
3405 |
enum ctx_state prev_state = exception_enter(); |
3406 |
-@@ -352,6 +815,29 @@ retry: |
3407 |
+@@ -350,6 +813,29 @@ retry: |
3408 |
if (!vma) |
3409 |
goto bad_area; |
3410 |
|
3411 |
@@ -12070,10 +12480,10 @@ index d329537..2c3746a 100644 |
3412 |
|
3413 |
pte_t *huge_pte_alloc(struct mm_struct *mm, |
3414 |
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c |
3415 |
-index 9686224..dfbdb10 100644 |
3416 |
+index 2cfb0f2..e917d9f 100644 |
3417 |
--- a/arch/sparc/mm/init_64.c |
3418 |
+++ b/arch/sparc/mm/init_64.c |
3419 |
-@@ -188,9 +188,9 @@ unsigned long sparc64_kern_sec_context __read_mostly; |
3420 |
+@@ -189,9 +189,9 @@ unsigned long sparc64_kern_sec_context __read_mostly; |
3421 |
int num_kernel_image_mappings; |
3422 |
|
3423 |
#ifdef CONFIG_DEBUG_DCFLUSH |
3424 |
@@ -12085,7 +12495,7 @@ index 9686224..dfbdb10 100644 |
3425 |
#endif |
3426 |
#endif |
3427 |
|
3428 |
-@@ -198,7 +198,7 @@ inline void flush_dcache_page_impl(struct page *page) |
3429 |
+@@ -199,7 +199,7 @@ inline void flush_dcache_page_impl(struct page *page) |
3430 |
{ |
3431 |
BUG_ON(tlb_type == hypervisor); |
3432 |
#ifdef CONFIG_DEBUG_DCFLUSH |
3433 |
@@ -12094,7 +12504,7 @@ index 9686224..dfbdb10 100644 |
3434 |
#endif |
3435 |
|
3436 |
#ifdef DCACHE_ALIASING_POSSIBLE |
3437 |
-@@ -470,10 +470,10 @@ void mmu_info(struct seq_file *m) |
3438 |
+@@ -471,10 +471,10 @@ void mmu_info(struct seq_file *m) |
3439 |
|
3440 |
#ifdef CONFIG_DEBUG_DCFLUSH |
3441 |
seq_printf(m, "DCPageFlushes\t: %d\n", |
3442 |
@@ -12108,10 +12518,10 @@ index 9686224..dfbdb10 100644 |
3443 |
#endif /* CONFIG_DEBUG_DCFLUSH */ |
3444 |
} |
3445 |
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig |
3446 |
-index 85258ca..df97c79 100644 |
3447 |
+index 4f3006b..453f625f 100644 |
3448 |
--- a/arch/tile/Kconfig |
3449 |
+++ b/arch/tile/Kconfig |
3450 |
-@@ -190,6 +190,7 @@ source "kernel/Kconfig.hz" |
3451 |
+@@ -192,6 +192,7 @@ source "kernel/Kconfig.hz" |
3452 |
|
3453 |
config KEXEC |
3454 |
bool "kexec system call" |
3455 |
@@ -12120,7 +12530,7 @@ index 85258ca..df97c79 100644 |
3456 |
kexec is a system call that implements the ability to shutdown your |
3457 |
current kernel, and to start another kernel. It is like a reboot |
3458 |
diff --git a/arch/tile/include/asm/atomic_64.h b/arch/tile/include/asm/atomic_64.h |
3459 |
-index ad220ee..2f537b3 100644 |
3460 |
+index 7b11c5f..755a026 100644 |
3461 |
--- a/arch/tile/include/asm/atomic_64.h |
3462 |
+++ b/arch/tile/include/asm/atomic_64.h |
3463 |
@@ -105,6 +105,16 @@ static inline long atomic64_add_unless(atomic64_t *v, long a, long u) |
3464 |
@@ -12137,9 +12547,9 @@ index ad220ee..2f537b3 100644 |
3465 |
+#define atomic64_dec_unchecked(v) atomic64_dec(v) |
3466 |
+#define atomic64_cmpxchg_unchecked(v, o, n) atomic64_cmpxchg((v), (o), (n)) |
3467 |
+ |
3468 |
- /* Atomic dec and inc don't implement barrier, so provide them if needed. */ |
3469 |
- #define smp_mb__before_atomic_dec() smp_mb() |
3470 |
- #define smp_mb__after_atomic_dec() smp_mb() |
3471 |
+ /* Define this to indicate that cmpxchg is an efficient operation. */ |
3472 |
+ #define __HAVE_ARCH_CMPXCHG |
3473 |
+ |
3474 |
diff --git a/arch/tile/include/asm/cache.h b/arch/tile/include/asm/cache.h |
3475 |
index 6160761..00cac88 100644 |
3476 |
--- a/arch/tile/include/asm/cache.h |
3477 |
@@ -12195,7 +12605,7 @@ index e514899..f8743c4 100644 |
3478 |
|
3479 |
/* |
3480 |
diff --git a/arch/um/Makefile b/arch/um/Makefile |
3481 |
-index 36e658a..71a5c5a 100644 |
3482 |
+index e4b1a96..16162f8 100644 |
3483 |
--- a/arch/um/Makefile |
3484 |
+++ b/arch/um/Makefile |
3485 |
@@ -72,6 +72,10 @@ USER_CFLAGS = $(patsubst $(KERNEL_DEFINES),,$(patsubst -D__KERNEL__,,\ |
3486 |
@@ -12312,10 +12722,10 @@ index ad8f795..2c7eec6 100644 |
3487 |
/* |
3488 |
* Memory returned by kmalloc() may be used for DMA, so we must make |
3489 |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig |
3490 |
-index 1dd1408..be4ce12 100644 |
3491 |
+index d24887b..267d526 100644 |
3492 |
--- a/arch/x86/Kconfig |
3493 |
+++ b/arch/x86/Kconfig |
3494 |
-@@ -127,7 +127,7 @@ config X86 |
3495 |
+@@ -128,7 +128,7 @@ config X86 |
3496 |
select RTC_LIB |
3497 |
select HAVE_DEBUG_STACKOVERFLOW |
3498 |
select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64 |
3499 |
@@ -12324,7 +12734,7 @@ index 1dd1408..be4ce12 100644 |
3500 |
select GENERIC_CPU_AUTOPROBE |
3501 |
select HAVE_ARCH_AUDITSYSCALL |
3502 |
select ARCH_SUPPORTS_ATOMIC_RMW |
3503 |
-@@ -252,7 +252,7 @@ config X86_HT |
3504 |
+@@ -253,7 +253,7 @@ config X86_HT |
3505 |
|
3506 |
config X86_32_LAZY_GS |
3507 |
def_bool y |
3508 |
@@ -12333,7 +12743,7 @@ index 1dd1408..be4ce12 100644 |
3509 |
|
3510 |
config ARCH_HWEIGHT_CFLAGS |
3511 |
string |
3512 |
-@@ -546,6 +546,7 @@ config SCHED_OMIT_FRAME_POINTER |
3513 |
+@@ -549,6 +549,7 @@ config SCHED_OMIT_FRAME_POINTER |
3514 |
|
3515 |
menuconfig HYPERVISOR_GUEST |
3516 |
bool "Linux guest support" |
3517 |
@@ -12341,7 +12751,7 @@ index 1dd1408..be4ce12 100644 |
3518 |
---help--- |
3519 |
Say Y here to enable options for running Linux under various hyper- |
3520 |
visors. This option enables basic hypervisor detection and platform |
3521 |
-@@ -1072,6 +1073,7 @@ choice |
3522 |
+@@ -1076,6 +1077,7 @@ choice |
3523 |
|
3524 |
config NOHIGHMEM |
3525 |
bool "off" |
3526 |
@@ -12349,7 +12759,7 @@ index 1dd1408..be4ce12 100644 |
3527 |
---help--- |
3528 |
Linux can use up to 64 Gigabytes of physical memory on x86 systems. |
3529 |
However, the address space of 32-bit x86 processors is only 4 |
3530 |
-@@ -1108,6 +1110,7 @@ config NOHIGHMEM |
3531 |
+@@ -1112,6 +1114,7 @@ config NOHIGHMEM |
3532 |
|
3533 |
config HIGHMEM4G |
3534 |
bool "4GB" |
3535 |
@@ -12357,7 +12767,7 @@ index 1dd1408..be4ce12 100644 |
3536 |
---help--- |
3537 |
Select this if you have a 32-bit processor and between 1 and 4 |
3538 |
gigabytes of physical RAM. |
3539 |
-@@ -1160,7 +1163,7 @@ config PAGE_OFFSET |
3540 |
+@@ -1164,7 +1167,7 @@ config PAGE_OFFSET |
3541 |
hex |
3542 |
default 0xB0000000 if VMSPLIT_3G_OPT |
3543 |
default 0x80000000 if VMSPLIT_2G |
3544 |
@@ -12366,7 +12776,7 @@ index 1dd1408..be4ce12 100644 |
3545 |
default 0x40000000 if VMSPLIT_1G |
3546 |
default 0xC0000000 |
3547 |
depends on X86_32 |
3548 |
-@@ -1573,6 +1576,7 @@ source kernel/Kconfig.hz |
3549 |
+@@ -1577,6 +1580,7 @@ source kernel/Kconfig.hz |
3550 |
|
3551 |
config KEXEC |
3552 |
bool "kexec system call" |
3553 |
@@ -12374,7 +12784,7 @@ index 1dd1408..be4ce12 100644 |
3554 |
---help--- |
3555 |
kexec is a system call that implements the ability to shutdown your |
3556 |
current kernel, and to start another kernel. It is like a reboot |
3557 |
-@@ -1724,7 +1728,9 @@ config X86_NEED_RELOCS |
3558 |
+@@ -1727,7 +1731,9 @@ config X86_NEED_RELOCS |
3559 |
|
3560 |
config PHYSICAL_ALIGN |
3561 |
hex "Alignment value to which kernel should be aligned" |
3562 |
@@ -12385,7 +12795,7 @@ index 1dd1408..be4ce12 100644 |
3563 |
range 0x2000 0x1000000 if X86_32 |
3564 |
range 0x200000 0x1000000 if X86_64 |
3565 |
---help--- |
3566 |
-@@ -1807,6 +1813,7 @@ config COMPAT_VDSO |
3567 |
+@@ -1810,6 +1816,7 @@ config COMPAT_VDSO |
3568 |
def_bool n |
3569 |
prompt "Disable the 32-bit vDSO (needed for glibc 2.3.3)" |
3570 |
depends on X86_32 || IA32_EMULATION |
3571 |
@@ -12606,7 +13016,7 @@ index cbed140..5f2ca57 100644 |
3572 |
|
3573 |
/* Target address to relocate to for decompression */ |
3574 |
diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S |
3575 |
-index 0d558ee..58f257e 100644 |
3576 |
+index 2884e0c..904a2f7 100644 |
3577 |
--- a/arch/x86/boot/compressed/head_64.S |
3578 |
+++ b/arch/x86/boot/compressed/head_64.S |
3579 |
@@ -94,10 +94,10 @@ ENTRY(startup_32) |
3580 |
@@ -13772,7 +14182,7 @@ index dbc4339..de6e120 100644 |
3581 |
|
3582 |
################################################################ |
3583 |
diff --git a/arch/x86/crypto/ghash-clmulni-intel_asm.S b/arch/x86/crypto/ghash-clmulni-intel_asm.S |
3584 |
-index 185fad4..ff4cd36 100644 |
3585 |
+index 5d1e007..098cb4f 100644 |
3586 |
--- a/arch/x86/crypto/ghash-clmulni-intel_asm.S |
3587 |
+++ b/arch/x86/crypto/ghash-clmulni-intel_asm.S |
3588 |
@@ -18,6 +18,7 @@ |
3589 |
@@ -14368,7 +14778,7 @@ index d21ff89..6da8e6e 100644 |
3590 |
set_fs(KERNEL_DS); |
3591 |
has_dumped = 1; |
3592 |
diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c |
3593 |
-index 2206757..85cbcfa 100644 |
3594 |
+index f9e181a..b0df8b3 100644 |
3595 |
--- a/arch/x86/ia32/ia32_signal.c |
3596 |
+++ b/arch/x86/ia32/ia32_signal.c |
3597 |
@@ -218,7 +218,7 @@ asmlinkage long sys32_sigreturn(void) |
3598 |
@@ -14390,8 +14800,8 @@ index 2206757..85cbcfa 100644 |
3599 |
} |
3600 |
|
3601 |
@@ -386,7 +386,7 @@ int ia32_setup_frame(int sig, struct ksignal *ksig, |
3602 |
- restorer = VDSO32_SYMBOL(current->mm->context.vdso, |
3603 |
- sigreturn); |
3604 |
+ restorer = current->mm->context.vdso + |
3605 |
+ selected_vdso32->sym___kernel_sigreturn; |
3606 |
else |
3607 |
- restorer = &frame->retcode; |
3608 |
+ restorer = frame->retcode; |
3609 |
@@ -14416,16 +14826,16 @@ index 2206757..85cbcfa 100644 |
3610 |
}; |
3611 |
|
3612 |
frame = get_sigframe(ksig, regs, sizeof(*frame), &fpstate); |
3613 |
-@@ -461,16 +461,18 @@ int ia32_setup_rt_frame(int sig, struct ksignal *ksig, |
3614 |
+@@ -461,16 +461,19 @@ int ia32_setup_rt_frame(int sig, struct ksignal *ksig, |
3615 |
|
3616 |
if (ksig->ka.sa.sa_flags & SA_RESTORER) |
3617 |
restorer = ksig->ka.sa.sa_restorer; |
3618 |
+- else |
3619 |
+ else if (current->mm->context.vdso) |
3620 |
+ /* Return stub is in 32bit vsyscall page */ |
3621 |
-+ restorer = VDSO32_SYMBOL(current->mm->context.vdso, rt_sigreturn); |
3622 |
- else |
3623 |
-- restorer = VDSO32_SYMBOL(current->mm->context.vdso, |
3624 |
-- rt_sigreturn); |
3625 |
+ restorer = current->mm->context.vdso + |
3626 |
+ selected_vdso32->sym___kernel_rt_sigreturn; |
3627 |
++ else |
3628 |
+ restorer = frame->retcode; |
3629 |
put_user_ex(ptr_to_compat(restorer), &frame->pretcode); |
3630 |
|
3631 |
@@ -14919,10 +15329,10 @@ index 20370c6..a2eb9b0 100644 |
3632 |
"popl %%ebp\n\t" |
3633 |
"popl %%edi\n\t" |
3634 |
diff --git a/arch/x86/include/asm/atomic.h b/arch/x86/include/asm/atomic.h |
3635 |
-index b17f4f4..9620151 100644 |
3636 |
+index 6dd1c7dd..2edd216 100644 |
3637 |
--- a/arch/x86/include/asm/atomic.h |
3638 |
+++ b/arch/x86/include/asm/atomic.h |
3639 |
-@@ -23,7 +23,18 @@ |
3640 |
+@@ -24,7 +24,18 @@ |
3641 |
*/ |
3642 |
static inline int atomic_read(const atomic_t *v) |
3643 |
{ |
3644 |
@@ -14942,7 +15352,7 @@ index b17f4f4..9620151 100644 |
3645 |
} |
3646 |
|
3647 |
/** |
3648 |
-@@ -39,6 +50,18 @@ static inline void atomic_set(atomic_t *v, int i) |
3649 |
+@@ -40,6 +51,18 @@ static inline void atomic_set(atomic_t *v, int i) |
3650 |
} |
3651 |
|
3652 |
/** |
3653 |
@@ -14961,7 +15371,7 @@ index b17f4f4..9620151 100644 |
3654 |
* atomic_add - add integer to atomic variable |
3655 |
* @i: integer value to add |
3656 |
* @v: pointer of type atomic_t |
3657 |
-@@ -47,7 +70,29 @@ static inline void atomic_set(atomic_t *v, int i) |
3658 |
+@@ -48,7 +71,29 @@ static inline void atomic_set(atomic_t *v, int i) |
3659 |
*/ |
3660 |
static inline void atomic_add(int i, atomic_t *v) |
3661 |
{ |
3662 |
@@ -14992,7 +15402,7 @@ index b17f4f4..9620151 100644 |
3663 |
: "+m" (v->counter) |
3664 |
: "ir" (i)); |
3665 |
} |
3666 |
-@@ -61,7 +106,29 @@ static inline void atomic_add(int i, atomic_t *v) |
3667 |
+@@ -62,7 +107,29 @@ static inline void atomic_add(int i, atomic_t *v) |
3668 |
*/ |
3669 |
static inline void atomic_sub(int i, atomic_t *v) |
3670 |
{ |
3671 |
@@ -15023,7 +15433,7 @@ index b17f4f4..9620151 100644 |
3672 |
: "+m" (v->counter) |
3673 |
: "ir" (i)); |
3674 |
} |
3675 |
-@@ -77,7 +144,7 @@ static inline void atomic_sub(int i, atomic_t *v) |
3676 |
+@@ -78,7 +145,7 @@ static inline void atomic_sub(int i, atomic_t *v) |
3677 |
*/ |
3678 |
static inline int atomic_sub_and_test(int i, atomic_t *v) |
3679 |
{ |
3680 |
@@ -15032,7 +15442,7 @@ index b17f4f4..9620151 100644 |
3681 |
} |
3682 |
|
3683 |
/** |
3684 |
-@@ -88,7 +155,27 @@ static inline int atomic_sub_and_test(int i, atomic_t *v) |
3685 |
+@@ -89,7 +156,27 @@ static inline int atomic_sub_and_test(int i, atomic_t *v) |
3686 |
*/ |
3687 |
static inline void atomic_inc(atomic_t *v) |
3688 |
{ |
3689 |
@@ -15061,7 +15471,7 @@ index b17f4f4..9620151 100644 |
3690 |
: "+m" (v->counter)); |
3691 |
} |
3692 |
|
3693 |
-@@ -100,7 +187,27 @@ static inline void atomic_inc(atomic_t *v) |
3694 |
+@@ -101,7 +188,27 @@ static inline void atomic_inc(atomic_t *v) |
3695 |
*/ |
3696 |
static inline void atomic_dec(atomic_t *v) |
3697 |
{ |
3698 |
@@ -15090,7 +15500,7 @@ index b17f4f4..9620151 100644 |
3699 |
: "+m" (v->counter)); |
3700 |
} |
3701 |
|
3702 |
-@@ -114,7 +221,7 @@ static inline void atomic_dec(atomic_t *v) |
3703 |
+@@ -115,7 +222,7 @@ static inline void atomic_dec(atomic_t *v) |
3704 |
*/ |
3705 |
static inline int atomic_dec_and_test(atomic_t *v) |
3706 |
{ |
3707 |
@@ -15099,7 +15509,7 @@ index b17f4f4..9620151 100644 |
3708 |
} |
3709 |
|
3710 |
/** |
3711 |
-@@ -127,7 +234,20 @@ static inline int atomic_dec_and_test(atomic_t *v) |
3712 |
+@@ -128,7 +235,20 @@ static inline int atomic_dec_and_test(atomic_t *v) |
3713 |
*/ |
3714 |
static inline int atomic_inc_and_test(atomic_t *v) |
3715 |
{ |
3716 |
@@ -15121,7 +15531,7 @@ index b17f4f4..9620151 100644 |
3717 |
} |
3718 |
|
3719 |
/** |
3720 |
-@@ -141,7 +261,7 @@ static inline int atomic_inc_and_test(atomic_t *v) |
3721 |
+@@ -142,7 +262,7 @@ static inline int atomic_inc_and_test(atomic_t *v) |
3722 |
*/ |
3723 |
static inline int atomic_add_negative(int i, atomic_t *v) |
3724 |
{ |
3725 |
@@ -15130,7 +15540,7 @@ index b17f4f4..9620151 100644 |
3726 |
} |
3727 |
|
3728 |
/** |
3729 |
-@@ -153,6 +273,18 @@ static inline int atomic_add_negative(int i, atomic_t *v) |
3730 |
+@@ -154,6 +274,18 @@ static inline int atomic_add_negative(int i, atomic_t *v) |
3731 |
*/ |
3732 |
static inline int atomic_add_return(int i, atomic_t *v) |
3733 |
{ |
3734 |
@@ -15149,7 +15559,7 @@ index b17f4f4..9620151 100644 |
3735 |
return i + xadd(&v->counter, i); |
3736 |
} |
3737 |
|
3738 |
-@@ -169,9 +301,18 @@ static inline int atomic_sub_return(int i, atomic_t *v) |
3739 |
+@@ -170,9 +302,18 @@ static inline int atomic_sub_return(int i, atomic_t *v) |
3740 |
} |
3741 |
|
3742 |
#define atomic_inc_return(v) (atomic_add_return(1, v)) |
3743 |
@@ -15169,7 +15579,7 @@ index b17f4f4..9620151 100644 |
3744 |
{ |
3745 |
return cmpxchg(&v->counter, old, new); |
3746 |
} |
3747 |
-@@ -181,6 +322,11 @@ static inline int atomic_xchg(atomic_t *v, int new) |
3748 |
+@@ -182,6 +323,11 @@ static inline int atomic_xchg(atomic_t *v, int new) |
3749 |
return xchg(&v->counter, new); |
3750 |
} |
3751 |
|
3752 |
@@ -15181,7 +15591,7 @@ index b17f4f4..9620151 100644 |
3753 |
/** |
3754 |
* __atomic_add_unless - add unless the number is already a given value |
3755 |
* @v: pointer of type atomic_t |
3756 |
-@@ -190,14 +336,27 @@ static inline int atomic_xchg(atomic_t *v, int new) |
3757 |
+@@ -191,14 +337,27 @@ static inline int atomic_xchg(atomic_t *v, int new) |
3758 |
* Atomically adds @a to @v, so long as @v was not already @u. |
3759 |
* Returns the old value of @v. |
3760 |
*/ |
3761 |
@@ -15213,7 +15623,7 @@ index b17f4f4..9620151 100644 |
3762 |
if (likely(old == c)) |
3763 |
break; |
3764 |
c = old; |
3765 |
-@@ -206,6 +365,49 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) |
3766 |
+@@ -207,6 +366,49 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) |
3767 |
} |
3768 |
|
3769 |
/** |
3770 |
@@ -15263,7 +15673,7 @@ index b17f4f4..9620151 100644 |
3771 |
* atomic_inc_short - increment of a short integer |
3772 |
* @v: pointer to type int |
3773 |
* |
3774 |
-@@ -234,14 +436,37 @@ static inline void atomic_or_long(unsigned long *v1, unsigned long v2) |
3775 |
+@@ -235,14 +437,37 @@ static inline void atomic_or_long(unsigned long *v1, unsigned long v2) |
3776 |
#endif |
3777 |
|
3778 |
/* These are x86-specific, used by some header files */ |
3779 |
@@ -15306,8 +15716,8 @@ index b17f4f4..9620151 100644 |
3780 |
+ : "memory"); |
3781 |
+} |
3782 |
|
3783 |
- /* Atomic operations are already serializing on x86 */ |
3784 |
- #define smp_mb__before_atomic_dec() barrier() |
3785 |
+ #ifdef CONFIG_X86_32 |
3786 |
+ # include <asm/atomic64_32.h> |
3787 |
diff --git a/arch/x86/include/asm/atomic64_32.h b/arch/x86/include/asm/atomic64_32.h |
3788 |
index b154de7..bf18a5a 100644 |
3789 |
--- a/arch/x86/include/asm/atomic64_32.h |
3790 |
@@ -15759,7 +16169,7 @@ index 46e9052..ae45136 100644 |
3791 |
|
3792 |
#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) |
3793 |
diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h |
3794 |
-index 69bbb48..32517fe 100644 |
3795 |
+index 5c7198c..44180b5 100644 |
3796 |
--- a/arch/x86/include/asm/barrier.h |
3797 |
+++ b/arch/x86/include/asm/barrier.h |
3798 |
@@ -107,7 +107,7 @@ |
3799 |
@@ -15781,10 +16191,10 @@ index 69bbb48..32517fe 100644 |
3800 |
|
3801 |
#define smp_load_acquire(p) \ |
3802 |
diff --git a/arch/x86/include/asm/bitops.h b/arch/x86/include/asm/bitops.h |
3803 |
-index 9fc1af7..776d75a 100644 |
3804 |
+index afcd35d..141b32d 100644 |
3805 |
--- a/arch/x86/include/asm/bitops.h |
3806 |
+++ b/arch/x86/include/asm/bitops.h |
3807 |
-@@ -49,7 +49,7 @@ |
3808 |
+@@ -50,7 +50,7 @@ |
3809 |
* a mask operation on a byte. |
3810 |
*/ |
3811 |
#define IS_IMMEDIATE(nr) (__builtin_constant_p(nr)) |
3812 |
@@ -15793,7 +16203,7 @@ index 9fc1af7..776d75a 100644 |
3813 |
#define CONST_MASK(nr) (1 << ((nr) & 7)) |
3814 |
|
3815 |
/** |
3816 |
-@@ -205,7 +205,7 @@ static inline void change_bit(long nr, volatile unsigned long *addr) |
3817 |
+@@ -203,7 +203,7 @@ static inline void change_bit(long nr, volatile unsigned long *addr) |
3818 |
*/ |
3819 |
static inline int test_and_set_bit(long nr, volatile unsigned long *addr) |
3820 |
{ |
3821 |
@@ -15802,7 +16212,7 @@ index 9fc1af7..776d75a 100644 |
3822 |
} |
3823 |
|
3824 |
/** |
3825 |
-@@ -251,7 +251,7 @@ static inline int __test_and_set_bit(long nr, volatile unsigned long *addr) |
3826 |
+@@ -249,7 +249,7 @@ static inline int __test_and_set_bit(long nr, volatile unsigned long *addr) |
3827 |
*/ |
3828 |
static inline int test_and_clear_bit(long nr, volatile unsigned long *addr) |
3829 |
{ |
3830 |
@@ -15811,7 +16221,7 @@ index 9fc1af7..776d75a 100644 |
3831 |
} |
3832 |
|
3833 |
/** |
3834 |
-@@ -304,7 +304,7 @@ static inline int __test_and_change_bit(long nr, volatile unsigned long *addr) |
3835 |
+@@ -302,7 +302,7 @@ static inline int __test_and_change_bit(long nr, volatile unsigned long *addr) |
3836 |
*/ |
3837 |
static inline int test_and_change_bit(long nr, volatile unsigned long *addr) |
3838 |
{ |
3839 |
@@ -15820,7 +16230,7 @@ index 9fc1af7..776d75a 100644 |
3840 |
} |
3841 |
|
3842 |
static __always_inline int constant_test_bit(long nr, const volatile unsigned long *addr) |
3843 |
-@@ -345,7 +345,7 @@ static int test_bit(int nr, const volatile unsigned long *addr); |
3844 |
+@@ -343,7 +343,7 @@ static int test_bit(int nr, const volatile unsigned long *addr); |
3845 |
* |
3846 |
* Undefined if no bit exists, so code should check against 0 first. |
3847 |
*/ |
3848 |
@@ -15829,7 +16239,7 @@ index 9fc1af7..776d75a 100644 |
3849 |
{ |
3850 |
asm("rep; bsf %1,%0" |
3851 |
: "=r" (word) |
3852 |
-@@ -359,7 +359,7 @@ static inline unsigned long __ffs(unsigned long word) |
3853 |
+@@ -357,7 +357,7 @@ static inline unsigned long __ffs(unsigned long word) |
3854 |
* |
3855 |
* Undefined if no zero exists, so code should check against ~0UL first. |
3856 |
*/ |
3857 |
@@ -15838,7 +16248,7 @@ index 9fc1af7..776d75a 100644 |
3858 |
{ |
3859 |
asm("rep; bsf %1,%0" |
3860 |
: "=r" (word) |
3861 |
-@@ -373,7 +373,7 @@ static inline unsigned long ffz(unsigned long word) |
3862 |
+@@ -371,7 +371,7 @@ static inline unsigned long ffz(unsigned long word) |
3863 |
* |
3864 |
* Undefined if no set bit exists, so code should check against 0 first. |
3865 |
*/ |
3866 |
@@ -15847,7 +16257,7 @@ index 9fc1af7..776d75a 100644 |
3867 |
{ |
3868 |
asm("bsr %1,%0" |
3869 |
: "=r" (word) |
3870 |
-@@ -436,7 +436,7 @@ static inline int ffs(int x) |
3871 |
+@@ -434,7 +434,7 @@ static inline int ffs(int x) |
3872 |
* set bit if value is nonzero. The last (most significant) bit is |
3873 |
* at position 32. |
3874 |
*/ |
3875 |
@@ -15856,7 +16266,7 @@ index 9fc1af7..776d75a 100644 |
3876 |
{ |
3877 |
int r; |
3878 |
|
3879 |
-@@ -478,7 +478,7 @@ static inline int fls(int x) |
3880 |
+@@ -476,7 +476,7 @@ static inline int fls(int x) |
3881 |
* at position 64. |
3882 |
*/ |
3883 |
#ifdef CONFIG_X86_64 |
3884 |
@@ -16542,10 +16952,20 @@ index ced283a..ffe04cc 100644 |
3885 |
union { |
3886 |
u64 v64; |
3887 |
diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h |
3888 |
-index 2c71182..731124d 100644 |
3889 |
+index 1a055c8..a1701de 100644 |
3890 |
--- a/arch/x86/include/asm/elf.h |
3891 |
+++ b/arch/x86/include/asm/elf.h |
3892 |
-@@ -243,7 +243,25 @@ extern int force_personality32; |
3893 |
+@@ -75,9 +75,6 @@ typedef struct user_fxsr_struct elf_fpxregset_t; |
3894 |
+ |
3895 |
+ #include <asm/vdso.h> |
3896 |
+ |
3897 |
+-#ifdef CONFIG_X86_64 |
3898 |
+-extern unsigned int vdso64_enabled; |
3899 |
+-#endif |
3900 |
+ #if defined(CONFIG_X86_32) || defined(CONFIG_COMPAT) |
3901 |
+ extern unsigned int vdso32_enabled; |
3902 |
+ #endif |
3903 |
+@@ -248,7 +245,25 @@ extern int force_personality32; |
3904 |
the loader. We need to make sure that it is out of the way of the program |
3905 |
that it will "exec", and that there is sufficient room for the brk. */ |
3906 |
|
3907 |
@@ -16571,26 +16991,27 @@ index 2c71182..731124d 100644 |
3908 |
|
3909 |
/* This yields a mask that user programs can use to figure out what |
3910 |
instruction set this CPU supports. This could be done in user space, |
3911 |
-@@ -292,16 +310,12 @@ do { \ |
3912 |
+@@ -297,17 +312,13 @@ do { \ |
3913 |
|
3914 |
#define ARCH_DLINFO \ |
3915 |
do { \ |
3916 |
-- if (vdso_enabled) \ |
3917 |
+- if (vdso64_enabled) \ |
3918 |
- NEW_AUX_ENT(AT_SYSINFO_EHDR, \ |
3919 |
-- (unsigned long)current->mm->context.vdso); \ |
3920 |
+- (unsigned long __force)current->mm->context.vdso); \ |
3921 |
+ NEW_AUX_ENT(AT_SYSINFO_EHDR, current->mm->context.vdso); \ |
3922 |
} while (0) |
3923 |
|
3924 |
+ /* As a historical oddity, the x32 and x86_64 vDSOs are controlled together. */ |
3925 |
#define ARCH_DLINFO_X32 \ |
3926 |
do { \ |
3927 |
-- if (vdso_enabled) \ |
3928 |
+- if (vdso64_enabled) \ |
3929 |
- NEW_AUX_ENT(AT_SYSINFO_EHDR, \ |
3930 |
-- (unsigned long)current->mm->context.vdso); \ |
3931 |
+- (unsigned long __force)current->mm->context.vdso); \ |
3932 |
+ NEW_AUX_ENT(AT_SYSINFO_EHDR, current->mm->context.vdso); \ |
3933 |
} while (0) |
3934 |
|
3935 |
#define AT_SYSINFO 32 |
3936 |
-@@ -316,7 +330,7 @@ else \ |
3937 |
+@@ -322,10 +333,10 @@ else \ |
3938 |
|
3939 |
#endif /* !CONFIG_X86_32 */ |
3940 |
|
3941 |
@@ -16598,10 +17019,14 @@ index 2c71182..731124d 100644 |
3942 |
+#define VDSO_CURRENT_BASE (current->mm->context.vdso) |
3943 |
|
3944 |
#define VDSO_ENTRY \ |
3945 |
- ((unsigned long)VDSO32_SYMBOL(VDSO_CURRENT_BASE, vsyscall)) |
3946 |
-@@ -332,9 +346,6 @@ extern int x32_setup_additional_pages(struct linux_binprm *bprm, |
3947 |
- extern int syscall32_setup_pages(struct linux_binprm *, int exstack); |
3948 |
- #define compat_arch_setup_additional_pages syscall32_setup_pages |
3949 |
+- ((unsigned long)current->mm->context.vdso + \ |
3950 |
++ (current->mm->context.vdso + \ |
3951 |
+ selected_vdso32->sym___kernel_vsyscall) |
3952 |
+ |
3953 |
+ struct linux_binprm; |
3954 |
+@@ -337,9 +348,6 @@ extern int compat_arch_setup_additional_pages(struct linux_binprm *bprm, |
3955 |
+ int uses_interp); |
3956 |
+ #define compat_arch_setup_additional_pages compat_arch_setup_additional_pages |
3957 |
|
3958 |
-extern unsigned long arch_randomize_brk(struct mm_struct *mm); |
3959 |
-#define arch_randomize_brk arch_randomize_brk |
3960 |
@@ -16655,7 +17080,7 @@ index 1c7eefe..d0e4702 100644 |
3961 |
}; |
3962 |
|
3963 |
diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h |
3964 |
-index cea1c76..6c0d79b 100644 |
3965 |
+index 115e368..76ecf6c 100644 |
3966 |
--- a/arch/x86/include/asm/fpu-internal.h |
3967 |
+++ b/arch/x86/include/asm/fpu-internal.h |
3968 |
@@ -124,8 +124,11 @@ static inline void sanitize_i387_state(struct task_struct *tsk) |
3969 |
@@ -16753,7 +17178,7 @@ index b4c1f54..e290c08 100644 |
3970 |
pagefault_enable(); |
3971 |
|
3972 |
diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h |
3973 |
-index a307b75..ec74ca2 100644 |
3974 |
+index 4615906..788c817 100644 |
3975 |
--- a/arch/x86/include/asm/hw_irq.h |
3976 |
+++ b/arch/x86/include/asm/hw_irq.h |
3977 |
@@ -164,8 +164,8 @@ extern void setup_ioapic_dest(void); |
3978 |
@@ -16854,7 +17279,7 @@ index 0a8b519..80e7d5b 100644 |
3979 |
#define INTERRUPT_RETURN iret |
3980 |
#define ENABLE_INTERRUPTS_SYSEXIT sti; sysexit |
3981 |
diff --git a/arch/x86/include/asm/kprobes.h b/arch/x86/include/asm/kprobes.h |
3982 |
-index 9454c16..e4100e3 100644 |
3983 |
+index 53cdfb2..d1369e6 100644 |
3984 |
--- a/arch/x86/include/asm/kprobes.h |
3985 |
+++ b/arch/x86/include/asm/kprobes.h |
3986 |
@@ -38,13 +38,8 @@ typedef u8 kprobe_opcode_t; |
3987 |
@@ -17077,7 +17502,7 @@ index 0000000..2bfd3ba |
3988 |
+ |
3989 |
+#endif /* X86_MMAN_H */ |
3990 |
diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h |
3991 |
-index 5f55e69..e20bfb1 100644 |
3992 |
+index 876e74e..e20bfb1 100644 |
3993 |
--- a/arch/x86/include/asm/mmu.h |
3994 |
+++ b/arch/x86/include/asm/mmu.h |
3995 |
@@ -9,7 +9,7 @@ |
3996 |
@@ -17093,7 +17518,7 @@ index 5f55e69..e20bfb1 100644 |
3997 |
#endif |
3998 |
|
3999 |
struct mutex lock; |
4000 |
-- void *vdso; |
4001 |
+- void __user *vdso; |
4002 |
+ unsigned long vdso; |
4003 |
+ |
4004 |
+#ifdef CONFIG_X86_32 |
4005 |
@@ -17111,7 +17536,7 @@ index 5f55e69..e20bfb1 100644 |
4006 |
|
4007 |
#ifdef CONFIG_SMP |
4008 |
diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h |
4009 |
-index be12c53..4d24039 100644 |
4010 |
+index be12c53..07fd3ca 100644 |
4011 |
--- a/arch/x86/include/asm/mmu_context.h |
4012 |
+++ b/arch/x86/include/asm/mmu_context.h |
4013 |
@@ -24,6 +24,20 @@ void destroy_context(struct mm_struct *mm); |
4014 |
@@ -17202,9 +17627,9 @@ index be12c53..4d24039 100644 |
4015 |
+ |
4016 |
+#if defined(CONFIG_X86_32) && defined(CONFIG_PAX_PAGEEXEC) && defined(CONFIG_SMP) |
4017 |
+ if (!(__supported_pte_mask & _PAGE_NX)) { |
4018 |
-+ smp_mb__before_clear_bit(); |
4019 |
++ smp_mb__before_atomic(); |
4020 |
+ cpu_clear(cpu, prev->context.cpu_user_cs_mask); |
4021 |
-+ smp_mb__after_clear_bit(); |
4022 |
++ smp_mb__after_atomic(); |
4023 |
+ cpu_set(cpu, next->context.cpu_user_cs_mask); |
4024 |
+ } |
4025 |
+#endif |
4026 |
@@ -17670,7 +18095,7 @@ index c4412e9..90e88c5 100644 |
4027 |
{ |
4028 |
return (pud_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT); |
4029 |
diff --git a/arch/x86/include/asm/pgtable-2level.h b/arch/x86/include/asm/pgtable-2level.h |
4030 |
-index 0d193e2..bf59aeb 100644 |
4031 |
+index 206a87f..1623b06 100644 |
4032 |
--- a/arch/x86/include/asm/pgtable-2level.h |
4033 |
+++ b/arch/x86/include/asm/pgtable-2level.h |
4034 |
@@ -18,7 +18,9 @@ static inline void native_set_pte(pte_t *ptep , pte_t pte) |
4035 |
@@ -17705,7 +18130,7 @@ index 81bb91b..9392125 100644 |
4036 |
|
4037 |
/* |
4038 |
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h |
4039 |
-index b459ddf..b44081b 100644 |
4040 |
+index 0ec0560..5dc64bd 100644 |
4041 |
--- a/arch/x86/include/asm/pgtable.h |
4042 |
+++ b/arch/x86/include/asm/pgtable.h |
4043 |
@@ -46,6 +46,7 @@ extern struct mm_struct *pgd_page_get_mm(struct page *page); |
4044 |
@@ -17768,7 +18193,7 @@ index b459ddf..b44081b 100644 |
4045 |
static inline int pte_dirty(pte_t pte) |
4046 |
{ |
4047 |
return pte_flags(pte) & _PAGE_DIRTY; |
4048 |
-@@ -149,6 +189,11 @@ static inline unsigned long pud_pfn(pud_t pud) |
4049 |
+@@ -150,6 +190,11 @@ static inline unsigned long pud_pfn(pud_t pud) |
4050 |
return (pud_val(pud) & PTE_PFN_MASK) >> PAGE_SHIFT; |
4051 |
} |
4052 |
|
4053 |
@@ -17780,7 +18205,7 @@ index b459ddf..b44081b 100644 |
4054 |
#define pte_page(pte) pfn_to_page(pte_pfn(pte)) |
4055 |
|
4056 |
static inline int pmd_large(pmd_t pte) |
4057 |
-@@ -202,9 +247,29 @@ static inline pte_t pte_wrprotect(pte_t pte) |
4058 |
+@@ -203,9 +248,29 @@ static inline pte_t pte_wrprotect(pte_t pte) |
4059 |
return pte_clear_flags(pte, _PAGE_RW); |
4060 |
} |
4061 |
|
4062 |
@@ -17811,7 +18236,7 @@ index b459ddf..b44081b 100644 |
4063 |
} |
4064 |
|
4065 |
static inline pte_t pte_mkdirty(pte_t pte) |
4066 |
-@@ -431,6 +496,16 @@ pte_t *populate_extra_pte(unsigned long vaddr); |
4067 |
+@@ -435,6 +500,16 @@ pte_t *populate_extra_pte(unsigned long vaddr); |
4068 |
#endif |
4069 |
|
4070 |
#ifndef __ASSEMBLY__ |
4071 |
@@ -17828,7 +18253,7 @@ index b459ddf..b44081b 100644 |
4072 |
#include <linux/mm_types.h> |
4073 |
#include <linux/mmdebug.h> |
4074 |
#include <linux/log2.h> |
4075 |
-@@ -571,7 +646,7 @@ static inline unsigned long pud_page_vaddr(pud_t pud) |
4076 |
+@@ -581,7 +656,7 @@ static inline unsigned long pud_page_vaddr(pud_t pud) |
4077 |
* Currently stuck as a macro due to indirect forward reference to |
4078 |
* linux/mmzone.h's __section_mem_map_addr() definition: |
4079 |
*/ |
4080 |
@@ -17837,7 +18262,7 @@ index b459ddf..b44081b 100644 |
4081 |
|
4082 |
/* Find an entry in the second-level page table.. */ |
4083 |
static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address) |
4084 |
-@@ -611,7 +686,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd) |
4085 |
+@@ -621,7 +696,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd) |
4086 |
* Currently stuck as a macro due to indirect forward reference to |
4087 |
* linux/mmzone.h's __section_mem_map_addr() definition: |
4088 |
*/ |
4089 |
@@ -17846,7 +18271,7 @@ index b459ddf..b44081b 100644 |
4090 |
|
4091 |
/* to find an entry in a page-table-directory. */ |
4092 |
static inline unsigned long pud_index(unsigned long address) |
4093 |
-@@ -626,7 +701,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address) |
4094 |
+@@ -636,7 +711,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address) |
4095 |
|
4096 |
static inline int pgd_bad(pgd_t pgd) |
4097 |
{ |
4098 |
@@ -17855,7 +18280,7 @@ index b459ddf..b44081b 100644 |
4099 |
} |
4100 |
|
4101 |
static inline int pgd_none(pgd_t pgd) |
4102 |
-@@ -649,7 +724,12 @@ static inline int pgd_none(pgd_t pgd) |
4103 |
+@@ -659,7 +734,12 @@ static inline int pgd_none(pgd_t pgd) |
4104 |
* pgd_offset() returns a (pgd_t *) |
4105 |
* pgd_index() is used get the offset into the pgd page's array of pgd_t's; |
4106 |
*/ |
4107 |
@@ -17869,7 +18294,7 @@ index b459ddf..b44081b 100644 |
4108 |
/* |
4109 |
* a shortcut which implies the use of the kernel's pgd, instead |
4110 |
* of a process's |
4111 |
-@@ -660,6 +740,23 @@ static inline int pgd_none(pgd_t pgd) |
4112 |
+@@ -670,6 +750,23 @@ static inline int pgd_none(pgd_t pgd) |
4113 |
#define KERNEL_PGD_BOUNDARY pgd_index(PAGE_OFFSET) |
4114 |
#define KERNEL_PGD_PTRS (PTRS_PER_PGD - KERNEL_PGD_BOUNDARY) |
4115 |
|
4116 |
@@ -17893,7 +18318,7 @@ index b459ddf..b44081b 100644 |
4117 |
#ifndef __ASSEMBLY__ |
4118 |
|
4119 |
extern int direct_gbpages; |
4120 |
-@@ -826,11 +923,24 @@ static inline void pmdp_set_wrprotect(struct mm_struct *mm, |
4121 |
+@@ -836,11 +933,24 @@ static inline void pmdp_set_wrprotect(struct mm_struct *mm, |
4122 |
* dst and src can be on the same page, but the range must not overlap, |
4123 |
* and must not cross a page boundary. |
4124 |
*/ |
4125 |
@@ -17999,7 +18424,7 @@ index ed5903b..c7fe163 100644 |
4126 |
#define MODULES_END VMALLOC_END |
4127 |
#define MODULES_LEN (MODULES_VADDR - MODULES_END) |
4128 |
diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h |
4129 |
-index e22c1db..23a625a 100644 |
4130 |
+index 5be9063..d62185b 100644 |
4131 |
--- a/arch/x86/include/asm/pgtable_64.h |
4132 |
+++ b/arch/x86/include/asm/pgtable_64.h |
4133 |
@@ -16,10 +16,14 @@ |
4134 |
@@ -18073,35 +18498,10 @@ index 7166e25..baaa6fe 100644 |
4135 |
|
4136 |
#endif /* _ASM_X86_PGTABLE_64_DEFS_H */ |
4137 |
diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h |
4138 |
-index eb3d449..8d95316 100644 |
4139 |
+index f216963..6bd7c21 100644 |
4140 |
--- a/arch/x86/include/asm/pgtable_types.h |
4141 |
+++ b/arch/x86/include/asm/pgtable_types.h |
4142 |
-@@ -16,13 +16,12 @@ |
4143 |
- #define _PAGE_BIT_PSE 7 /* 4 MB (or 2MB) page */ |
4144 |
- #define _PAGE_BIT_PAT 7 /* on 4KB pages */ |
4145 |
- #define _PAGE_BIT_GLOBAL 8 /* Global TLB entry PPro+ */ |
4146 |
--#define _PAGE_BIT_UNUSED1 9 /* available for programmer */ |
4147 |
-+#define _PAGE_BIT_SPECIAL 9 /* special mappings, no associated struct page */ |
4148 |
- #define _PAGE_BIT_IOMAP 10 /* flag used to indicate IO mapping */ |
4149 |
- #define _PAGE_BIT_HIDDEN 11 /* hidden by kmemcheck */ |
4150 |
- #define _PAGE_BIT_PAT_LARGE 12 /* On 2MB or 1GB pages */ |
4151 |
--#define _PAGE_BIT_SPECIAL _PAGE_BIT_UNUSED1 |
4152 |
--#define _PAGE_BIT_CPA_TEST _PAGE_BIT_UNUSED1 |
4153 |
--#define _PAGE_BIT_SPLITTING _PAGE_BIT_UNUSED1 /* only valid on a PSE pmd */ |
4154 |
-+#define _PAGE_BIT_CPA_TEST _PAGE_BIT_SPECIAL |
4155 |
-+#define _PAGE_BIT_SPLITTING _PAGE_BIT_SPECIAL /* only valid on a PSE pmd */ |
4156 |
- #define _PAGE_BIT_NX 63 /* No execute: only valid after cpuid check */ |
4157 |
- |
4158 |
- /* If _PAGE_BIT_PRESENT is clear, we use these: */ |
4159 |
-@@ -40,7 +39,6 @@ |
4160 |
- #define _PAGE_DIRTY (_AT(pteval_t, 1) << _PAGE_BIT_DIRTY) |
4161 |
- #define _PAGE_PSE (_AT(pteval_t, 1) << _PAGE_BIT_PSE) |
4162 |
- #define _PAGE_GLOBAL (_AT(pteval_t, 1) << _PAGE_BIT_GLOBAL) |
4163 |
--#define _PAGE_UNUSED1 (_AT(pteval_t, 1) << _PAGE_BIT_UNUSED1) |
4164 |
- #define _PAGE_IOMAP (_AT(pteval_t, 1) << _PAGE_BIT_IOMAP) |
4165 |
- #define _PAGE_PAT (_AT(pteval_t, 1) << _PAGE_BIT_PAT) |
4166 |
- #define _PAGE_PAT_LARGE (_AT(pteval_t, 1) << _PAGE_BIT_PAT_LARGE) |
4167 |
-@@ -87,8 +85,10 @@ |
4168 |
+@@ -111,8 +111,10 @@ |
4169 |
|
4170 |
#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE) |
4171 |
#define _PAGE_NX (_AT(pteval_t, 1) << _PAGE_BIT_NX) |
4172 |
@@ -18113,7 +18513,7 @@ index eb3d449..8d95316 100644 |
4173 |
#endif |
4174 |
|
4175 |
#define _PAGE_FILE (_AT(pteval_t, 1) << _PAGE_BIT_FILE) |
4176 |
-@@ -147,6 +147,9 @@ |
4177 |
+@@ -151,6 +153,9 @@ |
4178 |
#define PAGE_READONLY_EXEC __pgprot(_PAGE_PRESENT | _PAGE_USER | \ |
4179 |
_PAGE_ACCESSED) |
4180 |
|
4181 |
@@ -18123,7 +18523,7 @@ index eb3d449..8d95316 100644 |
4182 |
#define __PAGE_KERNEL_EXEC \ |
4183 |
(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_GLOBAL) |
4184 |
#define __PAGE_KERNEL (__PAGE_KERNEL_EXEC | _PAGE_NX) |
4185 |
-@@ -157,7 +160,7 @@ |
4186 |
+@@ -161,7 +166,7 @@ |
4187 |
#define __PAGE_KERNEL_WC (__PAGE_KERNEL | _PAGE_CACHE_WC) |
4188 |
#define __PAGE_KERNEL_NOCACHE (__PAGE_KERNEL | _PAGE_PCD | _PAGE_PWT) |
4189 |
#define __PAGE_KERNEL_UC_MINUS (__PAGE_KERNEL | _PAGE_PCD) |
4190 |
@@ -18132,7 +18532,7 @@ index eb3d449..8d95316 100644 |
4191 |
#define __PAGE_KERNEL_VVAR (__PAGE_KERNEL_RO | _PAGE_USER) |
4192 |
#define __PAGE_KERNEL_VVAR_NOCACHE (__PAGE_KERNEL_VVAR | _PAGE_PCD | _PAGE_PWT) |
4193 |
#define __PAGE_KERNEL_LARGE (__PAGE_KERNEL | _PAGE_PSE) |
4194 |
-@@ -214,7 +217,7 @@ |
4195 |
+@@ -218,7 +223,7 @@ |
4196 |
#ifdef CONFIG_X86_64 |
4197 |
#define __PAGE_KERNEL_IDENT_LARGE_EXEC __PAGE_KERNEL_LARGE_EXEC |
4198 |
#else |
4199 |
@@ -18141,7 +18541,7 @@ index eb3d449..8d95316 100644 |
4200 |
#define PDE_IDENT_ATTR 0x063 /* PRESENT+RW+DIRTY+ACCESSED */ |
4201 |
#define PGD_IDENT_ATTR 0x001 /* PRESENT (no other attributes) */ |
4202 |
#endif |
4203 |
-@@ -253,7 +256,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd) |
4204 |
+@@ -257,7 +262,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd) |
4205 |
{ |
4206 |
return native_pgd_val(pgd) & PTE_FLAGS_MASK; |
4207 |
} |
4208 |
@@ -18159,7 +18559,7 @@ index eb3d449..8d95316 100644 |
4209 |
#if PAGETABLE_LEVELS > 3 |
4210 |
typedef struct { pudval_t pud; } pud_t; |
4211 |
|
4212 |
-@@ -267,8 +280,6 @@ static inline pudval_t native_pud_val(pud_t pud) |
4213 |
+@@ -271,8 +286,6 @@ static inline pudval_t native_pud_val(pud_t pud) |
4214 |
return pud.pud; |
4215 |
} |
4216 |
#else |
4217 |
@@ -18168,7 +18568,7 @@ index eb3d449..8d95316 100644 |
4218 |
static inline pudval_t native_pud_val(pud_t pud) |
4219 |
{ |
4220 |
return native_pgd_val(pud.pgd); |
4221 |
-@@ -288,8 +299,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd) |
4222 |
+@@ -292,8 +305,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd) |
4223 |
return pmd.pmd; |
4224 |
} |
4225 |
#else |
4226 |
@@ -18177,7 +18577,7 @@ index eb3d449..8d95316 100644 |
4227 |
static inline pmdval_t native_pmd_val(pmd_t pmd) |
4228 |
{ |
4229 |
return native_pgd_val(pmd.pud.pgd); |
4230 |
-@@ -329,7 +338,6 @@ typedef struct page *pgtable_t; |
4231 |
+@@ -333,7 +344,6 @@ typedef struct page *pgtable_t; |
4232 |
|
4233 |
extern pteval_t __supported_pte_mask; |
4234 |
extern void set_nx(void); |
4235 |
@@ -18467,6 +18867,21 @@ index 6205f0c..688a3a9 100644 |
4236 |
#endif |
4237 |
return *(unsigned long *)((unsigned long)regs + offset); |
4238 |
} |
4239 |
+diff --git a/arch/x86/include/asm/qrwlock.h b/arch/x86/include/asm/qrwlock.h |
4240 |
+index 70f46f0..adfbdb4 100644 |
4241 |
+--- a/arch/x86/include/asm/qrwlock.h |
4242 |
++++ b/arch/x86/include/asm/qrwlock.h |
4243 |
+@@ -7,8 +7,8 @@ |
4244 |
+ #define queue_write_unlock queue_write_unlock |
4245 |
+ static inline void queue_write_unlock(struct qrwlock *lock) |
4246 |
+ { |
4247 |
+- barrier(); |
4248 |
+- ACCESS_ONCE(*(u8 *)&lock->cnts) = 0; |
4249 |
++ barrier(); |
4250 |
++ ACCESS_ONCE_RW(*(u8 *)&lock->cnts) = 0; |
4251 |
+ } |
4252 |
+ #endif |
4253 |
+ |
4254 |
diff --git a/arch/x86/include/asm/realmode.h b/arch/x86/include/asm/realmode.h |
4255 |
index 9c6b890..5305f53 100644 |
4256 |
--- a/arch/x86/include/asm/realmode.h |
4257 |
@@ -18975,10 +19390,10 @@ index 8cd27e0..7f05ec8 100644 |
4258 |
|
4259 |
#endif |
4260 |
diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h |
4261 |
-index 0f62f54..cb5d0dd 100644 |
4262 |
+index 54f1c80..39362a5 100644 |
4263 |
--- a/arch/x86/include/asm/spinlock.h |
4264 |
+++ b/arch/x86/include/asm/spinlock.h |
4265 |
-@@ -222,6 +222,14 @@ static inline int arch_write_can_lock(arch_rwlock_t *lock) |
4266 |
+@@ -223,6 +223,14 @@ static inline int arch_write_can_lock(arch_rwlock_t *lock) |
4267 |
static inline void arch_read_lock(arch_rwlock_t *rw) |
4268 |
{ |
4269 |
asm volatile(LOCK_PREFIX READ_LOCK_SIZE(dec) " (%0)\n\t" |
4270 |
@@ -18993,7 +19408,7 @@ index 0f62f54..cb5d0dd 100644 |
4271 |
"jns 1f\n" |
4272 |
"call __read_lock_failed\n\t" |
4273 |
"1:\n" |
4274 |
-@@ -231,6 +239,14 @@ static inline void arch_read_lock(arch_rwlock_t *rw) |
4275 |
+@@ -232,6 +240,14 @@ static inline void arch_read_lock(arch_rwlock_t *rw) |
4276 |
static inline void arch_write_lock(arch_rwlock_t *rw) |
4277 |
{ |
4278 |
asm volatile(LOCK_PREFIX WRITE_LOCK_SUB(%1) "(%0)\n\t" |
4279 |
@@ -19008,7 +19423,7 @@ index 0f62f54..cb5d0dd 100644 |
4280 |
"jz 1f\n" |
4281 |
"call __write_lock_failed\n\t" |
4282 |
"1:\n" |
4283 |
-@@ -260,13 +276,29 @@ static inline int arch_write_trylock(arch_rwlock_t *lock) |
4284 |
+@@ -261,13 +277,29 @@ static inline int arch_write_trylock(arch_rwlock_t *lock) |
4285 |
|
4286 |
static inline void arch_read_unlock(arch_rwlock_t *rw) |
4287 |
{ |
4288 |
@@ -19039,7 +19454,7 @@ index 0f62f54..cb5d0dd 100644 |
4289 |
+ |
4290 |
: "+m" (rw->write) : "i" (RW_LOCK_BIAS) : "memory"); |
4291 |
} |
4292 |
- |
4293 |
+ #else |
4294 |
diff --git a/arch/x86/include/asm/stackprotector.h b/arch/x86/include/asm/stackprotector.h |
4295 |
index 6a99859..03cb807 100644 |
4296 |
--- a/arch/x86/include/asm/stackprotector.h |
4297 |
@@ -19138,7 +19553,7 @@ index d7f3b3b..3cc39f1 100644 |
4298 |
__switch_canary_iparam \ |
4299 |
: "memory", "cc" __EXTRA_CLOBBER) |
4300 |
diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h |
4301 |
-index 47e5de2..d3dda54 100644 |
4302 |
+index 8540538..4b0b5e9 100644 |
4303 |
--- a/arch/x86/include/asm/thread_info.h |
4304 |
+++ b/arch/x86/include/asm/thread_info.h |
4305 |
@@ -24,7 +24,6 @@ struct exec_domain; |
4306 |
@@ -19174,7 +19589,7 @@ index 47e5de2..d3dda54 100644 |
4307 |
#define init_stack (init_thread_union.stack) |
4308 |
|
4309 |
#else /* !__ASSEMBLY__ */ |
4310 |
-@@ -90,6 +89,7 @@ struct thread_info { |
4311 |
+@@ -91,6 +90,7 @@ struct thread_info { |
4312 |
#define TIF_SYSCALL_TRACEPOINT 28 /* syscall tracepoint instrumentation */ |
4313 |
#define TIF_ADDR32 29 /* 32-bit address space on 64 bits */ |
4314 |
#define TIF_X32 30 /* 32-bit native x86-64 binary */ |
4315 |
@@ -19182,7 +19597,7 @@ index 47e5de2..d3dda54 100644 |
4316 |
|
4317 |
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) |
4318 |
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) |
4319 |
-@@ -113,17 +113,18 @@ struct thread_info { |
4320 |
+@@ -115,17 +115,18 @@ struct thread_info { |
4321 |
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) |
4322 |
#define _TIF_ADDR32 (1 << TIF_ADDR32) |
4323 |
#define _TIF_X32 (1 << TIF_X32) |
4324 |
@@ -19203,7 +19618,7 @@ index 47e5de2..d3dda54 100644 |
4325 |
|
4326 |
/* work to do on interrupt/exception return */ |
4327 |
#define _TIF_WORK_MASK \ |
4328 |
-@@ -134,7 +135,7 @@ struct thread_info { |
4329 |
+@@ -136,7 +137,7 @@ struct thread_info { |
4330 |
/* work to do on any return to user space */ |
4331 |
#define _TIF_ALLWORK_MASK \ |
4332 |
((0x0000FFFF & ~_TIF_SECCOMP) | _TIF_SYSCALL_TRACEPOINT | \ |
4333 |
@@ -19212,7 +19627,7 @@ index 47e5de2..d3dda54 100644 |
4334 |
|
4335 |
/* Only used for 64 bit */ |
4336 |
#define _TIF_DO_NOTIFY_MASK \ |
4337 |
-@@ -149,7 +150,6 @@ struct thread_info { |
4338 |
+@@ -151,7 +152,6 @@ struct thread_info { |
4339 |
#define _TIF_WORK_CTXSW_NEXT (_TIF_WORK_CTXSW) |
4340 |
|
4341 |
#define STACK_WARN (THREAD_SIZE/8) |
4342 |
@@ -19220,7 +19635,7 @@ index 47e5de2..d3dda54 100644 |
4343 |
|
4344 |
/* |
4345 |
* macros/functions for gaining access to the thread information structure |
4346 |
-@@ -160,26 +160,18 @@ struct thread_info { |
4347 |
+@@ -162,26 +162,18 @@ struct thread_info { |
4348 |
|
4349 |
DECLARE_PER_CPU(unsigned long, kernel_stack); |
4350 |
|
4351 |
@@ -20367,7 +20782,7 @@ index 7b0a55a..ad115bf 100644 |
4352 |
|
4353 |
/* top of stack page */ |
4354 |
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile |
4355 |
-index 491ef3e..7da98ce 100644 |
4356 |
+index 047f9ff..4ba5ea6 100644 |
4357 |
--- a/arch/x86/kernel/Makefile |
4358 |
+++ b/arch/x86/kernel/Makefile |
4359 |
@@ -24,7 +24,7 @@ obj-y += time.o ioport.o ldt.o dumpstack.o nmi.o |
4360 |
@@ -20377,8 +20792,8 @@ index 491ef3e..7da98ce 100644 |
4361 |
-obj-$(CONFIG_X86_32) += i386_ksyms_32.o |
4362 |
+obj-$(CONFIG_X86_32) += sys_i386_32.o i386_ksyms_32.o |
4363 |
obj-$(CONFIG_X86_64) += sys_x86_64.o x8664_ksyms_64.o |
4364 |
+ obj-$(CONFIG_X86_64) += mcount_64.o |
4365 |
obj-y += syscall_$(BITS).o vsyscall_gtod.o |
4366 |
- obj-$(CONFIG_X86_64) += vsyscall_64.o |
4367 |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c |
4368 |
index 86281ff..e046fc2 100644 |
4369 |
--- a/arch/x86/kernel/acpi/boot.c |
4370 |
@@ -20439,10 +20854,10 @@ index 665c6b7..eae4d56 100644 |
4371 |
bogus_magic: |
4372 |
jmp bogus_magic |
4373 |
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c |
4374 |
-index df94598..b7162f9 100644 |
4375 |
+index 703130f..27a155d 100644 |
4376 |
--- a/arch/x86/kernel/alternative.c |
4377 |
+++ b/arch/x86/kernel/alternative.c |
4378 |
-@@ -269,6 +269,13 @@ void __init_or_module apply_alternatives(struct alt_instr *start, |
4379 |
+@@ -268,6 +268,13 @@ void __init_or_module apply_alternatives(struct alt_instr *start, |
4380 |
*/ |
4381 |
for (a = start; a < end; a++) { |
4382 |
instr = (u8 *)&a->instr_offset + a->instr_offset; |
4383 |
@@ -20456,7 +20871,7 @@ index df94598..b7162f9 100644 |
4384 |
replacement = (u8 *)&a->repl_offset + a->repl_offset; |
4385 |
BUG_ON(a->replacementlen > a->instrlen); |
4386 |
BUG_ON(a->instrlen > sizeof(insnbuf)); |
4387 |
-@@ -285,6 +292,11 @@ void __init_or_module apply_alternatives(struct alt_instr *start, |
4388 |
+@@ -284,6 +291,11 @@ void __init_or_module apply_alternatives(struct alt_instr *start, |
4389 |
add_nops(insnbuf + a->replacementlen, |
4390 |
a->instrlen - a->replacementlen); |
4391 |
|
4392 |
@@ -20468,7 +20883,7 @@ index df94598..b7162f9 100644 |
4393 |
text_poke_early(instr, insnbuf, a->instrlen); |
4394 |
} |
4395 |
} |
4396 |
-@@ -300,10 +312,16 @@ static void alternatives_smp_lock(const s32 *start, const s32 *end, |
4397 |
+@@ -299,10 +311,16 @@ static void alternatives_smp_lock(const s32 *start, const s32 *end, |
4398 |
for (poff = start; poff < end; poff++) { |
4399 |
u8 *ptr = (u8 *)poff + *poff; |
4400 |
|
4401 |
@@ -20486,7 +20901,7 @@ index df94598..b7162f9 100644 |
4402 |
text_poke(ptr, ((unsigned char []){0xf0}), 1); |
4403 |
} |
4404 |
mutex_unlock(&text_mutex); |
4405 |
-@@ -318,10 +336,16 @@ static void alternatives_smp_unlock(const s32 *start, const s32 *end, |
4406 |
+@@ -317,10 +335,16 @@ static void alternatives_smp_unlock(const s32 *start, const s32 *end, |
4407 |
for (poff = start; poff < end; poff++) { |
4408 |
u8 *ptr = (u8 *)poff + *poff; |
4409 |
|
4410 |
@@ -20504,7 +20919,7 @@ index df94598..b7162f9 100644 |
4411 |
text_poke(ptr, ((unsigned char []){0x3E}), 1); |
4412 |
} |
4413 |
mutex_unlock(&text_mutex); |
4414 |
-@@ -458,7 +482,7 @@ void __init_or_module apply_paravirt(struct paravirt_patch_site *start, |
4415 |
+@@ -457,7 +481,7 @@ void __init_or_module apply_paravirt(struct paravirt_patch_site *start, |
4416 |
|
4417 |
BUG_ON(p->len > MAX_PATCH_LEN); |
4418 |
/* prep the buffer with the original instructions */ |
4419 |
@@ -20513,7 +20928,7 @@ index df94598..b7162f9 100644 |
4420 |
used = pv_init_ops.patch(p->instrtype, p->clobbers, insnbuf, |
4421 |
(unsigned long)p->instr, p->len); |
4422 |
|
4423 |
-@@ -505,7 +529,7 @@ void __init alternative_instructions(void) |
4424 |
+@@ -504,7 +528,7 @@ void __init alternative_instructions(void) |
4425 |
if (!uniproc_patched || num_possible_cpus() == 1) |
4426 |
free_init_pages("SMP alternatives", |
4427 |
(unsigned long)__smp_locks, |
4428 |
@@ -20522,7 +20937,7 @@ index df94598..b7162f9 100644 |
4429 |
#endif |
4430 |
|
4431 |
apply_paravirt(__parainstructions, __parainstructions_end); |
4432 |
-@@ -525,13 +549,17 @@ void __init alternative_instructions(void) |
4433 |
+@@ -524,13 +548,17 @@ void __init alternative_instructions(void) |
4434 |
* instructions. And on the local CPU you need to be protected again NMI or MCE |
4435 |
* handlers seeing an inconsistent instruction while you patch. |
4436 |
*/ |
4437 |
@@ -20542,9 +20957,9 @@ index df94598..b7162f9 100644 |
4438 |
local_irq_restore(flags); |
4439 |
/* Could also do a CLFLUSH here to speed up CPU recovery; but |
4440 |
that causes hangs on some VIA CPUs. */ |
4441 |
-@@ -553,36 +581,22 @@ void *__init_or_module text_poke_early(void *addr, const void *opcode, |
4442 |
+@@ -552,36 +580,22 @@ void *__init_or_module text_poke_early(void *addr, const void *opcode, |
4443 |
*/ |
4444 |
- void *__kprobes text_poke(void *addr, const void *opcode, size_t len) |
4445 |
+ void *text_poke(void *addr, const void *opcode, size_t len) |
4446 |
{ |
4447 |
- unsigned long flags; |
4448 |
- char *vaddr; |
4449 |
@@ -20587,7 +21002,7 @@ index df94598..b7162f9 100644 |
4450 |
return addr; |
4451 |
} |
4452 |
|
4453 |
-@@ -602,7 +616,7 @@ int poke_int3_handler(struct pt_regs *regs) |
4454 |
+@@ -601,7 +615,7 @@ int poke_int3_handler(struct pt_regs *regs) |
4455 |
if (likely(!bp_patching_in_progress)) |
4456 |
return 0; |
4457 |
|
4458 |
@@ -20596,7 +21011,7 @@ index df94598..b7162f9 100644 |
4459 |
return 0; |
4460 |
|
4461 |
/* set up the specified breakpoint handler */ |
4462 |
-@@ -636,7 +650,7 @@ int poke_int3_handler(struct pt_regs *regs) |
4463 |
+@@ -635,7 +649,7 @@ int poke_int3_handler(struct pt_regs *regs) |
4464 |
*/ |
4465 |
void *text_poke_bp(void *addr, const void *opcode, size_t len, void *handler) |
4466 |
{ |
4467 |
@@ -20676,10 +21091,10 @@ index e4840aa..e7d9dac 100644 |
4468 |
.name = "bigsmp", |
4469 |
.probe = probe_bigsmp, |
4470 |
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c |
4471 |
-index 992060e..ecdc3b3 100644 |
4472 |
+index 81e08ef..abc77e5 100644 |
4473 |
--- a/arch/x86/kernel/apic/io_apic.c |
4474 |
+++ b/arch/x86/kernel/apic/io_apic.c |
4475 |
-@@ -1057,7 +1057,7 @@ int IO_APIC_get_PCI_irq_vector(int bus, int slot, int pin, |
4476 |
+@@ -1042,7 +1042,7 @@ int IO_APIC_get_PCI_irq_vector(int bus, int slot, int pin, |
4477 |
} |
4478 |
EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector); |
4479 |
|
4480 |
@@ -20688,7 +21103,7 @@ index 992060e..ecdc3b3 100644 |
4481 |
{ |
4482 |
/* Used to the online set of cpus does not change |
4483 |
* during assign_irq_vector. |
4484 |
-@@ -1065,7 +1065,7 @@ void lock_vector_lock(void) |
4485 |
+@@ -1050,7 +1050,7 @@ void lock_vector_lock(void) |
4486 |
raw_spin_lock(&vector_lock); |
4487 |
} |
4488 |
|
4489 |
@@ -20697,7 +21112,7 @@ index 992060e..ecdc3b3 100644 |
4490 |
{ |
4491 |
raw_spin_unlock(&vector_lock); |
4492 |
} |
4493 |
-@@ -2364,7 +2364,7 @@ static void ack_apic_edge(struct irq_data *data) |
4494 |
+@@ -2349,7 +2349,7 @@ static void ack_apic_edge(struct irq_data *data) |
4495 |
ack_APIC_irq(); |
4496 |
} |
4497 |
|
4498 |
@@ -20706,7 +21121,7 @@ index 992060e..ecdc3b3 100644 |
4499 |
|
4500 |
#ifdef CONFIG_GENERIC_PENDING_IRQ |
4501 |
static bool io_apic_level_ack_pending(struct irq_cfg *cfg) |
4502 |
-@@ -2505,7 +2505,7 @@ static void ack_apic_level(struct irq_data *data) |
4503 |
+@@ -2490,7 +2490,7 @@ static void ack_apic_level(struct irq_data *data) |
4504 |
* at the cpu. |
4505 |
*/ |
4506 |
if (!(v & (1 << (i & 0x1f)))) { |
4507 |
@@ -20764,7 +21179,7 @@ index 6d600eb..0300c00 100644 |
4508 |
.name = "physical x2apic", |
4509 |
.probe = x2apic_phys_probe, |
4510 |
diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c |
4511 |
-index 7834389..4ffc9c8 100644 |
4512 |
+index 293b41d..4df25fd 100644 |
4513 |
--- a/arch/x86/kernel/apic/x2apic_uv_x.c |
4514 |
+++ b/arch/x86/kernel/apic/x2apic_uv_x.c |
4515 |
@@ -350,7 +350,7 @@ static int uv_probe(void) |
4516 |
@@ -20777,7 +21192,7 @@ index 7834389..4ffc9c8 100644 |
4517 |
.name = "UV large system", |
4518 |
.probe = uv_probe, |
4519 |
diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c |
4520 |
-index 3ab0343..814c4787 100644 |
4521 |
+index 5848744..56cb598 100644 |
4522 |
--- a/arch/x86/kernel/apm_32.c |
4523 |
+++ b/arch/x86/kernel/apm_32.c |
4524 |
@@ -433,7 +433,7 @@ static DEFINE_MUTEX(apm_mutex); |
4525 |
@@ -20835,7 +21250,7 @@ index 3ab0343..814c4787 100644 |
4526 |
put_cpu(); |
4527 |
return error; |
4528 |
} |
4529 |
-@@ -2362,12 +2376,15 @@ static int __init apm_init(void) |
4530 |
+@@ -2350,12 +2364,15 @@ static int __init apm_init(void) |
4531 |
* code to that CPU. |
4532 |
*/ |
4533 |
gdt = get_cpu_gdt_table(0); |
4534 |
@@ -20932,10 +21347,10 @@ index ce8b8ff..d7d8851 100644 |
4535 |
if (c->x86_model == 3 && c->x86_mask == 0) |
4536 |
size = 64; |
4537 |
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c |
4538 |
-index a135239..41fb30a 100644 |
4539 |
+index ef1b93f..150db65 100644 |
4540 |
--- a/arch/x86/kernel/cpu/common.c |
4541 |
+++ b/arch/x86/kernel/cpu/common.c |
4542 |
-@@ -88,60 +88,6 @@ static const struct cpu_dev default_cpu = { |
4543 |
+@@ -90,60 +90,6 @@ static const struct cpu_dev default_cpu = { |
4544 |
|
4545 |
static const struct cpu_dev *this_cpu = &default_cpu; |
4546 |
|
4547 |
@@ -20996,7 +21411,7 @@ index a135239..41fb30a 100644 |
4548 |
static int __init x86_xsave_setup(char *s) |
4549 |
{ |
4550 |
setup_clear_cpu_cap(X86_FEATURE_XSAVE); |
4551 |
-@@ -293,6 +239,59 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c) |
4552 |
+@@ -295,6 +241,59 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c) |
4553 |
} |
4554 |
} |
4555 |
|
4556 |
@@ -21056,7 +21471,7 @@ index a135239..41fb30a 100644 |
4557 |
/* |
4558 |
* Some CPU features depend on higher CPUID levels, which may not always |
4559 |
* be available due to CPUID level capping or broken virtualization |
4560 |
-@@ -393,7 +392,7 @@ void switch_to_new_gdt(int cpu) |
4561 |
+@@ -395,7 +394,7 @@ void switch_to_new_gdt(int cpu) |
4562 |
{ |
4563 |
struct desc_ptr gdt_descr; |
4564 |
|
4565 |
@@ -21065,7 +21480,7 @@ index a135239..41fb30a 100644 |
4566 |
gdt_descr.size = GDT_SIZE - 1; |
4567 |
load_gdt(&gdt_descr); |
4568 |
/* Reload the per-cpu base */ |
4569 |
-@@ -883,6 +882,10 @@ static void identify_cpu(struct cpuinfo_x86 *c) |
4570 |
+@@ -885,6 +884,10 @@ static void identify_cpu(struct cpuinfo_x86 *c) |
4571 |
setup_smep(c); |
4572 |
setup_smap(c); |
4573 |
|
4574 |
@@ -21076,7 +21491,7 @@ index a135239..41fb30a 100644 |
4575 |
/* |
4576 |
* The vendor-specific functions might have changed features. |
4577 |
* Now we do "generic changes." |
4578 |
-@@ -891,6 +894,10 @@ static void identify_cpu(struct cpuinfo_x86 *c) |
4579 |
+@@ -893,6 +896,10 @@ static void identify_cpu(struct cpuinfo_x86 *c) |
4580 |
/* Filter out anything that depends on CPUID levels we don't have */ |
4581 |
filter_cpuid_features(c, true); |
4582 |
|
4583 |
@@ -21087,7 +21502,16 @@ index a135239..41fb30a 100644 |
4584 |
/* If the model name is still unset, do table lookup. */ |
4585 |
if (!c->x86_model_id[0]) { |
4586 |
const char *p; |
4587 |
-@@ -1079,14 +1086,16 @@ static __init int setup_disablecpuid(char *arg) |
4588 |
+@@ -973,7 +980,7 @@ static void syscall32_cpu_init(void) |
4589 |
+ void enable_sep_cpu(void) |
4590 |
+ { |
4591 |
+ int cpu = get_cpu(); |
4592 |
+- struct tss_struct *tss = &per_cpu(init_tss, cpu); |
4593 |
++ struct tss_struct *tss = init_tss + cpu; |
4594 |
+ |
4595 |
+ if (!boot_cpu_has(X86_FEATURE_SEP)) { |
4596 |
+ put_cpu(); |
4597 |
+@@ -1113,14 +1120,16 @@ static __init int setup_disablecpuid(char *arg) |
4598 |
} |
4599 |
__setup("clearcpuid=", setup_disablecpuid); |
4600 |
|
4601 |
@@ -21108,7 +21532,7 @@ index a135239..41fb30a 100644 |
4602 |
|
4603 |
DEFINE_PER_CPU_FIRST(union irq_stack_union, |
4604 |
irq_stack_union) __aligned(PAGE_SIZE) __visible; |
4605 |
-@@ -1246,7 +1255,7 @@ void cpu_init(void) |
4606 |
+@@ -1283,7 +1292,7 @@ void cpu_init(void) |
4607 |
load_ucode_ap(); |
4608 |
|
4609 |
cpu = stack_smp_processor_id(); |
4610 |
@@ -21117,7 +21541,7 @@ index a135239..41fb30a 100644 |
4611 |
oist = &per_cpu(orig_ist, cpu); |
4612 |
|
4613 |
#ifdef CONFIG_NUMA |
4614 |
-@@ -1281,7 +1290,6 @@ void cpu_init(void) |
4615 |
+@@ -1318,7 +1327,6 @@ void cpu_init(void) |
4616 |
wrmsrl(MSR_KERNEL_GS_BASE, 0); |
4617 |
barrier(); |
4618 |
|
4619 |
@@ -21125,7 +21549,7 @@ index a135239..41fb30a 100644 |
4620 |
enable_x2apic(); |
4621 |
|
4622 |
/* |
4623 |
-@@ -1333,7 +1341,7 @@ void cpu_init(void) |
4624 |
+@@ -1370,7 +1378,7 @@ void cpu_init(void) |
4625 |
{ |
4626 |
int cpu = smp_processor_id(); |
4627 |
struct task_struct *curr = current; |
4628 |
@@ -21135,10 +21559,10 @@ index a135239..41fb30a 100644 |
4629 |
|
4630 |
show_ucode_info_early(); |
4631 |
diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c |
4632 |
-index a952e9c..58a4cbb 100644 |
4633 |
+index 9c8f739..902a9c5 100644 |
4634 |
--- a/arch/x86/kernel/cpu/intel_cacheinfo.c |
4635 |
+++ b/arch/x86/kernel/cpu/intel_cacheinfo.c |
4636 |
-@@ -1014,6 +1014,22 @@ static struct attribute *default_attrs[] = { |
4637 |
+@@ -1026,6 +1026,22 @@ static struct attribute *default_attrs[] = { |
4638 |
}; |
4639 |
|
4640 |
#ifdef CONFIG_AMD_NB |
4641 |
@@ -21161,7 +21585,7 @@ index a952e9c..58a4cbb 100644 |
4642 |
static struct attribute **amd_l3_attrs(void) |
4643 |
{ |
4644 |
static struct attribute **attrs; |
4645 |
-@@ -1024,18 +1040,7 @@ static struct attribute **amd_l3_attrs(void) |
4646 |
+@@ -1036,18 +1052,7 @@ static struct attribute **amd_l3_attrs(void) |
4647 |
|
4648 |
n = ARRAY_SIZE(default_attrs); |
4649 |
|
4650 |
@@ -21181,7 +21605,7 @@ index a952e9c..58a4cbb 100644 |
4651 |
|
4652 |
if (amd_nb_has_feature(AMD_NB_L3_INDEX_DISABLE)) { |
4653 |
attrs[n++] = &cache_disable_0.attr; |
4654 |
-@@ -1086,6 +1091,13 @@ static struct kobj_type ktype_cache = { |
4655 |
+@@ -1098,6 +1103,13 @@ static struct kobj_type ktype_cache = { |
4656 |
.default_attrs = default_attrs, |
4657 |
}; |
4658 |
|
4659 |
@@ -21195,7 +21619,7 @@ index a952e9c..58a4cbb 100644 |
4660 |
static struct kobj_type ktype_percpu_entry = { |
4661 |
.sysfs_ops = &sysfs_ops, |
4662 |
}; |
4663 |
-@@ -1151,20 +1163,26 @@ static int cache_add_dev(struct device *dev) |
4664 |
+@@ -1163,20 +1175,26 @@ static int cache_add_dev(struct device *dev) |
4665 |
return retval; |
4666 |
} |
4667 |
|
4668 |
@@ -21226,7 +21650,7 @@ index a952e9c..58a4cbb 100644 |
4669 |
"index%1lu", i); |
4670 |
if (unlikely(retval)) { |
4671 |
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c |
4672 |
-index 68317c8..c860d41 100644 |
4673 |
+index 9a79c8d..158c2f1 100644 |
4674 |
--- a/arch/x86/kernel/cpu/mcheck/mce.c |
4675 |
+++ b/arch/x86/kernel/cpu/mcheck/mce.c |
4676 |
@@ -45,6 +45,7 @@ |
4677 |
@@ -21237,7 +21661,7 @@ index 68317c8..c860d41 100644 |
4678 |
|
4679 |
#include "mce-internal.h" |
4680 |
|
4681 |
-@@ -261,7 +262,7 @@ static void print_mce(struct mce *m) |
4682 |
+@@ -259,7 +260,7 @@ static void print_mce(struct mce *m) |
4683 |
!(m->mcgstatus & MCG_STATUS_EIPV) ? " !INEXACT!" : "", |
4684 |
m->cs, m->ip); |
4685 |
|
4686 |
@@ -21246,7 +21670,7 @@ index 68317c8..c860d41 100644 |
4687 |
print_symbol("{%s}", m->ip); |
4688 |
pr_cont("\n"); |
4689 |
} |
4690 |
-@@ -294,10 +295,10 @@ static void print_mce(struct mce *m) |
4691 |
+@@ -292,10 +293,10 @@ static void print_mce(struct mce *m) |
4692 |
|
4693 |
#define PANIC_TIMEOUT 5 /* 5 seconds */ |
4694 |
|
4695 |
@@ -21259,7 +21683,7 @@ index 68317c8..c860d41 100644 |
4696 |
|
4697 |
/* Panic in progress. Enable interrupts and wait for final IPI */ |
4698 |
static void wait_for_panic(void) |
4699 |
-@@ -321,7 +322,7 @@ static void mce_panic(char *msg, struct mce *final, char *exp) |
4700 |
+@@ -319,7 +320,7 @@ static void mce_panic(char *msg, struct mce *final, char *exp) |
4701 |
/* |
4702 |
* Make sure only one CPU runs in machine check panic |
4703 |
*/ |
4704 |
@@ -21268,7 +21692,7 @@ index 68317c8..c860d41 100644 |
4705 |
wait_for_panic(); |
4706 |
barrier(); |
4707 |
|
4708 |
-@@ -329,7 +330,7 @@ static void mce_panic(char *msg, struct mce *final, char *exp) |
4709 |
+@@ -327,7 +328,7 @@ static void mce_panic(char *msg, struct mce *final, char *exp) |
4710 |
console_verbose(); |
4711 |
} else { |
4712 |
/* Don't log too much for fake panic */ |
4713 |
@@ -21277,7 +21701,7 @@ index 68317c8..c860d41 100644 |
4714 |
return; |
4715 |
} |
4716 |
/* First print corrected ones that are still unlogged */ |
4717 |
-@@ -368,7 +369,7 @@ static void mce_panic(char *msg, struct mce *final, char *exp) |
4718 |
+@@ -366,7 +367,7 @@ static void mce_panic(char *msg, struct mce *final, char *exp) |
4719 |
if (!fake_panic) { |
4720 |
if (panic_timeout == 0) |
4721 |
panic_timeout = mca_cfg.panic_timeout; |
4722 |
@@ -21286,7 +21710,7 @@ index 68317c8..c860d41 100644 |
4723 |
} else |
4724 |
pr_emerg(HW_ERR "Fake kernel panic: %s\n", msg); |
4725 |
} |
4726 |
-@@ -699,7 +700,7 @@ static int mce_timed_out(u64 *t) |
4727 |
+@@ -697,7 +698,7 @@ static int mce_timed_out(u64 *t) |
4728 |
* might have been modified by someone else. |
4729 |
*/ |
4730 |
rmb(); |
4731 |
@@ -21295,7 +21719,7 @@ index 68317c8..c860d41 100644 |
4732 |
wait_for_panic(); |
4733 |
if (!mca_cfg.monarch_timeout) |
4734 |
goto out; |
4735 |
-@@ -1680,7 +1681,7 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code) |
4736 |
+@@ -1674,7 +1675,7 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code) |
4737 |
} |
4738 |
|
4739 |
/* Call the installed machine check handler for this CPU setup. */ |
4740 |
@@ -21304,7 +21728,7 @@ index 68317c8..c860d41 100644 |
4741 |
unexpected_machine_check; |
4742 |
|
4743 |
/* |
4744 |
-@@ -1703,7 +1704,9 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c) |
4745 |
+@@ -1697,7 +1698,9 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c) |
4746 |
return; |
4747 |
} |
4748 |
|
4749 |
@@ -21314,7 +21738,7 @@ index 68317c8..c860d41 100644 |
4750 |
|
4751 |
__mcheck_cpu_init_generic(); |
4752 |
__mcheck_cpu_init_vendor(c); |
4753 |
-@@ -1717,7 +1720,7 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c) |
4754 |
+@@ -1711,7 +1714,7 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c) |
4755 |
*/ |
4756 |
|
4757 |
static DEFINE_SPINLOCK(mce_chrdev_state_lock); |
4758 |
@@ -21323,7 +21747,7 @@ index 68317c8..c860d41 100644 |
4759 |
static int mce_chrdev_open_exclu; /* already open exclusive? */ |
4760 |
|
4761 |
static int mce_chrdev_open(struct inode *inode, struct file *file) |
4762 |
-@@ -1725,7 +1728,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file) |
4763 |
+@@ -1719,7 +1722,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file) |
4764 |
spin_lock(&mce_chrdev_state_lock); |
4765 |
|
4766 |
if (mce_chrdev_open_exclu || |
4767 |
@@ -21332,7 +21756,7 @@ index 68317c8..c860d41 100644 |
4768 |
spin_unlock(&mce_chrdev_state_lock); |
4769 |
|
4770 |
return -EBUSY; |
4771 |
-@@ -1733,7 +1736,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file) |
4772 |
+@@ -1727,7 +1730,7 @@ static int mce_chrdev_open(struct inode *inode, struct file *file) |
4773 |
|
4774 |
if (file->f_flags & O_EXCL) |
4775 |
mce_chrdev_open_exclu = 1; |
4776 |
@@ -21341,7 +21765,7 @@ index 68317c8..c860d41 100644 |
4777 |
|
4778 |
spin_unlock(&mce_chrdev_state_lock); |
4779 |
|
4780 |
-@@ -1744,7 +1747,7 @@ static int mce_chrdev_release(struct inode *inode, struct file *file) |
4781 |
+@@ -1738,7 +1741,7 @@ static int mce_chrdev_release(struct inode *inode, struct file *file) |
4782 |
{ |
4783 |
spin_lock(&mce_chrdev_state_lock); |
4784 |
|
4785 |
@@ -21350,7 +21774,7 @@ index 68317c8..c860d41 100644 |
4786 |
mce_chrdev_open_exclu = 0; |
4787 |
|
4788 |
spin_unlock(&mce_chrdev_state_lock); |
4789 |
-@@ -2420,7 +2423,7 @@ static __init void mce_init_banks(void) |
4790 |
+@@ -2414,7 +2417,7 @@ static __init void mce_init_banks(void) |
4791 |
|
4792 |
for (i = 0; i < mca_cfg.banks; i++) { |
4793 |
struct mce_bank *b = &mce_banks[i]; |
4794 |
@@ -21359,7 +21783,7 @@ index 68317c8..c860d41 100644 |
4795 |
|
4796 |
sysfs_attr_init(&a->attr); |
4797 |
a->attr.name = b->attrname; |
4798 |
-@@ -2492,7 +2495,7 @@ struct dentry *mce_get_debugfs_dir(void) |
4799 |
+@@ -2521,7 +2524,7 @@ struct dentry *mce_get_debugfs_dir(void) |
4800 |
static void mce_reset(void) |
4801 |
{ |
4802 |
cpu_missing = 0; |
4803 |
@@ -21413,10 +21837,10 @@ index 7dc5564..1273569 100644 |
4804 |
wmb(); |
4805 |
|
4806 |
diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c |
4807 |
-index 15c9876..0a43909 100644 |
4808 |
+index dd9d619..86e1d81 100644 |
4809 |
--- a/arch/x86/kernel/cpu/microcode/core.c |
4810 |
+++ b/arch/x86/kernel/cpu/microcode/core.c |
4811 |
-@@ -513,7 +513,7 @@ mc_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu) |
4812 |
+@@ -516,7 +516,7 @@ mc_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu) |
4813 |
return NOTIFY_OK; |
4814 |
} |
4815 |
|
4816 |
@@ -21472,11 +21896,11 @@ index df5e41f..816c719 100644 |
4817 |
extern int generic_get_free_region(unsigned long base, unsigned long size, |
4818 |
int replace_reg); |
4819 |
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c |
4820 |
-index ae407f7..39c5b00 100644 |
4821 |
+index 2879ecd..bb8c80b 100644 |
4822 |
--- a/arch/x86/kernel/cpu/perf_event.c |
4823 |
+++ b/arch/x86/kernel/cpu/perf_event.c |
4824 |
-@@ -1367,7 +1367,7 @@ static void __init pmu_check_apic(void) |
4825 |
- pr_info("no hardware sampling interrupt available.\n"); |
4826 |
+@@ -1372,7 +1372,7 @@ static void __init pmu_check_apic(void) |
4827 |
+ |
4828 |
} |
4829 |
|
4830 |
-static struct attribute_group x86_pmu_format_group = { |
4831 |
@@ -21484,7 +21908,7 @@ index ae407f7..39c5b00 100644 |
4832 |
.name = "format", |
4833 |
.attrs = NULL, |
4834 |
}; |
4835 |
-@@ -1466,7 +1466,7 @@ static struct attribute *events_attr[] = { |
4836 |
+@@ -1471,7 +1471,7 @@ static struct attribute *events_attr[] = { |
4837 |
NULL, |
4838 |
}; |
4839 |
|
4840 |
@@ -21493,7 +21917,7 @@ index ae407f7..39c5b00 100644 |
4841 |
.name = "events", |
4842 |
.attrs = events_attr, |
4843 |
}; |
4844 |
-@@ -1990,7 +1990,7 @@ static unsigned long get_segment_base(unsigned int segment) |
4845 |
+@@ -1995,7 +1995,7 @@ static unsigned long get_segment_base(unsigned int segment) |
4846 |
if (idx > GDT_ENTRIES) |
4847 |
return 0; |
4848 |
|
4849 |
@@ -21502,7 +21926,7 @@ index ae407f7..39c5b00 100644 |
4850 |
} |
4851 |
|
4852 |
return get_desc_base(desc + idx); |
4853 |
-@@ -2080,7 +2080,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs) |
4854 |
+@@ -2085,7 +2085,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs) |
4855 |
break; |
4856 |
|
4857 |
perf_callchain_store(entry, frame.return_address); |
4858 |
@@ -21525,10 +21949,10 @@ index 639d128..e92d7e5 100644 |
4859 |
|
4860 |
while (amd_iommu_v2_event_descs[i].attr.attr.name) |
4861 |
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c |
4862 |
-index 07846d7..a40ec4a 100644 |
4863 |
+index 2502d0d..e5cc05c 100644 |
4864 |
--- a/arch/x86/kernel/cpu/perf_event_intel.c |
4865 |
+++ b/arch/x86/kernel/cpu/perf_event_intel.c |
4866 |
-@@ -2317,10 +2317,10 @@ __init int intel_pmu_init(void) |
4867 |
+@@ -2353,10 +2353,10 @@ __init int intel_pmu_init(void) |
4868 |
x86_pmu.num_counters_fixed = max((int)edx.split.num_counters_fixed, 3); |
4869 |
|
4870 |
if (boot_cpu_has(X86_FEATURE_PDCM)) { |
4871 |
@@ -21556,10 +21980,10 @@ index 619f769..d510008 100644 |
4872 |
.attrs = NULL, /* patched at runtime */ |
4873 |
}; |
4874 |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c |
4875 |
-index 65bbbea..1438d9e 100644 |
4876 |
+index ae6552a..b5be2d3 100644 |
4877 |
--- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c |
4878 |
+++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c |
4879 |
-@@ -3693,7 +3693,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types) |
4880 |
+@@ -3694,7 +3694,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types) |
4881 |
static int __init uncore_type_init(struct intel_uncore_type *type) |
4882 |
{ |
4883 |
struct intel_uncore_pmu *pmus; |
4884 |
@@ -21656,7 +22080,7 @@ index f6dfd93..892ade4 100644 |
4885 |
|
4886 |
.__cr3 = __pa_nodebug(swapper_pg_dir), |
4887 |
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c |
4888 |
-index d9c12d3..7858b62 100644 |
4889 |
+index b74ebc7..6dbb0c5 100644 |
4890 |
--- a/arch/x86/kernel/dumpstack.c |
4891 |
+++ b/arch/x86/kernel/dumpstack.c |
4892 |
@@ -2,6 +2,9 @@ |
4893 |
@@ -21770,16 +22194,16 @@ index d9c12d3..7858b62 100644 |
4894 |
printk_stack_address(addr, reliable); |
4895 |
} |
4896 |
|
4897 |
-@@ -224,6 +223,8 @@ unsigned __kprobes long oops_begin(void) |
4898 |
- } |
4899 |
+@@ -225,6 +224,8 @@ unsigned long oops_begin(void) |
4900 |
EXPORT_SYMBOL_GPL(oops_begin); |
4901 |
+ NOKPROBE_SYMBOL(oops_begin); |
4902 |
|
4903 |
+extern void gr_handle_kernel_exploit(void); |
4904 |
+ |
4905 |
- void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr) |
4906 |
+ void oops_end(unsigned long flags, struct pt_regs *regs, int signr) |
4907 |
{ |
4908 |
if (regs && kexec_should_crash(current)) |
4909 |
-@@ -245,7 +246,10 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr) |
4910 |
+@@ -246,7 +247,10 @@ void oops_end(unsigned long flags, struct pt_regs *regs, int signr) |
4911 |
panic("Fatal exception in interrupt"); |
4912 |
if (panic_on_oops) |
4913 |
panic("Fatal exception"); |
4914 |
@@ -21789,9 +22213,9 @@ index d9c12d3..7858b62 100644 |
4915 |
+ |
4916 |
+ do_group_exit(signr); |
4917 |
} |
4918 |
+ NOKPROBE_SYMBOL(oops_end); |
4919 |
|
4920 |
- int __kprobes __die(const char *str, struct pt_regs *regs, long err) |
4921 |
-@@ -273,7 +277,7 @@ int __kprobes __die(const char *str, struct pt_regs *regs, long err) |
4922 |
+@@ -275,7 +279,7 @@ int __die(const char *str, struct pt_regs *regs, long err) |
4923 |
print_modules(); |
4924 |
show_regs(regs); |
4925 |
#ifdef CONFIG_X86_32 |
4926 |
@@ -21800,7 +22224,7 @@ index d9c12d3..7858b62 100644 |
4927 |
sp = regs->sp; |
4928 |
ss = regs->ss & 0xffff; |
4929 |
} else { |
4930 |
-@@ -301,7 +305,7 @@ void die(const char *str, struct pt_regs *regs, long err) |
4931 |
+@@ -304,7 +308,7 @@ void die(const char *str, struct pt_regs *regs, long err) |
4932 |
unsigned long flags = oops_begin(); |
4933 |
int sig = SIGSEGV; |
4934 |
|
4935 |
@@ -22040,7 +22464,7 @@ index 01d1c18..8073693 100644 |
4936 |
#include <asm/processor.h> |
4937 |
#include <asm/fcntl.h> |
4938 |
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S |
4939 |
-index c5a9cb9..228d280 100644 |
4940 |
+index 0d0c9d4..f65b4f6 100644 |
4941 |
--- a/arch/x86/kernel/entry_32.S |
4942 |
+++ b/arch/x86/kernel/entry_32.S |
4943 |
@@ -177,13 +177,153 @@ |
4944 |
@@ -22232,7 +22656,7 @@ index c5a9cb9..228d280 100644 |
4945 |
|
4946 |
ENTRY(ret_from_kernel_thread) |
4947 |
CFI_STARTPROC |
4948 |
-@@ -344,7 +493,15 @@ ret_from_intr: |
4949 |
+@@ -340,7 +489,15 @@ ret_from_intr: |
4950 |
andl $SEGMENT_RPL_MASK, %eax |
4951 |
#endif |
4952 |
cmpl $USER_RPL, %eax |
4953 |
@@ -22248,7 +22672,7 @@ index c5a9cb9..228d280 100644 |
4954 |
|
4955 |
ENTRY(resume_userspace) |
4956 |
LOCKDEP_SYS_EXIT |
4957 |
-@@ -356,8 +513,8 @@ ENTRY(resume_userspace) |
4958 |
+@@ -352,8 +509,8 @@ ENTRY(resume_userspace) |
4959 |
andl $_TIF_WORK_MASK, %ecx # is there any work to be done on |
4960 |
# int/exception return? |
4961 |
jne work_pending |
4962 |
@@ -22259,7 +22683,7 @@ index c5a9cb9..228d280 100644 |
4963 |
|
4964 |
#ifdef CONFIG_PREEMPT |
4965 |
ENTRY(resume_kernel) |
4966 |
-@@ -369,7 +526,7 @@ need_resched: |
4967 |
+@@ -365,7 +522,7 @@ need_resched: |
4968 |
jz restore_all |
4969 |
call preempt_schedule_irq |
4970 |
jmp need_resched |
4971 |
@@ -22267,8 +22691,8 @@ index c5a9cb9..228d280 100644 |
4972 |
+ENDPROC(resume_kernel) |
4973 |
#endif |
4974 |
CFI_ENDPROC |
4975 |
- /* |
4976 |
-@@ -403,30 +560,45 @@ sysenter_past_esp: |
4977 |
+ |
4978 |
+@@ -395,30 +552,45 @@ sysenter_past_esp: |
4979 |
/*CFI_REL_OFFSET cs, 0*/ |
4980 |
/* |
4981 |
* Push current_thread_info()->sysenter_return to the stack. |
4982 |
@@ -22317,7 +22741,7 @@ index c5a9cb9..228d280 100644 |
4983 |
testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp) |
4984 |
jnz sysenter_audit |
4985 |
sysenter_do_call: |
4986 |
-@@ -442,12 +614,24 @@ sysenter_after_call: |
4987 |
+@@ -434,12 +606,24 @@ sysenter_after_call: |
4988 |
testl $_TIF_ALLWORK_MASK, %ecx |
4989 |
jne sysexit_audit |
4990 |
sysenter_exit: |
4991 |
@@ -22342,7 +22766,7 @@ index c5a9cb9..228d280 100644 |
4992 |
PTGS_TO_GS |
4993 |
ENABLE_INTERRUPTS_SYSEXIT |
4994 |
|
4995 |
-@@ -464,6 +648,9 @@ sysenter_audit: |
4996 |
+@@ -456,6 +640,9 @@ sysenter_audit: |
4997 |
movl %eax,%edx /* 2nd arg: syscall number */ |
4998 |
movl $AUDIT_ARCH_I386,%eax /* 1st arg: audit arch */ |
4999 |
call __audit_syscall_entry |
5000 |
@@ -22352,7 +22776,7 @@ index c5a9cb9..228d280 100644 |
5001 |
pushl_cfi %ebx |
5002 |
movl PT_EAX(%esp),%eax /* reload syscall number */ |
5003 |
jmp sysenter_do_call |
5004 |
-@@ -489,10 +676,16 @@ sysexit_audit: |
5005 |
+@@ -481,10 +668,16 @@ sysexit_audit: |
5006 |
|
5007 |
CFI_ENDPROC |
5008 |
.pushsection .fixup,"ax" |
5009 |
@@ -22371,7 +22795,7 @@ index c5a9cb9..228d280 100644 |
5010 |
PTGS_TO_GS_EX |
5011 |
ENDPROC(ia32_sysenter_target) |
5012 |
|
5013 |
-@@ -507,6 +700,11 @@ ENTRY(system_call) |
5014 |
+@@ -495,6 +688,11 @@ ENTRY(system_call) |
5015 |
pushl_cfi %eax # save orig_eax |
5016 |
SAVE_ALL |
5017 |
GET_THREAD_INFO(%ebp) |
5018 |
@@ -22383,7 +22807,7 @@ index c5a9cb9..228d280 100644 |
5019 |
# system call tracing in operation / emulation |
5020 |
testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp) |
5021 |
jnz syscall_trace_entry |
5022 |
-@@ -526,6 +724,15 @@ syscall_exit: |
5023 |
+@@ -514,6 +712,15 @@ syscall_exit: |
5024 |
testl $_TIF_ALLWORK_MASK, %ecx # current->work |
5025 |
jne syscall_exit_work |
5026 |
|
5027 |
@@ -22399,7 +22823,7 @@ index c5a9cb9..228d280 100644 |
5028 |
restore_all: |
5029 |
TRACE_IRQS_IRET |
5030 |
restore_all_notrace: |
5031 |
-@@ -580,14 +787,34 @@ ldt_ss: |
5032 |
+@@ -568,14 +775,34 @@ ldt_ss: |
5033 |
* compensating for the offset by changing to the ESPFIX segment with |
5034 |
* a base address that matches for the difference. |
5035 |
*/ |
5036 |
@@ -22437,7 +22861,7 @@ index c5a9cb9..228d280 100644 |
5037 |
pushl_cfi $__ESPFIX_SS |
5038 |
pushl_cfi %eax /* new kernel esp */ |
5039 |
/* Disable interrupts, but do not irqtrace this section: we |
5040 |
-@@ -617,20 +844,18 @@ work_resched: |
5041 |
+@@ -605,20 +832,18 @@ work_resched: |
5042 |
movl TI_flags(%ebp), %ecx |
5043 |
andl $_TIF_WORK_MASK, %ecx # is there any work to be done other |
5044 |
# than syscall tracing? |
5045 |
@@ -22460,7 +22884,7 @@ index c5a9cb9..228d280 100644 |
5046 |
#endif |
5047 |
TRACE_IRQS_ON |
5048 |
ENABLE_INTERRUPTS(CLBR_NONE) |
5049 |
-@@ -651,7 +876,7 @@ work_notifysig_v86: |
5050 |
+@@ -639,7 +864,7 @@ work_notifysig_v86: |
5051 |
movl %eax, %esp |
5052 |
jmp 1b |
5053 |
#endif |
5054 |
@@ -22469,7 +22893,7 @@ index c5a9cb9..228d280 100644 |
5055 |
|
5056 |
# perform syscall exit tracing |
5057 |
ALIGN |
5058 |
-@@ -659,11 +884,14 @@ syscall_trace_entry: |
5059 |
+@@ -647,11 +872,14 @@ syscall_trace_entry: |
5060 |
movl $-ENOSYS,PT_EAX(%esp) |
5061 |
movl %esp, %eax |
5062 |
call syscall_trace_enter |
5063 |
@@ -22485,7 +22909,7 @@ index c5a9cb9..228d280 100644 |
5064 |
|
5065 |
# perform syscall exit tracing |
5066 |
ALIGN |
5067 |
-@@ -676,26 +904,30 @@ syscall_exit_work: |
5068 |
+@@ -664,26 +892,30 @@ syscall_exit_work: |
5069 |
movl %esp, %eax |
5070 |
call syscall_trace_leave |
5071 |
jmp resume_userspace |
5072 |
@@ -22518,9 +22942,9 @@ index c5a9cb9..228d280 100644 |
5073 |
-END(syscall_badsys) |
5074 |
+ENDPROC(sysenter_badsys) |
5075 |
CFI_ENDPROC |
5076 |
- /* |
5077 |
- * End of kprobes section |
5078 |
-@@ -712,8 +944,15 @@ END(syscall_badsys) |
5079 |
+ |
5080 |
+ .macro FIXUP_ESPFIX_STACK |
5081 |
+@@ -696,8 +928,15 @@ END(syscall_badsys) |
5082 |
*/ |
5083 |
#ifdef CONFIG_X86_ESPFIX32 |
5084 |
/* fixup the stack */ |
5085 |
@@ -22538,7 +22962,7 @@ index c5a9cb9..228d280 100644 |
5086 |
shl $16, %eax |
5087 |
addl %esp, %eax /* the adjusted stack pointer */ |
5088 |
pushl_cfi $__KERNEL_DS |
5089 |
-@@ -769,7 +1008,7 @@ vector=vector+1 |
5090 |
+@@ -753,7 +992,7 @@ vector=vector+1 |
5091 |
.endr |
5092 |
2: jmp common_interrupt |
5093 |
.endr |
5094 |
@@ -22547,7 +22971,7 @@ index c5a9cb9..228d280 100644 |
5095 |
|
5096 |
.previous |
5097 |
END(interrupt) |
5098 |
-@@ -830,7 +1069,7 @@ ENTRY(coprocessor_error) |
5099 |
+@@ -810,7 +1049,7 @@ ENTRY(coprocessor_error) |
5100 |
pushl_cfi $do_coprocessor_error |
5101 |
jmp error_code |
5102 |
CFI_ENDPROC |
5103 |
@@ -22556,7 +22980,7 @@ index c5a9cb9..228d280 100644 |
5104 |
|
5105 |
ENTRY(simd_coprocessor_error) |
5106 |
RING0_INT_FRAME |
5107 |
-@@ -843,7 +1082,7 @@ ENTRY(simd_coprocessor_error) |
5108 |
+@@ -823,7 +1062,7 @@ ENTRY(simd_coprocessor_error) |
5109 |
.section .altinstructions,"a" |
5110 |
altinstruction_entry 661b, 663f, X86_FEATURE_XMM, 662b-661b, 664f-663f |
5111 |
.previous |
5112 |
@@ -22565,7 +22989,7 @@ index c5a9cb9..228d280 100644 |
5113 |
663: pushl $do_simd_coprocessor_error |
5114 |
664: |
5115 |
.previous |
5116 |
-@@ -852,7 +1091,7 @@ ENTRY(simd_coprocessor_error) |
5117 |
+@@ -832,7 +1071,7 @@ ENTRY(simd_coprocessor_error) |
5118 |
#endif |
5119 |
jmp error_code |
5120 |
CFI_ENDPROC |
5121 |
@@ -22574,7 +22998,7 @@ index c5a9cb9..228d280 100644 |
5122 |
|
5123 |
ENTRY(device_not_available) |
5124 |
RING0_INT_FRAME |
5125 |
-@@ -861,18 +1100,18 @@ ENTRY(device_not_available) |
5126 |
+@@ -841,18 +1080,18 @@ ENTRY(device_not_available) |
5127 |
pushl_cfi $do_device_not_available |
5128 |
jmp error_code |
5129 |
CFI_ENDPROC |
5130 |
@@ -22596,7 +23020,7 @@ index c5a9cb9..228d280 100644 |
5131 |
#endif |
5132 |
|
5133 |
ENTRY(overflow) |
5134 |
-@@ -882,7 +1121,7 @@ ENTRY(overflow) |
5135 |
+@@ -862,7 +1101,7 @@ ENTRY(overflow) |
5136 |
pushl_cfi $do_overflow |
5137 |
jmp error_code |
5138 |
CFI_ENDPROC |
5139 |
@@ -22605,7 +23029,7 @@ index c5a9cb9..228d280 100644 |
5140 |
|
5141 |
ENTRY(bounds) |
5142 |
RING0_INT_FRAME |
5143 |
-@@ -891,7 +1130,7 @@ ENTRY(bounds) |
5144 |
+@@ -871,7 +1110,7 @@ ENTRY(bounds) |
5145 |
pushl_cfi $do_bounds |
5146 |
jmp error_code |
5147 |
CFI_ENDPROC |
5148 |
@@ -22614,7 +23038,7 @@ index c5a9cb9..228d280 100644 |
5149 |
|
5150 |
ENTRY(invalid_op) |
5151 |
RING0_INT_FRAME |
5152 |
-@@ -900,7 +1139,7 @@ ENTRY(invalid_op) |
5153 |
+@@ -880,7 +1119,7 @@ ENTRY(invalid_op) |
5154 |
pushl_cfi $do_invalid_op |
5155 |
jmp error_code |
5156 |
CFI_ENDPROC |
5157 |
@@ -22623,7 +23047,7 @@ index c5a9cb9..228d280 100644 |
5158 |
|
5159 |
ENTRY(coprocessor_segment_overrun) |
5160 |
RING0_INT_FRAME |
5161 |
-@@ -909,7 +1148,7 @@ ENTRY(coprocessor_segment_overrun) |
5162 |
+@@ -889,7 +1128,7 @@ ENTRY(coprocessor_segment_overrun) |
5163 |
pushl_cfi $do_coprocessor_segment_overrun |
5164 |
jmp error_code |
5165 |
CFI_ENDPROC |
5166 |
@@ -22632,7 +23056,7 @@ index c5a9cb9..228d280 100644 |
5167 |
|
5168 |
ENTRY(invalid_TSS) |
5169 |
RING0_EC_FRAME |
5170 |
-@@ -917,7 +1156,7 @@ ENTRY(invalid_TSS) |
5171 |
+@@ -897,7 +1136,7 @@ ENTRY(invalid_TSS) |
5172 |
pushl_cfi $do_invalid_TSS |
5173 |
jmp error_code |
5174 |
CFI_ENDPROC |
5175 |
@@ -22641,7 +23065,7 @@ index c5a9cb9..228d280 100644 |
5176 |
|
5177 |
ENTRY(segment_not_present) |
5178 |
RING0_EC_FRAME |
5179 |
-@@ -925,7 +1164,7 @@ ENTRY(segment_not_present) |
5180 |
+@@ -905,7 +1144,7 @@ ENTRY(segment_not_present) |
5181 |
pushl_cfi $do_segment_not_present |
5182 |
jmp error_code |
5183 |
CFI_ENDPROC |
5184 |
@@ -22650,7 +23074,7 @@ index c5a9cb9..228d280 100644 |
5185 |
|
5186 |
ENTRY(stack_segment) |
5187 |
RING0_EC_FRAME |
5188 |
-@@ -933,7 +1172,7 @@ ENTRY(stack_segment) |
5189 |
+@@ -913,7 +1152,7 @@ ENTRY(stack_segment) |
5190 |
pushl_cfi $do_stack_segment |
5191 |
jmp error_code |
5192 |
CFI_ENDPROC |
5193 |
@@ -22659,7 +23083,7 @@ index c5a9cb9..228d280 100644 |
5194 |
|
5195 |
ENTRY(alignment_check) |
5196 |
RING0_EC_FRAME |
5197 |
-@@ -941,7 +1180,7 @@ ENTRY(alignment_check) |
5198 |
+@@ -921,7 +1160,7 @@ ENTRY(alignment_check) |
5199 |
pushl_cfi $do_alignment_check |
5200 |
jmp error_code |
5201 |
CFI_ENDPROC |
5202 |
@@ -22668,7 +23092,7 @@ index c5a9cb9..228d280 100644 |
5203 |
|
5204 |
ENTRY(divide_error) |
5205 |
RING0_INT_FRAME |
5206 |
-@@ -950,7 +1189,7 @@ ENTRY(divide_error) |
5207 |
+@@ -930,7 +1169,7 @@ ENTRY(divide_error) |
5208 |
pushl_cfi $do_divide_error |
5209 |
jmp error_code |
5210 |
CFI_ENDPROC |
5211 |
@@ -22677,7 +23101,7 @@ index c5a9cb9..228d280 100644 |
5212 |
|
5213 |
#ifdef CONFIG_X86_MCE |
5214 |
ENTRY(machine_check) |
5215 |
-@@ -960,7 +1199,7 @@ ENTRY(machine_check) |
5216 |
+@@ -940,7 +1179,7 @@ ENTRY(machine_check) |
5217 |
pushl_cfi machine_check_vector |
5218 |
jmp error_code |
5219 |
CFI_ENDPROC |
5220 |
@@ -22686,16 +23110,16 @@ index c5a9cb9..228d280 100644 |
5221 |
#endif |
5222 |
|
5223 |
ENTRY(spurious_interrupt_bug) |
5224 |
-@@ -970,7 +1209,7 @@ ENTRY(spurious_interrupt_bug) |
5225 |
+@@ -950,7 +1189,7 @@ ENTRY(spurious_interrupt_bug) |
5226 |
pushl_cfi $do_spurious_interrupt_bug |
5227 |
jmp error_code |
5228 |
CFI_ENDPROC |
5229 |
-END(spurious_interrupt_bug) |
5230 |
+ENDPROC(spurious_interrupt_bug) |
5231 |
- /* |
5232 |
- * End of kprobes section |
5233 |
- */ |
5234 |
-@@ -1080,7 +1319,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR, |
5235 |
+ |
5236 |
+ #ifdef CONFIG_XEN |
5237 |
+ /* Xen doesn't set %esp to be precisely what the normal sysenter |
5238 |
+@@ -1056,7 +1295,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR, |
5239 |
|
5240 |
ENTRY(mcount) |
5241 |
ret |
5242 |
@@ -22704,7 +23128,7 @@ index c5a9cb9..228d280 100644 |
5243 |
|
5244 |
ENTRY(ftrace_caller) |
5245 |
cmpl $0, function_trace_stop |
5246 |
-@@ -1113,7 +1352,7 @@ ftrace_graph_call: |
5247 |
+@@ -1089,7 +1328,7 @@ ftrace_graph_call: |
5248 |
.globl ftrace_stub |
5249 |
ftrace_stub: |
5250 |
ret |
5251 |
@@ -22713,7 +23137,7 @@ index c5a9cb9..228d280 100644 |
5252 |
|
5253 |
ENTRY(ftrace_regs_caller) |
5254 |
pushf /* push flags before compare (in cs location) */ |
5255 |
-@@ -1217,7 +1456,7 @@ trace: |
5256 |
+@@ -1193,7 +1432,7 @@ trace: |
5257 |
popl %ecx |
5258 |
popl %eax |
5259 |
jmp ftrace_stub |
5260 |
@@ -22722,7 +23146,7 @@ index c5a9cb9..228d280 100644 |
5261 |
#endif /* CONFIG_DYNAMIC_FTRACE */ |
5262 |
#endif /* CONFIG_FUNCTION_TRACER */ |
5263 |
|
5264 |
-@@ -1235,7 +1474,7 @@ ENTRY(ftrace_graph_caller) |
5265 |
+@@ -1211,7 +1450,7 @@ ENTRY(ftrace_graph_caller) |
5266 |
popl %ecx |
5267 |
popl %eax |
5268 |
ret |
5269 |
@@ -22731,7 +23155,7 @@ index c5a9cb9..228d280 100644 |
5270 |
|
5271 |
.globl return_to_handler |
5272 |
return_to_handler: |
5273 |
-@@ -1301,15 +1540,18 @@ error_code: |
5274 |
+@@ -1272,15 +1511,18 @@ error_code: |
5275 |
movl $-1, PT_ORIG_EAX(%esp) # no syscall to restart |
5276 |
REG_TO_PTGS %ecx |
5277 |
SET_KERNEL_GS %ecx |
5278 |
@@ -22752,7 +23176,7 @@ index c5a9cb9..228d280 100644 |
5279 |
|
5280 |
/* |
5281 |
* Debug traps and NMI can happen at the one SYSENTER instruction |
5282 |
-@@ -1352,7 +1594,7 @@ debug_stack_correct: |
5283 |
+@@ -1323,7 +1565,7 @@ debug_stack_correct: |
5284 |
call do_debug |
5285 |
jmp ret_from_exception |
5286 |
CFI_ENDPROC |
5287 |
@@ -22761,7 +23185,7 @@ index c5a9cb9..228d280 100644 |
5288 |
|
5289 |
/* |
5290 |
* NMI is doubly nasty. It can happen _while_ we're handling |
5291 |
-@@ -1392,6 +1634,9 @@ nmi_stack_correct: |
5292 |
+@@ -1363,6 +1605,9 @@ nmi_stack_correct: |
5293 |
xorl %edx,%edx # zero error code |
5294 |
movl %esp,%eax # pt_regs pointer |
5295 |
call do_nmi |
5296 |
@@ -22771,7 +23195,7 @@ index c5a9cb9..228d280 100644 |
5297 |
jmp restore_all_notrace |
5298 |
CFI_ENDPROC |
5299 |
|
5300 |
-@@ -1429,13 +1674,16 @@ nmi_espfix_stack: |
5301 |
+@@ -1400,13 +1645,16 @@ nmi_espfix_stack: |
5302 |
FIXUP_ESPFIX_STACK # %eax == %esp |
5303 |
xorl %edx,%edx # zero error code |
5304 |
call do_nmi |
5305 |
@@ -22789,7 +23213,7 @@ index c5a9cb9..228d280 100644 |
5306 |
|
5307 |
ENTRY(int3) |
5308 |
RING0_INT_FRAME |
5309 |
-@@ -1448,14 +1696,14 @@ ENTRY(int3) |
5310 |
+@@ -1419,14 +1667,14 @@ ENTRY(int3) |
5311 |
call do_int3 |
5312 |
jmp ret_from_exception |
5313 |
CFI_ENDPROC |
5314 |
@@ -22806,7 +23230,7 @@ index c5a9cb9..228d280 100644 |
5315 |
|
5316 |
#ifdef CONFIG_KVM_GUEST |
5317 |
ENTRY(async_page_fault) |
5318 |
-@@ -1464,7 +1712,7 @@ ENTRY(async_page_fault) |
5319 |
+@@ -1435,6 +1683,6 @@ ENTRY(async_page_fault) |
5320 |
pushl_cfi $do_async_page_fault |
5321 |
jmp error_code |
5322 |
CFI_ENDPROC |
5323 |
@@ -22814,12 +23238,11 @@ index c5a9cb9..228d280 100644 |
5324 |
+ENDPROC(async_page_fault) |
5325 |
#endif |
5326 |
|
5327 |
- /* |
5328 |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S |
5329 |
-index 03cd2a8..05a9aed 100644 |
5330 |
+index c844f08..b07ea0e 100644 |
5331 |
--- a/arch/x86/kernel/entry_64.S |
5332 |
+++ b/arch/x86/kernel/entry_64.S |
5333 |
-@@ -60,6 +60,8 @@ |
5334 |
+@@ -59,6 +59,8 @@ |
5335 |
#include <asm/smap.h> |
5336 |
#include <asm/pgtable_types.h> |
5337 |
#include <linux/err.h> |
5338 |
@@ -22828,82 +23251,7 @@ index 03cd2a8..05a9aed 100644 |
5339 |
|
5340 |
/* Avoid __ASSEMBLER__'ifying <linux/audit.h> just for this. */ |
5341 |
#include <linux/elf-em.h> |
5342 |
-@@ -81,8 +83,9 @@ |
5343 |
- #ifdef CONFIG_DYNAMIC_FTRACE |
5344 |
- |
5345 |
- ENTRY(function_hook) |
5346 |
-+ pax_force_retaddr |
5347 |
- retq |
5348 |
--END(function_hook) |
5349 |
-+ENDPROC(function_hook) |
5350 |
- |
5351 |
- /* skip is set if stack has been adjusted */ |
5352 |
- .macro ftrace_caller_setup skip=0 |
5353 |
-@@ -123,8 +126,9 @@ GLOBAL(ftrace_graph_call) |
5354 |
- #endif |
5355 |
- |
5356 |
- GLOBAL(ftrace_stub) |
5357 |
-+ pax_force_retaddr |
5358 |
- retq |
5359 |
--END(ftrace_caller) |
5360 |
-+ENDPROC(ftrace_caller) |
5361 |
- |
5362 |
- ENTRY(ftrace_regs_caller) |
5363 |
- /* Save the current flags before compare (in SS location)*/ |
5364 |
-@@ -192,7 +196,7 @@ ftrace_restore_flags: |
5365 |
- popfq |
5366 |
- jmp ftrace_stub |
5367 |
- |
5368 |
--END(ftrace_regs_caller) |
5369 |
-+ENDPROC(ftrace_regs_caller) |
5370 |
- |
5371 |
- |
5372 |
- #else /* ! CONFIG_DYNAMIC_FTRACE */ |
5373 |
-@@ -213,6 +217,7 @@ ENTRY(function_hook) |
5374 |
- #endif |
5375 |
- |
5376 |
- GLOBAL(ftrace_stub) |
5377 |
-+ pax_force_retaddr |
5378 |
- retq |
5379 |
- |
5380 |
- trace: |
5381 |
-@@ -226,12 +231,13 @@ trace: |
5382 |
- #endif |
5383 |
- subq $MCOUNT_INSN_SIZE, %rdi |
5384 |
- |
5385 |
-+ pax_force_fptr ftrace_trace_function |
5386 |
- call *ftrace_trace_function |
5387 |
- |
5388 |
- MCOUNT_RESTORE_FRAME |
5389 |
- |
5390 |
- jmp ftrace_stub |
5391 |
--END(function_hook) |
5392 |
-+ENDPROC(function_hook) |
5393 |
- #endif /* CONFIG_DYNAMIC_FTRACE */ |
5394 |
- #endif /* CONFIG_FUNCTION_TRACER */ |
5395 |
- |
5396 |
-@@ -253,8 +259,9 @@ ENTRY(ftrace_graph_caller) |
5397 |
- |
5398 |
- MCOUNT_RESTORE_FRAME |
5399 |
- |
5400 |
-+ pax_force_retaddr |
5401 |
- retq |
5402 |
--END(ftrace_graph_caller) |
5403 |
-+ENDPROC(ftrace_graph_caller) |
5404 |
- |
5405 |
- GLOBAL(return_to_handler) |
5406 |
- subq $24, %rsp |
5407 |
-@@ -270,7 +277,9 @@ GLOBAL(return_to_handler) |
5408 |
- movq 8(%rsp), %rdx |
5409 |
- movq (%rsp), %rax |
5410 |
- addq $24, %rsp |
5411 |
-+ pax_force_fptr %rdi |
5412 |
- jmp *%rdi |
5413 |
-+ENDPROC(return_to_handler) |
5414 |
- #endif |
5415 |
- |
5416 |
- |
5417 |
-@@ -285,6 +294,430 @@ ENTRY(native_usergs_sysret64) |
5418 |
+@@ -81,6 +83,430 @@ ENTRY(native_usergs_sysret64) |
5419 |
ENDPROC(native_usergs_sysret64) |
5420 |
#endif /* CONFIG_PARAVIRT */ |
5421 |
|
5422 |
@@ -23334,7 +23682,7 @@ index 03cd2a8..05a9aed 100644 |
5423 |
|
5424 |
.macro TRACE_IRQS_IRETQ offset=ARGOFFSET |
5425 |
#ifdef CONFIG_TRACE_IRQFLAGS |
5426 |
-@@ -321,7 +754,7 @@ ENDPROC(native_usergs_sysret64) |
5427 |
+@@ -117,7 +543,7 @@ ENDPROC(native_usergs_sysret64) |
5428 |
.endm |
5429 |
|
5430 |
.macro TRACE_IRQS_IRETQ_DEBUG offset=ARGOFFSET |
5431 |
@@ -23343,7 +23691,7 @@ index 03cd2a8..05a9aed 100644 |
5432 |
jnc 1f |
5433 |
TRACE_IRQS_ON_DEBUG |
5434 |
1: |
5435 |
-@@ -359,27 +792,6 @@ ENDPROC(native_usergs_sysret64) |
5436 |
+@@ -155,27 +581,6 @@ ENDPROC(native_usergs_sysret64) |
5437 |
movq \tmp,R11+\offset(%rsp) |
5438 |
.endm |
5439 |
|
5440 |
@@ -23371,7 +23719,7 @@ index 03cd2a8..05a9aed 100644 |
5441 |
/* |
5442 |
* initial frame state for interrupts (and exceptions without error code) |
5443 |
*/ |
5444 |
-@@ -446,25 +858,26 @@ ENDPROC(native_usergs_sysret64) |
5445 |
+@@ -242,25 +647,26 @@ ENDPROC(native_usergs_sysret64) |
5446 |
/* save partial stack frame */ |
5447 |
.macro SAVE_ARGS_IRQ |
5448 |
cld |
5449 |
@@ -23411,7 +23759,7 @@ index 03cd2a8..05a9aed 100644 |
5450 |
je 1f |
5451 |
SWAPGS |
5452 |
/* |
5453 |
-@@ -484,6 +897,18 @@ ENDPROC(native_usergs_sysret64) |
5454 |
+@@ -280,6 +686,18 @@ ENDPROC(native_usergs_sysret64) |
5455 |
0x06 /* DW_OP_deref */, \ |
5456 |
0x08 /* DW_OP_const1u */, SS+8-RBP, \ |
5457 |
0x22 /* DW_OP_plus */ |
5458 |
@@ -23430,7 +23778,7 @@ index 03cd2a8..05a9aed 100644 |
5459 |
/* We entered an interrupt context - irqs are off: */ |
5460 |
TRACE_IRQS_OFF |
5461 |
.endm |
5462 |
-@@ -515,9 +940,52 @@ ENTRY(save_paranoid) |
5463 |
+@@ -309,9 +727,52 @@ ENTRY(save_paranoid) |
5464 |
js 1f /* negative -> in kernel */ |
5465 |
SWAPGS |
5466 |
xorl %ebx,%ebx |
5467 |
@@ -23482,10 +23830,10 @@ index 03cd2a8..05a9aed 100644 |
5468 |
+ ret |
5469 |
+ CFI_ENDPROC |
5470 |
+ENDPROC(save_paranoid_nmi) |
5471 |
- .popsection |
5472 |
|
5473 |
/* |
5474 |
-@@ -539,7 +1007,7 @@ ENTRY(ret_from_fork) |
5475 |
+ * A newly forked process directly context switches into this address. |
5476 |
+@@ -332,7 +793,7 @@ ENTRY(ret_from_fork) |
5477 |
|
5478 |
RESTORE_REST |
5479 |
|
5480 |
@@ -23494,7 +23842,7 @@ index 03cd2a8..05a9aed 100644 |
5481 |
jz 1f |
5482 |
|
5483 |
testl $_TIF_IA32, TI_flags(%rcx) # 32-bit compat task needs IRET |
5484 |
-@@ -549,15 +1017,13 @@ ENTRY(ret_from_fork) |
5485 |
+@@ -342,15 +803,13 @@ ENTRY(ret_from_fork) |
5486 |
jmp ret_from_sys_call # go to the SYSRET fastpath |
5487 |
|
5488 |
1: |
5489 |
@@ -23511,7 +23859,7 @@ index 03cd2a8..05a9aed 100644 |
5490 |
|
5491 |
/* |
5492 |
* System call entry. Up to 6 arguments in registers are supported. |
5493 |
-@@ -594,7 +1060,7 @@ END(ret_from_fork) |
5494 |
+@@ -387,7 +846,7 @@ END(ret_from_fork) |
5495 |
ENTRY(system_call) |
5496 |
CFI_STARTPROC simple |
5497 |
CFI_SIGNAL_FRAME |
5498 |
@@ -23520,7 +23868,7 @@ index 03cd2a8..05a9aed 100644 |
5499 |
CFI_REGISTER rip,rcx |
5500 |
/*CFI_REGISTER rflags,r11*/ |
5501 |
SWAPGS_UNSAFE_STACK |
5502 |
-@@ -607,16 +1073,23 @@ GLOBAL(system_call_after_swapgs) |
5503 |
+@@ -400,16 +859,23 @@ GLOBAL(system_call_after_swapgs) |
5504 |
|
5505 |
movq %rsp,PER_CPU_VAR(old_rsp) |
5506 |
movq PER_CPU_VAR(kernel_stack),%rsp |
5507 |
@@ -23546,7 +23894,7 @@ index 03cd2a8..05a9aed 100644 |
5508 |
jnz tracesys |
5509 |
system_call_fastpath: |
5510 |
#if __SYSCALL_MASK == ~0 |
5511 |
-@@ -640,10 +1113,13 @@ sysret_check: |
5512 |
+@@ -433,10 +899,13 @@ sysret_check: |
5513 |
LOCKDEP_SYS_EXIT |
5514 |
DISABLE_INTERRUPTS(CLBR_NONE) |
5515 |
TRACE_IRQS_OFF |
5516 |
@@ -23561,7 +23909,7 @@ index 03cd2a8..05a9aed 100644 |
5517 |
/* |
5518 |
* sysretq will re-enable interrupts: |
5519 |
*/ |
5520 |
-@@ -702,6 +1178,9 @@ auditsys: |
5521 |
+@@ -495,6 +964,9 @@ auditsys: |
5522 |
movq %rax,%rsi /* 2nd arg: syscall number */ |
5523 |
movl $AUDIT_ARCH_X86_64,%edi /* 1st arg: audit arch */ |
5524 |
call __audit_syscall_entry |
5525 |
@@ -23571,7 +23919,7 @@ index 03cd2a8..05a9aed 100644 |
5526 |
LOAD_ARGS 0 /* reload call-clobbered registers */ |
5527 |
jmp system_call_fastpath |
5528 |
|
5529 |
-@@ -723,7 +1202,7 @@ sysret_audit: |
5530 |
+@@ -516,7 +988,7 @@ sysret_audit: |
5531 |
/* Do syscall tracing */ |
5532 |
tracesys: |
5533 |
#ifdef CONFIG_AUDITSYSCALL |
5534 |
@@ -23580,7 +23928,7 @@ index 03cd2a8..05a9aed 100644 |
5535 |
jz auditsys |
5536 |
#endif |
5537 |
SAVE_REST |
5538 |
-@@ -731,12 +1210,15 @@ tracesys: |
5539 |
+@@ -524,12 +996,15 @@ tracesys: |
5540 |
FIXUP_TOP_OF_STACK %rdi |
5541 |
movq %rsp,%rdi |
5542 |
call syscall_trace_enter |
5543 |
@@ -23597,7 +23945,7 @@ index 03cd2a8..05a9aed 100644 |
5544 |
RESTORE_REST |
5545 |
#if __SYSCALL_MASK == ~0 |
5546 |
cmpq $__NR_syscall_max,%rax |
5547 |
-@@ -766,7 +1248,9 @@ GLOBAL(int_with_check) |
5548 |
+@@ -559,7 +1034,9 @@ GLOBAL(int_with_check) |
5549 |
andl %edi,%edx |
5550 |
jnz int_careful |
5551 |
andl $~TS_COMPAT,TI_status(%rcx) |
5552 |
@@ -23608,7 +23956,7 @@ index 03cd2a8..05a9aed 100644 |
5553 |
|
5554 |
/* Either reschedule or signal or syscall exit tracking needed. */ |
5555 |
/* First do a reschedule test. */ |
5556 |
-@@ -812,7 +1296,7 @@ int_restore_rest: |
5557 |
+@@ -605,7 +1082,7 @@ int_restore_rest: |
5558 |
TRACE_IRQS_OFF |
5559 |
jmp int_with_check |
5560 |
CFI_ENDPROC |
5561 |
@@ -23617,7 +23965,7 @@ index 03cd2a8..05a9aed 100644 |
5562 |
|
5563 |
.macro FORK_LIKE func |
5564 |
ENTRY(stub_\func) |
5565 |
-@@ -825,9 +1309,10 @@ ENTRY(stub_\func) |
5566 |
+@@ -618,9 +1095,10 @@ ENTRY(stub_\func) |
5567 |
DEFAULT_FRAME 0 8 /* offset 8: return address */ |
5568 |
call sys_\func |
5569 |
RESTORE_TOP_OF_STACK %r11, 8 |
5570 |
@@ -23630,7 +23978,7 @@ index 03cd2a8..05a9aed 100644 |
5571 |
.endm |
5572 |
|
5573 |
.macro FIXED_FRAME label,func |
5574 |
-@@ -837,9 +1322,10 @@ ENTRY(\label) |
5575 |
+@@ -630,9 +1108,10 @@ ENTRY(\label) |
5576 |
FIXUP_TOP_OF_STACK %r11, 8-ARGOFFSET |
5577 |
call \func |
5578 |
RESTORE_TOP_OF_STACK %r11, 8-ARGOFFSET |
5579 |
@@ -23642,7 +23990,7 @@ index 03cd2a8..05a9aed 100644 |
5580 |
.endm |
5581 |
|
5582 |
FORK_LIKE clone |
5583 |
-@@ -847,19 +1333,6 @@ END(\label) |
5584 |
+@@ -640,19 +1119,6 @@ END(\label) |
5585 |
FORK_LIKE vfork |
5586 |
FIXED_FRAME stub_iopl, sys_iopl |
5587 |
|
5588 |
@@ -23662,7 +24010,7 @@ index 03cd2a8..05a9aed 100644 |
5589 |
ENTRY(stub_execve) |
5590 |
CFI_STARTPROC |
5591 |
addq $8, %rsp |
5592 |
-@@ -871,7 +1344,7 @@ ENTRY(stub_execve) |
5593 |
+@@ -664,7 +1130,7 @@ ENTRY(stub_execve) |
5594 |
RESTORE_REST |
5595 |
jmp int_ret_from_sys_call |
5596 |
CFI_ENDPROC |
5597 |
@@ -23671,7 +24019,7 @@ index 03cd2a8..05a9aed 100644 |
5598 |
|
5599 |
/* |
5600 |
* sigreturn is special because it needs to restore all registers on return. |
5601 |
-@@ -888,7 +1361,7 @@ ENTRY(stub_rt_sigreturn) |
5602 |
+@@ -681,7 +1147,7 @@ ENTRY(stub_rt_sigreturn) |
5603 |
RESTORE_REST |
5604 |
jmp int_ret_from_sys_call |
5605 |
CFI_ENDPROC |
5606 |
@@ -23680,7 +24028,7 @@ index 03cd2a8..05a9aed 100644 |
5607 |
|
5608 |
#ifdef CONFIG_X86_X32_ABI |
5609 |
ENTRY(stub_x32_rt_sigreturn) |
5610 |
-@@ -902,7 +1375,7 @@ ENTRY(stub_x32_rt_sigreturn) |
5611 |
+@@ -695,7 +1161,7 @@ ENTRY(stub_x32_rt_sigreturn) |
5612 |
RESTORE_REST |
5613 |
jmp int_ret_from_sys_call |
5614 |
CFI_ENDPROC |
5615 |
@@ -23689,7 +24037,7 @@ index 03cd2a8..05a9aed 100644 |
5616 |
|
5617 |
ENTRY(stub_x32_execve) |
5618 |
CFI_STARTPROC |
5619 |
-@@ -916,7 +1389,7 @@ ENTRY(stub_x32_execve) |
5620 |
+@@ -709,7 +1175,7 @@ ENTRY(stub_x32_execve) |
5621 |
RESTORE_REST |
5622 |
jmp int_ret_from_sys_call |
5623 |
CFI_ENDPROC |
5624 |
@@ -23698,7 +24046,7 @@ index 03cd2a8..05a9aed 100644 |
5625 |
|
5626 |
#endif |
5627 |
|
5628 |
-@@ -953,7 +1426,7 @@ vector=vector+1 |
5629 |
+@@ -746,7 +1212,7 @@ vector=vector+1 |
5630 |
2: jmp common_interrupt |
5631 |
.endr |
5632 |
CFI_ENDPROC |
5633 |
@@ -23707,7 +24055,7 @@ index 03cd2a8..05a9aed 100644 |
5634 |
|
5635 |
.previous |
5636 |
END(interrupt) |
5637 |
-@@ -970,8 +1443,8 @@ END(interrupt) |
5638 |
+@@ -763,8 +1229,8 @@ END(interrupt) |
5639 |
/* 0(%rsp): ~(interrupt number) */ |
5640 |
.macro interrupt func |
5641 |
/* reserve pt_regs for scratch regs and rbp */ |
5642 |
@@ -23718,7 +24066,7 @@ index 03cd2a8..05a9aed 100644 |
5643 |
SAVE_ARGS_IRQ |
5644 |
call \func |
5645 |
.endm |
5646 |
-@@ -998,14 +1471,14 @@ ret_from_intr: |
5647 |
+@@ -787,14 +1253,14 @@ ret_from_intr: |
5648 |
|
5649 |
/* Restore saved previous stack */ |
5650 |
popq %rsi |
5651 |
@@ -23737,7 +24085,7 @@ index 03cd2a8..05a9aed 100644 |
5652 |
je retint_kernel |
5653 |
|
5654 |
/* Interrupt came from user space */ |
5655 |
-@@ -1027,12 +1500,16 @@ retint_swapgs: /* return to user-space */ |
5656 |
+@@ -816,12 +1282,16 @@ retint_swapgs: /* return to user-space */ |
5657 |
* The iretq could re-enable interrupts: |
5658 |
*/ |
5659 |
DISABLE_INTERRUPTS(CLBR_ANY) |
5660 |
@@ -23754,7 +24102,7 @@ index 03cd2a8..05a9aed 100644 |
5661 |
/* |
5662 |
* The iretq could re-enable interrupts: |
5663 |
*/ |
5664 |
-@@ -1145,7 +1622,7 @@ ENTRY(retint_kernel) |
5665 |
+@@ -934,7 +1404,7 @@ ENTRY(retint_kernel) |
5666 |
jmp exit_intr |
5667 |
#endif |
5668 |
CFI_ENDPROC |
5669 |
@@ -23763,7 +24111,7 @@ index 03cd2a8..05a9aed 100644 |
5670 |
|
5671 |
/* |
5672 |
* If IRET takes a fault on the espfix stack, then we |
5673 |
-@@ -1167,13 +1644,13 @@ __do_double_fault: |
5674 |
+@@ -956,13 +1426,13 @@ __do_double_fault: |
5675 |
cmpq $native_irq_return_iret,%rax |
5676 |
jne do_double_fault /* This shouldn't happen... */ |
5677 |
movq PER_CPU_VAR(kernel_stack),%rax |
5678 |
@@ -23779,7 +24127,7 @@ index 03cd2a8..05a9aed 100644 |
5679 |
#else |
5680 |
# define __do_double_fault do_double_fault |
5681 |
#endif |
5682 |
-@@ -1195,7 +1672,7 @@ ENTRY(\sym) |
5683 |
+@@ -979,7 +1449,7 @@ ENTRY(\sym) |
5684 |
interrupt \do_sym |
5685 |
jmp ret_from_intr |
5686 |
CFI_ENDPROC |
5687 |
@@ -23788,67 +24136,38 @@ index 03cd2a8..05a9aed 100644 |
5688 |
.endm |
5689 |
|
5690 |
#ifdef CONFIG_TRACING |
5691 |
-@@ -1283,7 +1760,7 @@ ENTRY(\sym) |
5692 |
- call \do_sym |
5693 |
- jmp error_exit /* %ebx: no swapgs flag */ |
5694 |
- CFI_ENDPROC |
5695 |
--END(\sym) |
5696 |
-+ENDPROC(\sym) |
5697 |
- .endm |
5698 |
- |
5699 |
- .macro paranoidzeroentry sym do_sym |
5700 |
-@@ -1301,10 +1778,10 @@ ENTRY(\sym) |
5701 |
- call \do_sym |
5702 |
- jmp paranoid_exit /* %ebx: no swapgs flag */ |
5703 |
- CFI_ENDPROC |
5704 |
--END(\sym) |
5705 |
-+ENDPROC(\sym) |
5706 |
- .endm |
5707 |
- |
5708 |
+@@ -1052,7 +1522,7 @@ apicinterrupt IRQ_WORK_VECTOR \ |
5709 |
+ /* |
5710 |
+ * Exception entry points. |
5711 |
+ */ |
5712 |
-#define INIT_TSS_IST(x) PER_CPU_VAR(init_tss) + (TSS_ist + ((x) - 1) * 8) |
5713 |
+#define INIT_TSS_IST(x) (TSS_ist + ((x) - 1) * 8)(%r13) |
5714 |
- .macro paranoidzeroentry_ist sym do_sym ist |
5715 |
+ |
5716 |
+ .macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1 |
5717 |
ENTRY(\sym) |
5718 |
- INTR_FRAME |
5719 |
-@@ -1317,12 +1794,18 @@ ENTRY(\sym) |
5720 |
- TRACE_IRQS_OFF_DEBUG |
5721 |
- movq %rsp,%rdi /* pt_regs pointer */ |
5722 |
- xorl %esi,%esi /* no error code */ |
5723 |
+@@ -1103,6 +1573,12 @@ ENTRY(\sym) |
5724 |
+ .endif |
5725 |
+ |
5726 |
+ .if \shift_ist != -1 |
5727 |
+#ifdef CONFIG_SMP |
5728 |
+ imul $TSS_size, PER_CPU_VAR(cpu_number), %r13d |
5729 |
+ lea init_tss(%r13), %r13 |
5730 |
+#else |
5731 |
+ lea init_tss(%rip), %r13 |
5732 |
+#endif |
5733 |
- subq $EXCEPTION_STKSZ, INIT_TSS_IST(\ist) |
5734 |
- call \do_sym |
5735 |
- addq $EXCEPTION_STKSZ, INIT_TSS_IST(\ist) |
5736 |
- jmp paranoid_exit /* %ebx: no swapgs flag */ |
5737 |
- CFI_ENDPROC |
5738 |
--END(\sym) |
5739 |
-+ENDPROC(\sym) |
5740 |
- .endm |
5741 |
+ subq $EXCEPTION_STKSZ, INIT_TSS_IST(\shift_ist) |
5742 |
+ .endif |
5743 |
|
5744 |
- .macro errorentry sym do_sym |
5745 |
-@@ -1340,7 +1823,7 @@ ENTRY(\sym) |
5746 |
- call \do_sym |
5747 |
- jmp error_exit /* %ebx: no swapgs flag */ |
5748 |
- CFI_ENDPROC |
5749 |
--END(\sym) |
5750 |
-+ENDPROC(\sym) |
5751 |
- .endm |
5752 |
+@@ -1119,7 +1595,7 @@ ENTRY(\sym) |
5753 |
+ .endif |
5754 |
|
5755 |
- #ifdef CONFIG_TRACING |
5756 |
-@@ -1371,7 +1854,7 @@ ENTRY(\sym) |
5757 |
- call \do_sym |
5758 |
- jmp paranoid_exit /* %ebx: no swapgs flag */ |
5759 |
CFI_ENDPROC |
5760 |
-END(\sym) |
5761 |
+ENDPROC(\sym) |
5762 |
.endm |
5763 |
|
5764 |
- zeroentry divide_error do_divide_error |
5765 |
-@@ -1401,9 +1884,10 @@ gs_change: |
5766 |
+ #ifdef CONFIG_TRACING |
5767 |
+@@ -1160,9 +1636,10 @@ gs_change: |
5768 |
2: mfence /* workaround */ |
5769 |
SWAPGS |
5770 |
popfq_cfi |
5771 |
@@ -23860,7 +24179,7 @@ index 03cd2a8..05a9aed 100644 |
5772 |
|
5773 |
_ASM_EXTABLE(gs_change,bad_gs) |
5774 |
.section .fixup,"ax" |
5775 |
-@@ -1431,9 +1915,10 @@ ENTRY(do_softirq_own_stack) |
5776 |
+@@ -1190,9 +1667,10 @@ ENTRY(do_softirq_own_stack) |
5777 |
CFI_DEF_CFA_REGISTER rsp |
5778 |
CFI_ADJUST_CFA_OFFSET -8 |
5779 |
decl PER_CPU_VAR(irq_count) |
5780 |
@@ -23871,8 +24190,8 @@ index 03cd2a8..05a9aed 100644 |
5781 |
+ENDPROC(do_softirq_own_stack) |
5782 |
|
5783 |
#ifdef CONFIG_XEN |
5784 |
- zeroentry xen_hypervisor_callback xen_do_hypervisor_callback |
5785 |
-@@ -1471,7 +1956,7 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs) |
5786 |
+ idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0 |
5787 |
+@@ -1230,7 +1708,7 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs) |
5788 |
decl PER_CPU_VAR(irq_count) |
5789 |
jmp error_exit |
5790 |
CFI_ENDPROC |
5791 |
@@ -23881,7 +24200,7 @@ index 03cd2a8..05a9aed 100644 |
5792 |
|
5793 |
/* |
5794 |
* Hypervisor uses this for application faults while it executes. |
5795 |
-@@ -1530,7 +2015,7 @@ ENTRY(xen_failsafe_callback) |
5796 |
+@@ -1289,7 +1767,7 @@ ENTRY(xen_failsafe_callback) |
5797 |
SAVE_ALL |
5798 |
jmp error_exit |
5799 |
CFI_ENDPROC |
5800 |
@@ -23890,7 +24209,7 @@ index 03cd2a8..05a9aed 100644 |
5801 |
|
5802 |
apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \ |
5803 |
xen_hvm_callback_vector xen_evtchn_do_upcall |
5804 |
-@@ -1582,18 +2067,33 @@ ENTRY(paranoid_exit) |
5805 |
+@@ -1336,18 +1814,33 @@ ENTRY(paranoid_exit) |
5806 |
DEFAULT_FRAME |
5807 |
DISABLE_INTERRUPTS(CLBR_NONE) |
5808 |
TRACE_IRQS_OFF_DEBUG |
5809 |
@@ -23926,7 +24245,7 @@ index 03cd2a8..05a9aed 100644 |
5810 |
jmp irq_return |
5811 |
paranoid_userspace: |
5812 |
GET_THREAD_INFO(%rcx) |
5813 |
-@@ -1622,7 +2122,7 @@ paranoid_schedule: |
5814 |
+@@ -1376,7 +1869,7 @@ paranoid_schedule: |
5815 |
TRACE_IRQS_OFF |
5816 |
jmp paranoid_userspace |
5817 |
CFI_ENDPROC |
5818 |
@@ -23935,7 +24254,7 @@ index 03cd2a8..05a9aed 100644 |
5819 |
|
5820 |
/* |
5821 |
* Exception entry point. This expects an error code/orig_rax on the stack. |
5822 |
-@@ -1649,12 +2149,23 @@ ENTRY(error_entry) |
5823 |
+@@ -1403,12 +1896,23 @@ ENTRY(error_entry) |
5824 |
movq_cfi r14, R14+8 |
5825 |
movq_cfi r15, R15+8 |
5826 |
xorl %ebx,%ebx |
5827 |
@@ -23960,7 +24279,7 @@ index 03cd2a8..05a9aed 100644 |
5828 |
ret |
5829 |
|
5830 |
/* |
5831 |
-@@ -1681,7 +2192,7 @@ bstep_iret: |
5832 |
+@@ -1435,7 +1939,7 @@ bstep_iret: |
5833 |
movq %rcx,RIP+8(%rsp) |
5834 |
jmp error_swapgs |
5835 |
CFI_ENDPROC |
5836 |
@@ -23969,7 +24288,7 @@ index 03cd2a8..05a9aed 100644 |
5837 |
|
5838 |
|
5839 |
/* ebx: no swapgs flag (1: don't need swapgs, 0: need it) */ |
5840 |
-@@ -1692,7 +2203,7 @@ ENTRY(error_exit) |
5841 |
+@@ -1446,7 +1950,7 @@ ENTRY(error_exit) |
5842 |
DISABLE_INTERRUPTS(CLBR_NONE) |
5843 |
TRACE_IRQS_OFF |
5844 |
GET_THREAD_INFO(%rcx) |
5845 |
@@ -23978,7 +24297,7 @@ index 03cd2a8..05a9aed 100644 |
5846 |
jne retint_kernel |
5847 |
LOCKDEP_SYS_EXIT_IRQ |
5848 |
movl TI_flags(%rcx),%edx |
5849 |
-@@ -1701,7 +2212,7 @@ ENTRY(error_exit) |
5850 |
+@@ -1455,7 +1959,7 @@ ENTRY(error_exit) |
5851 |
jnz retint_careful |
5852 |
jmp retint_swapgs |
5853 |
CFI_ENDPROC |
5854 |
@@ -23987,7 +24306,7 @@ index 03cd2a8..05a9aed 100644 |
5855 |
|
5856 |
/* |
5857 |
* Test if a given stack is an NMI stack or not. |
5858 |
-@@ -1759,9 +2270,11 @@ ENTRY(nmi) |
5859 |
+@@ -1513,9 +2017,11 @@ ENTRY(nmi) |
5860 |
* If %cs was not the kernel segment, then the NMI triggered in user |
5861 |
* space, which means it is definitely not nested. |
5862 |
*/ |
5863 |
@@ -24000,7 +24319,7 @@ index 03cd2a8..05a9aed 100644 |
5864 |
/* |
5865 |
* Check the special variable on the stack to see if NMIs are |
5866 |
* executing. |
5867 |
-@@ -1795,8 +2308,7 @@ nested_nmi: |
5868 |
+@@ -1549,8 +2055,7 @@ nested_nmi: |
5869 |
|
5870 |
1: |
5871 |
/* Set up the interrupted NMIs stack to jump to repeat_nmi */ |
5872 |
@@ -24010,7 +24329,7 @@ index 03cd2a8..05a9aed 100644 |
5873 |
CFI_ADJUST_CFA_OFFSET 1*8 |
5874 |
leaq -10*8(%rsp), %rdx |
5875 |
pushq_cfi $__KERNEL_DS |
5876 |
-@@ -1814,6 +2326,7 @@ nested_nmi_out: |
5877 |
+@@ -1568,6 +2073,7 @@ nested_nmi_out: |
5878 |
CFI_RESTORE rdx |
5879 |
|
5880 |
/* No need to check faults here */ |
5881 |
@@ -24018,7 +24337,7 @@ index 03cd2a8..05a9aed 100644 |
5882 |
INTERRUPT_RETURN |
5883 |
|
5884 |
CFI_RESTORE_STATE |
5885 |
-@@ -1910,13 +2423,13 @@ end_repeat_nmi: |
5886 |
+@@ -1664,13 +2170,13 @@ end_repeat_nmi: |
5887 |
subq $ORIG_RAX-R15, %rsp |
5888 |
CFI_ADJUST_CFA_OFFSET ORIG_RAX-R15 |
5889 |
/* |
5890 |
@@ -24034,7 +24353,7 @@ index 03cd2a8..05a9aed 100644 |
5891 |
DEFAULT_FRAME 0 |
5892 |
|
5893 |
/* |
5894 |
-@@ -1926,9 +2439,9 @@ end_repeat_nmi: |
5895 |
+@@ -1680,9 +2186,9 @@ end_repeat_nmi: |
5896 |
* NMI itself takes a page fault, the page fault that was preempted |
5897 |
* will read the information from the NMI page fault and not the |
5898 |
* origin fault. Save it off and restore it if it changes. |
5899 |
@@ -24046,7 +24365,7 @@ index 03cd2a8..05a9aed 100644 |
5900 |
|
5901 |
/* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */ |
5902 |
movq %rsp,%rdi |
5903 |
-@@ -1937,31 +2450,36 @@ end_repeat_nmi: |
5904 |
+@@ -1691,29 +2197,34 @@ end_repeat_nmi: |
5905 |
|
5906 |
/* Did the NMI take a page fault? Restore cr2 if it did */ |
5907 |
movq %cr2, %rcx |
5908 |
@@ -24086,8 +24405,6 @@ index 03cd2a8..05a9aed 100644 |
5909 |
-END(ignore_sysret) |
5910 |
+ENDPROC(ignore_sysret) |
5911 |
|
5912 |
- /* |
5913 |
- * End of kprobes section |
5914 |
diff --git a/arch/x86/kernel/espfix_64.c b/arch/x86/kernel/espfix_64.c |
5915 |
index 94d857f..bf1f0bf 100644 |
5916 |
--- a/arch/x86/kernel/espfix_64.c |
5917 |
@@ -24102,9 +24419,18 @@ index 94d857f..bf1f0bf 100644 |
5918 |
unlock_done: |
5919 |
mutex_unlock(&espfix_init_mutex); |
5920 |
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c |
5921 |
-index 52819e8..b6d1dbd 100644 |
5922 |
+index cbc4a91..b38ee45 100644 |
5923 |
--- a/arch/x86/kernel/ftrace.c |
5924 |
+++ b/arch/x86/kernel/ftrace.c |
5925 |
+@@ -88,7 +88,7 @@ static unsigned long text_ip_addr(unsigned long ip) |
5926 |
+ * kernel identity mapping to modify code. |
5927 |
+ */ |
5928 |
+ if (within(ip, (unsigned long)_text, (unsigned long)_etext)) |
5929 |
+- ip = (unsigned long)__va(__pa_symbol(ip)); |
5930 |
++ ip = (unsigned long)__va(__pa_symbol(ktla_ktva(ip))); |
5931 |
+ |
5932 |
+ return ip; |
5933 |
+ } |
5934 |
@@ -104,6 +104,8 @@ ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code, |
5935 |
{ |
5936 |
unsigned char replaced[MCOUNT_INSN_SIZE]; |
5937 |
@@ -24123,16 +24449,7 @@ index 52819e8..b6d1dbd 100644 |
5938 |
|
5939 |
ftrace_update_func = ip; |
5940 |
/* Make sure the breakpoints see the ftrace_update_func update */ |
5941 |
-@@ -306,7 +308,7 @@ static int ftrace_write(unsigned long ip, const char *val, int size) |
5942 |
- * kernel identity mapping to modify code. |
5943 |
- */ |
5944 |
- if (within(ip, (unsigned long)_text, (unsigned long)_etext)) |
5945 |
-- ip = (unsigned long)__va(__pa_symbol(ip)); |
5946 |
-+ ip = (unsigned long)__va(__pa_symbol(ktla_ktva(ip))); |
5947 |
- |
5948 |
- if (probe_kernel_write((void *)ip, val, size)) |
5949 |
- return -EPERM; |
5950 |
-@@ -319,7 +321,7 @@ static int add_break(unsigned long ip, const char *old) |
5951 |
+@@ -310,7 +312,7 @@ static int add_break(unsigned long ip, const char *old) |
5952 |
unsigned char replaced[MCOUNT_INSN_SIZE]; |
5953 |
unsigned char brk = BREAKPOINT_INSTRUCTION; |
5954 |
|
5955 |
@@ -24142,7 +24459,7 @@ index 52819e8..b6d1dbd 100644 |
5956 |
|
5957 |
/* Make sure it is what we expect it to be */ |
5958 |
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c |
5959 |
-index 068054f..c248bcd 100644 |
5960 |
+index eda1a86..8f6df48 100644 |
5961 |
--- a/arch/x86/kernel/head64.c |
5962 |
+++ b/arch/x86/kernel/head64.c |
5963 |
@@ -67,12 +67,12 @@ again: |
5964 |
@@ -24187,7 +24504,7 @@ index 068054f..c248bcd 100644 |
5965 |
pmd = (physaddr & PMD_MASK) + early_pmd_flags; |
5966 |
pmd_p[pmd_index(address)] = pmd; |
5967 |
@@ -175,7 +175,6 @@ asmlinkage __visible void __init x86_64_start_kernel(char * real_mode_data) |
5968 |
- if (console_loglevel == 10) |
5969 |
+ if (console_loglevel >= CONSOLE_LOGLEVEL_DEBUG) |
5970 |
early_printk("Kernel alive\n"); |
5971 |
|
5972 |
- clear_page(init_level4_pgt); |
5973 |
@@ -24922,7 +25239,7 @@ index d5dd808..b6432cf 100644 |
5974 |
|
5975 |
/* |
5976 |
diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c |
5977 |
-index 2e977b5..5f2c273 100644 |
5978 |
+index 8af8171..f8c1169 100644 |
5979 |
--- a/arch/x86/kernel/i8259.c |
5980 |
+++ b/arch/x86/kernel/i8259.c |
5981 |
@@ -110,7 +110,7 @@ static int i8259A_irq_pending(unsigned int irq) |
5982 |
@@ -24943,7 +25260,7 @@ index 2e977b5..5f2c273 100644 |
5983 |
/* |
5984 |
* Theoretically we do not have to handle this IRQ, |
5985 |
* but in Linux this does not cause problems and is |
5986 |
-@@ -332,14 +332,16 @@ static void init_8259A(int auto_eoi) |
5987 |
+@@ -350,14 +350,16 @@ static void init_8259A(int auto_eoi) |
5988 |
/* (slave's support for AEOI in flat mode is to be investigated) */ |
5989 |
outb_pic(SLAVE_ICW4_DEFAULT, PIC_SLAVE_IMR); |
5990 |
|
5991 |
@@ -25023,7 +25340,7 @@ index 4ddaf66..49d5c18 100644 |
5992 |
regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12); |
5993 |
t->iopl = level << 12; |
5994 |
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c |
5995 |
-index 11ccfb0..ec1e46f 100644 |
5996 |
+index 922d285..6d20692 100644 |
5997 |
--- a/arch/x86/kernel/irq.c |
5998 |
+++ b/arch/x86/kernel/irq.c |
5999 |
@@ -22,7 +22,7 @@ |
6000 |
@@ -25355,10 +25672,10 @@ index 7ec1d5f..5a7d130 100644 |
6001 |
} |
6002 |
|
6003 |
diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c |
6004 |
-index 61b17dc..784bfe9 100644 |
6005 |
+index 67e6d19..731ed28 100644 |
6006 |
--- a/arch/x86/kernel/kprobes/core.c |
6007 |
+++ b/arch/x86/kernel/kprobes/core.c |
6008 |
-@@ -119,9 +119,12 @@ static void __kprobes __synthesize_relative_insn(void *from, void *to, u8 op) |
6009 |
+@@ -120,9 +120,12 @@ __synthesize_relative_insn(void *from, void *to, u8 op) |
6010 |
s32 raddr; |
6011 |
} __packed *insn; |
6012 |
|
6013 |
@@ -25372,7 +25689,7 @@ index 61b17dc..784bfe9 100644 |
6014 |
} |
6015 |
|
6016 |
/* Insert a jump instruction at address 'from', which jumps to address 'to'.*/ |
6017 |
-@@ -164,7 +167,7 @@ int __kprobes can_boost(kprobe_opcode_t *opcodes) |
6018 |
+@@ -168,7 +171,7 @@ int can_boost(kprobe_opcode_t *opcodes) |
6019 |
kprobe_opcode_t opcode; |
6020 |
kprobe_opcode_t *orig_opcodes = opcodes; |
6021 |
|
6022 |
@@ -25381,7 +25698,7 @@ index 61b17dc..784bfe9 100644 |
6023 |
return 0; /* Page fault may occur on this address. */ |
6024 |
|
6025 |
retry: |
6026 |
-@@ -238,9 +241,9 @@ __recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr) |
6027 |
+@@ -242,9 +245,9 @@ __recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr) |
6028 |
* for the first byte, we can recover the original instruction |
6029 |
* from it and kp->opcode. |
6030 |
*/ |
6031 |
@@ -25393,7 +25710,7 @@ index 61b17dc..784bfe9 100644 |
6032 |
} |
6033 |
|
6034 |
/* |
6035 |
-@@ -332,7 +335,9 @@ int __kprobes __copy_instruction(u8 *dest, u8 *src) |
6036 |
+@@ -336,7 +339,9 @@ int __copy_instruction(u8 *dest, u8 *src) |
6037 |
/* Another subsystem puts a breakpoint, failed to recover */ |
6038 |
if (insn.opcode.bytes[0] == BREAKPOINT_INSTRUCTION) |
6039 |
return 0; |
6040 |
@@ -25403,7 +25720,7 @@ index 61b17dc..784bfe9 100644 |
6041 |
|
6042 |
#ifdef CONFIG_X86_64 |
6043 |
if (insn_rip_relative(&insn)) { |
6044 |
-@@ -359,7 +364,9 @@ int __kprobes __copy_instruction(u8 *dest, u8 *src) |
6045 |
+@@ -363,7 +368,9 @@ int __copy_instruction(u8 *dest, u8 *src) |
6046 |
return 0; |
6047 |
} |
6048 |
disp = (u8 *) dest + insn_offset_displacement(&insn); |
6049 |
@@ -25413,7 +25730,7 @@ index 61b17dc..784bfe9 100644 |
6050 |
} |
6051 |
#endif |
6052 |
return insn.length; |
6053 |
-@@ -498,7 +505,7 @@ setup_singlestep(struct kprobe *p, struct pt_regs *regs, struct kprobe_ctlblk *k |
6054 |
+@@ -505,7 +512,7 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs, |
6055 |
* nor set current_kprobe, because it doesn't use single |
6056 |
* stepping. |
6057 |
*/ |
6058 |
@@ -25422,7 +25739,7 @@ index 61b17dc..784bfe9 100644 |
6059 |
preempt_enable_no_resched(); |
6060 |
return; |
6061 |
} |
6062 |
-@@ -515,9 +522,9 @@ setup_singlestep(struct kprobe *p, struct pt_regs *regs, struct kprobe_ctlblk *k |
6063 |
+@@ -522,9 +529,9 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs, |
6064 |
regs->flags &= ~X86_EFLAGS_IF; |
6065 |
/* single step inline if the instruction is an int3 */ |
6066 |
if (p->opcode == BREAKPOINT_INSTRUCTION) |
6067 |
@@ -25432,9 +25749,18 @@ index 61b17dc..784bfe9 100644 |
6068 |
- regs->ip = (unsigned long)p->ainsn.insn; |
6069 |
+ regs->ip = ktva_ktla((unsigned long)p->ainsn.insn); |
6070 |
} |
6071 |
+ NOKPROBE_SYMBOL(setup_singlestep); |
6072 |
|
6073 |
- /* |
6074 |
-@@ -596,7 +603,7 @@ static int __kprobes kprobe_handler(struct pt_regs *regs) |
6075 |
+@@ -574,7 +581,7 @@ int kprobe_int3_handler(struct pt_regs *regs) |
6076 |
+ struct kprobe *p; |
6077 |
+ struct kprobe_ctlblk *kcb; |
6078 |
+ |
6079 |
+- if (user_mode_vm(regs)) |
6080 |
++ if (user_mode(regs)) |
6081 |
+ return 0; |
6082 |
+ |
6083 |
+ addr = (kprobe_opcode_t *)(regs->ip - sizeof(kprobe_opcode_t)); |
6084 |
+@@ -609,7 +616,7 @@ int kprobe_int3_handler(struct pt_regs *regs) |
6085 |
setup_singlestep(p, regs, kcb, 0); |
6086 |
return 1; |
6087 |
} |
6088 |
@@ -25443,7 +25769,7 @@ index 61b17dc..784bfe9 100644 |
6089 |
/* |
6090 |
* The breakpoint instruction was removed right |
6091 |
* after we hit it. Another cpu has removed |
6092 |
-@@ -642,6 +649,9 @@ static void __used __kprobes kretprobe_trampoline_holder(void) |
6093 |
+@@ -656,6 +663,9 @@ static void __used kretprobe_trampoline_holder(void) |
6094 |
" movq %rax, 152(%rsp)\n" |
6095 |
RESTORE_REGS_STRING |
6096 |
" popfq\n" |
6097 |
@@ -25453,8 +25779,8 @@ index 61b17dc..784bfe9 100644 |
6098 |
#else |
6099 |
" pushf\n" |
6100 |
SAVE_REGS_STRING |
6101 |
-@@ -779,7 +789,7 @@ static void __kprobes |
6102 |
- resume_execution(struct kprobe *p, struct pt_regs *regs, struct kprobe_ctlblk *kcb) |
6103 |
+@@ -796,7 +806,7 @@ static void resume_execution(struct kprobe *p, struct pt_regs *regs, |
6104 |
+ struct kprobe_ctlblk *kcb) |
6105 |
{ |
6106 |
unsigned long *tos = stack_addr(regs); |
6107 |
- unsigned long copy_ip = (unsigned long)p->ainsn.insn; |
6108 |
@@ -25462,7 +25788,7 @@ index 61b17dc..784bfe9 100644 |
6109 |
unsigned long orig_ip = (unsigned long)p->addr; |
6110 |
kprobe_opcode_t *insn = p->ainsn.insn; |
6111 |
|
6112 |
-@@ -959,7 +969,7 @@ kprobe_exceptions_notify(struct notifier_block *self, unsigned long val, void *d |
6113 |
+@@ -979,7 +989,7 @@ int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val, |
6114 |
struct die_args *args = data; |
6115 |
int ret = NOTIFY_DONE; |
6116 |
|
6117 |
@@ -25470,20 +25796,20 @@ index 61b17dc..784bfe9 100644 |
6118 |
+ if (args->regs && user_mode(args->regs)) |
6119 |
return ret; |
6120 |
|
6121 |
- switch (val) { |
6122 |
+ if (val == DIE_GPF) { |
6123 |
diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c |
6124 |
-index 898160b..758cde8 100644 |
6125 |
+index f304773..551e63c 100644 |
6126 |
--- a/arch/x86/kernel/kprobes/opt.c |
6127 |
+++ b/arch/x86/kernel/kprobes/opt.c |
6128 |
@@ -79,6 +79,7 @@ found: |
6129 |
/* Insert a move instruction which sets a pointer to eax/rdi (1st arg). */ |
6130 |
- static void __kprobes synthesize_set_arg1(kprobe_opcode_t *addr, unsigned long val) |
6131 |
+ static void synthesize_set_arg1(kprobe_opcode_t *addr, unsigned long val) |
6132 |
{ |
6133 |
+ pax_open_kernel(); |
6134 |
#ifdef CONFIG_X86_64 |
6135 |
*addr++ = 0x48; |
6136 |
*addr++ = 0xbf; |
6137 |
-@@ -86,6 +87,7 @@ static void __kprobes synthesize_set_arg1(kprobe_opcode_t *addr, unsigned long v |
6138 |
+@@ -86,6 +87,7 @@ static void synthesize_set_arg1(kprobe_opcode_t *addr, unsigned long val) |
6139 |
*addr++ = 0xb8; |
6140 |
#endif |
6141 |
*(unsigned long *)addr = val; |
6142 |
@@ -25491,7 +25817,7 @@ index 898160b..758cde8 100644 |
6143 |
} |
6144 |
|
6145 |
asm ( |
6146 |
-@@ -335,7 +337,7 @@ int __kprobes arch_prepare_optimized_kprobe(struct optimized_kprobe *op) |
6147 |
+@@ -337,7 +339,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op) |
6148 |
* Verify if the address gap is in 2GB range, because this uses |
6149 |
* a relative jump. |
6150 |
*/ |
6151 |
@@ -25500,7 +25826,7 @@ index 898160b..758cde8 100644 |
6152 |
if (abs(rel) > 0x7fffffff) |
6153 |
return -ERANGE; |
6154 |
|
6155 |
-@@ -350,16 +352,18 @@ int __kprobes arch_prepare_optimized_kprobe(struct optimized_kprobe *op) |
6156 |
+@@ -352,16 +354,18 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op) |
6157 |
op->optinsn.size = ret; |
6158 |
|
6159 |
/* Copy arch-dep-instance from template */ |
6160 |
@@ -25522,7 +25848,7 @@ index 898160b..758cde8 100644 |
6161 |
(u8 *)op->kp.addr + op->optinsn.size); |
6162 |
|
6163 |
flush_icache_range((unsigned long) buf, |
6164 |
-@@ -384,7 +388,7 @@ void __kprobes arch_optimize_kprobes(struct list_head *oplist) |
6165 |
+@@ -386,7 +390,7 @@ void arch_optimize_kprobes(struct list_head *oplist) |
6166 |
WARN_ON(kprobe_disabled(&op->kp)); |
6167 |
|
6168 |
/* Backup instructions which will be replaced by jump address */ |
6169 |
@@ -25531,7 +25857,7 @@ index 898160b..758cde8 100644 |
6170 |
RELATIVE_ADDR_SIZE); |
6171 |
|
6172 |
insn_buf[0] = RELATIVEJUMP_OPCODE; |
6173 |
-@@ -433,7 +437,7 @@ setup_detour_execution(struct kprobe *p, struct pt_regs *regs, int reenter) |
6174 |
+@@ -434,7 +438,7 @@ int setup_detour_execution(struct kprobe *p, struct pt_regs *regs, int reenter) |
6175 |
/* This kprobe is really able to run optimized path. */ |
6176 |
op = container_of(p, struct optimized_kprobe, kp); |
6177 |
/* Detour through copied instructions */ |
6178 |
@@ -25652,6 +25978,92 @@ index 1667b1d..16492c5 100644 |
6179 |
|
6180 |
relocate_kernel_ptr = control_page; |
6181 |
page_list[PA_CONTROL_PAGE] = __pa(control_page); |
6182 |
+diff --git a/arch/x86/kernel/mcount_64.S b/arch/x86/kernel/mcount_64.S |
6183 |
+index c050a01..5774072 100644 |
6184 |
+--- a/arch/x86/kernel/mcount_64.S |
6185 |
++++ b/arch/x86/kernel/mcount_64.S |
6186 |
+@@ -7,7 +7,7 @@ |
6187 |
+ #include <linux/linkage.h> |
6188 |
+ #include <asm/ptrace.h> |
6189 |
+ #include <asm/ftrace.h> |
6190 |
+- |
6191 |
++#include <asm/alternative-asm.h> |
6192 |
+ |
6193 |
+ .code64 |
6194 |
+ .section .entry.text, "ax" |
6195 |
+@@ -24,8 +24,9 @@ |
6196 |
+ #ifdef CONFIG_DYNAMIC_FTRACE |
6197 |
+ |
6198 |
+ ENTRY(function_hook) |
6199 |
++ pax_force_retaddr |
6200 |
+ retq |
6201 |
+-END(function_hook) |
6202 |
++ENDPROC(function_hook) |
6203 |
+ |
6204 |
+ /* skip is set if stack has been adjusted */ |
6205 |
+ .macro ftrace_caller_setup skip=0 |
6206 |
+@@ -66,8 +67,9 @@ GLOBAL(ftrace_graph_call) |
6207 |
+ #endif |
6208 |
+ |
6209 |
+ GLOBAL(ftrace_stub) |
6210 |
++ pax_force_retaddr |
6211 |
+ retq |
6212 |
+-END(ftrace_caller) |
6213 |
++ENDPROC(ftrace_caller) |
6214 |
+ |
6215 |
+ ENTRY(ftrace_regs_caller) |
6216 |
+ /* Save the current flags before compare (in SS location)*/ |
6217 |
+@@ -135,7 +137,7 @@ ftrace_restore_flags: |
6218 |
+ popfq |
6219 |
+ jmp ftrace_stub |
6220 |
+ |
6221 |
+-END(ftrace_regs_caller) |
6222 |
++ENDPROC(ftrace_regs_caller) |
6223 |
+ |
6224 |
+ |
6225 |
+ #else /* ! CONFIG_DYNAMIC_FTRACE */ |
6226 |
+@@ -156,6 +158,7 @@ ENTRY(function_hook) |
6227 |
+ #endif |
6228 |
+ |
6229 |
+ GLOBAL(ftrace_stub) |
6230 |
++ pax_force_retaddr |
6231 |
+ retq |
6232 |
+ |
6233 |
+ trace: |
6234 |
+@@ -169,12 +172,13 @@ trace: |
6235 |
+ #endif |
6236 |
+ subq $MCOUNT_INSN_SIZE, %rdi |
6237 |
+ |
6238 |
++ pax_force_fptr ftrace_trace_function |
6239 |
+ call *ftrace_trace_function |
6240 |
+ |
6241 |
+ MCOUNT_RESTORE_FRAME |
6242 |
+ |
6243 |
+ jmp ftrace_stub |
6244 |
+-END(function_hook) |
6245 |
++ENDPROC(function_hook) |
6246 |
+ #endif /* CONFIG_DYNAMIC_FTRACE */ |
6247 |
+ #endif /* CONFIG_FUNCTION_TRACER */ |
6248 |
+ |
6249 |
+@@ -196,8 +200,9 @@ ENTRY(ftrace_graph_caller) |
6250 |
+ |
6251 |
+ MCOUNT_RESTORE_FRAME |
6252 |
+ |
6253 |
++ pax_force_retaddr |
6254 |
+ retq |
6255 |
+-END(ftrace_graph_caller) |
6256 |
++ENDPROC(ftrace_graph_caller) |
6257 |
+ |
6258 |
+ GLOBAL(return_to_handler) |
6259 |
+ subq $24, %rsp |
6260 |
+@@ -213,5 +218,7 @@ GLOBAL(return_to_handler) |
6261 |
+ movq 8(%rsp), %rdx |
6262 |
+ movq (%rsp), %rax |
6263 |
+ addq $24, %rsp |
6264 |
++ pax_force_fptr %rdi |
6265 |
+ jmp *%rdi |
6266 |
++ENDPROC(return_to_handler) |
6267 |
+ #endif |
6268 |
diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c |
6269 |
index e69f988..da078ea 100644 |
6270 |
--- a/arch/x86/kernel/module.c |
6271 |
@@ -25837,7 +26249,7 @@ index c9603ac..9f88728 100644 |
6272 |
}; |
6273 |
|
6274 |
diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c |
6275 |
-index b4872b9..5bf0684 100644 |
6276 |
+index c3e985d..110a36a 100644 |
6277 |
--- a/arch/x86/kernel/nmi.c |
6278 |
+++ b/arch/x86/kernel/nmi.c |
6279 |
@@ -98,16 +98,16 @@ fs_initcall(nmi_warning_debugfs); |
6280 |
@@ -25859,8 +26271,8 @@ index b4872b9..5bf0684 100644 |
6281 |
+ n->action->handler, whole_msecs, decimal_msecs); |
6282 |
} |
6283 |
|
6284 |
- static int __kprobes nmi_handle(unsigned int type, struct pt_regs *regs, bool b2b) |
6285 |
-@@ -134,11 +134,11 @@ static int __kprobes nmi_handle(unsigned int type, struct pt_regs *regs, bool b2 |
6286 |
+ static int nmi_handle(unsigned int type, struct pt_regs *regs, bool b2b) |
6287 |
+@@ -134,11 +134,11 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs, bool b2b) |
6288 |
delta = sched_clock() - delta; |
6289 |
trace_nmi_handler(a->handler, (int)delta, thishandled); |
6290 |
|
6291 |
@@ -25875,16 +26287,16 @@ index b4872b9..5bf0684 100644 |
6292 |
} |
6293 |
|
6294 |
rcu_read_unlock(); |
6295 |
-@@ -147,7 +147,7 @@ static int __kprobes nmi_handle(unsigned int type, struct pt_regs *regs, bool b2 |
6296 |
- return handled; |
6297 |
+@@ -148,7 +148,7 @@ static int nmi_handle(unsigned int type, struct pt_regs *regs, bool b2b) |
6298 |
} |
6299 |
+ NOKPROBE_SYMBOL(nmi_handle); |
6300 |
|
6301 |
-int __register_nmi_handler(unsigned int type, struct nmiaction *action) |
6302 |
+int __register_nmi_handler(unsigned int type, const struct nmiaction *action) |
6303 |
{ |
6304 |
struct nmi_desc *desc = nmi_to_desc(type); |
6305 |
unsigned long flags; |
6306 |
-@@ -155,7 +155,8 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action) |
6307 |
+@@ -156,7 +156,8 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action) |
6308 |
if (!action->handler) |
6309 |
return -EINVAL; |
6310 |
|
6311 |
@@ -25894,7 +26306,7 @@ index b4872b9..5bf0684 100644 |
6312 |
|
6313 |
spin_lock_irqsave(&desc->lock, flags); |
6314 |
|
6315 |
-@@ -173,9 +174,9 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action) |
6316 |
+@@ -174,9 +175,9 @@ int __register_nmi_handler(unsigned int type, struct nmiaction *action) |
6317 |
* event confuses some handlers (kdump uses this flag) |
6318 |
*/ |
6319 |
if (action->flags & NMI_FLAG_FIRST) |
6320 |
@@ -25906,7 +26318,7 @@ index b4872b9..5bf0684 100644 |
6321 |
|
6322 |
spin_unlock_irqrestore(&desc->lock, flags); |
6323 |
return 0; |
6324 |
-@@ -198,7 +199,7 @@ void unregister_nmi_handler(unsigned int type, const char *name) |
6325 |
+@@ -199,7 +200,7 @@ void unregister_nmi_handler(unsigned int type, const char *name) |
6326 |
if (!strcmp(n->name, name)) { |
6327 |
WARN(in_nmi(), |
6328 |
"Trying to free NMI (%s) from NMI context!\n", n->name); |
6329 |
@@ -25915,8 +26327,8 @@ index b4872b9..5bf0684 100644 |
6330 |
break; |
6331 |
} |
6332 |
} |
6333 |
-@@ -523,6 +524,17 @@ static inline void nmi_nesting_postprocess(void) |
6334 |
- dotraplinkage notrace __kprobes void |
6335 |
+@@ -528,6 +529,17 @@ static inline void nmi_nesting_postprocess(void) |
6336 |
+ dotraplinkage notrace void |
6337 |
do_nmi(struct pt_regs *regs, long error_code) |
6338 |
{ |
6339 |
+ |
6340 |
@@ -25969,10 +26381,10 @@ index bbb6c73..24a58ef 100644 |
6341 |
.lock_spinning = __PV_IS_CALLEE_SAVE(paravirt_nop), |
6342 |
.unlock_kick = paravirt_nop, |
6343 |
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c |
6344 |
-index 1b10af8..45bfbec 100644 |
6345 |
+index 548d25f..f8fb99c 100644 |
6346 |
--- a/arch/x86/kernel/paravirt.c |
6347 |
+++ b/arch/x86/kernel/paravirt.c |
6348 |
-@@ -55,6 +55,9 @@ u64 _paravirt_ident_64(u64 x) |
6349 |
+@@ -56,6 +56,9 @@ u64 _paravirt_ident_64(u64 x) |
6350 |
{ |
6351 |
return x; |
6352 |
} |
6353 |
@@ -25982,7 +26394,7 @@ index 1b10af8..45bfbec 100644 |
6354 |
|
6355 |
void __init default_banner(void) |
6356 |
{ |
6357 |
-@@ -141,16 +144,20 @@ unsigned paravirt_patch_default(u8 type, u16 clobbers, void *insnbuf, |
6358 |
+@@ -142,16 +145,20 @@ unsigned paravirt_patch_default(u8 type, u16 clobbers, void *insnbuf, |
6359 |
|
6360 |
if (opfunc == NULL) |
6361 |
/* If there's no function, patch it with a ud2a (BUG) */ |
6362 |
@@ -26007,7 +26419,7 @@ index 1b10af8..45bfbec 100644 |
6363 |
|
6364 |
else if (type == PARAVIRT_PATCH(pv_cpu_ops.iret) || |
6365 |
type == PARAVIRT_PATCH(pv_cpu_ops.irq_enable_sysexit) || |
6366 |
-@@ -175,7 +182,7 @@ unsigned paravirt_patch_insns(void *insnbuf, unsigned len, |
6367 |
+@@ -176,7 +183,7 @@ unsigned paravirt_patch_insns(void *insnbuf, unsigned len, |
6368 |
if (insn_len > len || start == NULL) |
6369 |
insn_len = len; |
6370 |
else |
6371 |
@@ -26016,7 +26428,7 @@ index 1b10af8..45bfbec 100644 |
6372 |
|
6373 |
return insn_len; |
6374 |
} |
6375 |
-@@ -299,7 +306,7 @@ enum paravirt_lazy_mode paravirt_get_lazy_mode(void) |
6376 |
+@@ -300,7 +307,7 @@ enum paravirt_lazy_mode paravirt_get_lazy_mode(void) |
6377 |
return this_cpu_read(paravirt_lazy_mode); |
6378 |
} |
6379 |
|
6380 |
@@ -26025,7 +26437,7 @@ index 1b10af8..45bfbec 100644 |
6381 |
.name = "bare hardware", |
6382 |
.paravirt_enabled = 0, |
6383 |
.kernel_rpl = 0, |
6384 |
-@@ -310,16 +317,16 @@ struct pv_info pv_info = { |
6385 |
+@@ -311,16 +318,16 @@ struct pv_info pv_info = { |
6386 |
#endif |
6387 |
}; |
6388 |
|
6389 |
@@ -26045,7 +26457,7 @@ index 1b10af8..45bfbec 100644 |
6390 |
.save_fl = __PV_IS_CALLEE_SAVE(native_save_fl), |
6391 |
.restore_fl = __PV_IS_CALLEE_SAVE(native_restore_fl), |
6392 |
.irq_disable = __PV_IS_CALLEE_SAVE(native_irq_disable), |
6393 |
-@@ -331,7 +338,7 @@ __visible struct pv_irq_ops pv_irq_ops = { |
6394 |
+@@ -332,7 +339,7 @@ __visible struct pv_irq_ops pv_irq_ops = { |
6395 |
#endif |
6396 |
}; |
6397 |
|
6398 |
@@ -26054,9 +26466,9 @@ index 1b10af8..45bfbec 100644 |
6399 |
.cpuid = native_cpuid, |
6400 |
.get_debugreg = native_get_debugreg, |
6401 |
.set_debugreg = native_set_debugreg, |
6402 |
-@@ -389,21 +396,26 @@ __visible struct pv_cpu_ops pv_cpu_ops = { |
6403 |
- .end_context_switch = paravirt_nop, |
6404 |
- }; |
6405 |
+@@ -395,21 +402,26 @@ NOKPROBE_SYMBOL(native_get_debugreg); |
6406 |
+ NOKPROBE_SYMBOL(native_set_debugreg); |
6407 |
+ NOKPROBE_SYMBOL(native_load_idt); |
6408 |
|
6409 |
-struct pv_apic_ops pv_apic_ops = { |
6410 |
+struct pv_apic_ops pv_apic_ops __read_only= { |
6411 |
@@ -26084,7 +26496,7 @@ index 1b10af8..45bfbec 100644 |
6412 |
|
6413 |
.read_cr2 = native_read_cr2, |
6414 |
.write_cr2 = native_write_cr2, |
6415 |
-@@ -453,6 +465,7 @@ struct pv_mmu_ops pv_mmu_ops = { |
6416 |
+@@ -459,6 +471,7 @@ struct pv_mmu_ops pv_mmu_ops = { |
6417 |
.make_pud = PTE_IDENT, |
6418 |
|
6419 |
.set_pgd = native_set_pgd, |
6420 |
@@ -26092,7 +26504,7 @@ index 1b10af8..45bfbec 100644 |
6421 |
#endif |
6422 |
#endif /* PAGETABLE_LEVELS >= 3 */ |
6423 |
|
6424 |
-@@ -473,6 +486,12 @@ struct pv_mmu_ops pv_mmu_ops = { |
6425 |
+@@ -479,6 +492,12 @@ struct pv_mmu_ops pv_mmu_ops = { |
6426 |
}, |
6427 |
|
6428 |
.set_fixmap = native_set_fixmap, |
6429 |
@@ -26132,18 +26544,18 @@ index 35ccf75..7a15747 100644 |
6430 |
#define DEBUG 1 |
6431 |
|
6432 |
diff --git a/arch/x86/kernel/pci-swiotlb.c b/arch/x86/kernel/pci-swiotlb.c |
6433 |
-index 6c483ba..d10ce2f 100644 |
6434 |
+index 77dd0ad..9ec4723 100644 |
6435 |
--- a/arch/x86/kernel/pci-swiotlb.c |
6436 |
+++ b/arch/x86/kernel/pci-swiotlb.c |
6437 |
-@@ -32,7 +32,7 @@ static void x86_swiotlb_free_coherent(struct device *dev, size_t size, |
6438 |
- void *vaddr, dma_addr_t dma_addr, |
6439 |
+@@ -33,7 +33,7 @@ void x86_swiotlb_free_coherent(struct device *dev, size_t size, |
6440 |
struct dma_attrs *attrs) |
6441 |
{ |
6442 |
-- swiotlb_free_coherent(dev, size, vaddr, dma_addr); |
6443 |
-+ swiotlb_free_coherent(dev, size, vaddr, dma_addr, attrs); |
6444 |
+ if (is_swiotlb_buffer(dma_to_phys(dev, dma_addr))) |
6445 |
+- swiotlb_free_coherent(dev, size, vaddr, dma_addr); |
6446 |
++ swiotlb_free_coherent(dev, size, vaddr, dma_addr, attrs); |
6447 |
+ else |
6448 |
+ dma_generic_free_coherent(dev, size, vaddr, dma_addr, attrs); |
6449 |
} |
6450 |
- |
6451 |
- static struct dma_map_ops swiotlb_dma_ops = { |
6452 |
diff --git a/arch/x86/kernel/preempt.S b/arch/x86/kernel/preempt.S |
6453 |
index ca7f0d5..8996469 100644 |
6454 |
--- a/arch/x86/kernel/preempt.S |
6455 |
@@ -26388,7 +26800,7 @@ index 7bc86bb..0ea06e8 100644 |
6456 |
} |
6457 |
- |
6458 |
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c |
6459 |
-index 898d077..4c458ff 100644 |
6460 |
+index ca5b02d..c0b2f6a 100644 |
6461 |
--- a/arch/x86/kernel/process_64.c |
6462 |
+++ b/arch/x86/kernel/process_64.c |
6463 |
@@ -158,10 +158,11 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, |
6464 |
@@ -26451,7 +26863,7 @@ index 898d077..4c458ff 100644 |
6465 |
|
6466 |
/* |
6467 |
* Now maybe reload the debug registers and handle I/O bitmaps |
6468 |
-@@ -442,12 +447,11 @@ unsigned long get_wchan(struct task_struct *p) |
6469 |
+@@ -443,12 +448,11 @@ unsigned long get_wchan(struct task_struct *p) |
6470 |
if (!p || p == current || p->state == TASK_RUNNING) |
6471 |
return 0; |
6472 |
stack = (unsigned long)task_stack_page(p); |
6473 |
@@ -26772,7 +27184,7 @@ index 3fd2c69..a444264 100644 |
6474 |
identity_mapped: |
6475 |
/* set return address to 0 if not preserving context */ |
6476 |
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c |
6477 |
-index 09c76d2..7f33fc2 100644 |
6478 |
+index 78a0e62..5c2e510 100644 |
6479 |
--- a/arch/x86/kernel/setup.c |
6480 |
+++ b/arch/x86/kernel/setup.c |
6481 |
@@ -110,6 +110,7 @@ |
6482 |
@@ -26965,7 +27377,7 @@ index 5cdff03..80fa283 100644 |
6483 |
* Up to this point, the boot CPU has been using .init.data |
6484 |
* area. Reload any changed state for the boot CPU. |
6485 |
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c |
6486 |
-index 9e5de68..147c254 100644 |
6487 |
+index 2851d63..83bf567 100644 |
6488 |
--- a/arch/x86/kernel/signal.c |
6489 |
+++ b/arch/x86/kernel/signal.c |
6490 |
@@ -190,7 +190,7 @@ static unsigned long align_sigframe(unsigned long sp) |
6491 |
@@ -26977,19 +27389,20 @@ index 9e5de68..147c254 100644 |
6492 |
#else /* !CONFIG_X86_32 */ |
6493 |
sp = round_down(sp, 16) - 8; |
6494 |
#endif |
6495 |
-@@ -298,9 +298,9 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set, |
6496 |
+@@ -298,10 +298,9 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set, |
6497 |
} |
6498 |
|
6499 |
if (current->mm->context.vdso) |
6500 |
-- restorer = VDSO32_SYMBOL(current->mm->context.vdso, sigreturn); |
6501 |
-+ restorer = (void __force_user *)VDSO32_SYMBOL(current->mm->context.vdso, sigreturn); |
6502 |
+- restorer = current->mm->context.vdso + |
6503 |
+- selected_vdso32->sym___kernel_sigreturn; |
6504 |
++ restorer = (void __force_user *)(current->mm->context.vdso + selected_vdso32->sym___kernel_sigreturn); |
6505 |
else |
6506 |
- restorer = &frame->retcode; |
6507 |
+ restorer = (void __user *)&frame->retcode; |
6508 |
if (ksig->ka.sa.sa_flags & SA_RESTORER) |
6509 |
restorer = ksig->ka.sa.sa_restorer; |
6510 |
|
6511 |
-@@ -314,7 +314,7 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set, |
6512 |
+@@ -315,7 +314,7 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set, |
6513 |
* reasons and because gdb uses it as a signature to notice |
6514 |
* signal handler stack frames. |
6515 |
*/ |
6516 |
@@ -26998,19 +27411,20 @@ index 9e5de68..147c254 100644 |
6517 |
|
6518 |
if (err) |
6519 |
return -EFAULT; |
6520 |
-@@ -361,7 +361,10 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig, |
6521 |
+@@ -362,8 +361,10 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig, |
6522 |
save_altstack_ex(&frame->uc.uc_stack, regs->sp); |
6523 |
|
6524 |
/* Set up to return from userspace. */ |
6525 |
-- restorer = VDSO32_SYMBOL(current->mm->context.vdso, rt_sigreturn); |
6526 |
+- restorer = current->mm->context.vdso + |
6527 |
+- selected_vdso32->sym___kernel_rt_sigreturn; |
6528 |
+ if (current->mm->context.vdso) |
6529 |
-+ restorer = (void __force_user *)VDSO32_SYMBOL(current->mm->context.vdso, rt_sigreturn); |
6530 |
++ restorer = (void __force_user *)(current->mm->context.vdso + selected_vdso32->sym___kernel_rt_sigreturn); |
6531 |
+ else |
6532 |
+ restorer = (void __user *)&frame->retcode; |
6533 |
if (ksig->ka.sa.sa_flags & SA_RESTORER) |
6534 |
restorer = ksig->ka.sa.sa_restorer; |
6535 |
put_user_ex(restorer, &frame->pretcode); |
6536 |
-@@ -373,7 +376,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig, |
6537 |
+@@ -375,7 +376,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig, |
6538 |
* reasons and because gdb uses it as a signature to notice |
6539 |
* signal handler stack frames. |
6540 |
*/ |
6541 |
@@ -27019,7 +27433,7 @@ index 9e5de68..147c254 100644 |
6542 |
} put_user_catch(err); |
6543 |
|
6544 |
err |= copy_siginfo_to_user(&frame->info, &ksig->info); |
6545 |
-@@ -609,7 +612,12 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) |
6546 |
+@@ -611,7 +612,12 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) |
6547 |
{ |
6548 |
int usig = signr_convert(ksig->sig); |
6549 |
sigset_t *set = sigmask_to_save(); |
6550 |
@@ -27033,7 +27447,7 @@ index 9e5de68..147c254 100644 |
6551 |
|
6552 |
/* Set up the stack frame */ |
6553 |
if (is_ia32_frame()) { |
6554 |
-@@ -620,7 +628,7 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) |
6555 |
+@@ -622,7 +628,7 @@ setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) |
6556 |
} else if (is_x32_frame()) { |
6557 |
return x32_setup_rt_frame(ksig, cset, regs); |
6558 |
} else { |
6559 |
@@ -27578,10 +27992,10 @@ index 1c113db..287b42e 100644 |
6560 |
static int trace_irq_vector_refcount; |
6561 |
static DEFINE_MUTEX(irq_vector_mutex); |
6562 |
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c |
6563 |
-index f73b5d4..0adcc9a 100644 |
6564 |
+index 0d0e922..0886373 100644 |
6565 |
--- a/arch/x86/kernel/traps.c |
6566 |
+++ b/arch/x86/kernel/traps.c |
6567 |
-@@ -66,7 +66,7 @@ |
6568 |
+@@ -67,7 +67,7 @@ |
6569 |
#include <asm/proto.h> |
6570 |
|
6571 |
/* No need to be aligned, but done to keep all IDTs defined the same way. */ |
6572 |
@@ -27590,7 +28004,7 @@ index f73b5d4..0adcc9a 100644 |
6573 |
#else |
6574 |
#include <asm/processor-flags.h> |
6575 |
#include <asm/setup.h> |
6576 |
-@@ -75,7 +75,7 @@ asmlinkage int system_call(void); |
6577 |
+@@ -76,7 +76,7 @@ asmlinkage int system_call(void); |
6578 |
#endif |
6579 |
|
6580 |
/* Must be page-aligned because the real IDT is used in a fixmap. */ |
6581 |
@@ -27599,10 +28013,10 @@ index f73b5d4..0adcc9a 100644 |
6582 |
|
6583 |
DECLARE_BITMAP(used_vectors, NR_VECTORS); |
6584 |
EXPORT_SYMBOL_GPL(used_vectors); |
6585 |
-@@ -107,11 +107,11 @@ static inline void preempt_conditional_cli(struct pt_regs *regs) |
6586 |
+@@ -108,11 +108,11 @@ static inline void preempt_conditional_cli(struct pt_regs *regs) |
6587 |
} |
6588 |
|
6589 |
- static int __kprobes |
6590 |
+ static nokprobe_inline int |
6591 |
-do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str, |
6592 |
+do_trap_no_signal(struct task_struct *tsk, int trapnr, const char *str, |
6593 |
struct pt_regs *regs, long error_code) |
6594 |
@@ -27613,7 +28027,7 @@ index f73b5d4..0adcc9a 100644 |
6595 |
/* |
6596 |
* Traps 0, 1, 3, 4, and 5 should be forwarded to vm86. |
6597 |
* On nmi (interrupt 2), do_trap should not be called. |
6598 |
-@@ -124,12 +124,24 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str, |
6599 |
+@@ -125,12 +125,24 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str, |
6600 |
return -1; |
6601 |
} |
6602 |
#endif |
6603 |
@@ -27639,16 +28053,16 @@ index f73b5d4..0adcc9a 100644 |
6604 |
return 0; |
6605 |
} |
6606 |
|
6607 |
-@@ -137,7 +149,7 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str, |
6608 |
+@@ -169,7 +181,7 @@ static siginfo_t *fill_trap_info(struct pt_regs *regs, int signr, int trapnr, |
6609 |
} |
6610 |
|
6611 |
- static void __kprobes |
6612 |
+ static void |
6613 |
-do_trap(int trapnr, int signr, char *str, struct pt_regs *regs, |
6614 |
+do_trap(int trapnr, int signr, const char *str, struct pt_regs *regs, |
6615 |
long error_code, siginfo_t *info) |
6616 |
{ |
6617 |
struct task_struct *tsk = current; |
6618 |
-@@ -161,7 +173,7 @@ do_trap(int trapnr, int signr, char *str, struct pt_regs *regs, |
6619 |
+@@ -193,7 +205,7 @@ do_trap(int trapnr, int signr, char *str, struct pt_regs *regs, |
6620 |
if (show_unhandled_signals && unhandled_signal(tsk, signr) && |
6621 |
printk_ratelimit()) { |
6622 |
pr_info("%s[%d] trap %s ip:%lx sp:%lx error:%lx", |
6623 |
@@ -27657,7 +28071,7 @@ index f73b5d4..0adcc9a 100644 |
6624 |
regs->ip, regs->sp, error_code); |
6625 |
print_vma_addr(" in ", regs->ip); |
6626 |
pr_cont("\n"); |
6627 |
-@@ -251,6 +263,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) |
6628 |
+@@ -266,6 +278,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) |
6629 |
tsk->thread.error_code = error_code; |
6630 |
tsk->thread.trap_nr = X86_TRAP_DF; |
6631 |
|
6632 |
@@ -27669,7 +28083,7 @@ index f73b5d4..0adcc9a 100644 |
6633 |
#ifdef CONFIG_DOUBLEFAULT |
6634 |
df_debug(regs, error_code); |
6635 |
#endif |
6636 |
-@@ -273,7 +290,7 @@ do_general_protection(struct pt_regs *regs, long error_code) |
6637 |
+@@ -288,7 +305,7 @@ do_general_protection(struct pt_regs *regs, long error_code) |
6638 |
conditional_sti(regs); |
6639 |
|
6640 |
#ifdef CONFIG_X86_32 |
6641 |
@@ -27678,7 +28092,7 @@ index f73b5d4..0adcc9a 100644 |
6642 |
local_irq_enable(); |
6643 |
handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code); |
6644 |
goto exit; |
6645 |
-@@ -281,18 +298,42 @@ do_general_protection(struct pt_regs *regs, long error_code) |
6646 |
+@@ -296,18 +313,42 @@ do_general_protection(struct pt_regs *regs, long error_code) |
6647 |
#endif |
6648 |
|
6649 |
tsk = current; |
6650 |
@@ -27723,7 +28137,7 @@ index f73b5d4..0adcc9a 100644 |
6651 |
tsk->thread.error_code = error_code; |
6652 |
tsk->thread.trap_nr = X86_TRAP_GP; |
6653 |
|
6654 |
-@@ -453,7 +494,7 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code) |
6655 |
+@@ -481,7 +522,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code) |
6656 |
/* It's safe to allow irq's after DR6 has been saved */ |
6657 |
preempt_conditional_sti(regs); |
6658 |
|
6659 |
@@ -27732,7 +28146,7 @@ index f73b5d4..0adcc9a 100644 |
6660 |
handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code, |
6661 |
X86_TRAP_DB); |
6662 |
preempt_conditional_cli(regs); |
6663 |
-@@ -468,7 +509,7 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code) |
6664 |
+@@ -496,7 +537,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code) |
6665 |
* We already checked v86 mode above, so we can check for kernel mode |
6666 |
* by just checking the CPL of CS. |
6667 |
*/ |
6668 |
@@ -27741,7 +28155,7 @@ index f73b5d4..0adcc9a 100644 |
6669 |
tsk->thread.debugreg6 &= ~DR_STEP; |
6670 |
set_tsk_thread_flag(tsk, TIF_SINGLESTEP); |
6671 |
regs->flags &= ~X86_EFLAGS_TF; |
6672 |
-@@ -500,7 +541,7 @@ void math_error(struct pt_regs *regs, int error_code, int trapnr) |
6673 |
+@@ -529,7 +570,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr) |
6674 |
return; |
6675 |
conditional_sti(regs); |
6676 |
|
6677 |
@@ -27764,10 +28178,10 @@ index ea03031..34a5cdda 100644 |
6678 |
|
6679 |
/* |
6680 |
diff --git a/arch/x86/kernel/uprobes.c b/arch/x86/kernel/uprobes.c |
6681 |
-index 2ed8459..7cf329f 100644 |
6682 |
+index 5d1cbfe..2a21feb 100644 |
6683 |
--- a/arch/x86/kernel/uprobes.c |
6684 |
+++ b/arch/x86/kernel/uprobes.c |
6685 |
-@@ -629,7 +629,7 @@ int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, |
6686 |
+@@ -845,7 +845,7 @@ int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, |
6687 |
int ret = NOTIFY_DONE; |
6688 |
|
6689 |
/* We are only interested in userspace traps */ |
6690 |
@@ -27776,9 +28190,9 @@ index 2ed8459..7cf329f 100644 |
6691 |
return NOTIFY_DONE; |
6692 |
|
6693 |
switch (val) { |
6694 |
-@@ -719,7 +719,7 @@ arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs |
6695 |
+@@ -919,7 +919,7 @@ arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs |
6696 |
|
6697 |
- if (ncopied != rasize) { |
6698 |
+ if (nleft != rasize) { |
6699 |
pr_err("uprobe: return address clobbered: pid=%d, %%sp=%#lx, " |
6700 |
- "%%ip=%#lx\n", current->pid, regs->sp, regs->ip); |
6701 |
+ "%%ip=%#lx\n", task_pid_nr(current), regs->sp, regs->ip); |
6702 |
@@ -28130,7 +28544,7 @@ index 49edf2d..c0d1362 100644 |
6703 |
|
6704 |
#ifdef CONFIG_SMP |
6705 |
diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c |
6706 |
-index 8b3b3eb..9395aa9 100644 |
6707 |
+index ea5b570..960e4da 100644 |
6708 |
--- a/arch/x86/kernel/vsyscall_64.c |
6709 |
+++ b/arch/x86/kernel/vsyscall_64.c |
6710 |
@@ -54,15 +54,13 @@ |
6711 |
@@ -28160,18 +28574,18 @@ index 8b3b3eb..9395aa9 100644 |
6712 |
} |
6713 |
|
6714 |
/* |
6715 |
-@@ -332,10 +329,7 @@ void __init map_vsyscall(void) |
6716 |
+@@ -331,10 +328,7 @@ void __init map_vsyscall(void) |
6717 |
+ extern char __vsyscall_page; |
6718 |
unsigned long physaddr_vsyscall = __pa_symbol(&__vsyscall_page); |
6719 |
- unsigned long physaddr_vvar_page = __pa_symbol(&__vvar_page); |
6720 |
|
6721 |
-- __set_fixmap(VSYSCALL_FIRST_PAGE, physaddr_vsyscall, |
6722 |
+- __set_fixmap(VSYSCALL_PAGE, physaddr_vsyscall, |
6723 |
- vsyscall_mode == NATIVE |
6724 |
- ? PAGE_KERNEL_VSYSCALL |
6725 |
- : PAGE_KERNEL_VVAR); |
6726 |
-+ __set_fixmap(VSYSCALL_FIRST_PAGE, physaddr_vsyscall, PAGE_KERNEL_VVAR); |
6727 |
- BUILD_BUG_ON((unsigned long)__fix_to_virt(VSYSCALL_FIRST_PAGE) != |
6728 |
- (unsigned long)VSYSCALL_START); |
6729 |
- |
6730 |
++ __set_fixmap(VSYSCALL_PAGE, physaddr_vsyscall, PAGE_KERNEL_VVAR); |
6731 |
+ BUILD_BUG_ON((unsigned long)__fix_to_virt(VSYSCALL_PAGE) != |
6732 |
+ (unsigned long)VSYSCALL_ADDR); |
6733 |
+ } |
6734 |
diff --git a/arch/x86/kernel/x8664_ksyms_64.c b/arch/x86/kernel/x8664_ksyms_64.c |
6735 |
index 04068192..4d75aa6 100644 |
6736 |
--- a/arch/x86/kernel/x8664_ksyms_64.c |
6737 |
@@ -28276,7 +28690,7 @@ index a4b451c..8dfe1ad 100644 |
6738 |
if ((unsigned long)buf % 64 || fx_only) { |
6739 |
u64 init_bv = pcntxt_mask & ~XSTATE_FPSSE; |
6740 |
diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c |
6741 |
-index f47a104..5ce59a8 100644 |
6742 |
+index 38a0afe..94421a9 100644 |
6743 |
--- a/arch/x86/kvm/cpuid.c |
6744 |
+++ b/arch/x86/kvm/cpuid.c |
6745 |
@@ -166,15 +166,20 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu, |
6746 |
@@ -28340,7 +28754,7 @@ index 0069118..c28ec0a 100644 |
6747 |
#define APIC_LVT_NUM 6 |
6748 |
/* 14 is the version for Xeon and Pentium 8.4.8*/ |
6749 |
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h |
6750 |
-index 123efd3..ad7726e 100644 |
6751 |
+index 4107765..d9eb358 100644 |
6752 |
--- a/arch/x86/kvm/paging_tmpl.h |
6753 |
+++ b/arch/x86/kvm/paging_tmpl.h |
6754 |
@@ -331,7 +331,7 @@ retry_walk: |
6755 |
@@ -28353,10 +28767,10 @@ index 123efd3..ad7726e 100644 |
6756 |
goto error; |
6757 |
walker->ptep_user[walker->level - 1] = ptep_user; |
6758 |
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c |
6759 |
-index 7f4f9c2..67b1db0 100644 |
6760 |
+index b5e994a..35b5866 100644 |
6761 |
--- a/arch/x86/kvm/svm.c |
6762 |
+++ b/arch/x86/kvm/svm.c |
6763 |
-@@ -3535,7 +3535,11 @@ static void reload_tss(struct kvm_vcpu *vcpu) |
6764 |
+@@ -3541,7 +3541,11 @@ static void reload_tss(struct kvm_vcpu *vcpu) |
6765 |
int cpu = raw_smp_processor_id(); |
6766 |
|
6767 |
struct svm_cpu_data *sd = per_cpu(svm_data, cpu); |
6768 |
@@ -28368,7 +28782,7 @@ index 7f4f9c2..67b1db0 100644 |
6769 |
load_TR_desc(); |
6770 |
} |
6771 |
|
6772 |
-@@ -3936,6 +3940,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) |
6773 |
+@@ -3942,6 +3946,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) |
6774 |
#endif |
6775 |
#endif |
6776 |
|
6777 |
@@ -28380,7 +28794,7 @@ index 7f4f9c2..67b1db0 100644 |
6778 |
|
6779 |
local_irq_disable(); |
6780 |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c |
6781 |
-index 138ceff..2e584f0 100644 |
6782 |
+index 801332e..eeff1cc 100644 |
6783 |
--- a/arch/x86/kvm/vmx.c |
6784 |
+++ b/arch/x86/kvm/vmx.c |
6785 |
@@ -1339,12 +1339,12 @@ static void vmcs_write64(unsigned long field, u64 value) |
6786 |
@@ -28464,7 +28878,7 @@ index 138ceff..2e584f0 100644 |
6787 |
|
6788 |
if (nested) |
6789 |
nested_vmx_setup_ctls_msrs(); |
6790 |
-@@ -4235,7 +4248,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) |
6791 |
+@@ -4221,7 +4234,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) |
6792 |
|
6793 |
vmcs_writel(HOST_CR0, read_cr0() & ~X86_CR0_TS); /* 22.2.3 */ |
6794 |
vmcs_writel(HOST_CR4, read_cr4()); /* 22.2.3, 22.2.5 */ |
6795 |
@@ -28475,7 +28889,7 @@ index 138ceff..2e584f0 100644 |
6796 |
|
6797 |
vmcs_write16(HOST_CS_SELECTOR, __KERNEL_CS); /* 22.2.4 */ |
6798 |
#ifdef CONFIG_X86_64 |
6799 |
-@@ -4257,7 +4273,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) |
6800 |
+@@ -4243,7 +4259,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx) |
6801 |
vmcs_writel(HOST_IDTR_BASE, dt.address); /* 22.2.4 */ |
6802 |
vmx->host_idt_base = dt.address; |
6803 |
|
6804 |
@@ -28484,7 +28898,7 @@ index 138ceff..2e584f0 100644 |
6805 |
|
6806 |
rdmsr(MSR_IA32_SYSENTER_CS, low32, high32); |
6807 |
vmcs_write32(HOST_IA32_SYSENTER_CS, low32); |
6808 |
-@@ -7333,6 +7349,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) |
6809 |
+@@ -7413,6 +7429,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) |
6810 |
"jmp 2f \n\t" |
6811 |
"1: " __ex(ASM_VMX_VMRESUME) "\n\t" |
6812 |
"2: " |
6813 |
@@ -28497,7 +28911,7 @@ index 138ceff..2e584f0 100644 |
6814 |
/* Save guest registers, load host registers, keep flags */ |
6815 |
"mov %0, %c[wordsize](%%" _ASM_SP ") \n\t" |
6816 |
"pop %0 \n\t" |
6817 |
-@@ -7385,6 +7407,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) |
6818 |
+@@ -7465,6 +7487,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) |
6819 |
#endif |
6820 |
[cr2]"i"(offsetof(struct vcpu_vmx, vcpu.arch.cr2)), |
6821 |
[wordsize]"i"(sizeof(ulong)) |
6822 |
@@ -28509,7 +28923,7 @@ index 138ceff..2e584f0 100644 |
6823 |
: "cc", "memory" |
6824 |
#ifdef CONFIG_X86_64 |
6825 |
, "rax", "rbx", "rdi", "rsi" |
6826 |
-@@ -7398,7 +7425,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) |
6827 |
+@@ -7478,7 +7505,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) |
6828 |
if (debugctlmsr) |
6829 |
update_debugctlmsr(debugctlmsr); |
6830 |
|
6831 |
@@ -28518,7 +28932,7 @@ index 138ceff..2e584f0 100644 |
6832 |
/* |
6833 |
* The sysexit path does not restore ds/es, so we must set them to |
6834 |
* a reasonable value ourselves. |
6835 |
-@@ -7407,8 +7434,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) |
6836 |
+@@ -7487,8 +7514,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) |
6837 |
* may be executed in interrupt context, which saves and restore segments |
6838 |
* around it, nullifying its effect. |
6839 |
*/ |
6840 |
@@ -28540,10 +28954,10 @@ index 138ceff..2e584f0 100644 |
6841 |
|
6842 |
vcpu->arch.regs_avail = ~((1 << VCPU_REGS_RIP) | (1 << VCPU_REGS_RSP) |
6843 |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c |
6844 |
-index 5521f7c..691b7a3 100644 |
6845 |
+index ef432f8..a630659 100644 |
6846 |
--- a/arch/x86/kvm/x86.c |
6847 |
+++ b/arch/x86/kvm/x86.c |
6848 |
-@@ -1822,8 +1822,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data) |
6849 |
+@@ -1808,8 +1808,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data) |
6850 |
{ |
6851 |
struct kvm *kvm = vcpu->kvm; |
6852 |
int lm = is_long_mode(vcpu); |
6853 |
@@ -28554,7 +28968,7 @@ index 5521f7c..691b7a3 100644 |
6854 |
u8 blob_size = lm ? kvm->arch.xen_hvm_config.blob_size_64 |
6855 |
: kvm->arch.xen_hvm_config.blob_size_32; |
6856 |
u32 page_num = data & ~PAGE_MASK; |
6857 |
-@@ -2738,6 +2738,8 @@ long kvm_arch_dev_ioctl(struct file *filp, |
6858 |
+@@ -2729,6 +2729,8 @@ long kvm_arch_dev_ioctl(struct file *filp, |
6859 |
if (n < msr_list.nmsrs) |
6860 |
goto out; |
6861 |
r = -EFAULT; |
6862 |
@@ -28563,7 +28977,7 @@ index 5521f7c..691b7a3 100644 |
6863 |
if (copy_to_user(user_msr_list->indices, &msrs_to_save, |
6864 |
num_msrs_to_save * sizeof(u32))) |
6865 |
goto out; |
6866 |
-@@ -5574,7 +5576,7 @@ static struct notifier_block pvclock_gtod_notifier = { |
6867 |
+@@ -5567,7 +5569,7 @@ static struct notifier_block pvclock_gtod_notifier = { |
6868 |
}; |
6869 |
#endif |
6870 |
|
6871 |
@@ -30686,18 +31100,18 @@ index 5dff5f0..cadebf4 100644 |
6872 |
CFI_ENDPROC |
6873 |
ENDPROC(call_rwsem_downgrade_wake) |
6874 |
diff --git a/arch/x86/lib/thunk_64.S b/arch/x86/lib/thunk_64.S |
6875 |
-index a63efd6..8149fbe 100644 |
6876 |
+index 92d9fea..b2762c8 100644 |
6877 |
--- a/arch/x86/lib/thunk_64.S |
6878 |
+++ b/arch/x86/lib/thunk_64.S |
6879 |
-@@ -8,6 +8,7 @@ |
6880 |
- #include <linux/linkage.h> |
6881 |
+@@ -9,6 +9,7 @@ |
6882 |
#include <asm/dwarf2.h> |
6883 |
#include <asm/calling.h> |
6884 |
+ #include <asm/asm.h> |
6885 |
+#include <asm/alternative-asm.h> |
6886 |
|
6887 |
/* rdi: arg1 ... normal C conventions. rax is saved/restored. */ |
6888 |
.macro THUNK name, func, put_ret_addr_in_rdi=0 |
6889 |
-@@ -15,11 +16,11 @@ |
6890 |
+@@ -16,11 +17,11 @@ |
6891 |
\name: |
6892 |
CFI_STARTPROC |
6893 |
|
6894 |
@@ -30712,7 +31126,7 @@ index a63efd6..8149fbe 100644 |
6895 |
.endif |
6896 |
|
6897 |
call \func |
6898 |
-@@ -38,8 +39,9 @@ |
6899 |
+@@ -40,9 +41,10 @@ |
6900 |
|
6901 |
/* SAVE_ARGS below is used only for the .cfi directives it contains. */ |
6902 |
CFI_STARTPROC |
6903 |
@@ -30724,6 +31138,7 @@ index a63efd6..8149fbe 100644 |
6904 |
+ pax_force_retaddr |
6905 |
ret |
6906 |
CFI_ENDPROC |
6907 |
+ _ASM_NOKPROBE(restore) |
6908 |
diff --git a/arch/x86/lib/usercopy_32.c b/arch/x86/lib/usercopy_32.c |
6909 |
index e2f5e21..4b22130 100644 |
6910 |
--- a/arch/x86/lib/usercopy_32.c |
6911 |
@@ -31434,10 +31849,10 @@ index 903ec1e..c4166b2 100644 |
6912 |
} |
6913 |
|
6914 |
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c |
6915 |
-index 8e57229..31cce89 100644 |
6916 |
+index 3664279..c6a7830 100644 |
6917 |
--- a/arch/x86/mm/fault.c |
6918 |
+++ b/arch/x86/mm/fault.c |
6919 |
-@@ -14,11 +14,18 @@ |
6920 |
+@@ -14,12 +14,19 @@ |
6921 |
#include <linux/hugetlb.h> /* hstate_index_to_shift */ |
6922 |
#include <linux/prefetch.h> /* prefetchw */ |
6923 |
#include <linux/context_tracking.h> /* exception_enter(), ... */ |
6924 |
@@ -31447,7 +31862,8 @@ index 8e57229..31cce89 100644 |
6925 |
#include <asm/traps.h> /* dotraplinkage, ... */ |
6926 |
#include <asm/pgalloc.h> /* pgd_*(), ... */ |
6927 |
#include <asm/kmemcheck.h> /* kmemcheck_*(), ... */ |
6928 |
- #include <asm/fixmap.h> /* VSYSCALL_START */ |
6929 |
+ #include <asm/fixmap.h> /* VSYSCALL_ADDR */ |
6930 |
+ #include <asm/vsyscall.h> /* emulate_vsyscall */ |
6931 |
+#include <asm/tlbflush.h> |
6932 |
+ |
6933 |
+#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF) |
6934 |
@@ -31456,7 +31872,7 @@ index 8e57229..31cce89 100644 |
6935 |
|
6936 |
#define CREATE_TRACE_POINTS |
6937 |
#include <asm/trace/exceptions.h> |
6938 |
-@@ -59,7 +66,7 @@ static inline int __kprobes kprobes_fault(struct pt_regs *regs) |
6939 |
+@@ -60,7 +67,7 @@ static nokprobe_inline int kprobes_fault(struct pt_regs *regs) |
6940 |
int ret = 0; |
6941 |
|
6942 |
/* kprobe_running() needs smp_processor_id() */ |
6943 |
@@ -31465,7 +31881,7 @@ index 8e57229..31cce89 100644 |
6944 |
preempt_disable(); |
6945 |
if (kprobe_running() && kprobe_fault_handler(regs, 14)) |
6946 |
ret = 1; |
6947 |
-@@ -120,7 +127,10 @@ check_prefetch_opcode(struct pt_regs *regs, unsigned char *instr, |
6948 |
+@@ -121,7 +128,10 @@ check_prefetch_opcode(struct pt_regs *regs, unsigned char *instr, |
6949 |
return !instr_lo || (instr_lo>>1) == 1; |
6950 |
case 0x00: |
6951 |
/* Prefetch instruction is 0x0F0D or 0x0F18 */ |
6952 |
@@ -31477,7 +31893,7 @@ index 8e57229..31cce89 100644 |
6953 |
return 0; |
6954 |
|
6955 |
*prefetch = (instr_lo == 0xF) && |
6956 |
-@@ -154,7 +164,10 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr) |
6957 |
+@@ -155,7 +165,10 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr) |
6958 |
while (instr < max_instr) { |
6959 |
unsigned char opcode; |
6960 |
|
6961 |
@@ -31489,7 +31905,7 @@ index 8e57229..31cce89 100644 |
6962 |
break; |
6963 |
|
6964 |
instr++; |
6965 |
-@@ -185,6 +198,34 @@ force_sig_info_fault(int si_signo, int si_code, unsigned long address, |
6966 |
+@@ -186,6 +199,34 @@ force_sig_info_fault(int si_signo, int si_code, unsigned long address, |
6967 |
force_sig_info(si_signo, &info, tsk); |
6968 |
} |
6969 |
|
6970 |
@@ -31524,7 +31940,7 @@ index 8e57229..31cce89 100644 |
6971 |
DEFINE_SPINLOCK(pgd_lock); |
6972 |
LIST_HEAD(pgd_list); |
6973 |
|
6974 |
-@@ -235,10 +276,27 @@ void vmalloc_sync_all(void) |
6975 |
+@@ -236,10 +277,27 @@ void vmalloc_sync_all(void) |
6976 |
for (address = VMALLOC_START & PMD_MASK; |
6977 |
address >= TASK_SIZE && address < FIXADDR_TOP; |
6978 |
address += PMD_SIZE) { |
6979 |
@@ -31552,7 +31968,7 @@ index 8e57229..31cce89 100644 |
6980 |
spinlock_t *pgt_lock; |
6981 |
pmd_t *ret; |
6982 |
|
6983 |
-@@ -246,8 +304,14 @@ void vmalloc_sync_all(void) |
6984 |
+@@ -247,8 +305,14 @@ void vmalloc_sync_all(void) |
6985 |
pgt_lock = &pgd_page_get_mm(page)->page_table_lock; |
6986 |
|
6987 |
spin_lock(pgt_lock); |
6988 |
@@ -31568,7 +31984,7 @@ index 8e57229..31cce89 100644 |
6989 |
|
6990 |
if (!ret) |
6991 |
break; |
6992 |
-@@ -281,6 +345,12 @@ static noinline __kprobes int vmalloc_fault(unsigned long address) |
6993 |
+@@ -282,6 +346,12 @@ static noinline int vmalloc_fault(unsigned long address) |
6994 |
* an interrupt in the middle of a task switch.. |
6995 |
*/ |
6996 |
pgd_paddr = read_cr3(); |
6997 |
@@ -31581,7 +31997,7 @@ index 8e57229..31cce89 100644 |
6998 |
pmd_k = vmalloc_sync_one(__va(pgd_paddr), address); |
6999 |
if (!pmd_k) |
7000 |
return -1; |
7001 |
-@@ -376,11 +446,25 @@ static noinline __kprobes int vmalloc_fault(unsigned long address) |
7002 |
+@@ -378,11 +448,25 @@ static noinline int vmalloc_fault(unsigned long address) |
7003 |
* happen within a race in page table update. In the later |
7004 |
* case just flush: |
7005 |
*/ |
7006 |
@@ -31608,7 +32024,7 @@ index 8e57229..31cce89 100644 |
7007 |
if (pgd_none(*pgd)) { |
7008 |
set_pgd(pgd, *pgd_ref); |
7009 |
arch_flush_lazy_mmu_mode(); |
7010 |
-@@ -546,7 +630,7 @@ static int is_errata93(struct pt_regs *regs, unsigned long address) |
7011 |
+@@ -549,7 +633,7 @@ static int is_errata93(struct pt_regs *regs, unsigned long address) |
7012 |
static int is_errata100(struct pt_regs *regs, unsigned long address) |
7013 |
{ |
7014 |
#ifdef CONFIG_X86_64 |
7015 |
@@ -31617,7 +32033,7 @@ index 8e57229..31cce89 100644 |
7016 |
return 1; |
7017 |
#endif |
7018 |
return 0; |
7019 |
-@@ -573,7 +657,7 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address) |
7020 |
+@@ -576,7 +660,7 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address) |
7021 |
} |
7022 |
|
7023 |
static const char nx_warning[] = KERN_CRIT |
7024 |
@@ -31626,7 +32042,7 @@ index 8e57229..31cce89 100644 |
7025 |
|
7026 |
static void |
7027 |
show_fault_oops(struct pt_regs *regs, unsigned long error_code, |
7028 |
-@@ -582,7 +666,7 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, |
7029 |
+@@ -585,7 +669,7 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, |
7030 |
if (!oops_may_print()) |
7031 |
return; |
7032 |
|
7033 |
@@ -31635,7 +32051,7 @@ index 8e57229..31cce89 100644 |
7034 |
unsigned int level; |
7035 |
pgd_t *pgd; |
7036 |
pte_t *pte; |
7037 |
-@@ -593,9 +677,21 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, |
7038 |
+@@ -596,9 +680,21 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, |
7039 |
pte = lookup_address_in_pgd(pgd, address, &level); |
7040 |
|
7041 |
if (pte && pte_present(*pte) && !pte_exec(*pte)) |
7042 |
@@ -31658,7 +32074,7 @@ index 8e57229..31cce89 100644 |
7043 |
printk(KERN_ALERT "BUG: unable to handle kernel "); |
7044 |
if (address < PAGE_SIZE) |
7045 |
printk(KERN_CONT "NULL pointer dereference"); |
7046 |
-@@ -776,6 +872,22 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, |
7047 |
+@@ -779,6 +875,22 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, |
7048 |
return; |
7049 |
} |
7050 |
#endif |
7051 |
@@ -31681,7 +32097,7 @@ index 8e57229..31cce89 100644 |
7052 |
/* Kernel addresses are always protection faults: */ |
7053 |
if (address >= TASK_SIZE) |
7054 |
error_code |= PF_PROT; |
7055 |
-@@ -861,7 +973,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, |
7056 |
+@@ -864,7 +976,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address, |
7057 |
if (fault & (VM_FAULT_HWPOISON|VM_FAULT_HWPOISON_LARGE)) { |
7058 |
printk(KERN_ERR |
7059 |
"MCE: Killing %s:%d due to hardware memory corruption fault at %lx\n", |
7060 |
@@ -31690,7 +32106,7 @@ index 8e57229..31cce89 100644 |
7061 |
code = BUS_MCEERR_AR; |
7062 |
} |
7063 |
#endif |
7064 |
-@@ -915,6 +1027,99 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte) |
7065 |
+@@ -918,6 +1030,99 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte) |
7066 |
return 1; |
7067 |
} |
7068 |
|
7069 |
@@ -31790,7 +32206,7 @@ index 8e57229..31cce89 100644 |
7070 |
/* |
7071 |
* Handle a spurious fault caused by a stale TLB entry. |
7072 |
* |
7073 |
-@@ -981,6 +1186,9 @@ int show_unhandled_signals = 1; |
7074 |
+@@ -985,6 +1190,9 @@ int show_unhandled_signals = 1; |
7075 |
static inline int |
7076 |
access_error(unsigned long error_code, struct vm_area_struct *vma) |
7077 |
{ |
7078 |
@@ -31800,7 +32216,7 @@ index 8e57229..31cce89 100644 |
7079 |
if (error_code & PF_WRITE) { |
7080 |
/* write, present and write, not present: */ |
7081 |
if (unlikely(!(vma->vm_flags & VM_WRITE))) |
7082 |
-@@ -1015,7 +1223,7 @@ static inline bool smap_violation(int error_code, struct pt_regs *regs) |
7083 |
+@@ -1019,7 +1227,7 @@ static inline bool smap_violation(int error_code, struct pt_regs *regs) |
7084 |
if (error_code & PF_USER) |
7085 |
return false; |
7086 |
|
7087 |
@@ -31809,7 +32225,7 @@ index 8e57229..31cce89 100644 |
7088 |
return false; |
7089 |
|
7090 |
return true; |
7091 |
-@@ -1043,6 +1251,22 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, |
7092 |
+@@ -1047,6 +1255,22 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, |
7093 |
tsk = current; |
7094 |
mm = tsk->mm; |
7095 |
|
7096 |
@@ -31832,7 +32248,7 @@ index 8e57229..31cce89 100644 |
7097 |
/* |
7098 |
* Detect and handle instructions that would cause a page fault for |
7099 |
* both a tracked kernel page and a userspace page. |
7100 |
-@@ -1120,7 +1344,7 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, |
7101 |
+@@ -1124,7 +1348,7 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, |
7102 |
* User-mode registers count as a user access even for any |
7103 |
* potential system fault or CPU buglet: |
7104 |
*/ |
7105 |
@@ -31841,7 +32257,7 @@ index 8e57229..31cce89 100644 |
7106 |
local_irq_enable(); |
7107 |
error_code |= PF_USER; |
7108 |
flags |= FAULT_FLAG_USER; |
7109 |
-@@ -1167,6 +1391,11 @@ retry: |
7110 |
+@@ -1171,6 +1395,11 @@ retry: |
7111 |
might_sleep(); |
7112 |
} |
7113 |
|
7114 |
@@ -31853,7 +32269,7 @@ index 8e57229..31cce89 100644 |
7115 |
vma = find_vma(mm, address); |
7116 |
if (unlikely(!vma)) { |
7117 |
bad_area(regs, error_code, address); |
7118 |
-@@ -1178,18 +1407,24 @@ retry: |
7119 |
+@@ -1182,18 +1411,24 @@ retry: |
7120 |
bad_area(regs, error_code, address); |
7121 |
return; |
7122 |
} |
7123 |
@@ -31889,9 +32305,9 @@ index 8e57229..31cce89 100644 |
7124 |
if (unlikely(expand_stack(vma, address))) { |
7125 |
bad_area(regs, error_code, address); |
7126 |
return; |
7127 |
-@@ -1301,3 +1536,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code) |
7128 |
- exception_exit(prev_state); |
7129 |
+@@ -1309,3 +1544,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code) |
7130 |
} |
7131 |
+ NOKPROBE_SYMBOL(trace_do_page_fault); |
7132 |
#endif /* CONFIG_TRACING */ |
7133 |
+ |
7134 |
+#if defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC) |
7135 |
@@ -31915,7 +32331,7 @@ index 8e57229..31cce89 100644 |
7136 |
+ |
7137 |
+#ifdef CONFIG_PAX_SEGMEXEC |
7138 |
+ if (mm->pax_flags & MF_PAX_SEGMEXEC) { |
7139 |
-+ if (!(error_code & (PF_PROT | PF_WRITE)) && (ip + SEGMEXEC_TASK_SIZE == address)) |
7140 |
++ if (!(error_code & (PF_PROT | PF_WRITE)) && (ip + SEGMEXEC_TASK_SIZE == address)) |
7141 |
+ return true; |
7142 |
+ return false; |
7143 |
+ } |
7144 |
@@ -32778,7 +33194,7 @@ index e395048..cd38278 100644 |
7145 |
printk(KERN_INFO "Write protecting the kernel text: %luk\n", |
7146 |
size >> 10); |
7147 |
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c |
7148 |
-index f35c66c..84b95ef 100644 |
7149 |
+index df1a992..94c272c 100644 |
7150 |
--- a/arch/x86/mm/init_64.c |
7151 |
+++ b/arch/x86/mm/init_64.c |
7152 |
@@ -151,7 +151,7 @@ early_param("gbpages", parse_direct_gbpages_on); |
7153 |
@@ -32902,26 +33318,17 @@ index f35c66c..84b95ef 100644 |
7154 |
spin_unlock(&init_mm.page_table_lock); |
7155 |
pgd_changed = true; |
7156 |
} |
7157 |
-@@ -1188,8 +1209,8 @@ int kern_addr_valid(unsigned long addr) |
7158 |
+@@ -1195,8 +1216,8 @@ static struct vm_operations_struct gate_vma_ops = { |
7159 |
static struct vm_area_struct gate_vma = { |
7160 |
- .vm_start = VSYSCALL_START, |
7161 |
- .vm_end = VSYSCALL_START + (VSYSCALL_MAPPED_PAGES * PAGE_SIZE), |
7162 |
+ .vm_start = VSYSCALL_ADDR, |
7163 |
+ .vm_end = VSYSCALL_ADDR + PAGE_SIZE, |
7164 |
- .vm_page_prot = PAGE_READONLY_EXEC, |
7165 |
-- .vm_flags = VM_READ | VM_EXEC |
7166 |
+- .vm_flags = VM_READ | VM_EXEC, |
7167 |
+ .vm_page_prot = PAGE_READONLY, |
7168 |
-+ .vm_flags = VM_READ |
7169 |
++ .vm_flags = VM_READ, |
7170 |
+ .vm_ops = &gate_vma_ops, |
7171 |
}; |
7172 |
|
7173 |
- struct vm_area_struct *get_gate_vma(struct mm_struct *mm) |
7174 |
-@@ -1223,7 +1244,7 @@ int in_gate_area_no_mm(unsigned long addr) |
7175 |
- |
7176 |
- const char *arch_vma_name(struct vm_area_struct *vma) |
7177 |
- { |
7178 |
-- if (vma->vm_mm && vma->vm_start == (long)vma->vm_mm->context.vdso) |
7179 |
-+ if (vma->vm_mm && vma->vm_start == vma->vm_mm->context.vdso) |
7180 |
- return "[vdso]"; |
7181 |
- if (vma == &gate_vma) |
7182 |
- return "[vsyscall]"; |
7183 |
diff --git a/arch/x86/mm/iomap_32.c b/arch/x86/mm/iomap_32.c |
7184 |
index 7b179b4..6bd17777 100644 |
7185 |
--- a/arch/x86/mm/iomap_32.c |
7186 |
@@ -32939,7 +33346,7 @@ index 7b179b4..6bd17777 100644 |
7187 |
|
7188 |
return (void *)vaddr; |
7189 |
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c |
7190 |
-index bc7527e..5e2c495 100644 |
7191 |
+index baff1da..2816ef4 100644 |
7192 |
--- a/arch/x86/mm/ioremap.c |
7193 |
+++ b/arch/x86/mm/ioremap.c |
7194 |
@@ -56,8 +56,8 @@ static int __ioremap_check_ram(unsigned long start_pfn, unsigned long nr_pages, |
7195 |
@@ -32990,7 +33397,7 @@ index bc7527e..5e2c495 100644 |
7196 |
|
7197 |
static inline pmd_t * __init early_ioremap_pmd(unsigned long addr) |
7198 |
{ |
7199 |
-@@ -370,8 +376,7 @@ void __init early_ioremap_init(void) |
7200 |
+@@ -376,8 +382,7 @@ void __init early_ioremap_init(void) |
7201 |
early_ioremap_setup(); |
7202 |
|
7203 |
pmd = early_ioremap_pmd(fix_to_virt(FIX_BTMAP_BEGIN)); |
7204 |
@@ -33143,7 +33550,7 @@ index 0057a7a..95c7edd 100644 |
7205 |
might_sleep(); |
7206 |
if (is_enabled()) /* recheck and proper locking in *_core() */ |
7207 |
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c |
7208 |
-index 1d045f9..3a00249 100644 |
7209 |
+index a32b706..efb308b 100644 |
7210 |
--- a/arch/x86/mm/numa.c |
7211 |
+++ b/arch/x86/mm/numa.c |
7212 |
@@ -478,7 +478,7 @@ static bool __init numa_meminfo_cover_memory(const struct numa_meminfo *mi) |
7213 |
@@ -33155,19 +33562,6 @@ index 1d045f9..3a00249 100644 |
7214 |
{ |
7215 |
unsigned long uninitialized_var(pfn_align); |
7216 |
int i, nid; |
7217 |
-diff --git a/arch/x86/mm/pageattr-test.c b/arch/x86/mm/pageattr-test.c |
7218 |
-index 461bc82..4e091a3 100644 |
7219 |
---- a/arch/x86/mm/pageattr-test.c |
7220 |
-+++ b/arch/x86/mm/pageattr-test.c |
7221 |
-@@ -35,7 +35,7 @@ enum { |
7222 |
- |
7223 |
- static int pte_testbit(pte_t pte) |
7224 |
- { |
7225 |
-- return pte_flags(pte) & _PAGE_UNUSED1; |
7226 |
-+ return pte_flags(pte) & _PAGE_CPA_TEST; |
7227 |
- } |
7228 |
- |
7229 |
- struct split_state { |
7230 |
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c |
7231 |
index ae242a7..1c7998f 100644 |
7232 |
--- a/arch/x86/mm/pageattr.c |
7233 |
@@ -33370,7 +33764,7 @@ index 9f0614d..92ae64a 100644 |
7234 |
p += get_opcode(p, &opcode); |
7235 |
for (i = 0; i < ARRAY_SIZE(imm_wop); i++) |
7236 |
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c |
7237 |
-index c96314a..433b127 100644 |
7238 |
+index 6fb6927..4fc13c0 100644 |
7239 |
--- a/arch/x86/mm/pgtable.c |
7240 |
+++ b/arch/x86/mm/pgtable.c |
7241 |
@@ -97,10 +97,71 @@ static inline void pgd_list_del(pgd_t *pgd) |
7242 |
@@ -33778,10 +34172,10 @@ index 0000000..dace51c |
7243 |
+EXPORT_SYMBOL(__pax_close_userland); |
7244 |
+#endif |
7245 |
diff --git a/arch/x86/net/bpf_jit.S b/arch/x86/net/bpf_jit.S |
7246 |
-index 0149575..f746de8 100644 |
7247 |
+index 6440221..f746de8 100644 |
7248 |
--- a/arch/x86/net/bpf_jit.S |
7249 |
+++ b/arch/x86/net/bpf_jit.S |
7250 |
-@@ -9,6 +9,7 @@ |
7251 |
+@@ -9,19 +9,17 @@ |
7252 |
*/ |
7253 |
#include <linux/linkage.h> |
7254 |
#include <asm/dwarf2.h> |
7255 |
@@ -33789,7 +34183,23 @@ index 0149575..f746de8 100644 |
7256 |
|
7257 |
/* |
7258 |
* Calling convention : |
7259 |
-@@ -35,6 +36,7 @@ sk_load_word_positive_offset: |
7260 |
+- * rbx : skb pointer (callee saved) |
7261 |
++ * rdi : skb pointer |
7262 |
+ * esi : offset of byte(s) to fetch in skb (can be scratched) |
7263 |
+- * r10 : copy of skb->data |
7264 |
++ * r8 : copy of skb->data |
7265 |
+ * r9d : hlen = skb->len - skb->data_len |
7266 |
+ */ |
7267 |
+-#define SKBDATA %r10 |
7268 |
++#define SKBDATA %r8 |
7269 |
+ #define SKF_MAX_NEG_OFF $(-0x200000) /* SKF_LL_OFF from filter.h */ |
7270 |
+-#define MAX_BPF_STACK (512 /* from filter.h */ + \ |
7271 |
+- 32 /* space for rbx,r13,r14,r15 */ + \ |
7272 |
+- 8 /* space for skb_copy_bits */) |
7273 |
+ |
7274 |
+ sk_load_word: |
7275 |
+ .globl sk_load_word |
7276 |
+@@ -38,6 +36,7 @@ sk_load_word_positive_offset: |
7277 |
jle bpf_slow_path_word |
7278 |
mov (SKBDATA,%rsi),%eax |
7279 |
bswap %eax /* ntohl() */ |
7280 |
@@ -33797,7 +34207,7 @@ index 0149575..f746de8 100644 |
7281 |
ret |
7282 |
|
7283 |
sk_load_half: |
7284 |
-@@ -52,6 +54,7 @@ sk_load_half_positive_offset: |
7285 |
+@@ -55,6 +54,7 @@ sk_load_half_positive_offset: |
7286 |
jle bpf_slow_path_half |
7287 |
movzwl (SKBDATA,%rsi),%eax |
7288 |
rol $8,%ax # ntohs() |
7289 |
@@ -33805,32 +34215,67 @@ index 0149575..f746de8 100644 |
7290 |
ret |
7291 |
|
7292 |
sk_load_byte: |
7293 |
-@@ -66,6 +69,7 @@ sk_load_byte_positive_offset: |
7294 |
+@@ -69,45 +69,83 @@ sk_load_byte_positive_offset: |
7295 |
cmp %esi,%r9d /* if (offset >= hlen) goto bpf_slow_path_byte */ |
7296 |
jle bpf_slow_path_byte |
7297 |
movzbl (SKBDATA,%rsi),%eax |
7298 |
+ pax_force_retaddr |
7299 |
- ret |
7300 |
- |
7301 |
- /** |
7302 |
-@@ -87,6 +91,7 @@ sk_load_byte_msh_positive_offset: |
7303 |
- movzbl (SKBDATA,%rsi),%ebx |
7304 |
- and $15,%bl |
7305 |
- shl $2,%bl |
7306 |
++ ret |
7307 |
++ |
7308 |
++/** |
7309 |
++ * sk_load_byte_msh - BPF_S_LDX_B_MSH helper |
7310 |
++ * |
7311 |
++ * Implements BPF_S_LDX_B_MSH : ldxb 4*([offset]&0xf) |
7312 |
++ * Must preserve A accumulator (%eax) |
7313 |
++ * Inputs : %esi is the offset value |
7314 |
++ */ |
7315 |
++sk_load_byte_msh: |
7316 |
++ .globl sk_load_byte_msh |
7317 |
++ test %esi,%esi |
7318 |
++ js bpf_slow_path_byte_msh_neg |
7319 |
++ |
7320 |
++sk_load_byte_msh_positive_offset: |
7321 |
++ .globl sk_load_byte_msh_positive_offset |
7322 |
++ cmp %esi,%r9d /* if (offset >= hlen) goto bpf_slow_path_byte_msh */ |
7323 |
++ jle bpf_slow_path_byte_msh |
7324 |
++ movzbl (SKBDATA,%rsi),%ebx |
7325 |
++ and $15,%bl |
7326 |
++ shl $2,%bl |
7327 |
+ pax_force_retaddr |
7328 |
ret |
7329 |
|
7330 |
/* rsi contains offset and can be scratched */ |
7331 |
-@@ -109,6 +114,7 @@ bpf_slow_path_word: |
7332 |
+ #define bpf_slow_path_common(LEN) \ |
7333 |
+- mov %rbx, %rdi; /* arg1 == skb */ \ |
7334 |
++ push %rdi; /* save skb */ \ |
7335 |
+ push %r9; \ |
7336 |
+ push SKBDATA; \ |
7337 |
+ /* rsi already has offset */ \ |
7338 |
+ mov $LEN,%ecx; /* len */ \ |
7339 |
+- lea - MAX_BPF_STACK + 32(%rbp),%rdx; \ |
7340 |
++ lea -12(%rbp),%rdx; \ |
7341 |
+ call skb_copy_bits; \ |
7342 |
+ test %eax,%eax; \ |
7343 |
+ pop SKBDATA; \ |
7344 |
+- pop %r9; |
7345 |
++ pop %r9; \ |
7346 |
++ pop %rdi |
7347 |
+ |
7348 |
+ |
7349 |
+ bpf_slow_path_word: |
7350 |
+ bpf_slow_path_common(4) |
7351 |
js bpf_error |
7352 |
- mov -12(%rbp),%eax |
7353 |
+- mov - MAX_BPF_STACK + 32(%rbp),%eax |
7354 |
++ mov -12(%rbp),%eax |
7355 |
bswap %eax |
7356 |
+ pax_force_retaddr |
7357 |
ret |
7358 |
|
7359 |
bpf_slow_path_half: |
7360 |
-@@ -117,12 +123,14 @@ bpf_slow_path_half: |
7361 |
- mov -12(%rbp),%ax |
7362 |
+ bpf_slow_path_common(2) |
7363 |
+ js bpf_error |
7364 |
+- mov - MAX_BPF_STACK + 32(%rbp),%ax |
7365 |
++ mov -12(%rbp),%ax |
7366 |
rol $8,%ax |
7367 |
movzwl %ax,%eax |
7368 |
+ pax_force_retaddr |
7369 |
@@ -33839,20 +34284,40 @@ index 0149575..f746de8 100644 |
7370 |
bpf_slow_path_byte: |
7371 |
bpf_slow_path_common(1) |
7372 |
js bpf_error |
7373 |
- movzbl -12(%rbp),%eax |
7374 |
+- movzbl - MAX_BPF_STACK + 32(%rbp),%eax |
7375 |
++ movzbl -12(%rbp),%eax |
7376 |
+ pax_force_retaddr |
7377 |
- ret |
7378 |
- |
7379 |
- bpf_slow_path_byte_msh: |
7380 |
-@@ -133,6 +141,7 @@ bpf_slow_path_byte_msh: |
7381 |
- and $15,%al |
7382 |
- shl $2,%al |
7383 |
- xchg %eax,%ebx |
7384 |
++ ret |
7385 |
++ |
7386 |
++bpf_slow_path_byte_msh: |
7387 |
++ xchg %eax,%ebx /* dont lose A , X is about to be scratched */ |
7388 |
++ bpf_slow_path_common(1) |
7389 |
++ js bpf_error |
7390 |
++ movzbl -12(%rbp),%eax |
7391 |
++ and $15,%al |
7392 |
++ shl $2,%al |
7393 |
++ xchg %eax,%ebx |
7394 |
+ pax_force_retaddr |
7395 |
ret |
7396 |
|
7397 |
#define sk_negative_common(SIZE) \ |
7398 |
-@@ -157,6 +166,7 @@ sk_load_word_negative_offset: |
7399 |
+- mov %rbx, %rdi; /* arg1 == skb */ \ |
7400 |
++ push %rdi; /* save skb */ \ |
7401 |
+ push %r9; \ |
7402 |
+ push SKBDATA; \ |
7403 |
+ /* rsi already has offset */ \ |
7404 |
+@@ -116,8 +154,10 @@ bpf_slow_path_byte: |
7405 |
+ test %rax,%rax; \ |
7406 |
+ pop SKBDATA; \ |
7407 |
+ pop %r9; \ |
7408 |
++ pop %rdi; \ |
7409 |
+ jz bpf_error |
7410 |
+ |
7411 |
++ |
7412 |
+ bpf_slow_path_word_neg: |
7413 |
+ cmp SKF_MAX_NEG_OFF, %esi /* test range */ |
7414 |
+ jl bpf_error /* offset lower -> error */ |
7415 |
+@@ -126,6 +166,7 @@ sk_load_word_negative_offset: |
7416 |
sk_negative_common(4) |
7417 |
mov (%rax), %eax |
7418 |
bswap %eax |
7419 |
@@ -33860,7 +34325,7 @@ index 0149575..f746de8 100644 |
7420 |
ret |
7421 |
|
7422 |
bpf_slow_path_half_neg: |
7423 |
-@@ -168,6 +178,7 @@ sk_load_half_negative_offset: |
7424 |
+@@ -137,6 +178,7 @@ sk_load_half_negative_offset: |
7425 |
mov (%rax),%ax |
7426 |
rol $8,%ax |
7427 |
movzwl %ax,%eax |
7428 |
@@ -33868,33 +34333,84 @@ index 0149575..f746de8 100644 |
7429 |
ret |
7430 |
|
7431 |
bpf_slow_path_byte_neg: |
7432 |
-@@ -177,6 +188,7 @@ sk_load_byte_negative_offset: |
7433 |
+@@ -146,14 +188,27 @@ sk_load_byte_negative_offset: |
7434 |
.globl sk_load_byte_negative_offset |
7435 |
sk_negative_common(1) |
7436 |
movzbl (%rax), %eax |
7437 |
+ pax_force_retaddr |
7438 |
- ret |
7439 |
- |
7440 |
- bpf_slow_path_byte_msh_neg: |
7441 |
-@@ -190,6 +202,7 @@ sk_load_byte_msh_negative_offset: |
7442 |
- and $15,%al |
7443 |
- shl $2,%al |
7444 |
- xchg %eax,%ebx |
7445 |
++ ret |
7446 |
++ |
7447 |
++bpf_slow_path_byte_msh_neg: |
7448 |
++ cmp SKF_MAX_NEG_OFF, %esi |
7449 |
++ jl bpf_error |
7450 |
++sk_load_byte_msh_negative_offset: |
7451 |
++ .globl sk_load_byte_msh_negative_offset |
7452 |
++ xchg %eax,%ebx /* dont lose A , X is about to be scratched */ |
7453 |
++ sk_negative_common(1) |
7454 |
++ movzbl (%rax),%eax |
7455 |
++ and $15,%al |
7456 |
++ shl $2,%al |
7457 |
++ xchg %eax,%ebx |
7458 |
+ pax_force_retaddr |
7459 |
ret |
7460 |
|
7461 |
bpf_error: |
7462 |
-@@ -197,4 +210,5 @@ bpf_error: |
7463 |
- xor %eax,%eax |
7464 |
- mov -8(%rbp),%rbx |
7465 |
+ # force a return 0 from jit handler |
7466 |
+- xor %eax,%eax |
7467 |
+- mov - MAX_BPF_STACK(%rbp),%rbx |
7468 |
+- mov - MAX_BPF_STACK + 8(%rbp),%r13 |
7469 |
+- mov - MAX_BPF_STACK + 16(%rbp),%r14 |
7470 |
+- mov - MAX_BPF_STACK + 24(%rbp),%r15 |
7471 |
++ xor %eax,%eax |
7472 |
++ mov -8(%rbp),%rbx |
7473 |
leaveq |
7474 |
+ pax_force_retaddr |
7475 |
ret |
7476 |
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c |
7477 |
-index 6d5663a..f1ec380 100644 |
7478 |
+index 99bef86..bdfb5c6 100644 |
7479 |
--- a/arch/x86/net/bpf_jit_comp.c |
7480 |
+++ b/arch/x86/net/bpf_jit_comp.c |
7481 |
-@@ -50,13 +50,90 @@ static inline u8 *emit_code(u8 *ptr, u32 bytes, unsigned int len) |
7482 |
+@@ -1,7 +1,6 @@ |
7483 |
+ /* bpf_jit_comp.c : BPF JIT compiler |
7484 |
+ * |
7485 |
+ * Copyright (C) 2011-2013 Eric Dumazet (eric.dumazet@×××××.com) |
7486 |
+- * Internal BPF Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com |
7487 |
+ * |
7488 |
+ * This program is free software; you can redistribute it and/or |
7489 |
+ * modify it under the terms of the GNU General Public License |
7490 |
+@@ -15,16 +14,28 @@ |
7491 |
+ #include <linux/if_vlan.h> |
7492 |
+ #include <linux/random.h> |
7493 |
+ |
7494 |
++/* |
7495 |
++ * Conventions : |
7496 |
++ * EAX : BPF A accumulator |
7497 |
++ * EBX : BPF X accumulator |
7498 |
++ * RDI : pointer to skb (first argument given to JIT function) |
7499 |
++ * RBP : frame pointer (even if CONFIG_FRAME_POINTER=n) |
7500 |
++ * ECX,EDX,ESI : scratch registers |
7501 |
++ * r9d : skb->len - skb->data_len (headlen) |
7502 |
++ * r8 : skb->data |
7503 |
++ * -8(RBP) : saved RBX value |
7504 |
++ * -16(RBP)..-80(RBP) : BPF_MEMWORDS values |
7505 |
++ */ |
7506 |
+ int bpf_jit_enable __read_mostly; |
7507 |
+ |
7508 |
+ /* |
7509 |
+ * assembly code in arch/x86/net/bpf_jit.S |
7510 |
+ */ |
7511 |
+-extern u8 sk_load_word[], sk_load_half[], sk_load_byte[]; |
7512 |
++extern u8 sk_load_word[], sk_load_half[], sk_load_byte[], sk_load_byte_msh[]; |
7513 |
+ extern u8 sk_load_word_positive_offset[], sk_load_half_positive_offset[]; |
7514 |
+-extern u8 sk_load_byte_positive_offset[]; |
7515 |
++extern u8 sk_load_byte_positive_offset[], sk_load_byte_msh_positive_offset[]; |
7516 |
+ extern u8 sk_load_word_negative_offset[], sk_load_half_negative_offset[]; |
7517 |
+-extern u8 sk_load_byte_negative_offset[]; |
7518 |
++extern u8 sk_load_byte_negative_offset[], sk_load_byte_msh_negative_offset[]; |
7519 |
+ |
7520 |
+ static inline u8 *emit_code(u8 *ptr, u32 bytes, unsigned int len) |
7521 |
+ { |
7522 |
+@@ -39,50 +50,113 @@ static inline u8 *emit_code(u8 *ptr, u32 bytes, unsigned int len) |
7523 |
return ptr + len; |
7524 |
} |
7525 |
|
7526 |
@@ -33910,6 +34426,14 @@ index 6d5663a..f1ec380 100644 |
7527 |
#define EMIT2(b1, b2) EMIT((b1) + ((b2) << 8), 2) |
7528 |
#define EMIT3(b1, b2, b3) EMIT((b1) + ((b2) << 8) + ((b3) << 16), 3) |
7529 |
#define EMIT4(b1, b2, b3, b4) EMIT((b1) + ((b2) << 8) + ((b3) << 16) + ((b4) << 24), 4) |
7530 |
+-#define EMIT1_off32(b1, off) \ |
7531 |
+- do {EMIT1(b1); EMIT(off, 4); } while (0) |
7532 |
+-#define EMIT2_off32(b1, b2, off) \ |
7533 |
+- do {EMIT2(b1, b2); EMIT(off, 4); } while (0) |
7534 |
+-#define EMIT3_off32(b1, b2, b3, off) \ |
7535 |
+- do {EMIT3(b1, b2, b3); EMIT(off, 4); } while (0) |
7536 |
+-#define EMIT4_off32(b1, b2, b3, b4, off) \ |
7537 |
+- do {EMIT4(b1, b2, b3, b4); EMIT(off, 4); } while (0) |
7538 |
+ |
7539 |
+#ifdef CONFIG_GRKERNSEC_JIT_HARDEN |
7540 |
+/* original constant will appear in ecx */ |
7541 |
@@ -33979,16 +34503,63 @@ index 6d5663a..f1ec380 100644 |
7542 |
+ } \ |
7543 |
+} while (0) |
7544 |
+#else |
7545 |
- #define EMIT1_off32(b1, off) do { EMIT1(b1); EMIT(off, 4);} while (0) |
7546 |
++#define EMIT1_off32(b1, off) do { EMIT1(b1); EMIT(off, 4);} while (0) |
7547 |
+#define EMIT2_off32(b1, b2, off) do { EMIT2(b1, b2); EMIT(off, 4);} while (0) |
7548 |
+#endif |
7549 |
++ |
7550 |
++#define CLEAR_A() EMIT2(0x31, 0xc0) /* xor %eax,%eax */ |
7551 |
++#define CLEAR_X() EMIT2(0x31, 0xdb) /* xor %ebx,%ebx */ |
7552 |
|
7553 |
- #define CLEAR_A() EMIT2(0x31, 0xc0) /* xor %eax,%eax */ |
7554 |
- #define CLEAR_X() EMIT2(0x31, 0xdb) /* xor %ebx,%ebx */ |
7555 |
-@@ -91,6 +168,24 @@ do { \ |
7556 |
+ static inline bool is_imm8(int value) |
7557 |
+ { |
7558 |
+ return value <= 127 && value >= -128; |
7559 |
+ } |
7560 |
+ |
7561 |
+-static inline bool is_simm32(s64 value) |
7562 |
++static inline bool is_near(int offset) |
7563 |
+ { |
7564 |
+- return value == (s64) (s32) value; |
7565 |
++ return offset <= 127 && offset >= -128; |
7566 |
+ } |
7567 |
+ |
7568 |
+-/* mov dst, src */ |
7569 |
+-#define EMIT_mov(DST, SRC) \ |
7570 |
+- do {if (DST != SRC) \ |
7571 |
+- EMIT3(add_2mod(0x48, DST, SRC), 0x89, add_2reg(0xC0, DST, SRC)); \ |
7572 |
+- } while (0) |
7573 |
+- |
7574 |
+-static int bpf_size_to_x86_bytes(int bpf_size) |
7575 |
+-{ |
7576 |
+- if (bpf_size == BPF_W) |
7577 |
+- return 4; |
7578 |
+- else if (bpf_size == BPF_H) |
7579 |
+- return 2; |
7580 |
+- else if (bpf_size == BPF_B) |
7581 |
+- return 1; |
7582 |
+- else if (bpf_size == BPF_DW) |
7583 |
+- return 4; /* imm32 */ |
7584 |
+- else |
7585 |
+- return 0; |
7586 |
+-} |
7587 |
++#define EMIT_JMP(offset) \ |
7588 |
++do { \ |
7589 |
++ if (offset) { \ |
7590 |
++ if (is_near(offset)) \ |
7591 |
++ EMIT2(0xeb, offset); /* jmp .+off8 */ \ |
7592 |
++ else \ |
7593 |
++ EMIT1_off32(0xe9, offset); /* jmp .+off32 */ \ |
7594 |
++ } \ |
7595 |
++} while (0) |
7596 |
+ |
7597 |
+ /* list of x86 cond jumps opcodes (. + s8) |
7598 |
+ * Add 0x10 (and an extra 0x0f) to generate far jumps (. + s32) |
7599 |
+@@ -93,8 +167,46 @@ static int bpf_size_to_x86_bytes(int bpf_size) |
7600 |
+ #define X86_JNE 0x75 |
7601 |
#define X86_JBE 0x76 |
7602 |
#define X86_JA 0x77 |
7603 |
- |
7604 |
+-#define X86_JGE 0x7D |
7605 |
+-#define X86_JG 0x7F |
7606 |
++ |
7607 |
+#ifdef CONFIG_GRKERNSEC_JIT_HARDEN |
7608 |
+#define APPEND_FLOW_VERIFY() \ |
7609 |
+do { \ |
7610 |
@@ -34007,20 +34578,33 @@ index 6d5663a..f1ec380 100644 |
7611 |
+#define APPEND_FLOW_VERIFY() do { } while (0) |
7612 |
+#endif |
7613 |
+ |
7614 |
- #define EMIT_COND_JMP(op, offset) \ |
7615 |
- do { \ |
7616 |
- if (is_near(offset)) \ |
7617 |
-@@ -98,6 +193,7 @@ do { \ |
7618 |
- else { \ |
7619 |
- EMIT2(0x0f, op + 0x10); \ |
7620 |
- EMIT(offset, 4); /* jxx .+off32 */ \ |
7621 |
++#define EMIT_COND_JMP(op, offset) \ |
7622 |
++do { \ |
7623 |
++ if (is_near(offset)) \ |
7624 |
++ EMIT2(op, offset); /* jxx .+off8 */ \ |
7625 |
++ else { \ |
7626 |
++ EMIT2(0x0f, op + 0x10); \ |
7627 |
++ EMIT(offset, 4); /* jxx .+off32 */ \ |
7628 |
+ APPEND_FLOW_VERIFY(); \ |
7629 |
- } \ |
7630 |
- } while (0) |
7631 |
++ } \ |
7632 |
++} while (0) |
7633 |
++ |
7634 |
++#define COND_SEL(CODE, TOP, FOP) \ |
7635 |
++ case CODE: \ |
7636 |
++ t_op = TOP; \ |
7637 |
++ f_op = FOP; \ |
7638 |
++ goto cond_branch |
7639 |
++ |
7640 |
++ |
7641 |
++#define SEEN_DATAREF 1 /* might call external helpers */ |
7642 |
++#define SEEN_XREG 2 /* ebx is used */ |
7643 |
++#define SEEN_MEM 4 /* use mem[] for temporary storage */ |
7644 |
|
7645 |
-@@ -145,55 +241,54 @@ static int pkt_type_offset(void) |
7646 |
- return -1; |
7647 |
- } |
7648 |
+ static inline void bpf_flush_icache(void *start, void *end) |
7649 |
+ { |
7650 |
+@@ -109,804 +221,646 @@ static inline void bpf_flush_icache(void *start, void *end) |
7651 |
+ #define CHOOSE_LOAD_FUNC(K, func) \ |
7652 |
+ ((int)K < 0 ? ((int)K >= SKF_LL_OFF ? func##_negative_offset : func) : func##_positive_offset) |
7653 |
|
7654 |
-struct bpf_binary_header { |
7655 |
- unsigned int pages; |
7656 |
@@ -34029,8 +34613,27 @@ index 6d5663a..f1ec380 100644 |
7657 |
- */ |
7658 |
- u8 image[]; |
7659 |
-}; |
7660 |
-- |
7661 |
++/* Helper to find the offset of pkt_type in sk_buff |
7662 |
++ * We want to make sure its still a 3bit field starting at a byte boundary. |
7663 |
++ */ |
7664 |
++#define PKT_TYPE_MAX 7 |
7665 |
++static int pkt_type_offset(void) |
7666 |
++{ |
7667 |
++ struct sk_buff skb_probe = { |
7668 |
++ .pkt_type = ~0, |
7669 |
++ }; |
7670 |
++ char *ct = (char *)&skb_probe; |
7671 |
++ unsigned int off; |
7672 |
+ |
7673 |
-static struct bpf_binary_header *bpf_alloc_binary(unsigned int proglen, |
7674 |
++ for (off = 0; off < sizeof(struct sk_buff); off++) { |
7675 |
++ if (ct[off] == PKT_TYPE_MAX) |
7676 |
++ return off; |
7677 |
++ } |
7678 |
++ pr_err_once("Please fix pkt_type_offset(), as pkt_type couldn't be found\n"); |
7679 |
++ return -1; |
7680 |
++} |
7681 |
++ |
7682 |
+/* Note : for security reasons, bpf code will follow a randomly |
7683 |
+ * sized amount of int3 instructions |
7684 |
+ */ |
7685 |
@@ -34066,124 +34669,1369 @@ index 6d5663a..f1ec380 100644 |
7686 |
return header; |
7687 |
} |
7688 |
|
7689 |
- void bpf_jit_compile(struct sk_filter *fp) |
7690 |
- { |
7691 |
+-/* pick a register outside of BPF range for JIT internal work */ |
7692 |
+-#define AUX_REG (MAX_BPF_REG + 1) |
7693 |
+- |
7694 |
+-/* the following table maps BPF registers to x64 registers. |
7695 |
+- * x64 register r12 is unused, since if used as base address register |
7696 |
+- * in load/store instructions, it always needs an extra byte of encoding |
7697 |
+- */ |
7698 |
+-static const int reg2hex[] = { |
7699 |
+- [BPF_REG_0] = 0, /* rax */ |
7700 |
+- [BPF_REG_1] = 7, /* rdi */ |
7701 |
+- [BPF_REG_2] = 6, /* rsi */ |
7702 |
+- [BPF_REG_3] = 2, /* rdx */ |
7703 |
+- [BPF_REG_4] = 1, /* rcx */ |
7704 |
+- [BPF_REG_5] = 0, /* r8 */ |
7705 |
+- [BPF_REG_6] = 3, /* rbx callee saved */ |
7706 |
+- [BPF_REG_7] = 5, /* r13 callee saved */ |
7707 |
+- [BPF_REG_8] = 6, /* r14 callee saved */ |
7708 |
+- [BPF_REG_9] = 7, /* r15 callee saved */ |
7709 |
+- [BPF_REG_FP] = 5, /* rbp readonly */ |
7710 |
+- [AUX_REG] = 3, /* r11 temp register */ |
7711 |
+-}; |
7712 |
+- |
7713 |
+-/* is_ereg() == true if BPF register 'reg' maps to x64 r8..r15 |
7714 |
+- * which need extra byte of encoding. |
7715 |
+- * rax,rcx,...,rbp have simpler encoding |
7716 |
+- */ |
7717 |
+-static inline bool is_ereg(u32 reg) |
7718 |
+-{ |
7719 |
+- if (reg == BPF_REG_5 || reg == AUX_REG || |
7720 |
+- (reg >= BPF_REG_7 && reg <= BPF_REG_9)) |
7721 |
+- return true; |
7722 |
+- else |
7723 |
+- return false; |
7724 |
+-} |
7725 |
+- |
7726 |
+-/* add modifiers if 'reg' maps to x64 registers r8..r15 */ |
7727 |
+-static inline u8 add_1mod(u8 byte, u32 reg) |
7728 |
+-{ |
7729 |
+- if (is_ereg(reg)) |
7730 |
+- byte |= 1; |
7731 |
+- return byte; |
7732 |
+-} |
7733 |
+- |
7734 |
+-static inline u8 add_2mod(u8 byte, u32 r1, u32 r2) |
7735 |
+-{ |
7736 |
+- if (is_ereg(r1)) |
7737 |
+- byte |= 1; |
7738 |
+- if (is_ereg(r2)) |
7739 |
+- byte |= 4; |
7740 |
+- return byte; |
7741 |
+-} |
7742 |
+- |
7743 |
+-/* encode 'dst_reg' register into x64 opcode 'byte' */ |
7744 |
+-static inline u8 add_1reg(u8 byte, u32 dst_reg) |
7745 |
+-{ |
7746 |
+- return byte + reg2hex[dst_reg]; |
7747 |
+-} |
7748 |
+- |
7749 |
+-/* encode 'dst_reg' and 'src_reg' registers into x64 opcode 'byte' */ |
7750 |
+-static inline u8 add_2reg(u8 byte, u32 dst_reg, u32 src_reg) |
7751 |
+-{ |
7752 |
+- return byte + reg2hex[dst_reg] + (reg2hex[src_reg] << 3); |
7753 |
+-} |
7754 |
+- |
7755 |
+-struct jit_context { |
7756 |
+- unsigned int cleanup_addr; /* epilogue code offset */ |
7757 |
+- bool seen_ld_abs; |
7758 |
+-}; |
7759 |
+- |
7760 |
+-static int do_jit(struct sk_filter *bpf_prog, int *addrs, u8 *image, |
7761 |
+- int oldproglen, struct jit_context *ctx) |
7762 |
+-{ |
7763 |
+- struct sock_filter_int *insn = bpf_prog->insnsi; |
7764 |
+- int insn_cnt = bpf_prog->len; |
7765 |
- u8 temp[64]; |
7766 |
+- int i; |
7767 |
+- int proglen = 0; |
7768 |
+- u8 *prog = temp; |
7769 |
+- int stacksize = MAX_BPF_STACK + |
7770 |
+- 32 /* space for rbx, r13, r14, r15 */ + |
7771 |
+- 8 /* space for skb_copy_bits() buffer */; |
7772 |
+- |
7773 |
+- EMIT1(0x55); /* push rbp */ |
7774 |
+- EMIT3(0x48, 0x89, 0xE5); /* mov rbp,rsp */ |
7775 |
+- |
7776 |
+- /* sub rsp, stacksize */ |
7777 |
+- EMIT3_off32(0x48, 0x81, 0xEC, stacksize); |
7778 |
+- |
7779 |
+- /* all classic BPF filters use R6(rbx) save it */ |
7780 |
+- |
7781 |
+- /* mov qword ptr [rbp-X],rbx */ |
7782 |
+- EMIT3_off32(0x48, 0x89, 0x9D, -stacksize); |
7783 |
+- |
7784 |
+- /* sk_convert_filter() maps classic BPF register X to R7 and uses R8 |
7785 |
+- * as temporary, so all tcpdump filters need to spill/fill R7(r13) and |
7786 |
+- * R8(r14). R9(r15) spill could be made conditional, but there is only |
7787 |
+- * one 'bpf_error' return path out of helper functions inside bpf_jit.S |
7788 |
+- * The overhead of extra spill is negligible for any filter other |
7789 |
+- * than synthetic ones. Therefore not worth adding complexity. |
7790 |
+- */ |
7791 |
+- |
7792 |
+- /* mov qword ptr [rbp-X],r13 */ |
7793 |
+- EMIT3_off32(0x4C, 0x89, 0xAD, -stacksize + 8); |
7794 |
+- /* mov qword ptr [rbp-X],r14 */ |
7795 |
+- EMIT3_off32(0x4C, 0x89, 0xB5, -stacksize + 16); |
7796 |
+- /* mov qword ptr [rbp-X],r15 */ |
7797 |
+- EMIT3_off32(0x4C, 0x89, 0xBD, -stacksize + 24); |
7798 |
+- |
7799 |
+- /* clear A and X registers */ |
7800 |
+- EMIT2(0x31, 0xc0); /* xor eax, eax */ |
7801 |
+- EMIT3(0x4D, 0x31, 0xED); /* xor r13, r13 */ |
7802 |
+- |
7803 |
+- if (ctx->seen_ld_abs) { |
7804 |
+- /* r9d : skb->len - skb->data_len (headlen) |
7805 |
+- * r10 : skb->data |
7806 |
+- */ |
7807 |
+- if (is_imm8(offsetof(struct sk_buff, len))) |
7808 |
+- /* mov %r9d, off8(%rdi) */ |
7809 |
+- EMIT4(0x44, 0x8b, 0x4f, |
7810 |
+- offsetof(struct sk_buff, len)); |
7811 |
+- else |
7812 |
+- /* mov %r9d, off32(%rdi) */ |
7813 |
+- EMIT3_off32(0x44, 0x8b, 0x8f, |
7814 |
+- offsetof(struct sk_buff, len)); |
7815 |
+- |
7816 |
+- if (is_imm8(offsetof(struct sk_buff, data_len))) |
7817 |
+- /* sub %r9d, off8(%rdi) */ |
7818 |
+- EMIT4(0x44, 0x2b, 0x4f, |
7819 |
+- offsetof(struct sk_buff, data_len)); |
7820 |
+- else |
7821 |
+- EMIT3_off32(0x44, 0x2b, 0x8f, |
7822 |
+- offsetof(struct sk_buff, data_len)); |
7823 |
+- |
7824 |
+- if (is_imm8(offsetof(struct sk_buff, data))) |
7825 |
+- /* mov %r10, off8(%rdi) */ |
7826 |
+- EMIT4(0x4c, 0x8b, 0x57, |
7827 |
+- offsetof(struct sk_buff, data)); |
7828 |
+- else |
7829 |
+- /* mov %r10, off32(%rdi) */ |
7830 |
+- EMIT3_off32(0x4c, 0x8b, 0x97, |
7831 |
+- offsetof(struct sk_buff, data)); |
7832 |
+- } |
7833 |
+- |
7834 |
+- for (i = 0; i < insn_cnt; i++, insn++) { |
7835 |
+- const s32 imm32 = insn->imm; |
7836 |
+- u32 dst_reg = insn->dst_reg; |
7837 |
+- u32 src_reg = insn->src_reg; |
7838 |
+- u8 b1 = 0, b2 = 0, b3 = 0; |
7839 |
+- s64 jmp_offset; |
7840 |
+- u8 jmp_cond; |
7841 |
+- int ilen; |
7842 |
+- u8 *func; |
7843 |
+- |
7844 |
+- switch (insn->code) { |
7845 |
+- /* ALU */ |
7846 |
+- case BPF_ALU | BPF_ADD | BPF_X: |
7847 |
+- case BPF_ALU | BPF_SUB | BPF_X: |
7848 |
+- case BPF_ALU | BPF_AND | BPF_X: |
7849 |
+- case BPF_ALU | BPF_OR | BPF_X: |
7850 |
+- case BPF_ALU | BPF_XOR | BPF_X: |
7851 |
+- case BPF_ALU64 | BPF_ADD | BPF_X: |
7852 |
+- case BPF_ALU64 | BPF_SUB | BPF_X: |
7853 |
+- case BPF_ALU64 | BPF_AND | BPF_X: |
7854 |
+- case BPF_ALU64 | BPF_OR | BPF_X: |
7855 |
+- case BPF_ALU64 | BPF_XOR | BPF_X: |
7856 |
+- switch (BPF_OP(insn->code)) { |
7857 |
+- case BPF_ADD: b2 = 0x01; break; |
7858 |
+- case BPF_SUB: b2 = 0x29; break; |
7859 |
+- case BPF_AND: b2 = 0x21; break; |
7860 |
+- case BPF_OR: b2 = 0x09; break; |
7861 |
+- case BPF_XOR: b2 = 0x31; break; |
7862 |
+- } |
7863 |
+- if (BPF_CLASS(insn->code) == BPF_ALU64) |
7864 |
+- EMIT1(add_2mod(0x48, dst_reg, src_reg)); |
7865 |
+- else if (is_ereg(dst_reg) || is_ereg(src_reg)) |
7866 |
+- EMIT1(add_2mod(0x40, dst_reg, src_reg)); |
7867 |
+- EMIT2(b2, add_2reg(0xC0, dst_reg, src_reg)); |
7868 |
+- break; |
7869 |
+- |
7870 |
+- /* mov dst, src */ |
7871 |
+- case BPF_ALU64 | BPF_MOV | BPF_X: |
7872 |
+- EMIT_mov(dst_reg, src_reg); |
7873 |
+- break; |
7874 |
+- |
7875 |
+- /* mov32 dst, src */ |
7876 |
+- case BPF_ALU | BPF_MOV | BPF_X: |
7877 |
+- if (is_ereg(dst_reg) || is_ereg(src_reg)) |
7878 |
+- EMIT1(add_2mod(0x40, dst_reg, src_reg)); |
7879 |
+- EMIT2(0x89, add_2reg(0xC0, dst_reg, src_reg)); |
7880 |
+- break; |
7881 |
+- |
7882 |
+- /* neg dst */ |
7883 |
+- case BPF_ALU | BPF_NEG: |
7884 |
+- case BPF_ALU64 | BPF_NEG: |
7885 |
+- if (BPF_CLASS(insn->code) == BPF_ALU64) |
7886 |
+- EMIT1(add_1mod(0x48, dst_reg)); |
7887 |
+- else if (is_ereg(dst_reg)) |
7888 |
+- EMIT1(add_1mod(0x40, dst_reg)); |
7889 |
+- EMIT2(0xF7, add_1reg(0xD8, dst_reg)); |
7890 |
+- break; |
7891 |
+- |
7892 |
+- case BPF_ALU | BPF_ADD | BPF_K: |
7893 |
+- case BPF_ALU | BPF_SUB | BPF_K: |
7894 |
+- case BPF_ALU | BPF_AND | BPF_K: |
7895 |
+- case BPF_ALU | BPF_OR | BPF_K: |
7896 |
+- case BPF_ALU | BPF_XOR | BPF_K: |
7897 |
+- case BPF_ALU64 | BPF_ADD | BPF_K: |
7898 |
+- case BPF_ALU64 | BPF_SUB | BPF_K: |
7899 |
+- case BPF_ALU64 | BPF_AND | BPF_K: |
7900 |
+- case BPF_ALU64 | BPF_OR | BPF_K: |
7901 |
+- case BPF_ALU64 | BPF_XOR | BPF_K: |
7902 |
+- if (BPF_CLASS(insn->code) == BPF_ALU64) |
7903 |
+- EMIT1(add_1mod(0x48, dst_reg)); |
7904 |
+- else if (is_ereg(dst_reg)) |
7905 |
+- EMIT1(add_1mod(0x40, dst_reg)); |
7906 |
+- |
7907 |
+- switch (BPF_OP(insn->code)) { |
7908 |
+- case BPF_ADD: b3 = 0xC0; break; |
7909 |
+- case BPF_SUB: b3 = 0xE8; break; |
7910 |
+- case BPF_AND: b3 = 0xE0; break; |
7911 |
+- case BPF_OR: b3 = 0xC8; break; |
7912 |
+- case BPF_XOR: b3 = 0xF0; break; |
7913 |
+- } |
7914 |
+- |
7915 |
+- if (is_imm8(imm32)) |
7916 |
+- EMIT3(0x83, add_1reg(b3, dst_reg), imm32); |
7917 |
+- else |
7918 |
+- EMIT2_off32(0x81, add_1reg(b3, dst_reg), imm32); |
7919 |
+- break; |
7920 |
+- |
7921 |
+- case BPF_ALU64 | BPF_MOV | BPF_K: |
7922 |
+- /* optimization: if imm32 is positive, |
7923 |
+- * use 'mov eax, imm32' (which zero-extends imm32) |
7924 |
+- * to save 2 bytes |
7925 |
+- */ |
7926 |
+- if (imm32 < 0) { |
7927 |
+- /* 'mov rax, imm32' sign extends imm32 */ |
7928 |
+- b1 = add_1mod(0x48, dst_reg); |
7929 |
+- b2 = 0xC7; |
7930 |
+- b3 = 0xC0; |
7931 |
+- EMIT3_off32(b1, b2, add_1reg(b3, dst_reg), imm32); |
7932 |
+- break; |
7933 |
+- } |
7934 |
+- |
7935 |
+- case BPF_ALU | BPF_MOV | BPF_K: |
7936 |
+- /* mov %eax, imm32 */ |
7937 |
+- if (is_ereg(dst_reg)) |
7938 |
+- EMIT1(add_1mod(0x40, dst_reg)); |
7939 |
+- EMIT1_off32(add_1reg(0xB8, dst_reg), imm32); |
7940 |
+- break; |
7941 |
+- |
7942 |
+- /* dst %= src, dst /= src, dst %= imm32, dst /= imm32 */ |
7943 |
+- case BPF_ALU | BPF_MOD | BPF_X: |
7944 |
+- case BPF_ALU | BPF_DIV | BPF_X: |
7945 |
+- case BPF_ALU | BPF_MOD | BPF_K: |
7946 |
+- case BPF_ALU | BPF_DIV | BPF_K: |
7947 |
+- case BPF_ALU64 | BPF_MOD | BPF_X: |
7948 |
+- case BPF_ALU64 | BPF_DIV | BPF_X: |
7949 |
+- case BPF_ALU64 | BPF_MOD | BPF_K: |
7950 |
+- case BPF_ALU64 | BPF_DIV | BPF_K: |
7951 |
+- EMIT1(0x50); /* push rax */ |
7952 |
+- EMIT1(0x52); /* push rdx */ |
7953 |
+- |
7954 |
+- if (BPF_SRC(insn->code) == BPF_X) |
7955 |
+- /* mov r11, src_reg */ |
7956 |
+- EMIT_mov(AUX_REG, src_reg); |
7957 |
+- else |
7958 |
+- /* mov r11, imm32 */ |
7959 |
+- EMIT3_off32(0x49, 0xC7, 0xC3, imm32); |
7960 |
+- |
7961 |
+- /* mov rax, dst_reg */ |
7962 |
+- EMIT_mov(BPF_REG_0, dst_reg); |
7963 |
+- |
7964 |
+- /* xor edx, edx |
7965 |
+- * equivalent to 'xor rdx, rdx', but one byte less |
7966 |
+- */ |
7967 |
+- EMIT2(0x31, 0xd2); |
7968 |
+- |
7969 |
+- if (BPF_SRC(insn->code) == BPF_X) { |
7970 |
+- /* if (src_reg == 0) return 0 */ |
7971 |
+- |
7972 |
+- /* cmp r11, 0 */ |
7973 |
+- EMIT4(0x49, 0x83, 0xFB, 0x00); |
7974 |
+- |
7975 |
+- /* jne .+9 (skip over pop, pop, xor and jmp) */ |
7976 |
+- EMIT2(X86_JNE, 1 + 1 + 2 + 5); |
7977 |
+- EMIT1(0x5A); /* pop rdx */ |
7978 |
+- EMIT1(0x58); /* pop rax */ |
7979 |
+- EMIT2(0x31, 0xc0); /* xor eax, eax */ |
7980 |
+- |
7981 |
+- /* jmp cleanup_addr |
7982 |
+- * addrs[i] - 11, because there are 11 bytes |
7983 |
+- * after this insn: div, mov, pop, pop, mov |
7984 |
+- */ |
7985 |
+- jmp_offset = ctx->cleanup_addr - (addrs[i] - 11); |
7986 |
+- EMIT1_off32(0xE9, jmp_offset); |
7987 |
+- } |
7988 |
+- |
7989 |
+- if (BPF_CLASS(insn->code) == BPF_ALU64) |
7990 |
+- /* div r11 */ |
7991 |
+- EMIT3(0x49, 0xF7, 0xF3); |
7992 |
+- else |
7993 |
+- /* div r11d */ |
7994 |
+- EMIT3(0x41, 0xF7, 0xF3); |
7995 |
+- |
7996 |
+- if (BPF_OP(insn->code) == BPF_MOD) |
7997 |
+- /* mov r11, rdx */ |
7998 |
+- EMIT3(0x49, 0x89, 0xD3); |
7999 |
+- else |
8000 |
+- /* mov r11, rax */ |
8001 |
+- EMIT3(0x49, 0x89, 0xC3); |
8002 |
+- |
8003 |
+- EMIT1(0x5A); /* pop rdx */ |
8004 |
+- EMIT1(0x58); /* pop rax */ |
8005 |
+- |
8006 |
+- /* mov dst_reg, r11 */ |
8007 |
+- EMIT_mov(dst_reg, AUX_REG); |
8008 |
+- break; |
8009 |
+- |
8010 |
+- case BPF_ALU | BPF_MUL | BPF_K: |
8011 |
+- case BPF_ALU | BPF_MUL | BPF_X: |
8012 |
+- case BPF_ALU64 | BPF_MUL | BPF_K: |
8013 |
+- case BPF_ALU64 | BPF_MUL | BPF_X: |
8014 |
+- EMIT1(0x50); /* push rax */ |
8015 |
+- EMIT1(0x52); /* push rdx */ |
8016 |
+- |
8017 |
+- /* mov r11, dst_reg */ |
8018 |
+- EMIT_mov(AUX_REG, dst_reg); |
8019 |
+- |
8020 |
+- if (BPF_SRC(insn->code) == BPF_X) |
8021 |
+- /* mov rax, src_reg */ |
8022 |
+- EMIT_mov(BPF_REG_0, src_reg); |
8023 |
+- else |
8024 |
+- /* mov rax, imm32 */ |
8025 |
+- EMIT3_off32(0x48, 0xC7, 0xC0, imm32); |
8026 |
+- |
8027 |
+- if (BPF_CLASS(insn->code) == BPF_ALU64) |
8028 |
+- EMIT1(add_1mod(0x48, AUX_REG)); |
8029 |
+- else if (is_ereg(AUX_REG)) |
8030 |
+- EMIT1(add_1mod(0x40, AUX_REG)); |
8031 |
+- /* mul(q) r11 */ |
8032 |
+- EMIT2(0xF7, add_1reg(0xE0, AUX_REG)); |
8033 |
+- |
8034 |
+- /* mov r11, rax */ |
8035 |
+- EMIT_mov(AUX_REG, BPF_REG_0); |
8036 |
+- |
8037 |
+- EMIT1(0x5A); /* pop rdx */ |
8038 |
+- EMIT1(0x58); /* pop rax */ |
8039 |
+- |
8040 |
+- /* mov dst_reg, r11 */ |
8041 |
+- EMIT_mov(dst_reg, AUX_REG); |
8042 |
+- break; |
8043 |
+- |
8044 |
+- /* shifts */ |
8045 |
+- case BPF_ALU | BPF_LSH | BPF_K: |
8046 |
+- case BPF_ALU | BPF_RSH | BPF_K: |
8047 |
+- case BPF_ALU | BPF_ARSH | BPF_K: |
8048 |
+- case BPF_ALU64 | BPF_LSH | BPF_K: |
8049 |
+- case BPF_ALU64 | BPF_RSH | BPF_K: |
8050 |
+- case BPF_ALU64 | BPF_ARSH | BPF_K: |
8051 |
+- if (BPF_CLASS(insn->code) == BPF_ALU64) |
8052 |
+- EMIT1(add_1mod(0x48, dst_reg)); |
8053 |
+- else if (is_ereg(dst_reg)) |
8054 |
+- EMIT1(add_1mod(0x40, dst_reg)); |
8055 |
+- |
8056 |
+- switch (BPF_OP(insn->code)) { |
8057 |
+- case BPF_LSH: b3 = 0xE0; break; |
8058 |
+- case BPF_RSH: b3 = 0xE8; break; |
8059 |
+- case BPF_ARSH: b3 = 0xF8; break; |
8060 |
+- } |
8061 |
+- EMIT3(0xC1, add_1reg(b3, dst_reg), imm32); |
8062 |
+- break; |
8063 |
+- |
8064 |
+- case BPF_ALU | BPF_END | BPF_FROM_BE: |
8065 |
+- switch (imm32) { |
8066 |
+- case 16: |
8067 |
+- /* emit 'ror %ax, 8' to swap lower 2 bytes */ |
8068 |
+- EMIT1(0x66); |
8069 |
+- if (is_ereg(dst_reg)) |
8070 |
+- EMIT1(0x41); |
8071 |
+- EMIT3(0xC1, add_1reg(0xC8, dst_reg), 8); |
8072 |
+- break; |
8073 |
+- case 32: |
8074 |
+- /* emit 'bswap eax' to swap lower 4 bytes */ |
8075 |
+- if (is_ereg(dst_reg)) |
8076 |
+- EMIT2(0x41, 0x0F); |
8077 |
+- else |
8078 |
+- EMIT1(0x0F); |
8079 |
+- EMIT1(add_1reg(0xC8, dst_reg)); |
8080 |
+- break; |
8081 |
+- case 64: |
8082 |
+- /* emit 'bswap rax' to swap 8 bytes */ |
8083 |
+- EMIT3(add_1mod(0x48, dst_reg), 0x0F, |
8084 |
+- add_1reg(0xC8, dst_reg)); |
8085 |
+- break; |
8086 |
+- } |
8087 |
+- break; |
8088 |
+- |
8089 |
+- case BPF_ALU | BPF_END | BPF_FROM_LE: |
8090 |
+- break; |
8091 |
+- |
8092 |
+- /* ST: *(u8*)(dst_reg + off) = imm */ |
8093 |
+- case BPF_ST | BPF_MEM | BPF_B: |
8094 |
+- if (is_ereg(dst_reg)) |
8095 |
+- EMIT2(0x41, 0xC6); |
8096 |
+- else |
8097 |
+- EMIT1(0xC6); |
8098 |
+- goto st; |
8099 |
+- case BPF_ST | BPF_MEM | BPF_H: |
8100 |
+- if (is_ereg(dst_reg)) |
8101 |
+- EMIT3(0x66, 0x41, 0xC7); |
8102 |
+- else |
8103 |
+- EMIT2(0x66, 0xC7); |
8104 |
+- goto st; |
8105 |
+- case BPF_ST | BPF_MEM | BPF_W: |
8106 |
+- if (is_ereg(dst_reg)) |
8107 |
+- EMIT2(0x41, 0xC7); |
8108 |
+- else |
8109 |
+- EMIT1(0xC7); |
8110 |
+- goto st; |
8111 |
+- case BPF_ST | BPF_MEM | BPF_DW: |
8112 |
+- EMIT2(add_1mod(0x48, dst_reg), 0xC7); |
8113 |
+- |
8114 |
+-st: if (is_imm8(insn->off)) |
8115 |
+- EMIT2(add_1reg(0x40, dst_reg), insn->off); |
8116 |
+- else |
8117 |
+- EMIT1_off32(add_1reg(0x80, dst_reg), insn->off); |
8118 |
+- |
8119 |
+- EMIT(imm32, bpf_size_to_x86_bytes(BPF_SIZE(insn->code))); |
8120 |
+- break; |
8121 |
+- |
8122 |
+- /* STX: *(u8*)(dst_reg + off) = src_reg */ |
8123 |
+- case BPF_STX | BPF_MEM | BPF_B: |
8124 |
+- /* emit 'mov byte ptr [rax + off], al' */ |
8125 |
+- if (is_ereg(dst_reg) || is_ereg(src_reg) || |
8126 |
+- /* have to add extra byte for x86 SIL, DIL regs */ |
8127 |
+- src_reg == BPF_REG_1 || src_reg == BPF_REG_2) |
8128 |
+- EMIT2(add_2mod(0x40, dst_reg, src_reg), 0x88); |
8129 |
+- else |
8130 |
+- EMIT1(0x88); |
8131 |
+- goto stx; |
8132 |
+- case BPF_STX | BPF_MEM | BPF_H: |
8133 |
+- if (is_ereg(dst_reg) || is_ereg(src_reg)) |
8134 |
+- EMIT3(0x66, add_2mod(0x40, dst_reg, src_reg), 0x89); |
8135 |
+- else |
8136 |
+- EMIT2(0x66, 0x89); |
8137 |
+- goto stx; |
8138 |
+- case BPF_STX | BPF_MEM | BPF_W: |
8139 |
+- if (is_ereg(dst_reg) || is_ereg(src_reg)) |
8140 |
+- EMIT2(add_2mod(0x40, dst_reg, src_reg), 0x89); |
8141 |
+- else |
8142 |
+- EMIT1(0x89); |
8143 |
+- goto stx; |
8144 |
+- case BPF_STX | BPF_MEM | BPF_DW: |
8145 |
+- EMIT2(add_2mod(0x48, dst_reg, src_reg), 0x89); |
8146 |
+-stx: if (is_imm8(insn->off)) |
8147 |
+- EMIT2(add_2reg(0x40, dst_reg, src_reg), insn->off); |
8148 |
+- else |
8149 |
+- EMIT1_off32(add_2reg(0x80, dst_reg, src_reg), |
8150 |
+- insn->off); |
8151 |
+- break; |
8152 |
+- |
8153 |
+- /* LDX: dst_reg = *(u8*)(src_reg + off) */ |
8154 |
+- case BPF_LDX | BPF_MEM | BPF_B: |
8155 |
+- /* emit 'movzx rax, byte ptr [rax + off]' */ |
8156 |
+- EMIT3(add_2mod(0x48, src_reg, dst_reg), 0x0F, 0xB6); |
8157 |
+- goto ldx; |
8158 |
+- case BPF_LDX | BPF_MEM | BPF_H: |
8159 |
+- /* emit 'movzx rax, word ptr [rax + off]' */ |
8160 |
+- EMIT3(add_2mod(0x48, src_reg, dst_reg), 0x0F, 0xB7); |
8161 |
+- goto ldx; |
8162 |
+- case BPF_LDX | BPF_MEM | BPF_W: |
8163 |
+- /* emit 'mov eax, dword ptr [rax+0x14]' */ |
8164 |
+- if (is_ereg(dst_reg) || is_ereg(src_reg)) |
8165 |
+- EMIT2(add_2mod(0x40, src_reg, dst_reg), 0x8B); |
8166 |
+- else |
8167 |
+- EMIT1(0x8B); |
8168 |
+- goto ldx; |
8169 |
+- case BPF_LDX | BPF_MEM | BPF_DW: |
8170 |
+- /* emit 'mov rax, qword ptr [rax+0x14]' */ |
8171 |
+- EMIT2(add_2mod(0x48, src_reg, dst_reg), 0x8B); |
8172 |
+-ldx: /* if insn->off == 0 we can save one extra byte, but |
8173 |
+- * special case of x86 r13 which always needs an offset |
8174 |
+- * is not worth the hassle |
8175 |
+- */ |
8176 |
+- if (is_imm8(insn->off)) |
8177 |
+- EMIT2(add_2reg(0x40, src_reg, dst_reg), insn->off); |
8178 |
+- else |
8179 |
+- EMIT1_off32(add_2reg(0x80, src_reg, dst_reg), |
8180 |
+- insn->off); |
8181 |
+- break; |
8182 |
+- |
8183 |
+- /* STX XADD: lock *(u32*)(dst_reg + off) += src_reg */ |
8184 |
+- case BPF_STX | BPF_XADD | BPF_W: |
8185 |
+- /* emit 'lock add dword ptr [rax + off], eax' */ |
8186 |
+- if (is_ereg(dst_reg) || is_ereg(src_reg)) |
8187 |
+- EMIT3(0xF0, add_2mod(0x40, dst_reg, src_reg), 0x01); |
8188 |
+- else |
8189 |
+- EMIT2(0xF0, 0x01); |
8190 |
+- goto xadd; |
8191 |
+- case BPF_STX | BPF_XADD | BPF_DW: |
8192 |
+- EMIT3(0xF0, add_2mod(0x48, dst_reg, src_reg), 0x01); |
8193 |
+-xadd: if (is_imm8(insn->off)) |
8194 |
+- EMIT2(add_2reg(0x40, dst_reg, src_reg), insn->off); |
8195 |
+- else |
8196 |
+- EMIT1_off32(add_2reg(0x80, dst_reg, src_reg), |
8197 |
+- insn->off); |
8198 |
+- break; |
8199 |
+- |
8200 |
+- /* call */ |
8201 |
+- case BPF_JMP | BPF_CALL: |
8202 |
+- func = (u8 *) __bpf_call_base + imm32; |
8203 |
+- jmp_offset = func - (image + addrs[i]); |
8204 |
+- if (ctx->seen_ld_abs) { |
8205 |
+- EMIT2(0x41, 0x52); /* push %r10 */ |
8206 |
+- EMIT2(0x41, 0x51); /* push %r9 */ |
8207 |
+- /* need to adjust jmp offset, since |
8208 |
+- * pop %r9, pop %r10 take 4 bytes after call insn |
8209 |
+- */ |
8210 |
+- jmp_offset += 4; |
8211 |
+- } |
8212 |
+- if (!imm32 || !is_simm32(jmp_offset)) { |
8213 |
+- pr_err("unsupported bpf func %d addr %p image %p\n", |
8214 |
+- imm32, func, image); |
8215 |
+- return -EINVAL; |
8216 |
+- } |
8217 |
+- EMIT1_off32(0xE8, jmp_offset); |
8218 |
+- if (ctx->seen_ld_abs) { |
8219 |
+- EMIT2(0x41, 0x59); /* pop %r9 */ |
8220 |
+- EMIT2(0x41, 0x5A); /* pop %r10 */ |
8221 |
+- } |
8222 |
+- break; |
8223 |
+- |
8224 |
+- /* cond jump */ |
8225 |
+- case BPF_JMP | BPF_JEQ | BPF_X: |
8226 |
+- case BPF_JMP | BPF_JNE | BPF_X: |
8227 |
+- case BPF_JMP | BPF_JGT | BPF_X: |
8228 |
+- case BPF_JMP | BPF_JGE | BPF_X: |
8229 |
+- case BPF_JMP | BPF_JSGT | BPF_X: |
8230 |
+- case BPF_JMP | BPF_JSGE | BPF_X: |
8231 |
+- /* cmp dst_reg, src_reg */ |
8232 |
+- EMIT3(add_2mod(0x48, dst_reg, src_reg), 0x39, |
8233 |
+- add_2reg(0xC0, dst_reg, src_reg)); |
8234 |
+- goto emit_cond_jmp; |
8235 |
+- |
8236 |
+- case BPF_JMP | BPF_JSET | BPF_X: |
8237 |
+- /* test dst_reg, src_reg */ |
8238 |
+- EMIT3(add_2mod(0x48, dst_reg, src_reg), 0x85, |
8239 |
+- add_2reg(0xC0, dst_reg, src_reg)); |
8240 |
+- goto emit_cond_jmp; |
8241 |
+- |
8242 |
+- case BPF_JMP | BPF_JSET | BPF_K: |
8243 |
+- /* test dst_reg, imm32 */ |
8244 |
+- EMIT1(add_1mod(0x48, dst_reg)); |
8245 |
+- EMIT2_off32(0xF7, add_1reg(0xC0, dst_reg), imm32); |
8246 |
+- goto emit_cond_jmp; |
8247 |
+- |
8248 |
+- case BPF_JMP | BPF_JEQ | BPF_K: |
8249 |
+- case BPF_JMP | BPF_JNE | BPF_K: |
8250 |
+- case BPF_JMP | BPF_JGT | BPF_K: |
8251 |
+- case BPF_JMP | BPF_JGE | BPF_K: |
8252 |
+- case BPF_JMP | BPF_JSGT | BPF_K: |
8253 |
+- case BPF_JMP | BPF_JSGE | BPF_K: |
8254 |
+- /* cmp dst_reg, imm8/32 */ |
8255 |
+- EMIT1(add_1mod(0x48, dst_reg)); |
8256 |
+- |
8257 |
+- if (is_imm8(imm32)) |
8258 |
+- EMIT3(0x83, add_1reg(0xF8, dst_reg), imm32); |
8259 |
+- else |
8260 |
+- EMIT2_off32(0x81, add_1reg(0xF8, dst_reg), imm32); |
8261 |
+- |
8262 |
+-emit_cond_jmp: /* convert BPF opcode to x86 */ |
8263 |
+- switch (BPF_OP(insn->code)) { |
8264 |
+- case BPF_JEQ: |
8265 |
+- jmp_cond = X86_JE; |
8266 |
+- break; |
8267 |
+- case BPF_JSET: |
8268 |
+- case BPF_JNE: |
8269 |
+- jmp_cond = X86_JNE; |
8270 |
+- break; |
8271 |
+- case BPF_JGT: |
8272 |
+- /* GT is unsigned '>', JA in x86 */ |
8273 |
+- jmp_cond = X86_JA; |
8274 |
+- break; |
8275 |
+- case BPF_JGE: |
8276 |
+- /* GE is unsigned '>=', JAE in x86 */ |
8277 |
+- jmp_cond = X86_JAE; |
8278 |
+- break; |
8279 |
+- case BPF_JSGT: |
8280 |
+- /* signed '>', GT in x86 */ |
8281 |
+- jmp_cond = X86_JG; |
8282 |
+- break; |
8283 |
+- case BPF_JSGE: |
8284 |
+- /* signed '>=', GE in x86 */ |
8285 |
+- jmp_cond = X86_JGE; |
8286 |
+- break; |
8287 |
+- default: /* to silence gcc warning */ |
8288 |
+- return -EFAULT; |
8289 |
+- } |
8290 |
+- jmp_offset = addrs[i + insn->off] - addrs[i]; |
8291 |
+- if (is_imm8(jmp_offset)) { |
8292 |
+- EMIT2(jmp_cond, jmp_offset); |
8293 |
+- } else if (is_simm32(jmp_offset)) { |
8294 |
+- EMIT2_off32(0x0F, jmp_cond + 0x10, jmp_offset); |
8295 |
+- } else { |
8296 |
+- pr_err("cond_jmp gen bug %llx\n", jmp_offset); |
8297 |
+- return -EFAULT; |
8298 |
+- } |
8299 |
+- |
8300 |
+- break; |
8301 |
+- |
8302 |
+- case BPF_JMP | BPF_JA: |
8303 |
+- jmp_offset = addrs[i + insn->off] - addrs[i]; |
8304 |
+- if (!jmp_offset) |
8305 |
+- /* optimize out nop jumps */ |
8306 |
+- break; |
8307 |
+-emit_jmp: |
8308 |
+- if (is_imm8(jmp_offset)) { |
8309 |
+- EMIT2(0xEB, jmp_offset); |
8310 |
+- } else if (is_simm32(jmp_offset)) { |
8311 |
+- EMIT1_off32(0xE9, jmp_offset); |
8312 |
+- } else { |
8313 |
+- pr_err("jmp gen bug %llx\n", jmp_offset); |
8314 |
+- return -EFAULT; |
8315 |
+- } |
8316 |
+- break; |
8317 |
+- |
8318 |
+- case BPF_LD | BPF_IND | BPF_W: |
8319 |
+- func = sk_load_word; |
8320 |
+- goto common_load; |
8321 |
+- case BPF_LD | BPF_ABS | BPF_W: |
8322 |
+- func = CHOOSE_LOAD_FUNC(imm32, sk_load_word); |
8323 |
+-common_load: ctx->seen_ld_abs = true; |
8324 |
+- jmp_offset = func - (image + addrs[i]); |
8325 |
+- if (!func || !is_simm32(jmp_offset)) { |
8326 |
+- pr_err("unsupported bpf func %d addr %p image %p\n", |
8327 |
+- imm32, func, image); |
8328 |
+- return -EINVAL; |
8329 |
+- } |
8330 |
+- if (BPF_MODE(insn->code) == BPF_ABS) { |
8331 |
+- /* mov %esi, imm32 */ |
8332 |
+- EMIT1_off32(0xBE, imm32); |
8333 |
+- } else { |
8334 |
+- /* mov %rsi, src_reg */ |
8335 |
+- EMIT_mov(BPF_REG_2, src_reg); |
8336 |
+- if (imm32) { |
8337 |
+- if (is_imm8(imm32)) |
8338 |
+- /* add %esi, imm8 */ |
8339 |
+- EMIT3(0x83, 0xC6, imm32); |
8340 |
+- else |
8341 |
+- /* add %esi, imm32 */ |
8342 |
+- EMIT2_off32(0x81, 0xC6, imm32); |
8343 |
+- } |
8344 |
+- } |
8345 |
+- /* skb pointer is in R6 (%rbx), it will be copied into |
8346 |
+- * %rdi if skb_copy_bits() call is necessary. |
8347 |
+- * sk_load_* helpers also use %r10 and %r9d. |
8348 |
+- * See bpf_jit.S |
8349 |
+- */ |
8350 |
+- EMIT1_off32(0xE8, jmp_offset); /* call */ |
8351 |
+- break; |
8352 |
+- |
8353 |
+- case BPF_LD | BPF_IND | BPF_H: |
8354 |
+- func = sk_load_half; |
8355 |
+- goto common_load; |
8356 |
+- case BPF_LD | BPF_ABS | BPF_H: |
8357 |
+- func = CHOOSE_LOAD_FUNC(imm32, sk_load_half); |
8358 |
+- goto common_load; |
8359 |
+- case BPF_LD | BPF_IND | BPF_B: |
8360 |
+- func = sk_load_byte; |
8361 |
+- goto common_load; |
8362 |
+- case BPF_LD | BPF_ABS | BPF_B: |
8363 |
+- func = CHOOSE_LOAD_FUNC(imm32, sk_load_byte); |
8364 |
+- goto common_load; |
8365 |
+- |
8366 |
+- case BPF_JMP | BPF_EXIT: |
8367 |
+- if (i != insn_cnt - 1) { |
8368 |
+- jmp_offset = ctx->cleanup_addr - addrs[i]; |
8369 |
+- goto emit_jmp; |
8370 |
+- } |
8371 |
+- /* update cleanup_addr */ |
8372 |
+- ctx->cleanup_addr = proglen; |
8373 |
+- /* mov rbx, qword ptr [rbp-X] */ |
8374 |
+- EMIT3_off32(0x48, 0x8B, 0x9D, -stacksize); |
8375 |
+- /* mov r13, qword ptr [rbp-X] */ |
8376 |
+- EMIT3_off32(0x4C, 0x8B, 0xAD, -stacksize + 8); |
8377 |
+- /* mov r14, qword ptr [rbp-X] */ |
8378 |
+- EMIT3_off32(0x4C, 0x8B, 0xB5, -stacksize + 16); |
8379 |
+- /* mov r15, qword ptr [rbp-X] */ |
8380 |
+- EMIT3_off32(0x4C, 0x8B, 0xBD, -stacksize + 24); |
8381 |
+- |
8382 |
+- EMIT1(0xC9); /* leave */ |
8383 |
+- EMIT1(0xC3); /* ret */ |
8384 |
+- break; |
8385 |
+- |
8386 |
+- default: |
8387 |
+- /* By design x64 JIT should support all BPF instructions |
8388 |
+- * This error will be seen if new instruction was added |
8389 |
+- * to interpreter, but not to JIT |
8390 |
+- * or if there is junk in sk_filter |
8391 |
+- */ |
8392 |
+- pr_err("bpf_jit: unknown opcode %02x\n", insn->code); |
8393 |
+- return -EINVAL; |
8394 |
+- } |
8395 |
+- |
8396 |
+- ilen = prog - temp; |
8397 |
+- if (image) { |
8398 |
+- if (unlikely(proglen + ilen > oldproglen)) { |
8399 |
+- pr_err("bpf_jit_compile fatal error\n"); |
8400 |
+- return -EFAULT; |
8401 |
+- } |
8402 |
+- memcpy(image + proglen, temp, ilen); |
8403 |
+- } |
8404 |
+- proglen += ilen; |
8405 |
+- addrs[i] = proglen; |
8406 |
+- prog = temp; |
8407 |
+- } |
8408 |
+- return proglen; |
8409 |
+-} |
8410 |
+- |
8411 |
+-void bpf_jit_compile(struct sk_filter *prog) |
8412 |
+-{ |
8413 |
+-} |
8414 |
+- |
8415 |
+-void bpf_int_jit_compile(struct sk_filter *prog) |
8416 |
+-{ |
8417 |
+- struct bpf_binary_header *header = NULL; |
8418 |
+- int proglen, oldproglen = 0; |
8419 |
+- struct jit_context ctx = {}; |
8420 |
++void bpf_jit_compile(struct sk_filter *fp) |
8421 |
++{ |
8422 |
+ u8 temp[MAX_INSTR_CODE_SIZE]; |
8423 |
- u8 *prog; |
8424 |
- unsigned int proglen, oldproglen = 0; |
8425 |
- int ilen, i; |
8426 |
- int t_offset, f_offset; |
8427 |
- u8 t_op, f_op, seen = 0, pass; |
8428 |
++ u8 *prog; |
8429 |
++ unsigned int proglen, oldproglen = 0; |
8430 |
++ int ilen, i; |
8431 |
++ int t_offset, f_offset; |
8432 |
++ u8 t_op, f_op, seen = 0, pass; |
8433 |
u8 *image = NULL; |
8434 |
-- struct bpf_binary_header *header = NULL; |
8435 |
+- int *addrs; |
8436 |
+- int pass; |
8437 |
+- int i; |
8438 |
+ u8 *header = NULL; |
8439 |
- u8 *func; |
8440 |
- int pc_ret0 = -1; /* bpf index of first RET #0 instruction (if any) */ |
8441 |
- unsigned int cleanup_addr; /* epilogue code offset */ |
8442 |
- unsigned int *addrs; |
8443 |
- const struct sock_filter *filter = fp->insns; |
8444 |
- int flen = fp->len; |
8445 |
++ u8 *func; |
8446 |
++ int pc_ret0 = -1; /* bpf index of first RET #0 instruction (if any) */ |
8447 |
++ unsigned int cleanup_addr; /* epilogue code offset */ |
8448 |
++ unsigned int *addrs; |
8449 |
++ const struct sock_filter *filter = fp->insns; |
8450 |
++ int flen = fp->len; |
8451 |
+#ifdef CONFIG_GRKERNSEC_JIT_HARDEN |
8452 |
+ unsigned int randkey; |
8453 |
+#endif |
8454 |
|
8455 |
if (!bpf_jit_enable) |
8456 |
return; |
8457 |
-@@ -203,10 +298,10 @@ void bpf_jit_compile(struct sk_filter *fp) |
8458 |
+ |
8459 |
+- if (!prog || !prog->len) |
8460 |
+- return; |
8461 |
+- |
8462 |
+- addrs = kmalloc(prog->len * sizeof(*addrs), GFP_KERNEL); |
8463 |
+- if (!addrs) |
8464 |
++ addrs = kmalloc(flen * sizeof(*addrs), GFP_KERNEL); |
8465 |
++ if (addrs == NULL) |
8466 |
return; |
8467 |
|
8468 |
/* Before first pass, make a rough estimation of addrs[] |
8469 |
- * each bpf instruction is translated to less than 64 bytes |
8470 |
+ * each bpf instruction is translated to less than MAX_INSTR_CODE_SIZE bytes |
8471 |
*/ |
8472 |
- for (proglen = 0, i = 0; i < flen; i++) { |
8473 |
+- for (proglen = 0, i = 0; i < prog->len; i++) { |
8474 |
- proglen += 64; |
8475 |
++ for (proglen = 0, i = 0; i < flen; i++) { |
8476 |
+ proglen += MAX_INSTR_CODE_SIZE; |
8477 |
addrs[i] = proglen; |
8478 |
} |
8479 |
- cleanup_addr = proglen; /* epilogue address */ |
8480 |
-@@ -285,6 +380,10 @@ void bpf_jit_compile(struct sk_filter *fp) |
8481 |
- for (i = 0; i < flen; i++) { |
8482 |
- unsigned int K = filter[i].k; |
8483 |
- |
8484 |
+- ctx.cleanup_addr = proglen; |
8485 |
++ cleanup_addr = proglen; /* epilogue address */ |
8486 |
+ |
8487 |
+ for (pass = 0; pass < 10; pass++) { |
8488 |
+- proglen = do_jit(prog, addrs, image, oldproglen, &ctx); |
8489 |
+- if (proglen <= 0) { |
8490 |
+- image = NULL; |
8491 |
+- if (header) |
8492 |
+- module_free(NULL, header); |
8493 |
+- goto out; |
8494 |
++ u8 seen_or_pass0 = (pass == 0) ? (SEEN_XREG | SEEN_DATAREF | SEEN_MEM) : seen; |
8495 |
++ /* no prologue/epilogue for trivial filters (RET something) */ |
8496 |
++ proglen = 0; |
8497 |
++ prog = temp; |
8498 |
++ |
8499 |
++ if (seen_or_pass0) { |
8500 |
++ EMIT4(0x55, 0x48, 0x89, 0xe5); /* push %rbp; mov %rsp,%rbp */ |
8501 |
++ EMIT4(0x48, 0x83, 0xec, 96); /* subq $96,%rsp */ |
8502 |
++ /* note : must save %rbx in case bpf_error is hit */ |
8503 |
++ if (seen_or_pass0 & (SEEN_XREG | SEEN_DATAREF)) |
8504 |
++ EMIT4(0x48, 0x89, 0x5d, 0xf8); /* mov %rbx, -8(%rbp) */ |
8505 |
++ if (seen_or_pass0 & SEEN_XREG) |
8506 |
++ CLEAR_X(); /* make sure we dont leek kernel memory */ |
8507 |
++ |
8508 |
++ /* |
8509 |
++ * If this filter needs to access skb data, |
8510 |
++ * loads r9 and r8 with : |
8511 |
++ * r9 = skb->len - skb->data_len |
8512 |
++ * r8 = skb->data |
8513 |
++ */ |
8514 |
++ if (seen_or_pass0 & SEEN_DATAREF) { |
8515 |
++ if (offsetof(struct sk_buff, len) <= 127) |
8516 |
++ /* mov off8(%rdi),%r9d */ |
8517 |
++ EMIT4(0x44, 0x8b, 0x4f, offsetof(struct sk_buff, len)); |
8518 |
++ else { |
8519 |
++ /* mov off32(%rdi),%r9d */ |
8520 |
++ EMIT3(0x44, 0x8b, 0x8f); |
8521 |
++ EMIT(offsetof(struct sk_buff, len), 4); |
8522 |
++ } |
8523 |
++ if (is_imm8(offsetof(struct sk_buff, data_len))) |
8524 |
++ /* sub off8(%rdi),%r9d */ |
8525 |
++ EMIT4(0x44, 0x2b, 0x4f, offsetof(struct sk_buff, data_len)); |
8526 |
++ else { |
8527 |
++ EMIT3(0x44, 0x2b, 0x8f); |
8528 |
++ EMIT(offsetof(struct sk_buff, data_len), 4); |
8529 |
++ } |
8530 |
++ |
8531 |
++ if (is_imm8(offsetof(struct sk_buff, data))) |
8532 |
++ /* mov off8(%rdi),%r8 */ |
8533 |
++ EMIT4(0x4c, 0x8b, 0x47, offsetof(struct sk_buff, data)); |
8534 |
++ else { |
8535 |
++ /* mov off32(%rdi),%r8 */ |
8536 |
++ EMIT3(0x4c, 0x8b, 0x87); |
8537 |
++ EMIT(offsetof(struct sk_buff, data), 4); |
8538 |
++ } |
8539 |
++ } |
8540 |
+ } |
8541 |
++ |
8542 |
++ switch (filter[0].code) { |
8543 |
++ case BPF_S_RET_K: |
8544 |
++ case BPF_S_LD_W_LEN: |
8545 |
++ case BPF_S_ANC_PROTOCOL: |
8546 |
++ case BPF_S_ANC_IFINDEX: |
8547 |
++ case BPF_S_ANC_MARK: |
8548 |
++ case BPF_S_ANC_RXHASH: |
8549 |
++ case BPF_S_ANC_CPU: |
8550 |
++ case BPF_S_ANC_VLAN_TAG: |
8551 |
++ case BPF_S_ANC_VLAN_TAG_PRESENT: |
8552 |
++ case BPF_S_ANC_QUEUE: |
8553 |
++ case BPF_S_ANC_PKTTYPE: |
8554 |
++ case BPF_S_LD_W_ABS: |
8555 |
++ case BPF_S_LD_H_ABS: |
8556 |
++ case BPF_S_LD_B_ABS: |
8557 |
++ /* first instruction sets A register (or is RET 'constant') */ |
8558 |
++ break; |
8559 |
++ default: |
8560 |
++ /* make sure we dont leak kernel information to user */ |
8561 |
++ CLEAR_A(); /* A = 0 */ |
8562 |
++ } |
8563 |
++ |
8564 |
++ for (i = 0; i < flen; i++) { |
8565 |
++ unsigned int K = filter[i].k; |
8566 |
++ |
8567 |
+#ifdef CONFIG_GRKERNSEC_JIT_HARDEN |
8568 |
+ randkey = prandom_u32(); |
8569 |
+#endif |
8570 |
+ |
8571 |
- switch (filter[i].code) { |
8572 |
- case BPF_S_ALU_ADD_X: /* A += X; */ |
8573 |
- seen |= SEEN_XREG; |
8574 |
-@@ -317,10 +416,8 @@ void bpf_jit_compile(struct sk_filter *fp) |
8575 |
- case BPF_S_ALU_MUL_K: /* A *= K */ |
8576 |
- if (is_imm8(K)) |
8577 |
- EMIT3(0x6b, 0xc0, K); /* imul imm8,%eax,%eax */ |
8578 |
-- else { |
8579 |
-- EMIT2(0x69, 0xc0); /* imul imm32,%eax */ |
8580 |
-- EMIT(K, 4); |
8581 |
-- } |
8582 |
++ switch (filter[i].code) { |
8583 |
++ case BPF_S_ALU_ADD_X: /* A += X; */ |
8584 |
++ seen |= SEEN_XREG; |
8585 |
++ EMIT2(0x01, 0xd8); /* add %ebx,%eax */ |
8586 |
++ break; |
8587 |
++ case BPF_S_ALU_ADD_K: /* A += K; */ |
8588 |
++ if (!K) |
8589 |
++ break; |
8590 |
++ if (is_imm8(K)) |
8591 |
++ EMIT3(0x83, 0xc0, K); /* add imm8,%eax */ |
8592 |
++ else |
8593 |
++ EMIT1_off32(0x05, K); /* add imm32,%eax */ |
8594 |
++ break; |
8595 |
++ case BPF_S_ALU_SUB_X: /* A -= X; */ |
8596 |
++ seen |= SEEN_XREG; |
8597 |
++ EMIT2(0x29, 0xd8); /* sub %ebx,%eax */ |
8598 |
++ break; |
8599 |
++ case BPF_S_ALU_SUB_K: /* A -= K */ |
8600 |
++ if (!K) |
8601 |
++ break; |
8602 |
++ if (is_imm8(K)) |
8603 |
++ EMIT3(0x83, 0xe8, K); /* sub imm8,%eax */ |
8604 |
++ else |
8605 |
++ EMIT1_off32(0x2d, K); /* sub imm32,%eax */ |
8606 |
++ break; |
8607 |
++ case BPF_S_ALU_MUL_X: /* A *= X; */ |
8608 |
++ seen |= SEEN_XREG; |
8609 |
++ EMIT3(0x0f, 0xaf, 0xc3); /* imul %ebx,%eax */ |
8610 |
++ break; |
8611 |
++ case BPF_S_ALU_MUL_K: /* A *= K */ |
8612 |
++ if (is_imm8(K)) |
8613 |
++ EMIT3(0x6b, 0xc0, K); /* imul imm8,%eax,%eax */ |
8614 |
+ else |
8615 |
+ EMIT2_off32(0x69, 0xc0, K); /* imul imm32,%eax */ |
8616 |
- break; |
8617 |
- case BPF_S_ALU_DIV_X: /* A /= X; */ |
8618 |
- seen |= SEEN_XREG; |
8619 |
-@@ -364,7 +461,11 @@ void bpf_jit_compile(struct sk_filter *fp) |
8620 |
- break; |
8621 |
- } |
8622 |
- EMIT2(0x31, 0xd2); /* xor %edx,%edx */ |
8623 |
++ break; |
8624 |
++ case BPF_S_ALU_DIV_X: /* A /= X; */ |
8625 |
++ seen |= SEEN_XREG; |
8626 |
++ EMIT2(0x85, 0xdb); /* test %ebx,%ebx */ |
8627 |
++ if (pc_ret0 > 0) { |
8628 |
++ /* addrs[pc_ret0 - 1] is start address of target |
8629 |
++ * (addrs[i] - 4) is the address following this jmp |
8630 |
++ * ("xor %edx,%edx; div %ebx" being 4 bytes long) |
8631 |
++ */ |
8632 |
++ EMIT_COND_JMP(X86_JE, addrs[pc_ret0 - 1] - |
8633 |
++ (addrs[i] - 4)); |
8634 |
++ } else { |
8635 |
++ EMIT_COND_JMP(X86_JNE, 2 + 5); |
8636 |
++ CLEAR_A(); |
8637 |
++ EMIT1_off32(0xe9, cleanup_addr - (addrs[i] - 4)); /* jmp .+off32 */ |
8638 |
++ } |
8639 |
++ EMIT4(0x31, 0xd2, 0xf7, 0xf3); /* xor %edx,%edx; div %ebx */ |
8640 |
++ break; |
8641 |
++ case BPF_S_ALU_MOD_X: /* A %= X; */ |
8642 |
++ seen |= SEEN_XREG; |
8643 |
++ EMIT2(0x85, 0xdb); /* test %ebx,%ebx */ |
8644 |
++ if (pc_ret0 > 0) { |
8645 |
++ /* addrs[pc_ret0 - 1] is start address of target |
8646 |
++ * (addrs[i] - 6) is the address following this jmp |
8647 |
++ * ("xor %edx,%edx; div %ebx;mov %edx,%eax" being 6 bytes long) |
8648 |
++ */ |
8649 |
++ EMIT_COND_JMP(X86_JE, addrs[pc_ret0 - 1] - |
8650 |
++ (addrs[i] - 6)); |
8651 |
++ } else { |
8652 |
++ EMIT_COND_JMP(X86_JNE, 2 + 5); |
8653 |
++ CLEAR_A(); |
8654 |
++ EMIT1_off32(0xe9, cleanup_addr - (addrs[i] - 6)); /* jmp .+off32 */ |
8655 |
++ } |
8656 |
++ EMIT2(0x31, 0xd2); /* xor %edx,%edx */ |
8657 |
++ EMIT2(0xf7, 0xf3); /* div %ebx */ |
8658 |
++ EMIT2(0x89, 0xd0); /* mov %edx,%eax */ |
8659 |
++ break; |
8660 |
++ case BPF_S_ALU_MOD_K: /* A %= K; */ |
8661 |
++ if (K == 1) { |
8662 |
++ CLEAR_A(); |
8663 |
++ break; |
8664 |
++ } |
8665 |
++ EMIT2(0x31, 0xd2); /* xor %edx,%edx */ |
8666 |
+#ifdef CONFIG_GRKERNSEC_JIT_HARDEN |
8667 |
+ DILUTE_CONST_SEQUENCE(K, randkey); |
8668 |
+#else |
8669 |
- EMIT1(0xb9);EMIT(K, 4); /* mov imm32,%ecx */ |
8670 |
++ EMIT1(0xb9);EMIT(K, 4); /* mov imm32,%ecx */ |
8671 |
+#endif |
8672 |
- EMIT2(0xf7, 0xf1); /* div %ecx */ |
8673 |
- EMIT2(0x89, 0xd0); /* mov %edx,%eax */ |
8674 |
- break; |
8675 |
-@@ -372,7 +473,11 @@ void bpf_jit_compile(struct sk_filter *fp) |
8676 |
- if (K == 1) |
8677 |
- break; |
8678 |
- EMIT2(0x31, 0xd2); /* xor %edx,%edx */ |
8679 |
++ EMIT2(0xf7, 0xf1); /* div %ecx */ |
8680 |
++ EMIT2(0x89, 0xd0); /* mov %edx,%eax */ |
8681 |
++ break; |
8682 |
++ case BPF_S_ALU_DIV_K: /* A /= K */ |
8683 |
++ if (K == 1) |
8684 |
++ break; |
8685 |
++ EMIT2(0x31, 0xd2); /* xor %edx,%edx */ |
8686 |
+#ifdef CONFIG_GRKERNSEC_JIT_HARDEN |
8687 |
+ DILUTE_CONST_SEQUENCE(K, randkey); |
8688 |
+#else |
8689 |
- EMIT1(0xb9);EMIT(K, 4); /* mov imm32,%ecx */ |
8690 |
++ EMIT1(0xb9);EMIT(K, 4); /* mov imm32,%ecx */ |
8691 |
+#endif |
8692 |
- EMIT2(0xf7, 0xf1); /* div %ecx */ |
8693 |
- break; |
8694 |
- case BPF_S_ALU_AND_X: |
8695 |
-@@ -643,8 +748,7 @@ common_load_ind: seen |= SEEN_DATAREF | SEEN_XREG; |
8696 |
- if (is_imm8(K)) { |
8697 |
- EMIT3(0x8d, 0x73, K); /* lea imm8(%rbx), %esi */ |
8698 |
- } else { |
8699 |
-- EMIT2(0x8d, 0xb3); /* lea imm32(%rbx),%esi */ |
8700 |
-- EMIT(K, 4); |
8701 |
++ EMIT2(0xf7, 0xf1); /* div %ecx */ |
8702 |
++ break; |
8703 |
++ case BPF_S_ALU_AND_X: |
8704 |
++ seen |= SEEN_XREG; |
8705 |
++ EMIT2(0x21, 0xd8); /* and %ebx,%eax */ |
8706 |
++ break; |
8707 |
++ case BPF_S_ALU_AND_K: |
8708 |
++ if (K >= 0xFFFFFF00) { |
8709 |
++ EMIT2(0x24, K & 0xFF); /* and imm8,%al */ |
8710 |
++ } else if (K >= 0xFFFF0000) { |
8711 |
++ EMIT2(0x66, 0x25); /* and imm16,%ax */ |
8712 |
++ EMIT(K, 2); |
8713 |
++ } else { |
8714 |
++ EMIT1_off32(0x25, K); /* and imm32,%eax */ |
8715 |
++ } |
8716 |
++ break; |
8717 |
++ case BPF_S_ALU_OR_X: |
8718 |
++ seen |= SEEN_XREG; |
8719 |
++ EMIT2(0x09, 0xd8); /* or %ebx,%eax */ |
8720 |
++ break; |
8721 |
++ case BPF_S_ALU_OR_K: |
8722 |
++ if (is_imm8(K)) |
8723 |
++ EMIT3(0x83, 0xc8, K); /* or imm8,%eax */ |
8724 |
++ else |
8725 |
++ EMIT1_off32(0x0d, K); /* or imm32,%eax */ |
8726 |
++ break; |
8727 |
++ case BPF_S_ANC_ALU_XOR_X: /* A ^= X; */ |
8728 |
++ case BPF_S_ALU_XOR_X: |
8729 |
++ seen |= SEEN_XREG; |
8730 |
++ EMIT2(0x31, 0xd8); /* xor %ebx,%eax */ |
8731 |
++ break; |
8732 |
++ case BPF_S_ALU_XOR_K: /* A ^= K; */ |
8733 |
++ if (K == 0) |
8734 |
++ break; |
8735 |
++ if (is_imm8(K)) |
8736 |
++ EMIT3(0x83, 0xf0, K); /* xor imm8,%eax */ |
8737 |
++ else |
8738 |
++ EMIT1_off32(0x35, K); /* xor imm32,%eax */ |
8739 |
++ break; |
8740 |
++ case BPF_S_ALU_LSH_X: /* A <<= X; */ |
8741 |
++ seen |= SEEN_XREG; |
8742 |
++ EMIT4(0x89, 0xd9, 0xd3, 0xe0); /* mov %ebx,%ecx; shl %cl,%eax */ |
8743 |
++ break; |
8744 |
++ case BPF_S_ALU_LSH_K: |
8745 |
++ if (K == 0) |
8746 |
++ break; |
8747 |
++ else if (K == 1) |
8748 |
++ EMIT2(0xd1, 0xe0); /* shl %eax */ |
8749 |
++ else |
8750 |
++ EMIT3(0xc1, 0xe0, K); |
8751 |
++ break; |
8752 |
++ case BPF_S_ALU_RSH_X: /* A >>= X; */ |
8753 |
++ seen |= SEEN_XREG; |
8754 |
++ EMIT4(0x89, 0xd9, 0xd3, 0xe8); /* mov %ebx,%ecx; shr %cl,%eax */ |
8755 |
++ break; |
8756 |
++ case BPF_S_ALU_RSH_K: /* A >>= K; */ |
8757 |
++ if (K == 0) |
8758 |
++ break; |
8759 |
++ else if (K == 1) |
8760 |
++ EMIT2(0xd1, 0xe8); /* shr %eax */ |
8761 |
++ else |
8762 |
++ EMIT3(0xc1, 0xe8, K); |
8763 |
++ break; |
8764 |
++ case BPF_S_ALU_NEG: |
8765 |
++ EMIT2(0xf7, 0xd8); /* neg %eax */ |
8766 |
++ break; |
8767 |
++ case BPF_S_RET_K: |
8768 |
++ if (!K) { |
8769 |
++ if (pc_ret0 == -1) |
8770 |
++ pc_ret0 = i; |
8771 |
++ CLEAR_A(); |
8772 |
++ } else { |
8773 |
++ EMIT1_off32(0xb8, K); /* mov $imm32,%eax */ |
8774 |
++ } |
8775 |
++ /* fallinto */ |
8776 |
++ case BPF_S_RET_A: |
8777 |
++ if (seen_or_pass0) { |
8778 |
++ if (i != flen - 1) { |
8779 |
++ EMIT_JMP(cleanup_addr - addrs[i]); |
8780 |
++ break; |
8781 |
++ } |
8782 |
++ if (seen_or_pass0 & SEEN_XREG) |
8783 |
++ EMIT4(0x48, 0x8b, 0x5d, 0xf8); /* mov -8(%rbp),%rbx */ |
8784 |
++ EMIT1(0xc9); /* leaveq */ |
8785 |
++ } |
8786 |
++ EMIT1(0xc3); /* ret */ |
8787 |
++ break; |
8788 |
++ case BPF_S_MISC_TAX: /* X = A */ |
8789 |
++ seen |= SEEN_XREG; |
8790 |
++ EMIT2(0x89, 0xc3); /* mov %eax,%ebx */ |
8791 |
++ break; |
8792 |
++ case BPF_S_MISC_TXA: /* A = X */ |
8793 |
++ seen |= SEEN_XREG; |
8794 |
++ EMIT2(0x89, 0xd8); /* mov %ebx,%eax */ |
8795 |
++ break; |
8796 |
++ case BPF_S_LD_IMM: /* A = K */ |
8797 |
++ if (!K) |
8798 |
++ CLEAR_A(); |
8799 |
++ else |
8800 |
++ EMIT1_off32(0xb8, K); /* mov $imm32,%eax */ |
8801 |
++ break; |
8802 |
++ case BPF_S_LDX_IMM: /* X = K */ |
8803 |
++ seen |= SEEN_XREG; |
8804 |
++ if (!K) |
8805 |
++ CLEAR_X(); |
8806 |
++ else |
8807 |
++ EMIT1_off32(0xbb, K); /* mov $imm32,%ebx */ |
8808 |
++ break; |
8809 |
++ case BPF_S_LD_MEM: /* A = mem[K] : mov off8(%rbp),%eax */ |
8810 |
++ seen |= SEEN_MEM; |
8811 |
++ EMIT3(0x8b, 0x45, 0xf0 - K*4); |
8812 |
++ break; |
8813 |
++ case BPF_S_LDX_MEM: /* X = mem[K] : mov off8(%rbp),%ebx */ |
8814 |
++ seen |= SEEN_XREG | SEEN_MEM; |
8815 |
++ EMIT3(0x8b, 0x5d, 0xf0 - K*4); |
8816 |
++ break; |
8817 |
++ case BPF_S_ST: /* mem[K] = A : mov %eax,off8(%rbp) */ |
8818 |
++ seen |= SEEN_MEM; |
8819 |
++ EMIT3(0x89, 0x45, 0xf0 - K*4); |
8820 |
++ break; |
8821 |
++ case BPF_S_STX: /* mem[K] = X : mov %ebx,off8(%rbp) */ |
8822 |
++ seen |= SEEN_XREG | SEEN_MEM; |
8823 |
++ EMIT3(0x89, 0x5d, 0xf0 - K*4); |
8824 |
++ break; |
8825 |
++ case BPF_S_LD_W_LEN: /* A = skb->len; */ |
8826 |
++ BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, len) != 4); |
8827 |
++ if (is_imm8(offsetof(struct sk_buff, len))) |
8828 |
++ /* mov off8(%rdi),%eax */ |
8829 |
++ EMIT3(0x8b, 0x47, offsetof(struct sk_buff, len)); |
8830 |
++ else { |
8831 |
++ EMIT2(0x8b, 0x87); |
8832 |
++ EMIT(offsetof(struct sk_buff, len), 4); |
8833 |
++ } |
8834 |
++ break; |
8835 |
++ case BPF_S_LDX_W_LEN: /* X = skb->len; */ |
8836 |
++ seen |= SEEN_XREG; |
8837 |
++ if (is_imm8(offsetof(struct sk_buff, len))) |
8838 |
++ /* mov off8(%rdi),%ebx */ |
8839 |
++ EMIT3(0x8b, 0x5f, offsetof(struct sk_buff, len)); |
8840 |
++ else { |
8841 |
++ EMIT2(0x8b, 0x9f); |
8842 |
++ EMIT(offsetof(struct sk_buff, len), 4); |
8843 |
++ } |
8844 |
++ break; |
8845 |
++ case BPF_S_ANC_PROTOCOL: /* A = ntohs(skb->protocol); */ |
8846 |
++ BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, protocol) != 2); |
8847 |
++ if (is_imm8(offsetof(struct sk_buff, protocol))) { |
8848 |
++ /* movzwl off8(%rdi),%eax */ |
8849 |
++ EMIT4(0x0f, 0xb7, 0x47, offsetof(struct sk_buff, protocol)); |
8850 |
++ } else { |
8851 |
++ EMIT3(0x0f, 0xb7, 0x87); /* movzwl off32(%rdi),%eax */ |
8852 |
++ EMIT(offsetof(struct sk_buff, protocol), 4); |
8853 |
++ } |
8854 |
++ EMIT2(0x86, 0xc4); /* ntohs() : xchg %al,%ah */ |
8855 |
++ break; |
8856 |
++ case BPF_S_ANC_IFINDEX: |
8857 |
++ if (is_imm8(offsetof(struct sk_buff, dev))) { |
8858 |
++ /* movq off8(%rdi),%rax */ |
8859 |
++ EMIT4(0x48, 0x8b, 0x47, offsetof(struct sk_buff, dev)); |
8860 |
++ } else { |
8861 |
++ EMIT3(0x48, 0x8b, 0x87); /* movq off32(%rdi),%rax */ |
8862 |
++ EMIT(offsetof(struct sk_buff, dev), 4); |
8863 |
++ } |
8864 |
++ EMIT3(0x48, 0x85, 0xc0); /* test %rax,%rax */ |
8865 |
++ EMIT_COND_JMP(X86_JE, cleanup_addr - (addrs[i] - 6)); |
8866 |
++ BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, ifindex) != 4); |
8867 |
++ EMIT2(0x8b, 0x80); /* mov off32(%rax),%eax */ |
8868 |
++ EMIT(offsetof(struct net_device, ifindex), 4); |
8869 |
++ break; |
8870 |
++ case BPF_S_ANC_MARK: |
8871 |
++ BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, mark) != 4); |
8872 |
++ if (is_imm8(offsetof(struct sk_buff, mark))) { |
8873 |
++ /* mov off8(%rdi),%eax */ |
8874 |
++ EMIT3(0x8b, 0x47, offsetof(struct sk_buff, mark)); |
8875 |
++ } else { |
8876 |
++ EMIT2(0x8b, 0x87); |
8877 |
++ EMIT(offsetof(struct sk_buff, mark), 4); |
8878 |
++ } |
8879 |
++ break; |
8880 |
++ case BPF_S_ANC_RXHASH: |
8881 |
++ BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, hash) != 4); |
8882 |
++ if (is_imm8(offsetof(struct sk_buff, hash))) { |
8883 |
++ /* mov off8(%rdi),%eax */ |
8884 |
++ EMIT3(0x8b, 0x47, offsetof(struct sk_buff, hash)); |
8885 |
++ } else { |
8886 |
++ EMIT2(0x8b, 0x87); |
8887 |
++ EMIT(offsetof(struct sk_buff, hash), 4); |
8888 |
++ } |
8889 |
++ break; |
8890 |
++ case BPF_S_ANC_QUEUE: |
8891 |
++ BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, queue_mapping) != 2); |
8892 |
++ if (is_imm8(offsetof(struct sk_buff, queue_mapping))) { |
8893 |
++ /* movzwl off8(%rdi),%eax */ |
8894 |
++ EMIT4(0x0f, 0xb7, 0x47, offsetof(struct sk_buff, queue_mapping)); |
8895 |
++ } else { |
8896 |
++ EMIT3(0x0f, 0xb7, 0x87); /* movzwl off32(%rdi),%eax */ |
8897 |
++ EMIT(offsetof(struct sk_buff, queue_mapping), 4); |
8898 |
++ } |
8899 |
++ break; |
8900 |
++ case BPF_S_ANC_CPU: |
8901 |
++#ifdef CONFIG_SMP |
8902 |
++ EMIT4(0x65, 0x8b, 0x04, 0x25); /* mov %gs:off32,%eax */ |
8903 |
++ EMIT((u32)(unsigned long)&cpu_number, 4); /* A = smp_processor_id(); */ |
8904 |
++#else |
8905 |
++ CLEAR_A(); |
8906 |
++#endif |
8907 |
++ break; |
8908 |
++ case BPF_S_ANC_VLAN_TAG: |
8909 |
++ case BPF_S_ANC_VLAN_TAG_PRESENT: |
8910 |
++ BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2); |
8911 |
++ if (is_imm8(offsetof(struct sk_buff, vlan_tci))) { |
8912 |
++ /* movzwl off8(%rdi),%eax */ |
8913 |
++ EMIT4(0x0f, 0xb7, 0x47, offsetof(struct sk_buff, vlan_tci)); |
8914 |
++ } else { |
8915 |
++ EMIT3(0x0f, 0xb7, 0x87); /* movzwl off32(%rdi),%eax */ |
8916 |
++ EMIT(offsetof(struct sk_buff, vlan_tci), 4); |
8917 |
++ } |
8918 |
++ BUILD_BUG_ON(VLAN_TAG_PRESENT != 0x1000); |
8919 |
++ if (filter[i].code == BPF_S_ANC_VLAN_TAG) { |
8920 |
++ EMIT3(0x80, 0xe4, 0xef); /* and $0xef,%ah */ |
8921 |
++ } else { |
8922 |
++ EMIT3(0xc1, 0xe8, 0x0c); /* shr $0xc,%eax */ |
8923 |
++ EMIT3(0x83, 0xe0, 0x01); /* and $0x1,%eax */ |
8924 |
++ } |
8925 |
++ break; |
8926 |
++ case BPF_S_ANC_PKTTYPE: |
8927 |
++ { |
8928 |
++ int off = pkt_type_offset(); |
8929 |
++ |
8930 |
++ if (off < 0) |
8931 |
++ goto out; |
8932 |
++ if (is_imm8(off)) { |
8933 |
++ /* movzbl off8(%rdi),%eax */ |
8934 |
++ EMIT4(0x0f, 0xb6, 0x47, off); |
8935 |
++ } else { |
8936 |
++ /* movbl off32(%rdi),%eax */ |
8937 |
++ EMIT3(0x0f, 0xb6, 0x87); |
8938 |
++ EMIT(off, 4); |
8939 |
++ } |
8940 |
++ EMIT3(0x83, 0xe0, PKT_TYPE_MAX); /* and $0x7,%eax */ |
8941 |
++ break; |
8942 |
++ } |
8943 |
++ case BPF_S_LD_W_ABS: |
8944 |
++ func = CHOOSE_LOAD_FUNC(K, sk_load_word); |
8945 |
++common_load: seen |= SEEN_DATAREF; |
8946 |
++ t_offset = func - (image + addrs[i]); |
8947 |
++ EMIT1_off32(0xbe, K); /* mov imm32,%esi */ |
8948 |
++ EMIT1_off32(0xe8, t_offset); /* call */ |
8949 |
++ break; |
8950 |
++ case BPF_S_LD_H_ABS: |
8951 |
++ func = CHOOSE_LOAD_FUNC(K, sk_load_half); |
8952 |
++ goto common_load; |
8953 |
++ case BPF_S_LD_B_ABS: |
8954 |
++ func = CHOOSE_LOAD_FUNC(K, sk_load_byte); |
8955 |
++ goto common_load; |
8956 |
++ case BPF_S_LDX_B_MSH: |
8957 |
++ func = CHOOSE_LOAD_FUNC(K, sk_load_byte_msh); |
8958 |
++ seen |= SEEN_DATAREF | SEEN_XREG; |
8959 |
++ t_offset = func - (image + addrs[i]); |
8960 |
++ EMIT1_off32(0xbe, K); /* mov imm32,%esi */ |
8961 |
++ EMIT1_off32(0xe8, t_offset); /* call sk_load_byte_msh */ |
8962 |
++ break; |
8963 |
++ case BPF_S_LD_W_IND: |
8964 |
++ func = sk_load_word; |
8965 |
++common_load_ind: seen |= SEEN_DATAREF | SEEN_XREG; |
8966 |
++ t_offset = func - (image + addrs[i]); |
8967 |
++ if (K) { |
8968 |
++ if (is_imm8(K)) { |
8969 |
++ EMIT3(0x8d, 0x73, K); /* lea imm8(%rbx), %esi */ |
8970 |
++ } else { |
8971 |
+ EMIT2_off32(0x8d, 0xb3, K); /* lea imm32(%rbx),%esi */ |
8972 |
- } |
8973 |
- } else { |
8974 |
- EMIT2(0x89,0xde); /* mov %ebx,%esi */ |
8975 |
-@@ -734,10 +838,12 @@ cond_branch: f_offset = addrs[i + filter[i].jf] - addrs[i]; |
8976 |
- if (unlikely(proglen + ilen > oldproglen)) { |
8977 |
- pr_err("bpb_jit_compile fatal error\n"); |
8978 |
- kfree(addrs); |
8979 |
-- module_free(NULL, header); |
8980 |
++ } |
8981 |
++ } else { |
8982 |
++ EMIT2(0x89,0xde); /* mov %ebx,%esi */ |
8983 |
++ } |
8984 |
++ EMIT1_off32(0xe8, t_offset); /* call sk_load_xxx_ind */ |
8985 |
++ break; |
8986 |
++ case BPF_S_LD_H_IND: |
8987 |
++ func = sk_load_half; |
8988 |
++ goto common_load_ind; |
8989 |
++ case BPF_S_LD_B_IND: |
8990 |
++ func = sk_load_byte; |
8991 |
++ goto common_load_ind; |
8992 |
++ case BPF_S_JMP_JA: |
8993 |
++ t_offset = addrs[i + K] - addrs[i]; |
8994 |
++ EMIT_JMP(t_offset); |
8995 |
++ break; |
8996 |
++ COND_SEL(BPF_S_JMP_JGT_K, X86_JA, X86_JBE); |
8997 |
++ COND_SEL(BPF_S_JMP_JGE_K, X86_JAE, X86_JB); |
8998 |
++ COND_SEL(BPF_S_JMP_JEQ_K, X86_JE, X86_JNE); |
8999 |
++ COND_SEL(BPF_S_JMP_JSET_K,X86_JNE, X86_JE); |
9000 |
++ COND_SEL(BPF_S_JMP_JGT_X, X86_JA, X86_JBE); |
9001 |
++ COND_SEL(BPF_S_JMP_JGE_X, X86_JAE, X86_JB); |
9002 |
++ COND_SEL(BPF_S_JMP_JEQ_X, X86_JE, X86_JNE); |
9003 |
++ COND_SEL(BPF_S_JMP_JSET_X,X86_JNE, X86_JE); |
9004 |
++ |
9005 |
++cond_branch: f_offset = addrs[i + filter[i].jf] - addrs[i]; |
9006 |
++ t_offset = addrs[i + filter[i].jt] - addrs[i]; |
9007 |
++ |
9008 |
++ /* same targets, can avoid doing the test :) */ |
9009 |
++ if (filter[i].jt == filter[i].jf) { |
9010 |
++ EMIT_JMP(t_offset); |
9011 |
++ break; |
9012 |
++ } |
9013 |
++ |
9014 |
++ switch (filter[i].code) { |
9015 |
++ case BPF_S_JMP_JGT_X: |
9016 |
++ case BPF_S_JMP_JGE_X: |
9017 |
++ case BPF_S_JMP_JEQ_X: |
9018 |
++ seen |= SEEN_XREG; |
9019 |
++ EMIT2(0x39, 0xd8); /* cmp %ebx,%eax */ |
9020 |
++ break; |
9021 |
++ case BPF_S_JMP_JSET_X: |
9022 |
++ seen |= SEEN_XREG; |
9023 |
++ EMIT2(0x85, 0xd8); /* test %ebx,%eax */ |
9024 |
++ break; |
9025 |
++ case BPF_S_JMP_JEQ_K: |
9026 |
++ if (K == 0) { |
9027 |
++ EMIT2(0x85, 0xc0); /* test %eax,%eax */ |
9028 |
++ break; |
9029 |
++ } |
9030 |
++ case BPF_S_JMP_JGT_K: |
9031 |
++ case BPF_S_JMP_JGE_K: |
9032 |
++ if (K <= 127) |
9033 |
++ EMIT3(0x83, 0xf8, K); /* cmp imm8,%eax */ |
9034 |
++ else |
9035 |
++ EMIT1_off32(0x3d, K); /* cmp imm32,%eax */ |
9036 |
++ break; |
9037 |
++ case BPF_S_JMP_JSET_K: |
9038 |
++ if (K <= 0xFF) |
9039 |
++ EMIT2(0xa8, K); /* test imm8,%al */ |
9040 |
++ else if (!(K & 0xFFFF00FF)) |
9041 |
++ EMIT3(0xf6, 0xc4, K >> 8); /* test imm8,%ah */ |
9042 |
++ else if (K <= 0xFFFF) { |
9043 |
++ EMIT2(0x66, 0xa9); /* test imm16,%ax */ |
9044 |
++ EMIT(K, 2); |
9045 |
++ } else { |
9046 |
++ EMIT1_off32(0xa9, K); /* test imm32,%eax */ |
9047 |
++ } |
9048 |
++ break; |
9049 |
++ } |
9050 |
++ if (filter[i].jt != 0) { |
9051 |
++ if (filter[i].jf && f_offset) |
9052 |
++ t_offset += is_near(f_offset) ? 2 : 5; |
9053 |
++ EMIT_COND_JMP(t_op, t_offset); |
9054 |
++ if (filter[i].jf) |
9055 |
++ EMIT_JMP(f_offset); |
9056 |
++ break; |
9057 |
++ } |
9058 |
++ EMIT_COND_JMP(f_op, f_offset); |
9059 |
++ break; |
9060 |
++ default: |
9061 |
++ /* hmm, too complex filter, give up with jit compiler */ |
9062 |
++ goto out; |
9063 |
++ } |
9064 |
++ ilen = prog - temp; |
9065 |
++ if (image) { |
9066 |
++ if (unlikely(proglen + ilen > oldproglen)) { |
9067 |
++ pr_err("bpb_jit_compile fatal error\n"); |
9068 |
++ kfree(addrs); |
9069 |
+ module_free_exec(NULL, image); |
9070 |
- return; |
9071 |
- } |
9072 |
++ return; |
9073 |
++ } |
9074 |
+ pax_open_kernel(); |
9075 |
- memcpy(image + proglen, temp, ilen); |
9076 |
++ memcpy(image + proglen, temp, ilen); |
9077 |
+ pax_close_kernel(); |
9078 |
- } |
9079 |
- proglen += ilen; |
9080 |
- addrs[i] = proglen; |
9081 |
-@@ -770,7 +876,6 @@ cond_branch: f_offset = addrs[i + filter[i].jf] - addrs[i]; |
9082 |
++ } |
9083 |
++ proglen += ilen; |
9084 |
++ addrs[i] = proglen; |
9085 |
++ prog = temp; |
9086 |
++ } |
9087 |
++ /* last bpf instruction is always a RET : |
9088 |
++ * use it to give the cleanup instruction(s) addr |
9089 |
++ */ |
9090 |
++ cleanup_addr = proglen - 1; /* ret */ |
9091 |
++ if (seen_or_pass0) |
9092 |
++ cleanup_addr -= 1; /* leaveq */ |
9093 |
++ if (seen_or_pass0 & SEEN_XREG) |
9094 |
++ cleanup_addr -= 4; /* mov -8(%rbp),%rbx */ |
9095 |
++ |
9096 |
+ if (image) { |
9097 |
+ if (proglen != oldproglen) |
9098 |
+- pr_err("bpf_jit: proglen=%d != oldproglen=%d\n", |
9099 |
+- proglen, oldproglen); |
9100 |
++ pr_err("bpb_jit_compile proglen=%u != oldproglen=%u\n", proglen, oldproglen); |
9101 |
+ break; |
9102 |
+ } |
9103 |
+ if (proglen == oldproglen) { |
9104 |
+@@ -918,32 +872,30 @@ void bpf_int_jit_compile(struct sk_filter *prog) |
9105 |
+ } |
9106 |
+ |
9107 |
+ if (bpf_jit_enable > 1) |
9108 |
+- bpf_jit_dump(prog->len, proglen, 0, image); |
9109 |
++ bpf_jit_dump(flen, proglen, pass, image); |
9110 |
|
9111 |
if (image) { |
9112 |
bpf_flush_icache(header, image + proglen); |
9113 |
- set_memory_ro((unsigned long)header, header->pages); |
9114 |
- fp->bpf_func = (void *)image; |
9115 |
- fp->jited = 1; |
9116 |
+- prog->bpf_func = (void *)image; |
9117 |
+- prog->jited = 1; |
9118 |
++ fp->bpf_func = (void *)image; |
9119 |
} |
9120 |
-@@ -783,10 +888,9 @@ static void bpf_jit_free_deferred(struct work_struct *work) |
9121 |
+ out: |
9122 |
+ kfree(addrs); |
9123 |
++ return; |
9124 |
+ } |
9125 |
+ |
9126 |
+ static void bpf_jit_free_deferred(struct work_struct *work) |
9127 |
{ |
9128 |
struct sk_filter *fp = container_of(work, struct sk_filter, work); |
9129 |
unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK; |
9130 |
@@ -34196,6 +36044,13 @@ index 6d5663a..f1ec380 100644 |
9131 |
kfree(fp); |
9132 |
} |
9133 |
|
9134 |
+ void bpf_jit_free(struct sk_filter *fp) |
9135 |
+ { |
9136 |
+- if (fp->jited) { |
9137 |
++ if (fp->bpf_func != sk_run_filter) { |
9138 |
+ INIT_WORK(&fp->work, bpf_jit_free_deferred); |
9139 |
+ schedule_work(&fp->work); |
9140 |
+ } else { |
9141 |
diff --git a/arch/x86/oprofile/backtrace.c b/arch/x86/oprofile/backtrace.c |
9142 |
index 5d04be5..2beeaa2 100644 |
9143 |
--- a/arch/x86/oprofile/backtrace.c |
9144 |
@@ -34880,7 +36735,7 @@ index fbe66e6..eae5e38 100644 |
9145 |
.long 0 |
9146 |
efi_rt_function_ptr: |
9147 |
diff --git a/arch/x86/platform/efi/efi_stub_64.S b/arch/x86/platform/efi/efi_stub_64.S |
9148 |
-index e0984ef..a062dac 100644 |
9149 |
+index 5fcda72..b9d1d65 100644 |
9150 |
--- a/arch/x86/platform/efi/efi_stub_64.S |
9151 |
+++ b/arch/x86/platform/efi/efi_stub_64.S |
9152 |
@@ -11,6 +11,7 @@ |
9153 |
@@ -34891,61 +36746,13 @@ index e0984ef..a062dac 100644 |
9154 |
|
9155 |
#define SAVE_XMM \ |
9156 |
mov %rsp, %rax; \ |
9157 |
-@@ -81,6 +82,7 @@ ENTRY(efi_call0) |
9158 |
- RESTORE_PGT |
9159 |
- addq $32, %rsp |
9160 |
- RESTORE_XMM |
9161 |
-+ pax_force_retaddr 0, 1 |
9162 |
- ret |
9163 |
- ENDPROC(efi_call0) |
9164 |
- |
9165 |
-@@ -93,6 +95,7 @@ ENTRY(efi_call1) |
9166 |
- RESTORE_PGT |
9167 |
- addq $32, %rsp |
9168 |
- RESTORE_XMM |
9169 |
-+ pax_force_retaddr 0, 1 |
9170 |
- ret |
9171 |
- ENDPROC(efi_call1) |
9172 |
- |
9173 |
-@@ -105,6 +108,7 @@ ENTRY(efi_call2) |
9174 |
- RESTORE_PGT |
9175 |
- addq $32, %rsp |
9176 |
- RESTORE_XMM |
9177 |
-+ pax_force_retaddr 0, 1 |
9178 |
- ret |
9179 |
- ENDPROC(efi_call2) |
9180 |
- |
9181 |
-@@ -118,6 +122,7 @@ ENTRY(efi_call3) |
9182 |
- RESTORE_PGT |
9183 |
- addq $32, %rsp |
9184 |
- RESTORE_XMM |
9185 |
-+ pax_force_retaddr 0, 1 |
9186 |
- ret |
9187 |
- ENDPROC(efi_call3) |
9188 |
- |
9189 |
-@@ -132,6 +137,7 @@ ENTRY(efi_call4) |
9190 |
- RESTORE_PGT |
9191 |
- addq $32, %rsp |
9192 |
- RESTORE_XMM |
9193 |
-+ pax_force_retaddr 0, 1 |
9194 |
- ret |
9195 |
- ENDPROC(efi_call4) |
9196 |
- |
9197 |
-@@ -147,6 +153,7 @@ ENTRY(efi_call5) |
9198 |
- RESTORE_PGT |
9199 |
- addq $48, %rsp |
9200 |
- RESTORE_XMM |
9201 |
-+ pax_force_retaddr 0, 1 |
9202 |
- ret |
9203 |
- ENDPROC(efi_call5) |
9204 |
- |
9205 |
-@@ -165,6 +172,7 @@ ENTRY(efi_call6) |
9206 |
+@@ -88,6 +89,7 @@ ENTRY(efi_call) |
9207 |
RESTORE_PGT |
9208 |
addq $48, %rsp |
9209 |
RESTORE_XMM |
9210 |
+ pax_force_retaddr 0, 1 |
9211 |
ret |
9212 |
- ENDPROC(efi_call6) |
9213 |
+ ENDPROC(efi_call) |
9214 |
|
9215 |
diff --git a/arch/x86/platform/intel-mid/intel-mid.c b/arch/x86/platform/intel-mid/intel-mid.c |
9216 |
index 1bbedc4..eb795b5 100644 |
9217 |
@@ -35034,10 +36841,10 @@ index bad628a..a102610 100644 |
9218 |
#endif |
9219 |
} |
9220 |
diff --git a/arch/x86/realmode/rm/Makefile b/arch/x86/realmode/rm/Makefile |
9221 |
-index 3497f14..cc73b92 100644 |
9222 |
+index 7c0d7be..d24dc88 100644 |
9223 |
--- a/arch/x86/realmode/rm/Makefile |
9224 |
+++ b/arch/x86/realmode/rm/Makefile |
9225 |
-@@ -66,5 +66,8 @@ $(obj)/realmode.relocs: $(obj)/realmode.elf FORCE |
9226 |
+@@ -67,5 +67,8 @@ $(obj)/realmode.relocs: $(obj)/realmode.elf FORCE |
9227 |
|
9228 |
KBUILD_CFLAGS := $(LINUXINCLUDE) $(REALMODE_CFLAGS) -D_SETUP -D_WAKEUP \ |
9229 |
-I$(srctree)/arch/x86/boot |
9230 |
@@ -35399,161 +37206,139 @@ index 80ffa5b..a33bd15 100644 |
9231 |
|
9232 |
return 0; |
9233 |
diff --git a/arch/x86/vdso/Makefile b/arch/x86/vdso/Makefile |
9234 |
-index c580d12..0a0ba35 100644 |
9235 |
+index 61b04fe..3134230 100644 |
9236 |
--- a/arch/x86/vdso/Makefile |
9237 |
+++ b/arch/x86/vdso/Makefile |
9238 |
-@@ -196,7 +196,7 @@ quiet_cmd_vdso = VDSO $@ |
9239 |
+@@ -170,7 +170,7 @@ quiet_cmd_vdso = VDSO $@ |
9240 |
-Wl,-T,$(filter %.lds,$^) $(filter %.o,$^) && \ |
9241 |
sh $(srctree)/$(src)/checkundef.sh '$(NM)' '$@' |
9242 |
|
9243 |
-VDSO_LDFLAGS = -fPIC -shared $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) \ |
9244 |
+VDSO_LDFLAGS = -fPIC -shared -Wl,--no-undefined $(call cc-ldoption, -Wl$(comma)--hash-style=sysv) \ |
9245 |
- $(LTO_CFLAGS) |
9246 |
+ $(call cc-ldoption, -Wl$(comma)--build-id) -Wl,-Bsymbolic $(LTO_CFLAGS) |
9247 |
GCOV_PROFILE := n |
9248 |
|
9249 |
diff --git a/arch/x86/vdso/vdso32-setup.c b/arch/x86/vdso/vdso32-setup.c |
9250 |
-index 3adf2e6..a0b5576 100644 |
9251 |
+index e4f7781..ab5ab26 100644 |
9252 |
--- a/arch/x86/vdso/vdso32-setup.c |
9253 |
+++ b/arch/x86/vdso/vdso32-setup.c |
9254 |
-@@ -29,6 +29,7 @@ |
9255 |
- #include <asm/fixmap.h> |
9256 |
- #include <asm/hpet.h> |
9257 |
- #include <asm/vvar.h> |
9258 |
+@@ -14,6 +14,7 @@ |
9259 |
+ #include <asm/cpufeature.h> |
9260 |
+ #include <asm/processor.h> |
9261 |
+ #include <asm/vdso.h> |
9262 |
+#include <asm/mman.h> |
9263 |
|
9264 |
#ifdef CONFIG_COMPAT_VDSO |
9265 |
#define VDSO_DEFAULT 0 |
9266 |
-@@ -98,7 +99,7 @@ void syscall32_cpu_init(void) |
9267 |
- void enable_sep_cpu(void) |
9268 |
- { |
9269 |
- int cpu = get_cpu(); |
9270 |
-- struct tss_struct *tss = &per_cpu(init_tss, cpu); |
9271 |
-+ struct tss_struct *tss = init_tss + cpu; |
9272 |
+diff --git a/arch/x86/vdso/vma.c b/arch/x86/vdso/vma.c |
9273 |
+index 5a5176d..e570acd 100644 |
9274 |
+--- a/arch/x86/vdso/vma.c |
9275 |
++++ b/arch/x86/vdso/vma.c |
9276 |
+@@ -16,10 +16,9 @@ |
9277 |
+ #include <asm/vdso.h> |
9278 |
+ #include <asm/page.h> |
9279 |
+ #include <asm/hpet.h> |
9280 |
++#include <asm/mman.h> |
9281 |
|
9282 |
- if (!boot_cpu_has(X86_FEATURE_SEP)) { |
9283 |
- put_cpu(); |
9284 |
-@@ -166,7 +167,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) |
9285 |
+ #if defined(CONFIG_X86_64) |
9286 |
+-unsigned int __read_mostly vdso64_enabled = 1; |
9287 |
+- |
9288 |
+ extern unsigned short vdso_sync_cpuid; |
9289 |
+ #endif |
9290 |
+ |
9291 |
+@@ -101,6 +100,11 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr) |
9292 |
+ .pages = no_pages, |
9293 |
+ }; |
9294 |
+ |
9295 |
++#ifdef CONFIG_PAX_RANDMMAP |
9296 |
++ if (mm->pax_flags & MF_PAX_RANDMMAP) |
9297 |
++ calculate_addr = false; |
9298 |
++#endif |
9299 |
++ |
9300 |
+ if (calculate_addr) { |
9301 |
+ addr = vdso_addr(current->mm->start_stack, |
9302 |
+ image->sym_end_mapping); |
9303 |
+@@ -110,13 +114,13 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr) |
9304 |
|
9305 |
down_write(&mm->mmap_sem); |
9306 |
|
9307 |
-- addr = get_unmapped_area(NULL, 0, vdso32_size + VDSO_OFFSET(VDSO_PREV_PAGES), 0, 0); |
9308 |
-+ addr = get_unmapped_area(NULL, 0, vdso32_size + VDSO_OFFSET(VDSO_PREV_PAGES), 0, MAP_EXECUTABLE); |
9309 |
+- addr = get_unmapped_area(NULL, addr, image->sym_end_mapping, 0, 0); |
9310 |
++ addr = get_unmapped_area(NULL, addr, image->sym_end_mapping, 0, MAP_EXECUTABLE); |
9311 |
if (IS_ERR_VALUE(addr)) { |
9312 |
ret = addr; |
9313 |
goto up_fail; |
9314 |
-@@ -174,7 +175,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) |
9315 |
- |
9316 |
- addr += VDSO_OFFSET(VDSO_PREV_PAGES); |
9317 |
+ } |
9318 |
|
9319 |
-- current->mm->context.vdso = (void *)addr; |
9320 |
-+ current->mm->context.vdso = addr; |
9321 |
+- current->mm->context.vdso = (void __user *)addr; |
9322 |
++ mm->context.vdso = addr; |
9323 |
|
9324 |
/* |
9325 |
* MAYWRITE to allow gdb to COW and set breakpoints |
9326 |
-@@ -223,11 +224,11 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) |
9327 |
+@@ -161,15 +165,12 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr) |
9328 |
+ hpet_address >> PAGE_SHIFT, |
9329 |
+ PAGE_SIZE, |
9330 |
+ pgprot_noncached(PAGE_READONLY)); |
9331 |
+- |
9332 |
+- if (ret) |
9333 |
+- goto up_fail; |
9334 |
+ } |
9335 |
#endif |
9336 |
|
9337 |
- current_thread_info()->sysenter_return = |
9338 |
-- VDSO32_SYMBOL(addr, SYSENTER_RETURN); |
9339 |
-+ (void __force_user *)VDSO32_SYMBOL(addr, SYSENTER_RETURN); |
9340 |
- |
9341 |
- up_fail: |
9342 |
+ up_fail: |
9343 |
if (ret) |
9344 |
- current->mm->context.vdso = NULL; |
9345 |
+ current->mm->context.vdso = 0; |
9346 |
|
9347 |
up_write(&mm->mmap_sem); |
9348 |
+ return ret; |
9349 |
+@@ -189,8 +190,8 @@ static int load_vdso32(void) |
9350 |
|
9351 |
-@@ -274,8 +275,14 @@ __initcall(ia32_binfmt_init); |
9352 |
- |
9353 |
- const char *arch_vma_name(struct vm_area_struct *vma) |
9354 |
- { |
9355 |
-- if (vma->vm_mm && vma->vm_start == (long)vma->vm_mm->context.vdso) |
9356 |
-+ if (vma->vm_mm && vma->vm_start == vma->vm_mm->context.vdso) |
9357 |
- return "[vdso]"; |
9358 |
-+ |
9359 |
-+#ifdef CONFIG_PAX_SEGMEXEC |
9360 |
-+ if (vma->vm_mm && vma->vm_mirror && vma->vm_mirror->vm_start == vma->vm_mm->context.vdso) |
9361 |
-+ return "[vdso]"; |
9362 |
-+#endif |
9363 |
-+ |
9364 |
- return NULL; |
9365 |
- } |
9366 |
- |
9367 |
-diff --git a/arch/x86/vdso/vma.c b/arch/x86/vdso/vma.c |
9368 |
-index 1ad1026..1a08abe 100644 |
9369 |
---- a/arch/x86/vdso/vma.c |
9370 |
-+++ b/arch/x86/vdso/vma.c |
9371 |
-@@ -17,8 +17,6 @@ |
9372 |
- #include <asm/page.h> |
9373 |
- |
9374 |
- #if defined(CONFIG_X86_64) |
9375 |
--unsigned int __read_mostly vdso_enabled = 1; |
9376 |
-- |
9377 |
- DECLARE_VDSO_IMAGE(vdso); |
9378 |
- extern unsigned short vdso_sync_cpuid; |
9379 |
- static unsigned vdso_size; |
9380 |
-@@ -144,7 +142,6 @@ static unsigned long vdso_addr(unsigned long start, unsigned len) |
9381 |
- * unaligned here as a result of stack start randomization. |
9382 |
- */ |
9383 |
- addr = PAGE_ALIGN(addr); |
9384 |
-- addr = align_vdso_addr(addr); |
9385 |
+ if (selected_vdso32->sym_VDSO32_SYSENTER_RETURN) |
9386 |
+ current_thread_info()->sysenter_return = |
9387 |
+- current->mm->context.vdso + |
9388 |
+- selected_vdso32->sym_VDSO32_SYSENTER_RETURN; |
9389 |
++ (void __force_user *)(current->mm->context.vdso + |
9390 |
++ selected_vdso32->sym_VDSO32_SYSENTER_RETURN); |
9391 |
|
9392 |
- return addr; |
9393 |
+ return 0; |
9394 |
} |
9395 |
-@@ -157,30 +154,31 @@ static int setup_additional_pages(struct linux_binprm *bprm, |
9396 |
- unsigned size) |
9397 |
+@@ -199,9 +200,6 @@ static int load_vdso32(void) |
9398 |
+ #ifdef CONFIG_X86_64 |
9399 |
+ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) |
9400 |
{ |
9401 |
- struct mm_struct *mm = current->mm; |
9402 |
-- unsigned long addr; |
9403 |
-+ unsigned long addr = 0; |
9404 |
- int ret; |
9405 |
- |
9406 |
-- if (!vdso_enabled) |
9407 |
+- if (!vdso64_enabled) |
9408 |
- return 0; |
9409 |
- |
9410 |
- down_write(&mm->mmap_sem); |
9411 |
-+ |
9412 |
-+#ifdef CONFIG_PAX_RANDMMAP |
9413 |
-+ if (!(mm->pax_flags & MF_PAX_RANDMMAP)) |
9414 |
-+#endif |
9415 |
-+ |
9416 |
- addr = vdso_addr(mm->start_stack, size); |
9417 |
-+ addr = align_vdso_addr(addr); |
9418 |
- addr = get_unmapped_area(NULL, addr, size, 0, 0); |
9419 |
- if (IS_ERR_VALUE(addr)) { |
9420 |
- ret = addr; |
9421 |
- goto up_fail; |
9422 |
- } |
9423 |
- |
9424 |
-- current->mm->context.vdso = (void *)addr; |
9425 |
-+ mm->context.vdso = addr; |
9426 |
+ return map_vdso(&vdso_image_64, true); |
9427 |
+ } |
9428 |
|
9429 |
- ret = install_special_mapping(mm, addr, size, |
9430 |
- VM_READ|VM_EXEC| |
9431 |
- VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC, |
9432 |
- pages); |
9433 |
-- if (ret) { |
9434 |
-- current->mm->context.vdso = NULL; |
9435 |
-- goto up_fail; |
9436 |
+@@ -210,12 +208,8 @@ int compat_arch_setup_additional_pages(struct linux_binprm *bprm, |
9437 |
+ int uses_interp) |
9438 |
+ { |
9439 |
+ #ifdef CONFIG_X86_X32_ABI |
9440 |
+- if (test_thread_flag(TIF_X32)) { |
9441 |
+- if (!vdso64_enabled) |
9442 |
+- return 0; |
9443 |
+- |
9444 |
++ if (test_thread_flag(TIF_X32)) |
9445 |
+ return map_vdso(&vdso_image_x32, true); |
9446 |
- } |
9447 |
-+ if (ret) |
9448 |
-+ mm->context.vdso = 0; |
9449 |
+ #endif |
9450 |
|
9451 |
- up_fail: |
9452 |
- up_write(&mm->mmap_sem); |
9453 |
-@@ -200,11 +198,4 @@ int x32_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) |
9454 |
- vdsox32_size); |
9455 |
+ return load_vdso32(); |
9456 |
+@@ -227,12 +221,3 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) |
9457 |
+ return load_vdso32(); |
9458 |
} |
9459 |
#endif |
9460 |
- |
9461 |
+-#ifdef CONFIG_X86_64 |
9462 |
-static __init int vdso_setup(char *s) |
9463 |
-{ |
9464 |
-- vdso_enabled = simple_strtoul(s, NULL, 0); |
9465 |
+- vdso64_enabled = simple_strtoul(s, NULL, 0); |
9466 |
- return 0; |
9467 |
-} |
9468 |
-__setup("vdso=", vdso_setup); |
9469 |
- #endif |
9470 |
+-#endif |
9471 |
diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig |
9472 |
index e88fda8..76ce7ce 100644 |
9473 |
--- a/arch/x86/xen/Kconfig |
9474 |
@@ -35567,7 +37352,7 @@ index e88fda8..76ce7ce 100644 |
9475 |
This is the Linux Xen port. Enabling this will allow the |
9476 |
kernel to boot in a paravirtualized environment under the |
9477 |
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c |
9478 |
-index c34bfc4..e599673 100644 |
9479 |
+index ffb101e..98c0ecf 100644 |
9480 |
--- a/arch/x86/xen/enlighten.c |
9481 |
+++ b/arch/x86/xen/enlighten.c |
9482 |
@@ -123,8 +123,6 @@ EXPORT_SYMBOL_GPL(xen_start_info); |
9483 |
@@ -35655,7 +37440,7 @@ index c34bfc4..e599673 100644 |
9484 |
{ |
9485 |
if (pm_power_off) |
9486 |
pm_power_off(); |
9487 |
-@@ -1564,7 +1560,17 @@ asmlinkage __visible void __init xen_start_kernel(void) |
9488 |
+@@ -1568,7 +1564,17 @@ asmlinkage __visible void __init xen_start_kernel(void) |
9489 |
__userpte_alloc_gfp &= ~__GFP_HIGHMEM; |
9490 |
|
9491 |
/* Work out if we support NX */ |
9492 |
@@ -35674,7 +37459,7 @@ index c34bfc4..e599673 100644 |
9493 |
|
9494 |
/* Get mfn list */ |
9495 |
xen_build_dynamic_phys_to_machine(); |
9496 |
-@@ -1592,13 +1598,6 @@ asmlinkage __visible void __init xen_start_kernel(void) |
9497 |
+@@ -1596,13 +1602,6 @@ asmlinkage __visible void __init xen_start_kernel(void) |
9498 |
|
9499 |
machine_ops = xen_machine_ops; |
9500 |
|
9501 |
@@ -35689,7 +37474,7 @@ index c34bfc4..e599673 100644 |
9502 |
|
9503 |
#ifdef CONFIG_ACPI_NUMA |
9504 |
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c |
9505 |
-index 86e02ea..e3705ca 100644 |
9506 |
+index e8a1201..046c66c 100644 |
9507 |
--- a/arch/x86/xen/mmu.c |
9508 |
+++ b/arch/x86/xen/mmu.c |
9509 |
@@ -379,7 +379,7 @@ static pteval_t pte_mfn_to_pfn(pteval_t val) |
9510 |
@@ -35724,7 +37509,7 @@ index 86e02ea..e3705ca 100644 |
9511 |
set_page_prot(level2_kernel_pgt, PAGE_KERNEL_RO); |
9512 |
set_page_prot(level2_fixmap_pgt, PAGE_KERNEL_RO); |
9513 |
|
9514 |
-@@ -2122,6 +2129,7 @@ static void __init xen_post_allocator_init(void) |
9515 |
+@@ -2120,6 +2127,7 @@ static void __init xen_post_allocator_init(void) |
9516 |
pv_mmu_ops.set_pud = xen_set_pud; |
9517 |
#if PAGETABLE_LEVELS == 4 |
9518 |
pv_mmu_ops.set_pgd = xen_set_pgd; |
9519 |
@@ -35732,7 +37517,7 @@ index 86e02ea..e3705ca 100644 |
9520 |
#endif |
9521 |
|
9522 |
/* This will work as long as patching hasn't happened yet |
9523 |
-@@ -2200,6 +2208,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = { |
9524 |
+@@ -2198,6 +2206,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = { |
9525 |
.pud_val = PV_CALLEE_SAVE(xen_pud_val), |
9526 |
.make_pud = PV_CALLEE_SAVE(xen_make_pud), |
9527 |
.set_pgd = xen_set_pgd_hyper, |
9528 |
@@ -35846,7 +37631,7 @@ index 485b695..fda3e7c 100644 |
9529 |
mov %rsi,xen_start_info |
9530 |
mov $init_thread_union+THREAD_SIZE,%rsp |
9531 |
diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h |
9532 |
-index 1cb6f4c..9981524 100644 |
9533 |
+index 97d8765..c4526ec 100644 |
9534 |
--- a/arch/x86/xen/xen-ops.h |
9535 |
+++ b/arch/x86/xen/xen-ops.h |
9536 |
@@ -10,8 +10,6 @@ |
9537 |
@@ -35919,8 +37704,39 @@ index af00795..2bb8105 100644 |
9538 |
|
9539 |
#define XCHAL_ICACHE_SIZE 32768 /* I-cache size in bytes or 0 */ |
9540 |
#define XCHAL_DCACHE_SIZE 32768 /* D-cache size in bytes or 0 */ |
9541 |
+diff --git a/block/bio.c b/block/bio.c |
9542 |
+index 0ec61c9..93b94060 100644 |
9543 |
+--- a/block/bio.c |
9544 |
++++ b/block/bio.c |
9545 |
+@@ -1159,7 +1159,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q, |
9546 |
+ /* |
9547 |
+ * Overflow, abort |
9548 |
+ */ |
9549 |
+- if (end < start) |
9550 |
++ if (end < start || end - start > INT_MAX - nr_pages) |
9551 |
+ return ERR_PTR(-EINVAL); |
9552 |
+ |
9553 |
+ nr_pages += end - start; |
9554 |
+@@ -1293,7 +1293,7 @@ static struct bio *__bio_map_user_iov(struct request_queue *q, |
9555 |
+ /* |
9556 |
+ * Overflow, abort |
9557 |
+ */ |
9558 |
+- if (end < start) |
9559 |
++ if (end < start || end - start > INT_MAX - nr_pages) |
9560 |
+ return ERR_PTR(-EINVAL); |
9561 |
+ |
9562 |
+ nr_pages += end - start; |
9563 |
+@@ -1555,7 +1555,7 @@ static void bio_copy_kern_endio(struct bio *bio, int err) |
9564 |
+ const int read = bio_data_dir(bio) == READ; |
9565 |
+ struct bio_map_data *bmd = bio->bi_private; |
9566 |
+ int i; |
9567 |
+- char *p = bmd->sgvecs[0].iov_base; |
9568 |
++ char *p = (char __force_kernel *)bmd->sgvecs[0].iov_base; |
9569 |
+ |
9570 |
+ bio_for_each_segment_all(bvec, bio, i) { |
9571 |
+ char *addr = page_address(bvec->bv_page); |
9572 |
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c |
9573 |
-index f1e3803..05e2d06 100644 |
9574 |
+index 28d227c..d4c0bad 100644 |
9575 |
--- a/block/blk-cgroup.c |
9576 |
+++ b/block/blk-cgroup.c |
9577 |
@@ -822,7 +822,7 @@ static void blkcg_css_free(struct cgroup_subsys_state *css) |
9578 |
@@ -35942,10 +37758,10 @@ index f1e3803..05e2d06 100644 |
9579 |
spin_lock_init(&blkcg->lock); |
9580 |
INIT_RADIX_TREE(&blkcg->blkg_tree, GFP_ATOMIC); |
9581 |
diff --git a/block/blk-iopoll.c b/block/blk-iopoll.c |
9582 |
-index c11d24e..e915d24 100644 |
9583 |
+index 0736729..2ec3b48 100644 |
9584 |
--- a/block/blk-iopoll.c |
9585 |
+++ b/block/blk-iopoll.c |
9586 |
-@@ -74,7 +74,7 @@ void blk_iopoll_complete(struct blk_iopoll *iopoll) |
9587 |
+@@ -74,7 +74,7 @@ void blk_iopoll_complete(struct blk_iopoll *iop) |
9588 |
} |
9589 |
EXPORT_SYMBOL(blk_iopoll_complete); |
9590 |
|
9591 |
@@ -35955,10 +37771,10 @@ index c11d24e..e915d24 100644 |
9592 |
struct list_head *list = this_cpu_ptr(&blk_cpu_iopoll); |
9593 |
int rearm = 0, budget = blk_iopoll_budget; |
9594 |
diff --git a/block/blk-map.c b/block/blk-map.c |
9595 |
-index f7b22bc..ec2ddf4 100644 |
9596 |
+index f890d43..97b0482 100644 |
9597 |
--- a/block/blk-map.c |
9598 |
+++ b/block/blk-map.c |
9599 |
-@@ -302,7 +302,7 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf, |
9600 |
+@@ -300,7 +300,7 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf, |
9601 |
if (!len || !kbuf) |
9602 |
return -EINVAL; |
9603 |
|
9604 |
@@ -35981,7 +37797,7 @@ index 53b1737..08177d2e 100644 |
9605 |
struct list_head *cpu_list, local_list; |
9606 |
|
9607 |
diff --git a/block/bsg.c b/block/bsg.c |
9608 |
-index 420a5a9..23834aa 100644 |
9609 |
+index ff46add..c4ba8ee 100644 |
9610 |
--- a/block/bsg.c |
9611 |
+++ b/block/bsg.c |
9612 |
@@ -176,16 +176,24 @@ static int blk_fill_sgv4_hdr_rq(struct request_queue *q, struct request *rq, |
9613 |
@@ -36091,7 +37907,7 @@ index dc51f46..d5446a8 100644 |
9614 |
(u8 *) pte, count) < count) { |
9615 |
kfree(pte); |
9616 |
diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c |
9617 |
-index 2648797..92ed21f 100644 |
9618 |
+index 14695c6..27a4636 100644 |
9619 |
--- a/block/scsi_ioctl.c |
9620 |
+++ b/block/scsi_ioctl.c |
9621 |
@@ -67,7 +67,7 @@ static int scsi_get_bus(struct request_queue *q, int __user *p) |
9622 |
@@ -36103,7 +37919,7 @@ index 2648797..92ed21f 100644 |
9623 |
{ |
9624 |
return jiffies_to_clock_t(q->sg_timeout); |
9625 |
} |
9626 |
-@@ -224,8 +224,20 @@ EXPORT_SYMBOL(blk_verify_command); |
9627 |
+@@ -220,8 +220,20 @@ EXPORT_SYMBOL(blk_verify_command); |
9628 |
static int blk_fill_sghdr_rq(struct request_queue *q, struct request *rq, |
9629 |
struct sg_io_hdr *hdr, fmode_t mode) |
9630 |
{ |
9631 |
@@ -36125,7 +37941,7 @@ index 2648797..92ed21f 100644 |
9632 |
if (blk_verify_command(rq->cmd, mode & FMODE_WRITE)) |
9633 |
return -EPERM; |
9634 |
|
9635 |
-@@ -417,6 +429,8 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode, |
9636 |
+@@ -413,6 +425,8 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode, |
9637 |
int err; |
9638 |
unsigned int in_len, out_len, bytes, opcode, cmdlen; |
9639 |
char *buffer = NULL, sense[SCSI_SENSE_BUFFERSIZE]; |
9640 |
@@ -36134,7 +37950,7 @@ index 2648797..92ed21f 100644 |
9641 |
|
9642 |
if (!sic) |
9643 |
return -EINVAL; |
9644 |
-@@ -450,9 +464,18 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode, |
9645 |
+@@ -446,9 +460,18 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode, |
9646 |
*/ |
9647 |
err = -EFAULT; |
9648 |
rq->cmd_len = cmdlen; |
9649 |
@@ -36332,10 +38148,10 @@ index 38cb978..352c761 100644 |
9650 |
static void delete_gpe_attr_array(void) |
9651 |
{ |
9652 |
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c |
9653 |
-index b986145..82bddb8 100644 |
9654 |
+index d72ce04..d6ab3c2 100644 |
9655 |
--- a/drivers/ata/libahci.c |
9656 |
+++ b/drivers/ata/libahci.c |
9657 |
-@@ -1252,7 +1252,7 @@ int ahci_kick_engine(struct ata_port *ap) |
9658 |
+@@ -1257,7 +1257,7 @@ int ahci_kick_engine(struct ata_port *ap) |
9659 |
} |
9660 |
EXPORT_SYMBOL_GPL(ahci_kick_engine); |
9661 |
|
9662 |
@@ -36404,10 +38220,10 @@ index 677c0c1..354b89b 100644 |
9663 |
} |
9664 |
|
9665 |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c |
9666 |
-index ef8567d..8bdbd03 100644 |
9667 |
+index 72691fd..ad104c0 100644 |
9668 |
--- a/drivers/ata/libata-scsi.c |
9669 |
+++ b/drivers/ata/libata-scsi.c |
9670 |
-@@ -4147,7 +4147,7 @@ int ata_sas_port_init(struct ata_port *ap) |
9671 |
+@@ -4151,7 +4151,7 @@ int ata_sas_port_init(struct ata_port *ap) |
9672 |
|
9673 |
if (rc) |
9674 |
return rc; |
9675 |
@@ -36637,7 +38453,7 @@ index 82f2ae0..f205c02 100644 |
9676 |
default: /* Hmm. Haven't written the code to handle the others yet... -- REW */ |
9677 |
printk (KERN_WARNING "Don't know what to do with RX status %x: %s.\n", |
9678 |
diff --git a/drivers/atm/fore200e.c b/drivers/atm/fore200e.c |
9679 |
-index 204814e..cede831 100644 |
9680 |
+index d4725fc..2d4ea65 100644 |
9681 |
--- a/drivers/atm/fore200e.c |
9682 |
+++ b/drivers/atm/fore200e.c |
9683 |
@@ -931,9 +931,9 @@ fore200e_tx_irq(struct fore200e* fore200e) |
9684 |
@@ -36804,7 +38620,7 @@ index 1dc0519..1aadaf7 100644 |
9685 |
// free the skb |
9686 |
hrz_kfree_skb (skb); |
9687 |
diff --git a/drivers/atm/idt77252.c b/drivers/atm/idt77252.c |
9688 |
-index 1bdf104..9dc44b1 100644 |
9689 |
+index b621f56..1e3a799 100644 |
9690 |
--- a/drivers/atm/idt77252.c |
9691 |
+++ b/drivers/atm/idt77252.c |
9692 |
@@ -812,7 +812,7 @@ drain_scq(struct idt77252_dev *card, struct vc_map *vc) |
9693 |
@@ -37504,7 +39320,7 @@ index 8f7ed99..700dd0c 100644 |
9694 |
static ssize_t show_node_state(struct device *dev, |
9695 |
struct device_attribute *attr, char *buf) |
9696 |
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c |
9697 |
-index ae098a2..0999830 100644 |
9698 |
+index eee55c1..b8c9393 100644 |
9699 |
--- a/drivers/base/power/domain.c |
9700 |
+++ b/drivers/base/power/domain.c |
9701 |
@@ -1821,9 +1821,9 @@ int __pm_genpd_remove_callbacks(struct device *dev, bool clear_td) |
9702 |
@@ -37551,7 +39367,7 @@ index 95b181d1..c4f0e19 100644 |
9703 |
|
9704 |
static DEVICE_ATTR(runtime_status, 0444, rtpm_status_show, NULL); |
9705 |
diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c |
9706 |
-index 2d56f41..8830f19 100644 |
9707 |
+index eb1bd2e..2667d3a 100644 |
9708 |
--- a/drivers/base/power/wakeup.c |
9709 |
+++ b/drivers/base/power/wakeup.c |
9710 |
@@ -29,14 +29,14 @@ bool events_check_enabled __read_mostly; |
9711 |
@@ -37571,7 +39387,7 @@ index 2d56f41..8830f19 100644 |
9712 |
|
9713 |
*cnt = (comb >> IN_PROGRESS_BITS); |
9714 |
*inpr = comb & MAX_IN_PROGRESS; |
9715 |
-@@ -395,7 +395,7 @@ static void wakeup_source_activate(struct wakeup_source *ws) |
9716 |
+@@ -401,7 +401,7 @@ static void wakeup_source_activate(struct wakeup_source *ws) |
9717 |
ws->start_prevent_time = ws->last_time; |
9718 |
|
9719 |
/* Increment the counter of events in progress. */ |
9720 |
@@ -37580,7 +39396,7 @@ index 2d56f41..8830f19 100644 |
9721 |
|
9722 |
trace_wakeup_source_activate(ws->name, cec); |
9723 |
} |
9724 |
-@@ -521,7 +521,7 @@ static void wakeup_source_deactivate(struct wakeup_source *ws) |
9725 |
+@@ -527,7 +527,7 @@ static void wakeup_source_deactivate(struct wakeup_source *ws) |
9726 |
* Increment the counter of registered wakeup events and decrement the |
9727 |
* couter of wakeup events in progress simultaneously. |
9728 |
*/ |
9729 |
@@ -37590,10 +39406,10 @@ index 2d56f41..8830f19 100644 |
9730 |
|
9731 |
split_counters(&cnt, &inpr); |
9732 |
diff --git a/drivers/base/syscore.c b/drivers/base/syscore.c |
9733 |
-index e8d11b6..7b1b36f 100644 |
9734 |
+index dbb8350..4762f4c 100644 |
9735 |
--- a/drivers/base/syscore.c |
9736 |
+++ b/drivers/base/syscore.c |
9737 |
-@@ -21,7 +21,7 @@ static DEFINE_MUTEX(syscore_ops_lock); |
9738 |
+@@ -22,7 +22,7 @@ static DEFINE_MUTEX(syscore_ops_lock); |
9739 |
void register_syscore_ops(struct syscore_ops *ops) |
9740 |
{ |
9741 |
mutex_lock(&syscore_ops_lock); |
9742 |
@@ -37602,7 +39418,7 @@ index e8d11b6..7b1b36f 100644 |
9743 |
mutex_unlock(&syscore_ops_lock); |
9744 |
} |
9745 |
EXPORT_SYMBOL_GPL(register_syscore_ops); |
9746 |
-@@ -33,7 +33,7 @@ EXPORT_SYMBOL_GPL(register_syscore_ops); |
9747 |
+@@ -34,7 +34,7 @@ EXPORT_SYMBOL_GPL(register_syscore_ops); |
9748 |
void unregister_syscore_ops(struct syscore_ops *ops) |
9749 |
{ |
9750 |
mutex_lock(&syscore_ops_lock); |
9751 |
@@ -37612,7 +39428,7 @@ index e8d11b6..7b1b36f 100644 |
9752 |
} |
9753 |
EXPORT_SYMBOL_GPL(unregister_syscore_ops); |
9754 |
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c |
9755 |
-index 73894ca..69f64ef 100644 |
9756 |
+index 4595c22..d4f6c54 100644 |
9757 |
--- a/drivers/block/cciss.c |
9758 |
+++ b/drivers/block/cciss.c |
9759 |
@@ -3011,7 +3011,7 @@ static void start_io(ctlr_info_t *h) |
9760 |
@@ -37672,7 +39488,7 @@ index 73894ca..69f64ef 100644 |
9761 |
h->transMethod = CFGTBL_Trans_Performant; |
9762 |
|
9763 |
return; |
9764 |
-@@ -4325,7 +4325,7 @@ static int cciss_pci_init(ctlr_info_t *h) |
9765 |
+@@ -4321,7 +4321,7 @@ static int cciss_pci_init(ctlr_info_t *h) |
9766 |
if (prod_index < 0) |
9767 |
return -ENODEV; |
9768 |
h->product_name = products[prod_index].product_name; |
9769 |
@@ -37681,7 +39497,7 @@ index 73894ca..69f64ef 100644 |
9770 |
|
9771 |
if (cciss_board_disabled(h)) { |
9772 |
dev_warn(&h->pdev->dev, "controller appears to be disabled\n"); |
9773 |
-@@ -5057,7 +5057,7 @@ reinit_after_soft_reset: |
9774 |
+@@ -5053,7 +5053,7 @@ reinit_after_soft_reset: |
9775 |
} |
9776 |
|
9777 |
/* make sure the board interrupts are off */ |
9778 |
@@ -37690,7 +39506,7 @@ index 73894ca..69f64ef 100644 |
9779 |
rc = cciss_request_irq(h, do_cciss_msix_intr, do_cciss_intx); |
9780 |
if (rc) |
9781 |
goto clean2; |
9782 |
-@@ -5107,7 +5107,7 @@ reinit_after_soft_reset: |
9783 |
+@@ -5103,7 +5103,7 @@ reinit_after_soft_reset: |
9784 |
* fake ones to scoop up any residual completions. |
9785 |
*/ |
9786 |
spin_lock_irqsave(&h->lock, flags); |
9787 |
@@ -37699,7 +39515,7 @@ index 73894ca..69f64ef 100644 |
9788 |
spin_unlock_irqrestore(&h->lock, flags); |
9789 |
free_irq(h->intr[h->intr_mode], h); |
9790 |
rc = cciss_request_irq(h, cciss_msix_discard_completions, |
9791 |
-@@ -5127,9 +5127,9 @@ reinit_after_soft_reset: |
9792 |
+@@ -5123,9 +5123,9 @@ reinit_after_soft_reset: |
9793 |
dev_info(&h->pdev->dev, "Board READY.\n"); |
9794 |
dev_info(&h->pdev->dev, |
9795 |
"Waiting for stale completions to drain.\n"); |
9796 |
@@ -37711,7 +39527,7 @@ index 73894ca..69f64ef 100644 |
9797 |
|
9798 |
rc = controller_reset_failed(h->cfgtable); |
9799 |
if (rc) |
9800 |
-@@ -5152,7 +5152,7 @@ reinit_after_soft_reset: |
9801 |
+@@ -5148,7 +5148,7 @@ reinit_after_soft_reset: |
9802 |
cciss_scsi_setup(h); |
9803 |
|
9804 |
/* Turn the interrupts on so we can service requests */ |
9805 |
@@ -37720,7 +39536,7 @@ index 73894ca..69f64ef 100644 |
9806 |
|
9807 |
/* Get the firmware version */ |
9808 |
inq_buff = kzalloc(sizeof(InquiryData_struct), GFP_KERNEL); |
9809 |
-@@ -5224,7 +5224,7 @@ static void cciss_shutdown(struct pci_dev *pdev) |
9810 |
+@@ -5220,7 +5220,7 @@ static void cciss_shutdown(struct pci_dev *pdev) |
9811 |
kfree(flush_buf); |
9812 |
if (return_code != IO_OK) |
9813 |
dev_warn(&h->pdev->dev, "Error flushing cache\n"); |
9814 |
@@ -37919,7 +39735,7 @@ index be73e9d..7fbf140 100644 |
9815 |
cmdlist_t *reqQ; |
9816 |
cmdlist_t *cmpQ; |
9817 |
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h |
9818 |
-index e7093d4..b364085 100644 |
9819 |
+index a76ceb3..3c1a9fd 100644 |
9820 |
--- a/drivers/block/drbd/drbd_int.h |
9821 |
+++ b/drivers/block/drbd/drbd_int.h |
9822 |
@@ -331,7 +331,7 @@ struct drbd_epoch { |
9823 |
@@ -37931,7 +39747,7 @@ index e7093d4..b364085 100644 |
9824 |
atomic_t active; /* increased on every req. added, and dec on every finished. */ |
9825 |
unsigned long flags; |
9826 |
}; |
9827 |
-@@ -787,7 +787,7 @@ struct drbd_device { |
9828 |
+@@ -797,7 +797,7 @@ struct drbd_device { |
9829 |
unsigned int al_tr_number; |
9830 |
int al_tr_cycle; |
9831 |
wait_queue_head_t seq_wait; |
9832 |
@@ -37940,7 +39756,7 @@ index e7093d4..b364085 100644 |
9833 |
unsigned int peer_seq; |
9834 |
spinlock_t peer_seq_lock; |
9835 |
unsigned int minor; |
9836 |
-@@ -1361,7 +1361,7 @@ static inline int drbd_setsockopt(struct socket *sock, int level, int optname, |
9837 |
+@@ -1407,7 +1407,7 @@ static inline int drbd_setsockopt(struct socket *sock, int level, int optname, |
9838 |
char __user *uoptval; |
9839 |
int err; |
9840 |
|
9841 |
@@ -37967,7 +39783,7 @@ index 89c497c..9c736ae 100644 |
9842 |
|
9843 |
/** |
9844 |
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c |
9845 |
-index 331e5cc..6d657bce 100644 |
9846 |
+index 960645c..6c2724a 100644 |
9847 |
--- a/drivers/block/drbd/drbd_main.c |
9848 |
+++ b/drivers/block/drbd/drbd_main.c |
9849 |
@@ -1322,7 +1322,7 @@ static int _drbd_send_ack(struct drbd_peer_device *peer_device, enum drbd_packet |
9850 |
@@ -37988,7 +39804,7 @@ index 331e5cc..6d657bce 100644 |
9851 |
dp_flags = bio_flags_to_wire(peer_device->connection, req->master_bio->bi_rw); |
9852 |
if (device->state.conn >= C_SYNC_SOURCE && |
9853 |
device->state.conn <= C_PAUSED_SYNC_T) |
9854 |
-@@ -2658,8 +2658,8 @@ void drbd_destroy_connection(struct kref *kref) |
9855 |
+@@ -2670,8 +2670,8 @@ void drbd_destroy_connection(struct kref *kref) |
9856 |
struct drbd_connection *connection = container_of(kref, struct drbd_connection, kref); |
9857 |
struct drbd_resource *resource = connection->resource; |
9858 |
|
9859 |
@@ -38000,10 +39816,10 @@ index 331e5cc..6d657bce 100644 |
9860 |
|
9861 |
idr_destroy(&connection->peer_devices); |
9862 |
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c |
9863 |
-index 526414b..4eb8184 100644 |
9864 |
+index 3f2e167..d3170e4 100644 |
9865 |
--- a/drivers/block/drbd/drbd_nl.c |
9866 |
+++ b/drivers/block/drbd/drbd_nl.c |
9867 |
-@@ -3505,7 +3505,7 @@ out: |
9868 |
+@@ -3616,7 +3616,7 @@ finish: |
9869 |
|
9870 |
void drbd_bcast_event(struct drbd_device *device, const struct sib_info *sib) |
9871 |
{ |
9872 |
@@ -38012,7 +39828,7 @@ index 526414b..4eb8184 100644 |
9873 |
struct sk_buff *msg; |
9874 |
struct drbd_genlmsghdr *d_out; |
9875 |
unsigned seq; |
9876 |
-@@ -3518,7 +3518,7 @@ void drbd_bcast_event(struct drbd_device *device, const struct sib_info *sib) |
9877 |
+@@ -3629,7 +3629,7 @@ void drbd_bcast_event(struct drbd_device *device, const struct sib_info *sib) |
9878 |
return; |
9879 |
} |
9880 |
|
9881 |
@@ -38022,10 +39838,10 @@ index 526414b..4eb8184 100644 |
9882 |
if (!msg) |
9883 |
goto failed; |
9884 |
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c |
9885 |
-index 68e3992..1aca24a 100644 |
9886 |
+index 5b17ec8..6c21e6b 100644 |
9887 |
--- a/drivers/block/drbd/drbd_receiver.c |
9888 |
+++ b/drivers/block/drbd/drbd_receiver.c |
9889 |
-@@ -826,7 +826,7 @@ int drbd_connected(struct drbd_peer_device *peer_device) |
9890 |
+@@ -834,7 +834,7 @@ int drbd_connected(struct drbd_peer_device *peer_device) |
9891 |
struct drbd_device *device = peer_device->device; |
9892 |
int err; |
9893 |
|
9894 |
@@ -38034,7 +39850,7 @@ index 68e3992..1aca24a 100644 |
9895 |
device->peer_seq = 0; |
9896 |
|
9897 |
device->state_mutex = peer_device->connection->agreed_pro_version < 100 ? |
9898 |
-@@ -1188,7 +1188,7 @@ static enum finish_epoch drbd_may_finish_epoch(struct drbd_connection *connectio |
9899 |
+@@ -1199,7 +1199,7 @@ static enum finish_epoch drbd_may_finish_epoch(struct drbd_connection *connectio |
9900 |
do { |
9901 |
next_epoch = NULL; |
9902 |
|
9903 |
@@ -38043,7 +39859,7 @@ index 68e3992..1aca24a 100644 |
9904 |
|
9905 |
switch (ev & ~EV_CLEANUP) { |
9906 |
case EV_PUT: |
9907 |
-@@ -1228,7 +1228,7 @@ static enum finish_epoch drbd_may_finish_epoch(struct drbd_connection *connectio |
9908 |
+@@ -1239,7 +1239,7 @@ static enum finish_epoch drbd_may_finish_epoch(struct drbd_connection *connectio |
9909 |
rv = FE_DESTROYED; |
9910 |
} else { |
9911 |
epoch->flags = 0; |
9912 |
@@ -38052,7 +39868,7 @@ index 68e3992..1aca24a 100644 |
9913 |
/* atomic_set(&epoch->active, 0); is already zero */ |
9914 |
if (rv == FE_STILL_LIVE) |
9915 |
rv = FE_RECYCLED; |
9916 |
-@@ -1456,7 +1456,7 @@ static int receive_Barrier(struct drbd_connection *connection, struct packet_inf |
9917 |
+@@ -1490,7 +1490,7 @@ static int receive_Barrier(struct drbd_connection *connection, struct packet_inf |
9918 |
conn_wait_active_ee_empty(connection); |
9919 |
drbd_flush(connection); |
9920 |
|
9921 |
@@ -38061,7 +39877,7 @@ index 68e3992..1aca24a 100644 |
9922 |
epoch = kmalloc(sizeof(struct drbd_epoch), GFP_NOIO); |
9923 |
if (epoch) |
9924 |
break; |
9925 |
-@@ -1469,11 +1469,11 @@ static int receive_Barrier(struct drbd_connection *connection, struct packet_inf |
9926 |
+@@ -1503,11 +1503,11 @@ static int receive_Barrier(struct drbd_connection *connection, struct packet_inf |
9927 |
} |
9928 |
|
9929 |
epoch->flags = 0; |
9930 |
@@ -38075,7 +39891,7 @@ index 68e3992..1aca24a 100644 |
9931 |
list_add(&epoch->list, &connection->current_epoch->list); |
9932 |
connection->current_epoch = epoch; |
9933 |
connection->epochs++; |
9934 |
-@@ -2182,7 +2182,7 @@ static int receive_Data(struct drbd_connection *connection, struct packet_info * |
9935 |
+@@ -2224,7 +2224,7 @@ static int receive_Data(struct drbd_connection *connection, struct packet_info * |
9936 |
|
9937 |
err = wait_for_and_update_peer_seq(peer_device, peer_seq); |
9938 |
drbd_send_ack_dp(peer_device, P_NEG_ACK, p, pi->size); |
9939 |
@@ -38084,7 +39900,7 @@ index 68e3992..1aca24a 100644 |
9940 |
err2 = drbd_drain_block(peer_device, pi->size); |
9941 |
if (!err) |
9942 |
err = err2; |
9943 |
-@@ -2216,7 +2216,7 @@ static int receive_Data(struct drbd_connection *connection, struct packet_info * |
9944 |
+@@ -2266,7 +2266,7 @@ static int receive_Data(struct drbd_connection *connection, struct packet_info * |
9945 |
|
9946 |
spin_lock(&connection->epoch_lock); |
9947 |
peer_req->epoch = connection->current_epoch; |
9948 |
@@ -38093,7 +39909,7 @@ index 68e3992..1aca24a 100644 |
9949 |
atomic_inc(&peer_req->epoch->active); |
9950 |
spin_unlock(&connection->epoch_lock); |
9951 |
|
9952 |
-@@ -4396,7 +4396,7 @@ struct data_cmd { |
9953 |
+@@ -4461,7 +4461,7 @@ struct data_cmd { |
9954 |
int expect_payload; |
9955 |
size_t pkt_size; |
9956 |
int (*fn)(struct drbd_connection *, struct packet_info *); |
9957 |
@@ -38102,7 +39918,7 @@ index 68e3992..1aca24a 100644 |
9958 |
|
9959 |
static struct data_cmd drbd_cmd_handler[] = { |
9960 |
[P_DATA] = { 1, sizeof(struct p_data), receive_Data }, |
9961 |
-@@ -4506,7 +4506,7 @@ static void conn_disconnect(struct drbd_connection *connection) |
9962 |
+@@ -4572,7 +4572,7 @@ static void conn_disconnect(struct drbd_connection *connection) |
9963 |
if (!list_empty(&connection->current_epoch->list)) |
9964 |
drbd_err(connection, "ASSERTION FAILED: connection->current_epoch->list not empty\n"); |
9965 |
/* ok, no more ee's on the fly, it is safe to reset the epoch_size */ |
9966 |
@@ -38111,7 +39927,7 @@ index 68e3992..1aca24a 100644 |
9967 |
connection->send.seen_any_write_yet = false; |
9968 |
|
9969 |
drbd_info(connection, "Connection closed\n"); |
9970 |
-@@ -5281,7 +5281,7 @@ static int connection_finish_peer_reqs(struct drbd_connection *connection) |
9971 |
+@@ -5364,7 +5364,7 @@ static int connection_finish_peer_reqs(struct drbd_connection *connection) |
9972 |
struct asender_cmd { |
9973 |
size_t pkt_size; |
9974 |
int (*fn)(struct drbd_connection *connection, struct packet_info *); |
9975 |
@@ -38121,7 +39937,7 @@ index 68e3992..1aca24a 100644 |
9976 |
static struct asender_cmd asender_tbl[] = { |
9977 |
[P_PING] = { 0, got_Ping }, |
9978 |
diff --git a/drivers/block/loop.c b/drivers/block/loop.c |
9979 |
-index f70a230..9dc90d5 100644 |
9980 |
+index 6cb1beb..bf490f7 100644 |
9981 |
--- a/drivers/block/loop.c |
9982 |
+++ b/drivers/block/loop.c |
9983 |
@@ -232,7 +232,7 @@ static int __do_lo_send_write(struct file *file, |
9984 |
@@ -38133,58 +39949,39 @@ index f70a230..9dc90d5 100644 |
9985 |
set_fs(old_fs); |
9986 |
file_end_write(file); |
9987 |
if (likely(bw == len)) |
9988 |
-diff --git a/drivers/block/null_blk.c b/drivers/block/null_blk.c |
9989 |
-index 091b9ea..f5428f8 100644 |
9990 |
---- a/drivers/block/null_blk.c |
9991 |
-+++ b/drivers/block/null_blk.c |
9992 |
-@@ -382,15 +382,25 @@ static int null_init_hctx(struct blk_mq_hw_ctx *hctx, void *data, |
9993 |
- return 0; |
9994 |
- } |
9995 |
+diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c |
9996 |
+index 02351e2..a9ea617 100644 |
9997 |
+--- a/drivers/block/nvme-core.c |
9998 |
++++ b/drivers/block/nvme-core.c |
9999 |
+@@ -73,7 +73,6 @@ static LIST_HEAD(dev_list); |
10000 |
+ static struct task_struct *nvme_thread; |
10001 |
+ static struct workqueue_struct *nvme_workq; |
10002 |
+ static wait_queue_head_t nvme_kthread_wait; |
10003 |
+-static struct notifier_block nvme_nb; |
10004 |
+ |
10005 |
+ static void nvme_reset_failed_dev(struct work_struct *ws); |
10006 |
+ |
10007 |
+@@ -2925,6 +2924,10 @@ static struct pci_driver nvme_driver = { |
10008 |
+ .err_handler = &nvme_err_handler, |
10009 |
+ }; |
10010 |
|
10011 |
--static struct blk_mq_ops null_mq_ops = { |
10012 |
-- .queue_rq = null_queue_rq, |
10013 |
-- .map_queue = blk_mq_map_queue, |
10014 |
-+static struct blk_mq_ops null_mq_single_ops = { |
10015 |
-+ .queue_rq = null_queue_rq, |
10016 |
-+ .map_queue = blk_mq_map_queue, |
10017 |
- .init_hctx = null_init_hctx, |
10018 |
- .complete = null_softirq_done_fn, |
10019 |
-+ .alloc_hctx = blk_mq_alloc_single_hw_queue, |
10020 |
-+ .free_hctx = blk_mq_free_single_hw_queue, |
10021 |
++static struct notifier_block nvme_nb = { |
10022 |
++ .notifier_call = &nvme_cpu_notify, |
10023 |
+}; |
10024 |
+ |
10025 |
-+static struct blk_mq_ops null_mq_per_node_ops = { |
10026 |
-+ .queue_rq = null_queue_rq, |
10027 |
-+ .map_queue = blk_mq_map_queue, |
10028 |
-+ .init_hctx = null_init_hctx, |
10029 |
-+ .alloc_hctx = null_alloc_hctx, |
10030 |
-+ .free_hctx = null_free_hctx, |
10031 |
- }; |
10032 |
- |
10033 |
- static struct blk_mq_reg null_mq_reg = { |
10034 |
-- .ops = &null_mq_ops, |
10035 |
-+ .ops = &null_mq_single_ops, |
10036 |
- .queue_depth = 64, |
10037 |
- .cmd_size = sizeof(struct nullb_cmd), |
10038 |
- .flags = BLK_MQ_F_SHOULD_MERGE, |
10039 |
-@@ -521,13 +531,8 @@ static int null_add_dev(void) |
10040 |
- null_mq_reg.queue_depth = hw_queue_depth; |
10041 |
- null_mq_reg.nr_hw_queues = submit_queues; |
10042 |
- |
10043 |
-- if (use_per_node_hctx) { |
10044 |
-- null_mq_reg.ops->alloc_hctx = null_alloc_hctx; |
10045 |
-- null_mq_reg.ops->free_hctx = null_free_hctx; |
10046 |
-- } else { |
10047 |
-- null_mq_reg.ops->alloc_hctx = blk_mq_alloc_single_hw_queue; |
10048 |
-- null_mq_reg.ops->free_hctx = blk_mq_free_single_hw_queue; |
10049 |
-- } |
10050 |
-+ if (use_per_node_hctx) |
10051 |
-+ null_mq_reg.ops = &null_mq_per_node_ops; |
10052 |
+ static int __init nvme_init(void) |
10053 |
+ { |
10054 |
+ int result; |
10055 |
+@@ -2941,7 +2944,6 @@ static int __init nvme_init(void) |
10056 |
+ else if (result > 0) |
10057 |
+ nvme_major = result; |
10058 |
|
10059 |
- nullb->q = blk_mq_init_queue(&null_mq_reg, nullb); |
10060 |
- } else if (queue_mode == NULL_Q_BIO) { |
10061 |
+- nvme_nb.notifier_call = &nvme_cpu_notify; |
10062 |
+ result = register_hotcpu_notifier(&nvme_nb); |
10063 |
+ if (result) |
10064 |
+ goto unregister_blkdev; |
10065 |
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c |
10066 |
-index a2af73d..c0b8f61 100644 |
10067 |
+index 758ac44..58087fd 100644 |
10068 |
--- a/drivers/block/pktcdvd.c |
10069 |
+++ b/drivers/block/pktcdvd.c |
10070 |
@@ -108,7 +108,7 @@ static int pkt_seq_show(struct seq_file *m, void *p); |
10071 |
@@ -38289,18 +40086,18 @@ index f038dba..bb74c08 100644 |
10072 |
int err; |
10073 |
|
10074 |
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c |
10075 |
-index 8a3aff7..d7538c2 100644 |
10076 |
+index 898b84b..86f74b9 100644 |
10077 |
--- a/drivers/cdrom/cdrom.c |
10078 |
+++ b/drivers/cdrom/cdrom.c |
10079 |
-@@ -416,7 +416,6 @@ int register_cdrom(struct cdrom_device_info *cdi) |
10080 |
+@@ -610,7 +610,6 @@ int register_cdrom(struct cdrom_device_info *cdi) |
10081 |
ENSURE(reset, CDC_RESET); |
10082 |
ENSURE(generic_packet, CDC_GENERIC_PACKET); |
10083 |
cdi->mc_flags = 0; |
10084 |
- cdo->n_minors = 0; |
10085 |
- cdi->options = CDO_USE_FFLAGS; |
10086 |
- |
10087 |
- if (autoclose==1 && CDROM_CAN(CDC_CLOSE_TRAY)) |
10088 |
-@@ -436,8 +435,11 @@ int register_cdrom(struct cdrom_device_info *cdi) |
10089 |
+ cdi->options = CDO_USE_FFLAGS; |
10090 |
+ |
10091 |
+ if (autoclose == 1 && CDROM_CAN(CDC_CLOSE_TRAY)) |
10092 |
+@@ -630,8 +629,11 @@ int register_cdrom(struct cdrom_device_info *cdi) |
10093 |
else |
10094 |
cdi->cdda_method = CDDA_OLD; |
10095 |
|
10096 |
@@ -38312,17 +40109,17 @@ index 8a3aff7..d7538c2 100644 |
10097 |
+ pax_close_kernel(); |
10098 |
+ } |
10099 |
|
10100 |
- cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name); |
10101 |
+ cd_dbg(CD_REG_UNREG, "drive \"/dev/%s\" registered\n", cdi->name); |
10102 |
mutex_lock(&cdrom_mutex); |
10103 |
-@@ -458,7 +460,6 @@ void unregister_cdrom(struct cdrom_device_info *cdi) |
10104 |
+@@ -652,7 +654,6 @@ void unregister_cdrom(struct cdrom_device_info *cdi) |
10105 |
if (cdi->exit) |
10106 |
cdi->exit(cdi); |
10107 |
|
10108 |
- cdi->ops->n_minors--; |
10109 |
- cdinfo(CD_REG_UNREG, "drive \"/dev/%s\" unregistered\n", cdi->name); |
10110 |
+ cd_dbg(CD_REG_UNREG, "drive \"/dev/%s\" unregistered\n", cdi->name); |
10111 |
} |
10112 |
|
10113 |
-@@ -2107,7 +2108,7 @@ static int cdrom_read_cdda_old(struct cdrom_device_info *cdi, __u8 __user *ubuf, |
10114 |
+@@ -2126,7 +2127,7 @@ static int cdrom_read_cdda_old(struct cdrom_device_info *cdi, __u8 __user *ubuf, |
10115 |
*/ |
10116 |
nr = nframes; |
10117 |
do { |
10118 |
@@ -38331,7 +40128,7 @@ index 8a3aff7..d7538c2 100644 |
10119 |
if (cgc.buffer) |
10120 |
break; |
10121 |
|
10122 |
-@@ -3429,7 +3430,7 @@ static int cdrom_print_info(const char *header, int val, char *info, |
10123 |
+@@ -3434,7 +3435,7 @@ static int cdrom_print_info(const char *header, int val, char *info, |
10124 |
struct cdrom_device_info *cdi; |
10125 |
int ret; |
10126 |
|
10127 |
@@ -38341,7 +40138,7 @@ index 8a3aff7..d7538c2 100644 |
10128 |
return 1; |
10129 |
|
10130 |
diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c |
10131 |
-index 51e75ad..39c4c76 100644 |
10132 |
+index 584bc31..e64a12c 100644 |
10133 |
--- a/drivers/cdrom/gdrom.c |
10134 |
+++ b/drivers/cdrom/gdrom.c |
10135 |
@@ -491,7 +491,6 @@ static struct cdrom_device_ops gdrom_ops = { |
10136 |
@@ -38482,7 +40279,7 @@ index e6db938..835e3a2 100644 |
10137 |
intf->proc_dir = NULL; |
10138 |
|
10139 |
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c |
10140 |
-index 1c4bb4f..719e873 100644 |
10141 |
+index 5d66568..c9d93c3 100644 |
10142 |
--- a/drivers/char/ipmi/ipmi_si_intf.c |
10143 |
+++ b/drivers/char/ipmi/ipmi_si_intf.c |
10144 |
@@ -285,7 +285,7 @@ struct smi_info { |
10145 |
@@ -38749,7 +40546,7 @@ index 8320abd..ec48108 100644 |
10146 |
|
10147 |
if (cmd != SIOCWANDEV) |
10148 |
diff --git a/drivers/char/random.c b/drivers/char/random.c |
10149 |
-index 18ec404..f2438cb 100644 |
10150 |
+index 71529e1..822b036 100644 |
10151 |
--- a/drivers/char/random.c |
10152 |
+++ b/drivers/char/random.c |
10153 |
@@ -284,9 +284,6 @@ |
10154 |
@@ -38795,7 +40592,7 @@ index 18ec404..f2438cb 100644 |
10155 |
unsigned int add = |
10156 |
((pool_size - entropy_count)*anfrac*3) >> s; |
10157 |
|
10158 |
-@@ -1176,7 +1173,7 @@ static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf, |
10159 |
+@@ -1177,7 +1174,7 @@ static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf, |
10160 |
|
10161 |
extract_buf(r, tmp); |
10162 |
i = min_t(int, nbytes, EXTRACT_SIZE); |
10163 |
@@ -38804,7 +40601,7 @@ index 18ec404..f2438cb 100644 |
10164 |
ret = -EFAULT; |
10165 |
break; |
10166 |
} |
10167 |
-@@ -1566,7 +1563,7 @@ static char sysctl_bootid[16]; |
10168 |
+@@ -1567,7 +1564,7 @@ static char sysctl_bootid[16]; |
10169 |
static int proc_do_uuid(struct ctl_table *table, int write, |
10170 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
10171 |
{ |
10172 |
@@ -38813,11 +40610,11 @@ index 18ec404..f2438cb 100644 |
10173 |
unsigned char buf[64], tmp_uuid[16], *uuid; |
10174 |
|
10175 |
uuid = table->data; |
10176 |
-@@ -1596,7 +1593,7 @@ static int proc_do_uuid(struct ctl_table *table, int write, |
10177 |
- static int proc_do_entropy(ctl_table *table, int write, |
10178 |
+@@ -1597,7 +1594,7 @@ static int proc_do_uuid(struct ctl_table *table, int write, |
10179 |
+ static int proc_do_entropy(struct ctl_table *table, int write, |
10180 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
10181 |
{ |
10182 |
-- ctl_table fake_table; |
10183 |
+- struct ctl_table fake_table; |
10184 |
+ ctl_table_no_const fake_table; |
10185 |
int entropy_count; |
10186 |
|
10187 |
@@ -38865,11 +40662,11 @@ index 7cc1fe22..b602d6b 100644 |
10188 |
|
10189 |
return 0; |
10190 |
diff --git a/drivers/char/tpm/tpm_acpi.c b/drivers/char/tpm/tpm_acpi.c |
10191 |
-index b9a57fa..5bb9e38 100644 |
10192 |
+index 565a947..dcdc06e 100644 |
10193 |
--- a/drivers/char/tpm/tpm_acpi.c |
10194 |
+++ b/drivers/char/tpm/tpm_acpi.c |
10195 |
@@ -98,11 +98,12 @@ int read_log(struct tpm_bios_log *log) |
10196 |
- virt = acpi_os_map_memory(start, len); |
10197 |
+ virt = acpi_os_map_iomem(start, len); |
10198 |
if (!virt) { |
10199 |
kfree(log->bios_event_log); |
10200 |
+ log->bios_event_log = NULL; |
10201 |
@@ -38880,7 +40677,7 @@ index b9a57fa..5bb9e38 100644 |
10202 |
- memcpy_fromio(log->bios_event_log, virt, len); |
10203 |
+ memcpy_fromio(log->bios_event_log, (const char __force_kernel *)virt, len); |
10204 |
|
10205 |
- acpi_os_unmap_memory(virt, len); |
10206 |
+ acpi_os_unmap_iomem(virt, len); |
10207 |
return 0; |
10208 |
diff --git a/drivers/char/tpm/tpm_eventlog.c b/drivers/char/tpm/tpm_eventlog.c |
10209 |
index 59f7cb2..bac8b6d 100644 |
10210 |
@@ -38950,7 +40747,7 @@ index 57a078e..c17cde8 100644 |
10211 |
composite = kzalloc(sizeof(*composite), GFP_KERNEL); |
10212 |
if (!composite) { |
10213 |
diff --git a/drivers/clk/socfpga/clk-gate.c b/drivers/clk/socfpga/clk-gate.c |
10214 |
-index 501d513..fb0ecf9 100644 |
10215 |
+index dd3a78c..386d49c 100644 |
10216 |
--- a/drivers/clk/socfpga/clk-gate.c |
10217 |
+++ b/drivers/clk/socfpga/clk-gate.c |
10218 |
@@ -22,6 +22,7 @@ |
10219 |
@@ -38961,7 +40758,7 @@ index 501d513..fb0ecf9 100644 |
10220 |
|
10221 |
#include "clk.h" |
10222 |
|
10223 |
-@@ -175,7 +176,7 @@ static int socfpga_clk_prepare(struct clk_hw *hwclk) |
10224 |
+@@ -174,7 +175,7 @@ static int socfpga_clk_prepare(struct clk_hw *hwclk) |
10225 |
return 0; |
10226 |
} |
10227 |
|
10228 |
@@ -38970,7 +40767,7 @@ index 501d513..fb0ecf9 100644 |
10229 |
.prepare = socfpga_clk_prepare, |
10230 |
.recalc_rate = socfpga_clk_recalc_rate, |
10231 |
.get_parent = socfpga_clk_get_parent, |
10232 |
-@@ -209,8 +210,10 @@ static void __init __socfpga_gate_init(struct device_node *node, |
10233 |
+@@ -208,8 +209,10 @@ static void __init __socfpga_gate_init(struct device_node *node, |
10234 |
socfpga_clk->hw.reg = clk_mgr_base_addr + clk_gate[0]; |
10235 |
socfpga_clk->hw.bit_idx = clk_gate[1]; |
10236 |
|
10237 |
@@ -38984,7 +40781,7 @@ index 501d513..fb0ecf9 100644 |
10238 |
|
10239 |
rc = of_property_read_u32(node, "fixed-divider", &fixed_div); |
10240 |
diff --git a/drivers/clk/socfpga/clk-pll.c b/drivers/clk/socfpga/clk-pll.c |
10241 |
-index de6da95..c98278b 100644 |
10242 |
+index de6da95..a2e72c0 100644 |
10243 |
--- a/drivers/clk/socfpga/clk-pll.c |
10244 |
+++ b/drivers/clk/socfpga/clk-pll.c |
10245 |
@@ -21,6 +21,7 @@ |
10246 |
@@ -39000,7 +40797,7 @@ index de6da95..c98278b 100644 |
10247 |
} |
10248 |
|
10249 |
-static struct clk_ops clk_pll_ops = { |
10250 |
-+static clk_ops_no_const clk_pll_ops __read_only = { |
10251 |
++static struct clk_ops_no_const clk_pll_ops __read_only = { |
10252 |
.recalc_rate = clk_pll_recalc_rate, |
10253 |
.get_parent = clk_pll_get_parent, |
10254 |
}; |
10255 |
@@ -39018,10 +40815,10 @@ index de6da95..c98278b 100644 |
10256 |
clk = clk_register(NULL, &pll_clk->hw.hw); |
10257 |
if (WARN_ON(IS_ERR(clk))) { |
10258 |
diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c |
10259 |
-index 000e4e0..4770351 100644 |
10260 |
+index b0c18ed..1713a80 100644 |
10261 |
--- a/drivers/cpufreq/acpi-cpufreq.c |
10262 |
+++ b/drivers/cpufreq/acpi-cpufreq.c |
10263 |
-@@ -676,8 +676,11 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) |
10264 |
+@@ -675,8 +675,11 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) |
10265 |
data->acpi_data = per_cpu_ptr(acpi_perf_data, cpu); |
10266 |
per_cpu(acfreq_data, cpu) = data; |
10267 |
|
10268 |
@@ -39035,7 +40832,7 @@ index 000e4e0..4770351 100644 |
10269 |
|
10270 |
result = acpi_processor_register_performance(data->acpi_data, cpu); |
10271 |
if (result) |
10272 |
-@@ -810,7 +813,9 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) |
10273 |
+@@ -809,7 +812,9 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) |
10274 |
policy->cur = acpi_cpufreq_guess_freq(data, policy->cpu); |
10275 |
break; |
10276 |
case ACPI_ADR_SPACE_FIXED_HARDWARE: |
10277 |
@@ -39046,7 +40843,7 @@ index 000e4e0..4770351 100644 |
10278 |
break; |
10279 |
default: |
10280 |
break; |
10281 |
-@@ -904,8 +909,10 @@ static void __init acpi_cpufreq_boost_init(void) |
10282 |
+@@ -903,8 +908,10 @@ static void __init acpi_cpufreq_boost_init(void) |
10283 |
if (!msrs) |
10284 |
return; |
10285 |
|
10286 |
@@ -39060,10 +40857,10 @@ index 000e4e0..4770351 100644 |
10287 |
cpu_notifier_register_begin(); |
10288 |
|
10289 |
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c |
10290 |
-index dcac12d..f12df60 100644 |
10291 |
+index 6f02485..13684ae 100644 |
10292 |
--- a/drivers/cpufreq/cpufreq.c |
10293 |
+++ b/drivers/cpufreq/cpufreq.c |
10294 |
-@@ -2024,7 +2024,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor) |
10295 |
+@@ -2100,7 +2100,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor) |
10296 |
} |
10297 |
|
10298 |
mutex_lock(&cpufreq_governor_mutex); |
10299 |
@@ -39072,7 +40869,7 @@ index dcac12d..f12df60 100644 |
10300 |
mutex_unlock(&cpufreq_governor_mutex); |
10301 |
return; |
10302 |
} |
10303 |
-@@ -2240,7 +2240,7 @@ static int cpufreq_cpu_callback(struct notifier_block *nfb, |
10304 |
+@@ -2316,7 +2316,7 @@ static int cpufreq_cpu_callback(struct notifier_block *nfb, |
10305 |
return NOTIFY_OK; |
10306 |
} |
10307 |
|
10308 |
@@ -39081,7 +40878,7 @@ index dcac12d..f12df60 100644 |
10309 |
.notifier_call = cpufreq_cpu_callback, |
10310 |
}; |
10311 |
|
10312 |
-@@ -2280,13 +2280,17 @@ int cpufreq_boost_trigger_state(int state) |
10313 |
+@@ -2356,13 +2356,17 @@ int cpufreq_boost_trigger_state(int state) |
10314 |
return 0; |
10315 |
|
10316 |
write_lock_irqsave(&cpufreq_driver_lock, flags); |
10317 |
@@ -39101,7 +40898,7 @@ index dcac12d..f12df60 100644 |
10318 |
write_unlock_irqrestore(&cpufreq_driver_lock, flags); |
10319 |
|
10320 |
pr_err("%s: Cannot %s BOOST\n", |
10321 |
-@@ -2342,8 +2346,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) |
10322 |
+@@ -2419,8 +2423,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) |
10323 |
|
10324 |
pr_debug("trying to register driver %s\n", driver_data->name); |
10325 |
|
10326 |
@@ -39115,7 +40912,7 @@ index dcac12d..f12df60 100644 |
10327 |
|
10328 |
write_lock_irqsave(&cpufreq_driver_lock, flags); |
10329 |
if (cpufreq_driver) { |
10330 |
-@@ -2358,8 +2365,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) |
10331 |
+@@ -2435,8 +2442,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data) |
10332 |
* Check if driver provides function to enable boost - |
10333 |
* if not, use cpufreq_boost_set_sw as default |
10334 |
*/ |
10335 |
@@ -39130,10 +40927,10 @@ index dcac12d..f12df60 100644 |
10336 |
ret = cpufreq_sysfs_create_file(&boost.attr); |
10337 |
if (ret) { |
10338 |
diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c |
10339 |
-index e1c6433..31203ae 100644 |
10340 |
+index 1b44496..b80ff5e 100644 |
10341 |
--- a/drivers/cpufreq/cpufreq_governor.c |
10342 |
+++ b/drivers/cpufreq/cpufreq_governor.c |
10343 |
-@@ -191,7 +191,7 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy, |
10344 |
+@@ -245,7 +245,7 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy, |
10345 |
struct dbs_data *dbs_data; |
10346 |
struct od_cpu_dbs_info_s *od_dbs_info = NULL; |
10347 |
struct cs_cpu_dbs_info_s *cs_dbs_info = NULL; |
10348 |
@@ -39142,7 +40939,7 @@ index e1c6433..31203ae 100644 |
10349 |
struct od_dbs_tuners *od_tuners = NULL; |
10350 |
struct cs_dbs_tuners *cs_tuners = NULL; |
10351 |
struct cpu_dbs_common_info *cpu_cdbs; |
10352 |
-@@ -257,7 +257,7 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy, |
10353 |
+@@ -311,7 +311,7 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy, |
10354 |
|
10355 |
if ((cdata->governor == GOV_CONSERVATIVE) && |
10356 |
(!policy->governor->initialized)) { |
10357 |
@@ -39151,7 +40948,7 @@ index e1c6433..31203ae 100644 |
10358 |
|
10359 |
cpufreq_register_notifier(cs_ops->notifier_block, |
10360 |
CPUFREQ_TRANSITION_NOTIFIER); |
10361 |
-@@ -277,7 +277,7 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy, |
10362 |
+@@ -331,7 +331,7 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy, |
10363 |
|
10364 |
if ((dbs_data->cdata->governor == GOV_CONSERVATIVE) && |
10365 |
(policy->governor->initialized == 1)) { |
10366 |
@@ -39161,10 +40958,10 @@ index e1c6433..31203ae 100644 |
10367 |
cpufreq_unregister_notifier(cs_ops->notifier_block, |
10368 |
CPUFREQ_TRANSITION_NOTIFIER); |
10369 |
diff --git a/drivers/cpufreq/cpufreq_governor.h b/drivers/cpufreq/cpufreq_governor.h |
10370 |
-index bfb9ae1..e1d3a7e 100644 |
10371 |
+index cc401d1..8197340 100644 |
10372 |
--- a/drivers/cpufreq/cpufreq_governor.h |
10373 |
+++ b/drivers/cpufreq/cpufreq_governor.h |
10374 |
-@@ -205,7 +205,7 @@ struct common_dbs_data { |
10375 |
+@@ -212,7 +212,7 @@ struct common_dbs_data { |
10376 |
void (*exit)(struct dbs_data *dbs_data); |
10377 |
|
10378 |
/* Governor specific ops, see below */ |
10379 |
@@ -39173,7 +40970,7 @@ index bfb9ae1..e1d3a7e 100644 |
10380 |
}; |
10381 |
|
10382 |
/* Governor Per policy data */ |
10383 |
-@@ -225,7 +225,7 @@ struct od_ops { |
10384 |
+@@ -232,7 +232,7 @@ struct od_ops { |
10385 |
unsigned int (*powersave_bias_target)(struct cpufreq_policy *policy, |
10386 |
unsigned int freq_next, unsigned int relation); |
10387 |
void (*freq_increase)(struct cpufreq_policy *policy, unsigned int freq); |
10388 |
@@ -39217,10 +41014,10 @@ index 18d4091..434be15 100644 |
10389 |
} |
10390 |
EXPORT_SYMBOL_GPL(od_unregister_powersave_bias_handler); |
10391 |
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c |
10392 |
-index 870eecc..787bbca 100644 |
10393 |
+index 86631cb..c34ec78 100644 |
10394 |
--- a/drivers/cpufreq/intel_pstate.c |
10395 |
+++ b/drivers/cpufreq/intel_pstate.c |
10396 |
-@@ -125,10 +125,10 @@ struct pstate_funcs { |
10397 |
+@@ -121,10 +121,10 @@ struct pstate_funcs { |
10398 |
struct cpu_defaults { |
10399 |
struct pstate_adjust_policy pid_policy; |
10400 |
struct pstate_funcs funcs; |
10401 |
@@ -39233,7 +41030,7 @@ index 870eecc..787bbca 100644 |
10402 |
|
10403 |
struct perf_limits { |
10404 |
int no_turbo; |
10405 |
-@@ -530,7 +530,7 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate) |
10406 |
+@@ -526,7 +526,7 @@ static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate) |
10407 |
|
10408 |
cpu->pstate.current_pstate = pstate; |
10409 |
|
10410 |
@@ -39242,10 +41039,10 @@ index 870eecc..787bbca 100644 |
10411 |
} |
10412 |
|
10413 |
static inline void intel_pstate_pstate_increase(struct cpudata *cpu, int steps) |
10414 |
-@@ -552,12 +552,12 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu) |
10415 |
- { |
10416 |
- sprintf(cpu->name, "Intel 2nd generation core"); |
10417 |
+@@ -546,12 +546,12 @@ static inline void intel_pstate_pstate_decrease(struct cpudata *cpu, int steps) |
10418 |
|
10419 |
+ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu) |
10420 |
+ { |
10421 |
- cpu->pstate.min_pstate = pstate_funcs.get_min(); |
10422 |
- cpu->pstate.max_pstate = pstate_funcs.get_max(); |
10423 |
- cpu->pstate.turbo_pstate = pstate_funcs.get_turbo(); |
10424 |
@@ -39260,7 +41057,7 @@ index 870eecc..787bbca 100644 |
10425 |
intel_pstate_set_pstate(cpu, cpu->pstate.min_pstate); |
10426 |
} |
10427 |
|
10428 |
-@@ -847,9 +847,9 @@ static int intel_pstate_msrs_not_valid(void) |
10429 |
+@@ -838,9 +838,9 @@ static int intel_pstate_msrs_not_valid(void) |
10430 |
rdmsrl(MSR_IA32_APERF, aperf); |
10431 |
rdmsrl(MSR_IA32_MPERF, mperf); |
10432 |
|
10433 |
@@ -39273,7 +41070,7 @@ index 870eecc..787bbca 100644 |
10434 |
return -ENODEV; |
10435 |
|
10436 |
rdmsrl(MSR_IA32_APERF, tmp); |
10437 |
-@@ -863,7 +863,7 @@ static int intel_pstate_msrs_not_valid(void) |
10438 |
+@@ -854,7 +854,7 @@ static int intel_pstate_msrs_not_valid(void) |
10439 |
return 0; |
10440 |
} |
10441 |
|
10442 |
@@ -39282,7 +41079,7 @@ index 870eecc..787bbca 100644 |
10443 |
{ |
10444 |
pid_params.sample_rate_ms = policy->sample_rate_ms; |
10445 |
pid_params.p_gain_pct = policy->p_gain_pct; |
10446 |
-@@ -875,11 +875,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy) |
10447 |
+@@ -866,11 +866,7 @@ static void copy_pid_params(struct pstate_adjust_policy *policy) |
10448 |
|
10449 |
static void copy_cpu_funcs(struct pstate_funcs *funcs) |
10450 |
{ |
10451 |
@@ -39438,7 +41235,7 @@ index 9bb42ba..b01b4a2 100644 |
10452 |
|
10453 |
MODULE_AUTHOR("David S. Miller <davem@××××××.com>"); |
10454 |
diff --git a/drivers/cpufreq/speedstep-centrino.c b/drivers/cpufreq/speedstep-centrino.c |
10455 |
-index 6723f03..3465190 100644 |
10456 |
+index 7d4a315..21bb886 100644 |
10457 |
--- a/drivers/cpufreq/speedstep-centrino.c |
10458 |
+++ b/drivers/cpufreq/speedstep-centrino.c |
10459 |
@@ -351,8 +351,11 @@ static int centrino_cpu_init(struct cpufreq_policy *policy) |
10460 |
@@ -39456,10 +41253,10 @@ index 6723f03..3465190 100644 |
10461 |
if (policy->cpu != 0) |
10462 |
return -ENODEV; |
10463 |
diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c |
10464 |
-index 136d6a2..06e373d 100644 |
10465 |
+index 9634f20..e1499c7 100644 |
10466 |
--- a/drivers/cpuidle/driver.c |
10467 |
+++ b/drivers/cpuidle/driver.c |
10468 |
-@@ -202,7 +202,7 @@ static int poll_idle(struct cpuidle_device *dev, |
10469 |
+@@ -205,7 +205,7 @@ static int poll_idle(struct cpuidle_device *dev, |
10470 |
|
10471 |
static void poll_idle_init(struct cpuidle_driver *drv) |
10472 |
{ |
10473 |
@@ -39517,10 +41314,10 @@ index 12fea3e..1e28f47 100644 |
10474 |
err = pci_request_regions(pdev, name); |
10475 |
if (err) |
10476 |
diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c |
10477 |
-index 2042ec3..a9ce67f 100644 |
10478 |
+index 9f90369..bfcacdb 100644 |
10479 |
--- a/drivers/devfreq/devfreq.c |
10480 |
+++ b/drivers/devfreq/devfreq.c |
10481 |
-@@ -616,7 +616,7 @@ int devfreq_add_governor(struct devfreq_governor *governor) |
10482 |
+@@ -673,7 +673,7 @@ int devfreq_add_governor(struct devfreq_governor *governor) |
10483 |
goto err_out; |
10484 |
} |
10485 |
|
10486 |
@@ -39529,7 +41326,7 @@ index 2042ec3..a9ce67f 100644 |
10487 |
|
10488 |
list_for_each_entry(devfreq, &devfreq_list, node) { |
10489 |
int ret = 0; |
10490 |
-@@ -704,7 +704,7 @@ int devfreq_remove_governor(struct devfreq_governor *governor) |
10491 |
+@@ -761,7 +761,7 @@ int devfreq_remove_governor(struct devfreq_governor *governor) |
10492 |
} |
10493 |
} |
10494 |
|
10495 |
@@ -39539,7 +41336,7 @@ index 2042ec3..a9ce67f 100644 |
10496 |
mutex_unlock(&devfreq_list_lock); |
10497 |
|
10498 |
diff --git a/drivers/dma/sh/shdma-base.c b/drivers/dma/sh/shdma-base.c |
10499 |
-index 5239677..1cb71a8 100644 |
10500 |
+index b35007e..55ad549 100644 |
10501 |
--- a/drivers/dma/sh/shdma-base.c |
10502 |
+++ b/drivers/dma/sh/shdma-base.c |
10503 |
@@ -267,8 +267,8 @@ static int shdma_alloc_chan_resources(struct dma_chan *chan) |
10504 |
@@ -39554,10 +41351,10 @@ index 5239677..1cb71a8 100644 |
10505 |
ret = -ENOMEM; |
10506 |
goto edescalloc; |
10507 |
diff --git a/drivers/dma/sh/shdmac.c b/drivers/dma/sh/shdmac.c |
10508 |
-index dda7e75..0a4c867 100644 |
10509 |
+index 146d5df..3c14970 100644 |
10510 |
--- a/drivers/dma/sh/shdmac.c |
10511 |
+++ b/drivers/dma/sh/shdmac.c |
10512 |
-@@ -513,7 +513,7 @@ static int sh_dmae_nmi_handler(struct notifier_block *self, |
10513 |
+@@ -514,7 +514,7 @@ static int sh_dmae_nmi_handler(struct notifier_block *self, |
10514 |
return ret; |
10515 |
} |
10516 |
|
10517 |
@@ -39798,7 +41595,7 @@ index eb6935c..3cc2bfa 100644 |
10518 |
#include <asm/byteorder.h> |
10519 |
|
10520 |
diff --git a/drivers/firewire/core.h b/drivers/firewire/core.h |
10521 |
-index f477308..2795f24 100644 |
10522 |
+index e1480ff6..1a429bd 100644 |
10523 |
--- a/drivers/firewire/core.h |
10524 |
+++ b/drivers/firewire/core.h |
10525 |
@@ -111,6 +111,7 @@ struct fw_card_driver { |
10526 |
@@ -39810,10 +41607,10 @@ index f477308..2795f24 100644 |
10527 |
void fw_card_initialize(struct fw_card *card, |
10528 |
const struct fw_card_driver *driver, struct device *device); |
10529 |
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c |
10530 |
-index 586f2f7..3545ad2 100644 |
10531 |
+index a66a321..f6caf20 100644 |
10532 |
--- a/drivers/firewire/ohci.c |
10533 |
+++ b/drivers/firewire/ohci.c |
10534 |
-@@ -2049,10 +2049,12 @@ static void bus_reset_work(struct work_struct *work) |
10535 |
+@@ -2056,10 +2056,12 @@ static void bus_reset_work(struct work_struct *work) |
10536 |
be32_to_cpu(ohci->next_header)); |
10537 |
} |
10538 |
|
10539 |
@@ -39826,7 +41623,7 @@ index 586f2f7..3545ad2 100644 |
10540 |
|
10541 |
spin_unlock_irq(&ohci->lock); |
10542 |
|
10543 |
-@@ -2584,8 +2586,10 @@ static int ohci_enable_phys_dma(struct fw_card *card, |
10544 |
+@@ -2591,8 +2593,10 @@ static int ohci_enable_phys_dma(struct fw_card *card, |
10545 |
unsigned long flags; |
10546 |
int n, ret = 0; |
10547 |
|
10548 |
@@ -39885,10 +41682,10 @@ index 1491dd4..aa910db 100644 |
10549 |
EXPORT_SYMBOL_GPL(cper_next_record_id); |
10550 |
|
10551 |
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c |
10552 |
-index af20f17..4e4e545 100644 |
10553 |
+index dc79346..b39bd69 100644 |
10554 |
--- a/drivers/firmware/efi/efi.c |
10555 |
+++ b/drivers/firmware/efi/efi.c |
10556 |
-@@ -120,14 +120,16 @@ static struct attribute_group efi_subsys_attr_group = { |
10557 |
+@@ -122,14 +122,16 @@ static struct attribute_group efi_subsys_attr_group = { |
10558 |
}; |
10559 |
|
10560 |
static struct efivars generic_efivars; |
10561 |
@@ -39911,10 +41708,10 @@ index af20f17..4e4e545 100644 |
10562 |
return efivars_register(&generic_efivars, &generic_ops, efi_kobj); |
10563 |
} |
10564 |
diff --git a/drivers/firmware/efi/efivars.c b/drivers/firmware/efi/efivars.c |
10565 |
-index 50ea412..caccd6e9 100644 |
10566 |
+index 463c565..02a5640 100644 |
10567 |
--- a/drivers/firmware/efi/efivars.c |
10568 |
+++ b/drivers/firmware/efi/efivars.c |
10569 |
-@@ -456,7 +456,7 @@ efivar_create_sysfs_entry(struct efivar_entry *new_var) |
10570 |
+@@ -588,7 +588,7 @@ efivar_create_sysfs_entry(struct efivar_entry *new_var) |
10571 |
static int |
10572 |
create_efivars_bin_attributes(void) |
10573 |
{ |
10574 |
@@ -39940,7 +41737,7 @@ index 2f569aa..c95f4fb 100644 |
10575 |
} |
10576 |
|
10577 |
diff --git a/drivers/gpio/gpio-em.c b/drivers/gpio/gpio-em.c |
10578 |
-index 8765bd6..2e5b147 100644 |
10579 |
+index cde3605..8b69df7 100644 |
10580 |
--- a/drivers/gpio/gpio-em.c |
10581 |
+++ b/drivers/gpio/gpio-em.c |
10582 |
@@ -278,7 +278,7 @@ static int em_gio_probe(struct platform_device *pdev) |
10583 |
@@ -39966,10 +41763,10 @@ index 7030422..42a3fe9 100644 |
10584 |
static struct { |
10585 |
spinlock_t lock; |
10586 |
diff --git a/drivers/gpio/gpio-rcar.c b/drivers/gpio/gpio-rcar.c |
10587 |
-index 03c9148..c66e753 100644 |
10588 |
+index b6ae89e..ac7349c 100644 |
10589 |
--- a/drivers/gpio/gpio-rcar.c |
10590 |
+++ b/drivers/gpio/gpio-rcar.c |
10591 |
-@@ -355,7 +355,7 @@ static int gpio_rcar_probe(struct platform_device *pdev) |
10592 |
+@@ -357,7 +357,7 @@ static int gpio_rcar_probe(struct platform_device *pdev) |
10593 |
struct gpio_rcar_priv *p; |
10594 |
struct resource *io, *irq; |
10595 |
struct gpio_chip *gpio_chip; |
10596 |
@@ -39992,10 +41789,10 @@ index 66cbcc1..0c5e622 100644 |
10597 |
return -EINVAL; |
10598 |
} |
10599 |
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c |
10600 |
-index f48817d..d35d7f8 100644 |
10601 |
+index 2ebc907..01bdd6e 100644 |
10602 |
--- a/drivers/gpio/gpiolib.c |
10603 |
+++ b/drivers/gpio/gpiolib.c |
10604 |
-@@ -1458,8 +1458,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) |
10605 |
+@@ -1482,8 +1482,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) |
10606 |
} |
10607 |
|
10608 |
if (gpiochip->irqchip) { |
10609 |
@@ -40008,12 +41805,13 @@ index f48817d..d35d7f8 100644 |
10610 |
gpiochip->irqchip = NULL; |
10611 |
} |
10612 |
} |
10613 |
-@@ -1524,8 +1526,10 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip, |
10614 |
+@@ -1549,8 +1551,11 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip, |
10615 |
gpiochip->irqchip = NULL; |
10616 |
return -EINVAL; |
10617 |
} |
10618 |
- irqchip->irq_request_resources = gpiochip_irq_reqres; |
10619 |
- irqchip->irq_release_resources = gpiochip_irq_relres; |
10620 |
++ |
10621 |
+ pax_open_kernel(); |
10622 |
+ *(void **)&irqchip->irq_request_resources = gpiochip_irq_reqres; |
10623 |
+ *(void **)&irqchip->irq_release_resources = gpiochip_irq_relres; |
10624 |
@@ -40022,10 +41820,10 @@ index f48817d..d35d7f8 100644 |
10625 |
/* |
10626 |
* Prepare the mapping since the irqchip shall be orthogonal to |
10627 |
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c |
10628 |
-index d8b7099..8a314a5 100644 |
10629 |
+index fe94cc1..5e697b3 100644 |
10630 |
--- a/drivers/gpu/drm/drm_crtc.c |
10631 |
+++ b/drivers/gpu/drm/drm_crtc.c |
10632 |
-@@ -3500,7 +3500,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev, |
10633 |
+@@ -3584,7 +3584,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev, |
10634 |
goto done; |
10635 |
} |
10636 |
|
10637 |
@@ -40035,9 +41833,7 @@ index d8b7099..8a314a5 100644 |
10638 |
ret = -EFAULT; |
10639 |
goto done; |
10640 |
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c |
10641 |
-old mode 100644 |
10642 |
-new mode 100755 |
10643 |
-index 8218078..9960928a |
10644 |
+index 8218078..9960928a 100644 |
10645 |
--- a/drivers/gpu/drm/drm_drv.c |
10646 |
+++ b/drivers/gpu/drm/drm_drv.c |
10647 |
@@ -233,7 +233,7 @@ module_exit(drm_core_exit); |
10648 |
@@ -40059,10 +41855,10 @@ index 8218078..9960928a |
10649 |
int retcode = -EINVAL; |
10650 |
char stack_kdata[128]; |
10651 |
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c |
10652 |
-index e1eba0b..98f69f9 100644 |
10653 |
+index 021fe5d..abc9ce6 100644 |
10654 |
--- a/drivers/gpu/drm/drm_fops.c |
10655 |
+++ b/drivers/gpu/drm/drm_fops.c |
10656 |
-@@ -89,7 +89,7 @@ int drm_open(struct inode *inode, struct file *filp) |
10657 |
+@@ -88,7 +88,7 @@ int drm_open(struct inode *inode, struct file *filp) |
10658 |
return PTR_ERR(minor); |
10659 |
|
10660 |
dev = minor->dev; |
10661 |
@@ -40071,7 +41867,7 @@ index e1eba0b..98f69f9 100644 |
10662 |
need_setup = 1; |
10663 |
|
10664 |
/* share address_space across all char-devs of a single device */ |
10665 |
-@@ -106,7 +106,7 @@ int drm_open(struct inode *inode, struct file *filp) |
10666 |
+@@ -105,7 +105,7 @@ int drm_open(struct inode *inode, struct file *filp) |
10667 |
return 0; |
10668 |
|
10669 |
err_undo: |
10670 |
@@ -40080,7 +41876,7 @@ index e1eba0b..98f69f9 100644 |
10671 |
drm_minor_release(minor); |
10672 |
return retcode; |
10673 |
} |
10674 |
-@@ -430,7 +430,7 @@ int drm_release(struct inode *inode, struct file *filp) |
10675 |
+@@ -427,7 +427,7 @@ int drm_release(struct inode *inode, struct file *filp) |
10676 |
|
10677 |
mutex_lock(&drm_global_mutex); |
10678 |
|
10679 |
@@ -40089,7 +41885,7 @@ index e1eba0b..98f69f9 100644 |
10680 |
|
10681 |
if (dev->driver->preclose) |
10682 |
dev->driver->preclose(dev, file_priv); |
10683 |
-@@ -439,10 +439,10 @@ int drm_release(struct inode *inode, struct file *filp) |
10684 |
+@@ -436,10 +436,10 @@ int drm_release(struct inode *inode, struct file *filp) |
10685 |
* Begin inline drm_release |
10686 |
*/ |
10687 |
|
10688 |
@@ -40102,7 +41898,7 @@ index e1eba0b..98f69f9 100644 |
10689 |
|
10690 |
/* Release any auth tokens that might point to this file_priv, |
10691 |
(do that under the drm_global_mutex) */ |
10692 |
-@@ -543,7 +543,7 @@ int drm_release(struct inode *inode, struct file *filp) |
10693 |
+@@ -540,7 +540,7 @@ int drm_release(struct inode *inode, struct file *filp) |
10694 |
* End inline drm_release |
10695 |
*/ |
10696 |
|
10697 |
@@ -40173,10 +41969,10 @@ index 3d2e91c..d31c4c9 100644 |
10698 |
item->object = NULL; |
10699 |
} |
10700 |
diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c |
10701 |
-index 7473035..a48b9c5 100644 |
10702 |
+index 86feedd..cba70f5 100644 |
10703 |
--- a/drivers/gpu/drm/drm_info.c |
10704 |
+++ b/drivers/gpu/drm/drm_info.c |
10705 |
-@@ -75,10 +75,13 @@ int drm_vm_info(struct seq_file *m, void *data) |
10706 |
+@@ -73,10 +73,13 @@ int drm_vm_info(struct seq_file *m, void *data) |
10707 |
struct drm_local_map *map; |
10708 |
struct drm_map_list *r_list; |
10709 |
|
10710 |
@@ -40194,7 +41990,7 @@ index 7473035..a48b9c5 100644 |
10711 |
const char *type; |
10712 |
int i; |
10713 |
|
10714 |
-@@ -89,7 +92,7 @@ int drm_vm_info(struct seq_file *m, void *data) |
10715 |
+@@ -87,7 +90,7 @@ int drm_vm_info(struct seq_file *m, void *data) |
10716 |
map = r_list->map; |
10717 |
if (!map) |
10718 |
continue; |
10719 |
@@ -40203,7 +41999,7 @@ index 7473035..a48b9c5 100644 |
10720 |
type = "??"; |
10721 |
else |
10722 |
type = types[map->type]; |
10723 |
-@@ -261,7 +264,11 @@ int drm_vma_info(struct seq_file *m, void *data) |
10724 |
+@@ -259,7 +262,11 @@ int drm_vma_info(struct seq_file *m, void *data) |
10725 |
vma->vm_flags & VM_MAYSHARE ? 's' : 'p', |
10726 |
vma->vm_flags & VM_LOCKED ? 'l' : '-', |
10727 |
vma->vm_flags & VM_IO ? 'i' : '-', |
10728 |
@@ -40268,7 +42064,7 @@ index 2f4c4343..dd12cd2 100644 |
10729 |
ret = drm_ioctl(filp, cmd, arg); |
10730 |
|
10731 |
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c |
10732 |
-index 4c24c3a..c903cab 100644 |
10733 |
+index 14d1646..99f9d49 100644 |
10734 |
--- a/drivers/gpu/drm/drm_stub.c |
10735 |
+++ b/drivers/gpu/drm/drm_stub.c |
10736 |
@@ -455,7 +455,7 @@ void drm_unplug_dev(struct drm_device *dev) |
10737 |
@@ -40281,7 +42077,7 @@ index 4c24c3a..c903cab 100644 |
10738 |
} |
10739 |
mutex_unlock(&drm_global_mutex); |
10740 |
diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c |
10741 |
-index c22c309..ae758c3 100644 |
10742 |
+index 369b262..09ea3ab 100644 |
10743 |
--- a/drivers/gpu/drm/drm_sysfs.c |
10744 |
+++ b/drivers/gpu/drm/drm_sysfs.c |
10745 |
@@ -505,7 +505,7 @@ static void drm_sysfs_release(struct device *dev) |
10746 |
@@ -40309,23 +42105,23 @@ index d4d16ed..8fb0b51 100644 |
10747 |
int front_offset; |
10748 |
} drm_i810_private_t; |
10749 |
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c |
10750 |
-index eedb023..25076a4 100644 |
10751 |
+index d443441..ab091dd 100644 |
10752 |
--- a/drivers/gpu/drm/i915/i915_dma.c |
10753 |
+++ b/drivers/gpu/drm/i915/i915_dma.c |
10754 |
-@@ -1280,7 +1280,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev) |
10755 |
- bool can_switch; |
10756 |
- |
10757 |
- spin_lock(&dev->count_lock); |
10758 |
-- can_switch = (dev->open_count == 0); |
10759 |
-+ can_switch = (local_read(&dev->open_count) == 0); |
10760 |
- spin_unlock(&dev->count_lock); |
10761 |
- return can_switch; |
10762 |
+@@ -1290,7 +1290,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev) |
10763 |
+ * locking inversion with the driver load path. And the access here is |
10764 |
+ * completely racy anyway. So don't bother with locking for now. |
10765 |
+ */ |
10766 |
+- return dev->open_count == 0; |
10767 |
++ return local_read(&dev->open_count) == 0; |
10768 |
} |
10769 |
+ |
10770 |
+ static const struct vga_switcheroo_client_ops i915_switcheroo_ops = { |
10771 |
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
10772 |
-index 20fef6c..76c78fb 100644 |
10773 |
+index 3a30133..ef4a743 100644 |
10774 |
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
10775 |
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c |
10776 |
-@@ -886,9 +886,9 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec) |
10777 |
+@@ -891,9 +891,9 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec) |
10778 |
|
10779 |
static int |
10780 |
validate_exec_list(struct drm_i915_gem_exec_object2 *exec, |
10781 |
@@ -40338,7 +42134,7 @@ index 20fef6c..76c78fb 100644 |
10782 |
unsigned relocs_max = UINT_MAX / sizeof(struct drm_i915_gem_relocation_entry); |
10783 |
|
10784 |
diff --git a/drivers/gpu/drm/i915/i915_ioc32.c b/drivers/gpu/drm/i915/i915_ioc32.c |
10785 |
-index 3c59584..500f2e9 100644 |
10786 |
+index 2e0613e..a8b94d9 100644 |
10787 |
--- a/drivers/gpu/drm/i915/i915_ioc32.c |
10788 |
+++ b/drivers/gpu/drm/i915/i915_ioc32.c |
10789 |
@@ -181,7 +181,7 @@ static int compat_i915_alloc(struct file *file, unsigned int cmd, |
10790 |
@@ -40360,11 +42156,11 @@ index 3c59584..500f2e9 100644 |
10791 |
if (nr < DRM_COMMAND_BASE) |
10792 |
return drm_compat_ioctl(filp, cmd, arg); |
10793 |
|
10794 |
-- if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(i915_compat_ioctls)) |
10795 |
+- if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(i915_compat_ioctls)) |
10796 |
- fn = i915_compat_ioctls[nr - DRM_COMMAND_BASE]; |
10797 |
- |
10798 |
- if (fn != NULL) |
10799 |
-+ if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(i915_compat_ioctls)) { |
10800 |
++ if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(i915_compat_ioctls)) { |
10801 |
+ drm_ioctl_compat_t fn = i915_compat_ioctls[nr - DRM_COMMAND_BASE]; |
10802 |
ret = (*fn) (filp, cmd, arg); |
10803 |
- else |
10804 |
@@ -40373,10 +42169,10 @@ index 3c59584..500f2e9 100644 |
10805 |
|
10806 |
return ret; |
10807 |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c |
10808 |
-index c83eb75..d205e5b2 100644 |
10809 |
+index f0be855..94e82d9 100644 |
10810 |
--- a/drivers/gpu/drm/i915/intel_display.c |
10811 |
+++ b/drivers/gpu/drm/i915/intel_display.c |
10812 |
-@@ -11179,13 +11179,13 @@ struct intel_quirk { |
10813 |
+@@ -11604,13 +11604,13 @@ struct intel_quirk { |
10814 |
int subsystem_vendor; |
10815 |
int subsystem_device; |
10816 |
void (*hook)(struct drm_device *dev); |
10817 |
@@ -40392,7 +42188,7 @@ index c83eb75..d205e5b2 100644 |
10818 |
|
10819 |
static int intel_dmi_reverse_brightness(const struct dmi_system_id *id) |
10820 |
{ |
10821 |
-@@ -11193,18 +11193,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id) |
10822 |
+@@ -11618,18 +11618,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id) |
10823 |
return 1; |
10824 |
} |
10825 |
|
10826 |
@@ -40440,7 +42236,7 @@ index fe45321..836fdca 100644 |
10827 |
|
10828 |
unsigned int fb_cpp; |
10829 |
diff --git a/drivers/gpu/drm/mga/mga_ioc32.c b/drivers/gpu/drm/mga/mga_ioc32.c |
10830 |
-index 86b4bb8..ae237ad 100644 |
10831 |
+index 729bfd5..ead8823 100644 |
10832 |
--- a/drivers/gpu/drm/mga/mga_ioc32.c |
10833 |
+++ b/drivers/gpu/drm/mga/mga_ioc32.c |
10834 |
@@ -190,7 +190,7 @@ static int compat_mga_dma_bootstrap(struct file *file, unsigned int cmd, |
10835 |
@@ -40462,11 +42258,11 @@ index 86b4bb8..ae237ad 100644 |
10836 |
if (nr < DRM_COMMAND_BASE) |
10837 |
return drm_compat_ioctl(filp, cmd, arg); |
10838 |
|
10839 |
-- if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) |
10840 |
+- if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(mga_compat_ioctls)) |
10841 |
- fn = mga_compat_ioctls[nr - DRM_COMMAND_BASE]; |
10842 |
- |
10843 |
- if (fn != NULL) |
10844 |
-+ if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) { |
10845 |
++ if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(mga_compat_ioctls)) { |
10846 |
+ drm_ioctl_compat_t fn = mga_compat_ioctls[nr - DRM_COMMAND_BASE]; |
10847 |
ret = (*fn) (filp, cmd, arg); |
10848 |
- else |
10849 |
@@ -40540,7 +42336,7 @@ index 7efbafa..19f8087 100644 |
10850 |
struct ttm_buffer_object *, |
10851 |
struct ttm_mem_reg *, struct ttm_mem_reg *); |
10852 |
diff --git a/drivers/gpu/drm/nouveau/nouveau_ioc32.c b/drivers/gpu/drm/nouveau/nouveau_ioc32.c |
10853 |
-index c1a7e5a..38b8539 100644 |
10854 |
+index 462679a..88e32a7 100644 |
10855 |
--- a/drivers/gpu/drm/nouveau/nouveau_ioc32.c |
10856 |
+++ b/drivers/gpu/drm/nouveau/nouveau_ioc32.c |
10857 |
@@ -50,7 +50,7 @@ long nouveau_compat_ioctl(struct file *filp, unsigned int cmd, |
10858 |
@@ -40608,18 +42404,18 @@ index ab0228f..20b756b 100644 |
10859 |
|
10860 |
int |
10861 |
diff --git a/drivers/gpu/drm/nouveau/nouveau_vga.c b/drivers/gpu/drm/nouveau/nouveau_vga.c |
10862 |
-index fb84da3..d7ee463 100644 |
10863 |
+index 4f4c3fe..2cce716 100644 |
10864 |
--- a/drivers/gpu/drm/nouveau/nouveau_vga.c |
10865 |
+++ b/drivers/gpu/drm/nouveau/nouveau_vga.c |
10866 |
-@@ -67,7 +67,7 @@ nouveau_switcheroo_can_switch(struct pci_dev *pdev) |
10867 |
- bool can_switch; |
10868 |
- |
10869 |
- spin_lock(&dev->count_lock); |
10870 |
-- can_switch = (dev->open_count == 0); |
10871 |
-+ can_switch = (local_read(&dev->open_count) == 0); |
10872 |
- spin_unlock(&dev->count_lock); |
10873 |
- return can_switch; |
10874 |
+@@ -70,7 +70,7 @@ nouveau_switcheroo_can_switch(struct pci_dev *pdev) |
10875 |
+ * locking inversion with the driver load path. And the access here is |
10876 |
+ * completely racy anyway. So don't bother with locking for now. |
10877 |
+ */ |
10878 |
+- return dev->open_count == 0; |
10879 |
++ return local_read(&dev->open_count) == 0; |
10880 |
} |
10881 |
+ |
10882 |
+ static const struct vga_switcheroo_client_ops |
10883 |
diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c |
10884 |
index eb89653..613cf71 100644 |
10885 |
--- a/drivers/gpu/drm/qxl/qxl_cmd.c |
10886 |
@@ -40697,7 +42493,7 @@ index 36ed40b..0397633 100644 |
10887 |
wait_queue_head_t display_event; |
10888 |
wait_queue_head_t cursor_event; |
10889 |
diff --git a/drivers/gpu/drm/qxl/qxl_ioctl.c b/drivers/gpu/drm/qxl/qxl_ioctl.c |
10890 |
-index 0bb86e6..d41416d 100644 |
10891 |
+index b110883..dd06418 100644 |
10892 |
--- a/drivers/gpu/drm/qxl/qxl_ioctl.c |
10893 |
+++ b/drivers/gpu/drm/qxl/qxl_ioctl.c |
10894 |
@@ -181,7 +181,7 @@ static int qxl_process_single_command(struct qxl_device *qdev, |
10895 |
@@ -40733,7 +42529,7 @@ index 0bb86e6..d41416d 100644 |
10896 |
return -EFAULT; |
10897 |
|
10898 |
diff --git a/drivers/gpu/drm/qxl/qxl_irq.c b/drivers/gpu/drm/qxl/qxl_irq.c |
10899 |
-index 3485bdc..20d26e3 100644 |
10900 |
+index 0bf1e20..42a7310 100644 |
10901 |
--- a/drivers/gpu/drm/qxl/qxl_irq.c |
10902 |
+++ b/drivers/gpu/drm/qxl/qxl_irq.c |
10903 |
@@ -36,19 +36,19 @@ irqreturn_t qxl_irq_handler(int irq, void *arg) |
10904 |
@@ -40773,10 +42569,10 @@ index 3485bdc..20d26e3 100644 |
10905 |
+ atomic_set_unchecked(&qdev->irq_received_cursor, 0); |
10906 |
+ atomic_set_unchecked(&qdev->irq_received_io_cmd, 0); |
10907 |
qdev->irq_received_error = 0; |
10908 |
- ret = drm_irq_install(qdev->ddev); |
10909 |
+ ret = drm_irq_install(qdev->ddev, qdev->ddev->pdev->irq); |
10910 |
qdev->ram_header->int_mask = QXL_INTERRUPT_MASK; |
10911 |
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c |
10912 |
-index d52c275..4e6b43d 100644 |
10913 |
+index 71a1bae..cb1f103 100644 |
10914 |
--- a/drivers/gpu/drm/qxl/qxl_ttm.c |
10915 |
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c |
10916 |
@@ -103,7 +103,7 @@ static void qxl_ttm_global_fini(struct qxl_device *qdev) |
10917 |
@@ -40788,7 +42584,7 @@ index d52c275..4e6b43d 100644 |
10918 |
static const struct vm_operations_struct *ttm_vm_ops; |
10919 |
|
10920 |
static int qxl_ttm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) |
10921 |
-@@ -147,8 +147,10 @@ int qxl_mmap(struct file *filp, struct vm_area_struct *vma) |
10922 |
+@@ -145,8 +145,10 @@ int qxl_mmap(struct file *filp, struct vm_area_struct *vma) |
10923 |
return r; |
10924 |
if (unlikely(ttm_vm_ops == NULL)) { |
10925 |
ttm_vm_ops = vma->vm_ops; |
10926 |
@@ -40799,7 +42595,7 @@ index d52c275..4e6b43d 100644 |
10927 |
} |
10928 |
vma->vm_ops = &qxl_ttm_vm_ops; |
10929 |
return 0; |
10930 |
-@@ -561,25 +563,23 @@ static int qxl_mm_dump_table(struct seq_file *m, void *data) |
10931 |
+@@ -555,25 +557,23 @@ static int qxl_mm_dump_table(struct seq_file *m, void *data) |
10932 |
static int qxl_ttm_debugfs_init(struct qxl_device *qdev) |
10933 |
{ |
10934 |
#if defined(CONFIG_DEBUG_FS) |
10935 |
@@ -40875,7 +42671,7 @@ index 5bf3f5f..7000661 100644 |
10936 |
u32 color_fmt; |
10937 |
unsigned int front_offset; |
10938 |
diff --git a/drivers/gpu/drm/r128/r128_ioc32.c b/drivers/gpu/drm/r128/r128_ioc32.c |
10939 |
-index b0d0fd3..a6fbbe4 100644 |
10940 |
+index 663f38c..c689495 100644 |
10941 |
--- a/drivers/gpu/drm/r128/r128_ioc32.c |
10942 |
+++ b/drivers/gpu/drm/r128/r128_ioc32.c |
10943 |
@@ -178,7 +178,7 @@ static int compat_r128_getparam(struct file *file, unsigned int cmd, |
10944 |
@@ -40897,11 +42693,11 @@ index b0d0fd3..a6fbbe4 100644 |
10945 |
if (nr < DRM_COMMAND_BASE) |
10946 |
return drm_compat_ioctl(filp, cmd, arg); |
10947 |
|
10948 |
-- if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(r128_compat_ioctls)) |
10949 |
+- if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(r128_compat_ioctls)) |
10950 |
- fn = r128_compat_ioctls[nr - DRM_COMMAND_BASE]; |
10951 |
- |
10952 |
- if (fn != NULL) |
10953 |
-+ if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(r128_compat_ioctls)) { |
10954 |
++ if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(r128_compat_ioctls)) { |
10955 |
+ drm_ioctl_compat_t fn = r128_compat_ioctls[nr - DRM_COMMAND_BASE]; |
10956 |
ret = (*fn) (filp, cmd, arg); |
10957 |
- else |
10958 |
@@ -40932,7 +42728,7 @@ index c2ae496..30b5993 100644 |
10959 |
return IRQ_HANDLED; |
10960 |
} |
10961 |
diff --git a/drivers/gpu/drm/r128/r128_state.c b/drivers/gpu/drm/r128/r128_state.c |
10962 |
-index e806dac..f81d32f 100644 |
10963 |
+index 575e986..66e62ca 100644 |
10964 |
--- a/drivers/gpu/drm/r128/r128_state.c |
10965 |
+++ b/drivers/gpu/drm/r128/r128_state.c |
10966 |
@@ -320,10 +320,10 @@ static void r128_clear_box(drm_r128_private_t *dev_priv, |
10967 |
@@ -40970,18 +42766,18 @@ index 4a85bb6..aaea819 100644 |
10968 |
if (regcomp |
10969 |
(&mask_rex, "(0x[0-9a-fA-F]*) *([_a-zA-Z0-9]*)", REG_EXTENDED)) { |
10970 |
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c |
10971 |
-index 2cd144c..a01c95a 100644 |
10972 |
+index 697add2..9860f5b 100644 |
10973 |
--- a/drivers/gpu/drm/radeon/radeon_device.c |
10974 |
+++ b/drivers/gpu/drm/radeon/radeon_device.c |
10975 |
-@@ -1129,7 +1129,7 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev) |
10976 |
- bool can_switch; |
10977 |
- |
10978 |
- spin_lock(&dev->count_lock); |
10979 |
-- can_switch = (dev->open_count == 0); |
10980 |
-+ can_switch = (local_read(&dev->open_count) == 0); |
10981 |
- spin_unlock(&dev->count_lock); |
10982 |
- return can_switch; |
10983 |
+@@ -1169,7 +1169,7 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev) |
10984 |
+ * locking inversion with the driver load path. And the access here is |
10985 |
+ * completely racy anyway. So don't bother with locking for now. |
10986 |
+ */ |
10987 |
+- return dev->open_count == 0; |
10988 |
++ return local_read(&dev->open_count) == 0; |
10989 |
} |
10990 |
+ |
10991 |
+ static const struct vga_switcheroo_client_ops radeon_switcheroo_ops = { |
10992 |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h |
10993 |
index dafd812..1bf20c7 100644 |
10994 |
--- a/drivers/gpu/drm/radeon/radeon_drv.h |
10995 |
@@ -40996,7 +42792,7 @@ index dafd812..1bf20c7 100644 |
10996 |
uint32_t irq_enable_reg; |
10997 |
uint32_t r500_disp_irq_reg; |
10998 |
diff --git a/drivers/gpu/drm/radeon/radeon_ioc32.c b/drivers/gpu/drm/radeon/radeon_ioc32.c |
10999 |
-index bdb0f93..5ff558f 100644 |
11000 |
+index 0b98ea1..0881827 100644 |
11001 |
--- a/drivers/gpu/drm/radeon/radeon_ioc32.c |
11002 |
+++ b/drivers/gpu/drm/radeon/radeon_ioc32.c |
11003 |
@@ -358,7 +358,7 @@ static int compat_radeon_cp_setparam(struct file *file, unsigned int cmd, |
11004 |
@@ -41027,11 +42823,11 @@ index bdb0f93..5ff558f 100644 |
11005 |
if (nr < DRM_COMMAND_BASE) |
11006 |
return drm_compat_ioctl(filp, cmd, arg); |
11007 |
|
11008 |
-- if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(radeon_compat_ioctls)) |
11009 |
+- if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(radeon_compat_ioctls)) |
11010 |
- fn = radeon_compat_ioctls[nr - DRM_COMMAND_BASE]; |
11011 |
- |
11012 |
- if (fn != NULL) |
11013 |
-+ if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(radeon_compat_ioctls)) { |
11014 |
++ if (nr < DRM_COMMAND_BASE + ARRAY_SIZE(radeon_compat_ioctls)) { |
11015 |
+ drm_ioctl_compat_t fn = radeon_compat_ioctls[nr - DRM_COMMAND_BASE]; |
11016 |
ret = (*fn) (filp, cmd, arg); |
11017 |
- else |
11018 |
@@ -41064,7 +42860,7 @@ index 244b19b..c19226d 100644 |
11019 |
|
11020 |
dev->max_vblank_count = 0x001fffff; |
11021 |
diff --git a/drivers/gpu/drm/radeon/radeon_state.c b/drivers/gpu/drm/radeon/radeon_state.c |
11022 |
-index 956ab7f..fbd36d8 100644 |
11023 |
+index 23bb64f..69d7234 100644 |
11024 |
--- a/drivers/gpu/drm/radeon/radeon_state.c |
11025 |
+++ b/drivers/gpu/drm/radeon/radeon_state.c |
11026 |
@@ -2168,7 +2168,7 @@ static int radeon_cp_clear(struct drm_device *dev, void *data, struct drm_file * |
11027 |
@@ -41110,10 +42906,10 @@ index c8a8a51..219dacc 100644 |
11028 |
vma->vm_ops = &radeon_ttm_vm_ops; |
11029 |
return 0; |
11030 |
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c |
11031 |
-index edb871d..a275c6ed 100644 |
11032 |
+index ef40381..347463e 100644 |
11033 |
--- a/drivers/gpu/drm/tegra/dc.c |
11034 |
+++ b/drivers/gpu/drm/tegra/dc.c |
11035 |
-@@ -1057,7 +1057,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor) |
11036 |
+@@ -1173,7 +1173,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor) |
11037 |
} |
11038 |
|
11039 |
for (i = 0; i < ARRAY_SIZE(debugfs_files); i++) |
11040 |
@@ -41123,10 +42919,10 @@ index edb871d..a275c6ed 100644 |
11041 |
err = drm_debugfs_create_files(dc->debugfs_files, |
11042 |
ARRAY_SIZE(debugfs_files), |
11043 |
diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c |
11044 |
-index 0e599f0..c9ea7c7 100644 |
11045 |
+index bd56f2a..255af4b 100644 |
11046 |
--- a/drivers/gpu/drm/tegra/dsi.c |
11047 |
+++ b/drivers/gpu/drm/tegra/dsi.c |
11048 |
-@@ -39,7 +39,7 @@ struct tegra_dsi { |
11049 |
+@@ -41,7 +41,7 @@ struct tegra_dsi { |
11050 |
struct clk *clk_lp; |
11051 |
struct clk *clk; |
11052 |
|
11053 |
@@ -41136,10 +42932,10 @@ index 0e599f0..c9ea7c7 100644 |
11054 |
struct dentry *debugfs; |
11055 |
|
11056 |
diff --git a/drivers/gpu/drm/tegra/hdmi.c b/drivers/gpu/drm/tegra/hdmi.c |
11057 |
-index 6928015..c9853e7 100644 |
11058 |
+index ba067bb..23afbbd 100644 |
11059 |
--- a/drivers/gpu/drm/tegra/hdmi.c |
11060 |
+++ b/drivers/gpu/drm/tegra/hdmi.c |
11061 |
-@@ -59,7 +59,7 @@ struct tegra_hdmi { |
11062 |
+@@ -60,7 +60,7 @@ struct tegra_hdmi { |
11063 |
bool stereo; |
11064 |
bool dvi; |
11065 |
|
11066 |
@@ -41479,10 +43275,10 @@ index 1bdcccc..f745d2c 100644 |
11067 |
rdesc[11] = rdesc[16] = 0xff; |
11068 |
rdesc[12] = rdesc[17] = 0x03; |
11069 |
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c |
11070 |
-index a5c7927..025a2b4 100644 |
11071 |
+index 8ed66fd..38ff772 100644 |
11072 |
--- a/drivers/hid/hid-core.c |
11073 |
+++ b/drivers/hid/hid-core.c |
11074 |
-@@ -2476,7 +2476,7 @@ EXPORT_SYMBOL_GPL(hid_ignore); |
11075 |
+@@ -2488,7 +2488,7 @@ EXPORT_SYMBOL_GPL(hid_ignore); |
11076 |
|
11077 |
int hid_add_device(struct hid_device *hdev) |
11078 |
{ |
11079 |
@@ -41491,7 +43287,7 @@ index a5c7927..025a2b4 100644 |
11080 |
int ret; |
11081 |
|
11082 |
if (WARN_ON(hdev->status & HID_STAT_ADDED)) |
11083 |
-@@ -2518,7 +2518,7 @@ int hid_add_device(struct hid_device *hdev) |
11084 |
+@@ -2530,7 +2530,7 @@ int hid_add_device(struct hid_device *hdev) |
11085 |
/* XXX hack, any other cleaner solution after the driver core |
11086 |
* is converted to allow more than 20 bytes as the device name? */ |
11087 |
dev_set_name(&hdev->dev, "%04X:%04X:%04X.%04X", hdev->bus, |
11088 |
@@ -41574,6 +43370,34 @@ index 486dbde..b7ba829 100644 |
11089 |
|
11090 |
spin_lock_irqsave(&djrcv_dev->lock, flags); |
11091 |
if (dj_report->report_id == REPORT_ID_DJ_SHORT) { |
11092 |
+diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c |
11093 |
+index ecc2cbf..29a74c1 100644 |
11094 |
+--- a/drivers/hid/hid-magicmouse.c |
11095 |
++++ b/drivers/hid/hid-magicmouse.c |
11096 |
+@@ -290,6 +290,11 @@ static int magicmouse_raw_event(struct hid_device *hdev, |
11097 |
+ if (size < 4 || ((size - 4) % 9) != 0) |
11098 |
+ return 0; |
11099 |
+ npoints = (size - 4) / 9; |
11100 |
++ if (npoints > 15) { |
11101 |
++ hid_warn(hdev, "invalid size value (%d) for TRACKPAD_REPORT_ID\n", |
11102 |
++ size); |
11103 |
++ return 0; |
11104 |
++ } |
11105 |
+ msc->ntouches = 0; |
11106 |
+ for (ii = 0; ii < npoints; ii++) |
11107 |
+ magicmouse_emit_touch(msc, ii, data + ii * 9 + 4); |
11108 |
+@@ -307,6 +312,11 @@ static int magicmouse_raw_event(struct hid_device *hdev, |
11109 |
+ if (size < 6 || ((size - 6) % 8) != 0) |
11110 |
+ return 0; |
11111 |
+ npoints = (size - 6) / 8; |
11112 |
++ if (npoints > 15) { |
11113 |
++ hid_warn(hdev, "invalid size value (%d) for MOUSE_REPORT_ID\n", |
11114 |
++ size); |
11115 |
++ return 0; |
11116 |
++ } |
11117 |
+ msc->ntouches = 0; |
11118 |
+ for (ii = 0; ii < npoints; ii++) |
11119 |
+ magicmouse_emit_touch(msc, ii, data + ii * 8 + 6); |
11120 |
diff --git a/drivers/hid/hid-monterey.c b/drivers/hid/hid-monterey.c |
11121 |
index 9e14c00..25daf28 100644 |
11122 |
--- a/drivers/hid/hid-monterey.c |
11123 |
@@ -41600,6 +43424,23 @@ index 736b250..6aca4f2 100644 |
11124 |
rdesc[41] == 0x00 && rdesc[59] == 0x26 && |
11125 |
rdesc[60] == 0xf9 && rdesc[61] == 0x00) { |
11126 |
hid_info(hdev, "fixing up Petalynx Maxter Remote report descriptor\n"); |
11127 |
+diff --git a/drivers/hid/hid-picolcd_core.c b/drivers/hid/hid-picolcd_core.c |
11128 |
+index acbb0210..020df3c 100644 |
11129 |
+--- a/drivers/hid/hid-picolcd_core.c |
11130 |
++++ b/drivers/hid/hid-picolcd_core.c |
11131 |
+@@ -350,6 +350,12 @@ static int picolcd_raw_event(struct hid_device *hdev, |
11132 |
+ if (!data) |
11133 |
+ return 1; |
11134 |
+ |
11135 |
++ if (size > 64) { |
11136 |
++ hid_warn(hdev, "invalid size value (%d) for picolcd raw event\n", |
11137 |
++ size); |
11138 |
++ return 0; |
11139 |
++ } |
11140 |
++ |
11141 |
+ if (report->id == REPORT_KEY_STATE) { |
11142 |
+ if (data->input_keys) |
11143 |
+ ret = picolcd_raw_keypad(data, report, raw_data+1, size-1); |
11144 |
diff --git a/drivers/hid/hid-sunplus.c b/drivers/hid/hid-sunplus.c |
11145 |
index 87fc91e..91072fa 100644 |
11146 |
--- a/drivers/hid/hid-sunplus.c |
11147 |
@@ -41627,7 +43468,7 @@ index c13fb5b..55a3802 100644 |
11148 |
|
11149 |
*off += size; |
11150 |
diff --git a/drivers/hid/uhid.c b/drivers/hid/uhid.c |
11151 |
-index 0d078c3..cd0962c 100644 |
11152 |
+index 0cb92e3..c7d453d 100644 |
11153 |
--- a/drivers/hid/uhid.c |
11154 |
+++ b/drivers/hid/uhid.c |
11155 |
@@ -47,7 +47,7 @@ struct uhid_device { |
11156 |
@@ -41648,7 +43489,7 @@ index 0d078c3..cd0962c 100644 |
11157 |
ev->u.feature.rnum = rnum; |
11158 |
ev->u.feature.rtype = report_type; |
11159 |
|
11160 |
-@@ -539,7 +539,7 @@ static int uhid_dev_feature_answer(struct uhid_device *uhid, |
11161 |
+@@ -538,7 +538,7 @@ static int uhid_dev_feature_answer(struct uhid_device *uhid, |
11162 |
spin_lock_irqsave(&uhid->qlock, flags); |
11163 |
|
11164 |
/* id for old report; drop it silently */ |
11165 |
@@ -41658,7 +43499,7 @@ index 0d078c3..cd0962c 100644 |
11166 |
if (atomic_read(&uhid->report_done)) |
11167 |
goto unlock; |
11168 |
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c |
11169 |
-index 602ca86..10a6573 100644 |
11170 |
+index 284cf66..084c627 100644 |
11171 |
--- a/drivers/hv/channel.c |
11172 |
+++ b/drivers/hv/channel.c |
11173 |
@@ -365,8 +365,8 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer, |
11174 |
@@ -41673,7 +43514,7 @@ index 602ca86..10a6573 100644 |
11175 |
ret = create_gpadl_header(kbuffer, size, &msginfo, &msgcount); |
11176 |
if (ret) |
11177 |
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c |
11178 |
-index bcb4950..61dba6c 100644 |
11179 |
+index edfc848..d83e195 100644 |
11180 |
--- a/drivers/hv/hv.c |
11181 |
+++ b/drivers/hv/hv.c |
11182 |
@@ -112,7 +112,7 @@ static u64 do_hypercall(u64 control, void *input, void *output) |
11183 |
@@ -41780,10 +43621,10 @@ index 5e90c5d..d8fcefb 100644 |
11184 |
cap_msg.caps.cap_bits.balloon = 1; |
11185 |
cap_msg.caps.cap_bits.hot_add = 1; |
11186 |
diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h |
11187 |
-index 860134d..ea3a79a 100644 |
11188 |
+index 22b7507..fc2fc47 100644 |
11189 |
--- a/drivers/hv/hyperv_vmbus.h |
11190 |
+++ b/drivers/hv/hyperv_vmbus.h |
11191 |
-@@ -602,7 +602,7 @@ enum vmbus_connect_state { |
11192 |
+@@ -607,7 +607,7 @@ enum vmbus_connect_state { |
11193 |
struct vmbus_connection { |
11194 |
enum vmbus_connect_state conn_state; |
11195 |
|
11196 |
@@ -41793,7 +43634,7 @@ index 860134d..ea3a79a 100644 |
11197 |
/* |
11198 |
* Represents channel interrupts. Each bit position represents a |
11199 |
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c |
11200 |
-index 8e53a3c..7a64e44 100644 |
11201 |
+index 4d6b269..2e23b86 100644 |
11202 |
--- a/drivers/hv/vmbus_drv.c |
11203 |
+++ b/drivers/hv/vmbus_drv.c |
11204 |
@@ -807,10 +807,10 @@ int vmbus_device_register(struct hv_device *child_device_obj) |
11205 |
@@ -41899,7 +43740,7 @@ index 632f1dc..57e6a58 100644 |
11206 |
|
11207 |
/* Set up read-only sensors */ |
11208 |
diff --git a/drivers/hwmon/iio_hwmon.c b/drivers/hwmon/iio_hwmon.c |
11209 |
-index 9fbb1b1..efbaa3e 100644 |
11210 |
+index 14c82da..09b25d7 100644 |
11211 |
--- a/drivers/hwmon/iio_hwmon.c |
11212 |
+++ b/drivers/hwmon/iio_hwmon.c |
11213 |
@@ -61,7 +61,7 @@ static int iio_hwmon_probe(struct platform_device *pdev) |
11214 |
@@ -41911,8 +43752,27 @@ index 9fbb1b1..efbaa3e 100644 |
11215 |
int ret, i; |
11216 |
int in_i = 1, temp_i = 1, curr_i = 1; |
11217 |
enum iio_chan_type type; |
11218 |
+diff --git a/drivers/hwmon/nct6683.c b/drivers/hwmon/nct6683.c |
11219 |
+index 7710f46..427a28d 100644 |
11220 |
+--- a/drivers/hwmon/nct6683.c |
11221 |
++++ b/drivers/hwmon/nct6683.c |
11222 |
+@@ -397,11 +397,11 @@ static struct attribute_group * |
11223 |
+ nct6683_create_attr_group(struct device *dev, struct sensor_template_group *tg, |
11224 |
+ int repeat) |
11225 |
+ { |
11226 |
+- struct sensor_device_attribute_2 *a2; |
11227 |
+- struct sensor_device_attribute *a; |
11228 |
++ sensor_device_attribute_2_no_const *a2; |
11229 |
++ sensor_device_attribute_no_const *a; |
11230 |
+ struct sensor_device_template **t; |
11231 |
+ struct sensor_device_attr_u *su; |
11232 |
+- struct attribute_group *group; |
11233 |
++ attribute_group_no_const *group; |
11234 |
+ struct attribute **attrs; |
11235 |
+ int i, j, count; |
11236 |
+ |
11237 |
diff --git a/drivers/hwmon/nct6775.c b/drivers/hwmon/nct6775.c |
11238 |
-index 38d5a63..cf2c2ea 100644 |
11239 |
+index 59d9a3f..2298fa4 100644 |
11240 |
--- a/drivers/hwmon/nct6775.c |
11241 |
+++ b/drivers/hwmon/nct6775.c |
11242 |
@@ -944,10 +944,10 @@ static struct attribute_group * |
11243 |
@@ -42057,7 +43917,7 @@ index 41fc683..a39cfea 100644 |
11244 |
/* Wrapper access functions for multiplexed SMBus */ |
11245 |
static DEFINE_MUTEX(amd756_lock); |
11246 |
diff --git a/drivers/i2c/busses/i2c-diolan-u2c.c b/drivers/i2c/busses/i2c-diolan-u2c.c |
11247 |
-index 721f7eb..0fd2a09 100644 |
11248 |
+index b19a310..d6eece0 100644 |
11249 |
--- a/drivers/i2c/busses/i2c-diolan-u2c.c |
11250 |
+++ b/drivers/i2c/busses/i2c-diolan-u2c.c |
11251 |
@@ -98,7 +98,7 @@ MODULE_PARM_DESC(frequency, "I2C clock frequency in hertz"); |
11252 |
@@ -42109,10 +43969,10 @@ index 0b510ba..4fbb5085 100644 |
11253 |
} |
11254 |
} |
11255 |
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c |
11256 |
-index ede16aec..e423e8a 100644 |
11257 |
+index 4b1f375..770b95f 100644 |
11258 |
--- a/drivers/iio/industrialio-core.c |
11259 |
+++ b/drivers/iio/industrialio-core.c |
11260 |
-@@ -527,7 +527,7 @@ static ssize_t iio_write_channel_info(struct device *dev, |
11261 |
+@@ -551,7 +551,7 @@ static ssize_t iio_write_channel_info(struct device *dev, |
11262 |
} |
11263 |
|
11264 |
static |
11265 |
@@ -42412,7 +44272,7 @@ index 1f95bba..9530f87 100644 |
11266 |
sdata, wqe->wr.wr.atomic.swap); |
11267 |
goto send_comp; |
11268 |
diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c |
11269 |
-index fd36ec6..a6a082f 100644 |
11270 |
+index 287ad05..5ae7b44d 100644 |
11271 |
--- a/drivers/infiniband/hw/mlx4/mad.c |
11272 |
+++ b/drivers/infiniband/hw/mlx4/mad.c |
11273 |
@@ -98,7 +98,7 @@ __be64 mlx4_ib_gen_node_guid(void) |
11274 |
@@ -42438,10 +44298,10 @@ index ed327e6..ca1739e0 100644 |
11275 |
ctx->mcg_wq = create_singlethread_workqueue(name); |
11276 |
if (!ctx->mcg_wq) |
11277 |
diff --git a/drivers/infiniband/hw/mlx4/mlx4_ib.h b/drivers/infiniband/hw/mlx4/mlx4_ib.h |
11278 |
-index 66b0b7d..f14836a 100644 |
11279 |
+index 369da3c..223e6e9 100644 |
11280 |
--- a/drivers/infiniband/hw/mlx4/mlx4_ib.h |
11281 |
+++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h |
11282 |
-@@ -425,7 +425,7 @@ struct mlx4_ib_demux_ctx { |
11283 |
+@@ -426,7 +426,7 @@ struct mlx4_ib_demux_ctx { |
11284 |
struct list_head mcg_mgid0_list; |
11285 |
struct workqueue_struct *mcg_wq; |
11286 |
struct mlx4_ib_demux_pv_ctx **tun; |
11287 |
@@ -42548,10 +44408,10 @@ index 415f8e1..e34214e 100644 |
11288 |
struct mthca_dev *dev = to_mdev(ibcq->device); |
11289 |
struct mthca_cq *cq = to_mcq(ibcq); |
11290 |
diff --git a/drivers/infiniband/hw/nes/nes.c b/drivers/infiniband/hw/nes/nes.c |
11291 |
-index 353c7b0..c6ce921 100644 |
11292 |
+index 3b2a6dc..bce26ff 100644 |
11293 |
--- a/drivers/infiniband/hw/nes/nes.c |
11294 |
+++ b/drivers/infiniband/hw/nes/nes.c |
11295 |
-@@ -98,7 +98,7 @@ MODULE_PARM_DESC(limit_maxrdreqsz, "Limit max read request size to 256 Bytes"); |
11296 |
+@@ -97,7 +97,7 @@ MODULE_PARM_DESC(limit_maxrdreqsz, "Limit max read request size to 256 Bytes"); |
11297 |
LIST_HEAD(nes_adapter_list); |
11298 |
static LIST_HEAD(nes_dev_list); |
11299 |
|
11300 |
@@ -42560,7 +44420,7 @@ index 353c7b0..c6ce921 100644 |
11301 |
|
11302 |
static unsigned int ee_flsh_adapter; |
11303 |
static unsigned int sysfs_nonidx_addr; |
11304 |
-@@ -269,7 +269,7 @@ static void nes_cqp_rem_ref_callback(struct nes_device *nesdev, struct nes_cqp_r |
11305 |
+@@ -278,7 +278,7 @@ static void nes_cqp_rem_ref_callback(struct nes_device *nesdev, struct nes_cqp_r |
11306 |
struct nes_qp *nesqp = cqp_request->cqp_callback_pointer; |
11307 |
struct nes_adapter *nesadapter = nesdev->nesadapter; |
11308 |
|
11309 |
@@ -42570,10 +44430,10 @@ index 353c7b0..c6ce921 100644 |
11310 |
/* Free the control structures */ |
11311 |
|
11312 |
diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h |
11313 |
-index 33cc589..3bd6538 100644 |
11314 |
+index bd9d132..70d84f4 100644 |
11315 |
--- a/drivers/infiniband/hw/nes/nes.h |
11316 |
+++ b/drivers/infiniband/hw/nes/nes.h |
11317 |
-@@ -177,17 +177,17 @@ extern unsigned int nes_debug_level; |
11318 |
+@@ -180,17 +180,17 @@ extern unsigned int nes_debug_level; |
11319 |
extern unsigned int wqm_quanta; |
11320 |
extern struct list_head nes_adapter_list; |
11321 |
|
11322 |
@@ -42602,7 +44462,7 @@ index 33cc589..3bd6538 100644 |
11323 |
extern u32 mh_detected; |
11324 |
extern u32 mh_pauses_sent; |
11325 |
extern u32 cm_packets_sent; |
11326 |
-@@ -196,16 +196,16 @@ extern u32 cm_packets_created; |
11327 |
+@@ -199,16 +199,16 @@ extern u32 cm_packets_created; |
11328 |
extern u32 cm_packets_received; |
11329 |
extern u32 cm_packets_dropped; |
11330 |
extern u32 cm_packets_retrans; |
11331 |
@@ -42629,10 +44489,10 @@ index 33cc589..3bd6538 100644 |
11332 |
extern u32 int_mod_timer_init; |
11333 |
extern u32 int_mod_cq_depth_256; |
11334 |
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c |
11335 |
-index dfa9df4..6bf7221 100644 |
11336 |
+index 6f09a72..cf4399d 100644 |
11337 |
--- a/drivers/infiniband/hw/nes/nes_cm.c |
11338 |
+++ b/drivers/infiniband/hw/nes/nes_cm.c |
11339 |
-@@ -68,14 +68,14 @@ u32 cm_packets_dropped; |
11340 |
+@@ -69,14 +69,14 @@ u32 cm_packets_dropped; |
11341 |
u32 cm_packets_retrans; |
11342 |
u32 cm_packets_created; |
11343 |
u32 cm_packets_received; |
11344 |
@@ -42654,7 +44514,7 @@ index dfa9df4..6bf7221 100644 |
11345 |
|
11346 |
static inline int mini_cm_accelerated(struct nes_cm_core *, struct nes_cm_node *); |
11347 |
static struct nes_cm_listener *mini_cm_listen(struct nes_cm_core *, struct nes_vnic *, struct nes_cm_info *); |
11348 |
-@@ -134,28 +134,28 @@ static void record_ird_ord(struct nes_cm_node *, u16, u16); |
11349 |
+@@ -135,28 +135,28 @@ static void record_ird_ord(struct nes_cm_node *, u16, u16); |
11350 |
/* instance of function pointers for client API */ |
11351 |
/* set address of this instance to cm_core->cm_ops at cm_core alloc */ |
11352 |
static struct nes_cm_ops nes_cm_api = { |
11353 |
@@ -42701,7 +44561,7 @@ index dfa9df4..6bf7221 100644 |
11354 |
|
11355 |
int nes_add_ref_cm_node(struct nes_cm_node *cm_node) |
11356 |
{ |
11357 |
-@@ -1319,7 +1319,7 @@ static int mini_cm_dec_refcnt_listen(struct nes_cm_core *cm_core, |
11358 |
+@@ -1436,7 +1436,7 @@ static int mini_cm_dec_refcnt_listen(struct nes_cm_core *cm_core, |
11359 |
kfree(listener); |
11360 |
listener = NULL; |
11361 |
ret = 0; |
11362 |
@@ -42710,7 +44570,7 @@ index dfa9df4..6bf7221 100644 |
11363 |
} else { |
11364 |
spin_unlock_irqrestore(&cm_core->listen_list_lock, flags); |
11365 |
} |
11366 |
-@@ -1513,7 +1513,7 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core, |
11367 |
+@@ -1637,7 +1637,7 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core, |
11368 |
cm_node->rem_mac); |
11369 |
|
11370 |
add_hte_node(cm_core, cm_node); |
11371 |
@@ -42719,7 +44579,7 @@ index dfa9df4..6bf7221 100644 |
11372 |
|
11373 |
return cm_node; |
11374 |
} |
11375 |
-@@ -1571,7 +1571,7 @@ static int rem_ref_cm_node(struct nes_cm_core *cm_core, |
11376 |
+@@ -1698,7 +1698,7 @@ static int rem_ref_cm_node(struct nes_cm_core *cm_core, |
11377 |
} |
11378 |
|
11379 |
atomic_dec(&cm_core->node_cnt); |
11380 |
@@ -42728,7 +44588,7 @@ index dfa9df4..6bf7221 100644 |
11381 |
nesqp = cm_node->nesqp; |
11382 |
if (nesqp) { |
11383 |
nesqp->cm_node = NULL; |
11384 |
-@@ -1635,7 +1635,7 @@ static int process_options(struct nes_cm_node *cm_node, u8 *optionsloc, |
11385 |
+@@ -1762,7 +1762,7 @@ static int process_options(struct nes_cm_node *cm_node, u8 *optionsloc, |
11386 |
|
11387 |
static void drop_packet(struct sk_buff *skb) |
11388 |
{ |
11389 |
@@ -42737,7 +44597,7 @@ index dfa9df4..6bf7221 100644 |
11390 |
dev_kfree_skb_any(skb); |
11391 |
} |
11392 |
|
11393 |
-@@ -1698,7 +1698,7 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, |
11394 |
+@@ -1825,7 +1825,7 @@ static void handle_rst_pkt(struct nes_cm_node *cm_node, struct sk_buff *skb, |
11395 |
{ |
11396 |
|
11397 |
int reset = 0; /* whether to send reset in case of err.. */ |
11398 |
@@ -42746,7 +44606,7 @@ index dfa9df4..6bf7221 100644 |
11399 |
nes_debug(NES_DBG_CM, "Received Reset, cm_node = %p, state = %u." |
11400 |
" refcnt=%d\n", cm_node, cm_node->state, |
11401 |
atomic_read(&cm_node->ref_count)); |
11402 |
-@@ -2339,7 +2339,7 @@ static struct nes_cm_node *mini_cm_connect(struct nes_cm_core *cm_core, |
11403 |
+@@ -2492,7 +2492,7 @@ static struct nes_cm_node *mini_cm_connect(struct nes_cm_core *cm_core, |
11404 |
rem_ref_cm_node(cm_node->cm_core, cm_node); |
11405 |
return NULL; |
11406 |
} |
11407 |
@@ -42755,7 +44615,7 @@ index dfa9df4..6bf7221 100644 |
11408 |
loopbackremotenode->loopbackpartner = cm_node; |
11409 |
loopbackremotenode->tcp_cntxt.rcv_wscale = |
11410 |
NES_CM_DEFAULT_RCV_WND_SCALE; |
11411 |
-@@ -2614,7 +2614,7 @@ static int mini_cm_recv_pkt(struct nes_cm_core *cm_core, |
11412 |
+@@ -2773,7 +2773,7 @@ static int mini_cm_recv_pkt(struct nes_cm_core *cm_core, |
11413 |
nes_queue_mgt_skbs(skb, nesvnic, cm_node->nesqp); |
11414 |
else { |
11415 |
rem_ref_cm_node(cm_core, cm_node); |
11416 |
@@ -42764,7 +44624,7 @@ index dfa9df4..6bf7221 100644 |
11417 |
dev_kfree_skb_any(skb); |
11418 |
} |
11419 |
break; |
11420 |
-@@ -2922,7 +2922,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) |
11421 |
+@@ -3081,7 +3081,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) |
11422 |
|
11423 |
if ((cm_id) && (cm_id->event_handler)) { |
11424 |
if (issue_disconn) { |
11425 |
@@ -42773,7 +44633,7 @@ index dfa9df4..6bf7221 100644 |
11426 |
cm_event.event = IW_CM_EVENT_DISCONNECT; |
11427 |
cm_event.status = disconn_status; |
11428 |
cm_event.local_addr = cm_id->local_addr; |
11429 |
-@@ -2944,7 +2944,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) |
11430 |
+@@ -3103,7 +3103,7 @@ static int nes_cm_disconn_true(struct nes_qp *nesqp) |
11431 |
} |
11432 |
|
11433 |
if (issue_close) { |
11434 |
@@ -42782,7 +44642,7 @@ index dfa9df4..6bf7221 100644 |
11435 |
nes_disconnect(nesqp, 1); |
11436 |
|
11437 |
cm_id->provider_data = nesqp; |
11438 |
-@@ -3082,7 +3082,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) |
11439 |
+@@ -3241,7 +3241,7 @@ int nes_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) |
11440 |
|
11441 |
nes_debug(NES_DBG_CM, "QP%u, cm_node=%p, jiffies = %lu listener = %p\n", |
11442 |
nesqp->hwqp.qp_id, cm_node, jiffies, cm_node->listener); |
11443 |
@@ -42791,7 +44651,7 @@ index dfa9df4..6bf7221 100644 |
11444 |
|
11445 |
nes_debug(NES_DBG_CM, "netdev refcnt = %u.\n", |
11446 |
netdev_refcnt_read(nesvnic->netdev)); |
11447 |
-@@ -3278,7 +3278,7 @@ int nes_reject(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len) |
11448 |
+@@ -3439,7 +3439,7 @@ int nes_reject(struct iw_cm_id *cm_id, const void *pdata, u8 pdata_len) |
11449 |
struct nes_cm_core *cm_core; |
11450 |
u8 *start_buff; |
11451 |
|
11452 |
@@ -42800,7 +44660,7 @@ index dfa9df4..6bf7221 100644 |
11453 |
cm_node = (struct nes_cm_node *)cm_id->provider_data; |
11454 |
loopback = cm_node->loopbackpartner; |
11455 |
cm_core = cm_node->cm_core; |
11456 |
-@@ -3340,7 +3340,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) |
11457 |
+@@ -3504,7 +3504,7 @@ int nes_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) |
11458 |
ntohs(raddr->sin_port), ntohl(laddr->sin_addr.s_addr), |
11459 |
ntohs(laddr->sin_port)); |
11460 |
|
11461 |
@@ -42809,7 +44669,7 @@ index dfa9df4..6bf7221 100644 |
11462 |
nesqp->active_conn = 1; |
11463 |
|
11464 |
/* cache the cm_id in the qp */ |
11465 |
-@@ -3451,7 +3451,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog) |
11466 |
+@@ -3649,7 +3649,7 @@ int nes_create_listen(struct iw_cm_id *cm_id, int backlog) |
11467 |
g_cm_core->api->stop_listener(g_cm_core, (void *)cm_node); |
11468 |
return err; |
11469 |
} |
11470 |
@@ -42818,7 +44678,7 @@ index dfa9df4..6bf7221 100644 |
11471 |
} |
11472 |
|
11473 |
cm_id->add_ref(cm_id); |
11474 |
-@@ -3558,7 +3558,7 @@ static void cm_event_connected(struct nes_cm_event *event) |
11475 |
+@@ -3756,7 +3756,7 @@ static void cm_event_connected(struct nes_cm_event *event) |
11476 |
|
11477 |
if (nesqp->destroyed) |
11478 |
return; |
11479 |
@@ -42827,7 +44687,7 @@ index dfa9df4..6bf7221 100644 |
11480 |
nes_debug(NES_DBG_CM, "QP%u attempting to connect to 0x%08X:0x%04X on" |
11481 |
" local port 0x%04X. jiffies = %lu.\n", |
11482 |
nesqp->hwqp.qp_id, ntohl(raddr->sin_addr.s_addr), |
11483 |
-@@ -3741,7 +3741,7 @@ static void cm_event_reset(struct nes_cm_event *event) |
11484 |
+@@ -3941,7 +3941,7 @@ static void cm_event_reset(struct nes_cm_event *event) |
11485 |
|
11486 |
cm_id->add_ref(cm_id); |
11487 |
ret = cm_id->event_handler(cm_id, &cm_event); |
11488 |
@@ -42836,7 +44696,7 @@ index dfa9df4..6bf7221 100644 |
11489 |
cm_event.event = IW_CM_EVENT_CLOSE; |
11490 |
cm_event.status = 0; |
11491 |
cm_event.provider_data = cm_id->provider_data; |
11492 |
-@@ -3781,7 +3781,7 @@ static void cm_event_mpa_req(struct nes_cm_event *event) |
11493 |
+@@ -3981,7 +3981,7 @@ static void cm_event_mpa_req(struct nes_cm_event *event) |
11494 |
return; |
11495 |
cm_id = cm_node->cm_id; |
11496 |
|
11497 |
@@ -42845,7 +44705,7 @@ index dfa9df4..6bf7221 100644 |
11498 |
nes_debug(NES_DBG_CM, "cm_node = %p - cm_id = %p, jiffies = %lu\n", |
11499 |
cm_node, cm_id, jiffies); |
11500 |
|
11501 |
-@@ -3830,7 +3830,7 @@ static void cm_event_mpa_reject(struct nes_cm_event *event) |
11502 |
+@@ -4030,7 +4030,7 @@ static void cm_event_mpa_reject(struct nes_cm_event *event) |
11503 |
return; |
11504 |
cm_id = cm_node->cm_id; |
11505 |
|
11506 |
@@ -43076,10 +44936,10 @@ index 603fe0d..f63decc 100644 |
11507 |
snprintf(led->name, sizeof(led->name), "xpad%ld", led_no); |
11508 |
led->xpad = xpad; |
11509 |
diff --git a/drivers/input/misc/ims-pcu.c b/drivers/input/misc/ims-pcu.c |
11510 |
-index 5a73639..d586683 100644 |
11511 |
+index 719410f..1896169 100644 |
11512 |
--- a/drivers/input/misc/ims-pcu.c |
11513 |
+++ b/drivers/input/misc/ims-pcu.c |
11514 |
-@@ -1850,7 +1850,7 @@ static int ims_pcu_identify_type(struct ims_pcu *pcu, u8 *device_id) |
11515 |
+@@ -1851,7 +1851,7 @@ static int ims_pcu_identify_type(struct ims_pcu *pcu, u8 *device_id) |
11516 |
|
11517 |
static int ims_pcu_init_application_mode(struct ims_pcu *pcu) |
11518 |
{ |
11519 |
@@ -43088,7 +44948,7 @@ index 5a73639..d586683 100644 |
11520 |
|
11521 |
const struct ims_pcu_device_info *info; |
11522 |
int error; |
11523 |
-@@ -1881,7 +1881,7 @@ static int ims_pcu_init_application_mode(struct ims_pcu *pcu) |
11524 |
+@@ -1882,7 +1882,7 @@ static int ims_pcu_init_application_mode(struct ims_pcu *pcu) |
11525 |
} |
11526 |
|
11527 |
/* Device appears to be operable, complete initialization */ |
11528 |
@@ -43181,10 +45041,10 @@ index e5555fc..937986d 100644 |
11529 |
|
11530 |
/** |
11531 |
diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c |
11532 |
-index 228632c9..edfe331 100644 |
11533 |
+index 33c4395..e06447e 100644 |
11534 |
--- a/drivers/iommu/irq_remapping.c |
11535 |
+++ b/drivers/iommu/irq_remapping.c |
11536 |
-@@ -356,7 +356,7 @@ int setup_hpet_msi_remapped(unsigned int irq, unsigned int id) |
11537 |
+@@ -354,7 +354,7 @@ int setup_hpet_msi_remapped(unsigned int irq, unsigned int id) |
11538 |
void panic_if_irq_remap(const char *msg) |
11539 |
{ |
11540 |
if (irq_remapping_enabled) |
11541 |
@@ -43193,7 +45053,7 @@ index 228632c9..edfe331 100644 |
11542 |
} |
11543 |
|
11544 |
static void ir_ack_apic_edge(struct irq_data *data) |
11545 |
-@@ -377,10 +377,12 @@ static void ir_print_prefix(struct irq_data *data, struct seq_file *p) |
11546 |
+@@ -375,10 +375,12 @@ static void ir_print_prefix(struct irq_data *data, struct seq_file *p) |
11547 |
|
11548 |
void irq_remap_modify_chip_defaults(struct irq_chip *chip) |
11549 |
{ |
11550 |
@@ -43211,7 +45071,7 @@ index 228632c9..edfe331 100644 |
11551 |
|
11552 |
bool setup_remapped_irq(int irq, struct irq_cfg *cfg, struct irq_chip *chip) |
11553 |
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c |
11554 |
-index 739ca67..42ee3f1 100644 |
11555 |
+index 7c131cf..035129b 100644 |
11556 |
--- a/drivers/irqchip/irq-gic.c |
11557 |
+++ b/drivers/irqchip/irq-gic.c |
11558 |
@@ -85,7 +85,7 @@ static u8 gic_cpu_map[NR_GIC_CPU_IF] __read_mostly; |
11559 |
@@ -43246,7 +45106,7 @@ index 8777065..a4a9967 100644 |
11560 |
int ret; |
11561 |
int k; |
11562 |
diff --git a/drivers/isdn/capi/capi.c b/drivers/isdn/capi/capi.c |
11563 |
-index ac6f72b..81150f2 100644 |
11564 |
+index f9a87ed..3fdd854 100644 |
11565 |
--- a/drivers/isdn/capi/capi.c |
11566 |
+++ b/drivers/isdn/capi/capi.c |
11567 |
@@ -81,8 +81,8 @@ struct capiminor { |
11568 |
@@ -43287,10 +45147,10 @@ index ac6f72b..81150f2 100644 |
11569 |
capimsg_setu32(skb->data, 12, (u32)(long)skb->data);/* Data32 */ |
11570 |
capimsg_setu16(skb->data, 16, len); /* Data length */ |
11571 |
diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c |
11572 |
-index c44950d..10ac276 100644 |
11573 |
+index b7ae0a0..04590fa 100644 |
11574 |
--- a/drivers/isdn/gigaset/bas-gigaset.c |
11575 |
+++ b/drivers/isdn/gigaset/bas-gigaset.c |
11576 |
-@@ -2564,22 +2564,22 @@ static int gigaset_post_reset(struct usb_interface *intf) |
11577 |
+@@ -2565,22 +2565,22 @@ static int gigaset_post_reset(struct usb_interface *intf) |
11578 |
|
11579 |
|
11580 |
static const struct gigaset_ops gigops = { |
11581 |
@@ -43504,6 +45364,162 @@ index 91d5730..336523e 100644 |
11582 |
}; |
11583 |
|
11584 |
/* The following should better go into a dedicated source file such that |
11585 |
+diff --git a/drivers/isdn/i4l/isdn_ppp.c b/drivers/isdn/i4l/isdn_ppp.c |
11586 |
+index 62f0688..38ceac5 100644 |
11587 |
+--- a/drivers/isdn/i4l/isdn_ppp.c |
11588 |
++++ b/drivers/isdn/i4l/isdn_ppp.c |
11589 |
+@@ -378,15 +378,10 @@ isdn_ppp_release(int min, struct file *file) |
11590 |
+ is->slcomp = NULL; |
11591 |
+ #endif |
11592 |
+ #ifdef CONFIG_IPPP_FILTER |
11593 |
+- if (is->pass_filter) { |
11594 |
+- sk_unattached_filter_destroy(is->pass_filter); |
11595 |
+- is->pass_filter = NULL; |
11596 |
+- } |
11597 |
+- |
11598 |
+- if (is->active_filter) { |
11599 |
+- sk_unattached_filter_destroy(is->active_filter); |
11600 |
+- is->active_filter = NULL; |
11601 |
+- } |
11602 |
++ kfree(is->pass_filter); |
11603 |
++ is->pass_filter = NULL; |
11604 |
++ kfree(is->active_filter); |
11605 |
++ is->active_filter = NULL; |
11606 |
+ #endif |
11607 |
+ |
11608 |
+ /* TODO: if this was the previous master: link the stuff to the new master */ |
11609 |
+@@ -442,7 +437,7 @@ static int get_filter(void __user *arg, struct sock_filter **p) |
11610 |
+ { |
11611 |
+ struct sock_fprog uprog; |
11612 |
+ struct sock_filter *code = NULL; |
11613 |
+- int len; |
11614 |
++ int len, err; |
11615 |
+ |
11616 |
+ if (copy_from_user(&uprog, arg, sizeof(uprog))) |
11617 |
+ return -EFAULT; |
11618 |
+@@ -458,6 +453,12 @@ static int get_filter(void __user *arg, struct sock_filter **p) |
11619 |
+ if (IS_ERR(code)) |
11620 |
+ return PTR_ERR(code); |
11621 |
+ |
11622 |
++ err = sk_chk_filter(code, uprog.len); |
11623 |
++ if (err) { |
11624 |
++ kfree(code); |
11625 |
++ return err; |
11626 |
++ } |
11627 |
++ |
11628 |
+ *p = code; |
11629 |
+ return uprog.len; |
11630 |
+ } |
11631 |
+@@ -628,53 +629,25 @@ isdn_ppp_ioctl(int min, struct file *file, unsigned int cmd, unsigned long arg) |
11632 |
+ #ifdef CONFIG_IPPP_FILTER |
11633 |
+ case PPPIOCSPASS: |
11634 |
+ { |
11635 |
+- struct sock_fprog_kern fprog; |
11636 |
+ struct sock_filter *code; |
11637 |
+- int err, len = get_filter(argp, &code); |
11638 |
+- |
11639 |
++ int len = get_filter(argp, &code); |
11640 |
+ if (len < 0) |
11641 |
+ return len; |
11642 |
+- |
11643 |
+- fprog.len = len; |
11644 |
+- fprog.filter = code; |
11645 |
+- |
11646 |
+- if (is->pass_filter) { |
11647 |
+- sk_unattached_filter_destroy(is->pass_filter); |
11648 |
+- is->pass_filter = NULL; |
11649 |
+- } |
11650 |
+- if (fprog.filter != NULL) |
11651 |
+- err = sk_unattached_filter_create(&is->pass_filter, |
11652 |
+- &fprog); |
11653 |
+- else |
11654 |
+- err = 0; |
11655 |
+- kfree(code); |
11656 |
+- |
11657 |
+- return err; |
11658 |
++ kfree(is->pass_filter); |
11659 |
++ is->pass_filter = code; |
11660 |
++ is->pass_len = len; |
11661 |
++ break; |
11662 |
+ } |
11663 |
+ case PPPIOCSACTIVE: |
11664 |
+ { |
11665 |
+- struct sock_fprog_kern fprog; |
11666 |
+ struct sock_filter *code; |
11667 |
+- int err, len = get_filter(argp, &code); |
11668 |
+- |
11669 |
++ int len = get_filter(argp, &code); |
11670 |
+ if (len < 0) |
11671 |
+ return len; |
11672 |
+- |
11673 |
+- fprog.len = len; |
11674 |
+- fprog.filter = code; |
11675 |
+- |
11676 |
+- if (is->active_filter) { |
11677 |
+- sk_unattached_filter_destroy(is->active_filter); |
11678 |
+- is->active_filter = NULL; |
11679 |
+- } |
11680 |
+- if (fprog.filter != NULL) |
11681 |
+- err = sk_unattached_filter_create(&is->active_filter, |
11682 |
+- &fprog); |
11683 |
+- else |
11684 |
+- err = 0; |
11685 |
+- kfree(code); |
11686 |
+- |
11687 |
+- return err; |
11688 |
++ kfree(is->active_filter); |
11689 |
++ is->active_filter = code; |
11690 |
++ is->active_len = len; |
11691 |
++ break; |
11692 |
+ } |
11693 |
+ #endif /* CONFIG_IPPP_FILTER */ |
11694 |
+ default: |
11695 |
+@@ -1174,14 +1147,14 @@ isdn_ppp_push_higher(isdn_net_dev *net_dev, isdn_net_local *lp, struct sk_buff * |
11696 |
+ } |
11697 |
+ |
11698 |
+ if (is->pass_filter |
11699 |
+- && SK_RUN_FILTER(is->pass_filter, skb) == 0) { |
11700 |
++ && sk_run_filter(skb, is->pass_filter) == 0) { |
11701 |
+ if (is->debug & 0x2) |
11702 |
+ printk(KERN_DEBUG "IPPP: inbound frame filtered.\n"); |
11703 |
+ kfree_skb(skb); |
11704 |
+ return; |
11705 |
+ } |
11706 |
+ if (!(is->active_filter |
11707 |
+- && SK_RUN_FILTER(is->active_filter, skb) == 0)) { |
11708 |
++ && sk_run_filter(skb, is->active_filter) == 0)) { |
11709 |
+ if (is->debug & 0x2) |
11710 |
+ printk(KERN_DEBUG "IPPP: link-active filter: resetting huptimer.\n"); |
11711 |
+ lp->huptimer = 0; |
11712 |
+@@ -1320,14 +1293,14 @@ isdn_ppp_xmit(struct sk_buff *skb, struct net_device *netdev) |
11713 |
+ } |
11714 |
+ |
11715 |
+ if (ipt->pass_filter |
11716 |
+- && SK_RUN_FILTER(ipt->pass_filter, skb) == 0) { |
11717 |
++ && sk_run_filter(skb, ipt->pass_filter) == 0) { |
11718 |
+ if (ipt->debug & 0x4) |
11719 |
+ printk(KERN_DEBUG "IPPP: outbound frame filtered.\n"); |
11720 |
+ kfree_skb(skb); |
11721 |
+ goto unlock; |
11722 |
+ } |
11723 |
+ if (!(ipt->active_filter |
11724 |
+- && SK_RUN_FILTER(ipt->active_filter, skb) == 0)) { |
11725 |
++ && sk_run_filter(skb, ipt->active_filter) == 0)) { |
11726 |
+ if (ipt->debug & 0x4) |
11727 |
+ printk(KERN_DEBUG "IPPP: link-active filter: resetting huptimer.\n"); |
11728 |
+ lp->huptimer = 0; |
11729 |
+@@ -1517,9 +1490,9 @@ int isdn_ppp_autodial_filter(struct sk_buff *skb, isdn_net_local *lp) |
11730 |
+ } |
11731 |
+ |
11732 |
+ drop |= is->pass_filter |
11733 |
+- && SK_RUN_FILTER(is->pass_filter, skb) == 0; |
11734 |
++ && sk_run_filter(skb, is->pass_filter) == 0; |
11735 |
+ drop |= is->active_filter |
11736 |
+- && SK_RUN_FILTER(is->active_filter, skb) == 0; |
11737 |
++ && sk_run_filter(skb, is->active_filter) == 0; |
11738 |
+ |
11739 |
+ skb_push(skb, IPPP_MAX_HEADER - 4); |
11740 |
+ return drop; |
11741 |
diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c |
11742 |
index 3c5f249..5fac4d0 100644 |
11743 |
--- a/drivers/isdn/i4l/isdn_tty.c |
11744 |
@@ -43800,7 +45816,7 @@ index 40634b0..4f5855e 100644 |
11745 |
// Every interrupt can come to us here |
11746 |
// But we must truly tell each apart. |
11747 |
diff --git a/drivers/md/bcache/closure.h b/drivers/md/bcache/closure.h |
11748 |
-index 7ef7461..5a09dac 100644 |
11749 |
+index a08e3ee..df8ade2 100644 |
11750 |
--- a/drivers/md/bcache/closure.h |
11751 |
+++ b/drivers/md/bcache/closure.h |
11752 |
@@ -238,7 +238,7 @@ static inline void closure_set_stopped(struct closure *cl) |
11753 |
@@ -43813,10 +45829,10 @@ index 7ef7461..5a09dac 100644 |
11754 |
cl->fn = fn; |
11755 |
cl->wq = wq; |
11756 |
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c |
11757 |
-index 9a8e66a..10cc762 100644 |
11758 |
+index 67f8b31..9418f2b 100644 |
11759 |
--- a/drivers/md/bitmap.c |
11760 |
+++ b/drivers/md/bitmap.c |
11761 |
-@@ -1779,7 +1779,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap) |
11762 |
+@@ -1775,7 +1775,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap) |
11763 |
chunk_kb ? "KB" : "B"); |
11764 |
if (bitmap->storage.file) { |
11765 |
seq_printf(seq, ", file: "); |
11766 |
@@ -43981,7 +45997,7 @@ index d1600d2..4c3af3a 100644 |
11767 |
schedule_work(&sc->trigger_event); |
11768 |
} |
11769 |
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c |
11770 |
-index 50601ec..6d3b9dc 100644 |
11771 |
+index 5f59f1e..01bd02e 100644 |
11772 |
--- a/drivers/md/dm-table.c |
11773 |
+++ b/drivers/md/dm-table.c |
11774 |
@@ -274,7 +274,7 @@ static struct dm_dev_internal *find_device(struct list_head *l, dev_t dev) |
11775 |
@@ -44025,7 +46041,7 @@ index e9d33ad..dae9880d 100644 |
11776 |
pmd->bl_info.value_type.inc = data_block_inc; |
11777 |
pmd->bl_info.value_type.dec = data_block_dec; |
11778 |
diff --git a/drivers/md/dm.c b/drivers/md/dm.c |
11779 |
-index 490ac23..b9790cd 100644 |
11780 |
+index 32b958d..34011e8 100644 |
11781 |
--- a/drivers/md/dm.c |
11782 |
+++ b/drivers/md/dm.c |
11783 |
@@ -180,9 +180,9 @@ struct mapped_device { |
11784 |
@@ -44040,7 +46056,7 @@ index 490ac23..b9790cd 100644 |
11785 |
struct list_head uevent_list; |
11786 |
spinlock_t uevent_lock; /* Protect access to uevent_list */ |
11787 |
|
11788 |
-@@ -1895,8 +1895,8 @@ static struct mapped_device *alloc_dev(int minor) |
11789 |
+@@ -1952,8 +1952,8 @@ static struct mapped_device *alloc_dev(int minor) |
11790 |
spin_lock_init(&md->deferred_lock); |
11791 |
atomic_set(&md->holders, 1); |
11792 |
atomic_set(&md->open_count, 0); |
11793 |
@@ -44051,7 +46067,7 @@ index 490ac23..b9790cd 100644 |
11794 |
INIT_LIST_HEAD(&md->uevent_list); |
11795 |
spin_lock_init(&md->uevent_lock); |
11796 |
|
11797 |
-@@ -2050,7 +2050,7 @@ static void event_callback(void *context) |
11798 |
+@@ -2107,7 +2107,7 @@ static void event_callback(void *context) |
11799 |
|
11800 |
dm_send_uevents(&uevents, &disk_to_dev(md->disk)->kobj); |
11801 |
|
11802 |
@@ -44060,7 +46076,7 @@ index 490ac23..b9790cd 100644 |
11803 |
wake_up(&md->eventq); |
11804 |
} |
11805 |
|
11806 |
-@@ -2743,18 +2743,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action, |
11807 |
+@@ -2800,18 +2800,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action, |
11808 |
|
11809 |
uint32_t dm_next_uevent_seq(struct mapped_device *md) |
11810 |
{ |
11811 |
@@ -44083,7 +46099,7 @@ index 490ac23..b9790cd 100644 |
11812 |
|
11813 |
void dm_uevent_add(struct mapped_device *md, struct list_head *elist) |
11814 |
diff --git a/drivers/md/md.c b/drivers/md/md.c |
11815 |
-index 9a18209..ec4d3ec 100644 |
11816 |
+index 32fc19c..cb6eba3 100644 |
11817 |
--- a/drivers/md/md.c |
11818 |
+++ b/drivers/md/md.c |
11819 |
@@ -194,10 +194,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev); |
11820 |
@@ -44155,7 +46171,7 @@ index 9a18209..ec4d3ec 100644 |
11821 |
|
11822 |
INIT_LIST_HEAD(&rdev->same_set); |
11823 |
init_waitqueue_head(&rdev->blocked_wait); |
11824 |
-@@ -7058,7 +7058,7 @@ static int md_seq_show(struct seq_file *seq, void *v) |
11825 |
+@@ -7068,7 +7068,7 @@ static int md_seq_show(struct seq_file *seq, void *v) |
11826 |
|
11827 |
spin_unlock(&pers_lock); |
11828 |
seq_printf(seq, "\n"); |
11829 |
@@ -44164,7 +46180,7 @@ index 9a18209..ec4d3ec 100644 |
11830 |
return 0; |
11831 |
} |
11832 |
if (v == (void*)2) { |
11833 |
-@@ -7161,7 +7161,7 @@ static int md_seq_open(struct inode *inode, struct file *file) |
11834 |
+@@ -7171,7 +7171,7 @@ static int md_seq_open(struct inode *inode, struct file *file) |
11835 |
return error; |
11836 |
|
11837 |
seq = file->private_data; |
11838 |
@@ -44173,7 +46189,7 @@ index 9a18209..ec4d3ec 100644 |
11839 |
return error; |
11840 |
} |
11841 |
|
11842 |
-@@ -7178,7 +7178,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait) |
11843 |
+@@ -7188,7 +7188,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait) |
11844 |
/* always allow read */ |
11845 |
mask = POLLIN | POLLRDNORM; |
11846 |
|
11847 |
@@ -44182,7 +46198,7 @@ index 9a18209..ec4d3ec 100644 |
11848 |
mask |= POLLERR | POLLPRI; |
11849 |
return mask; |
11850 |
} |
11851 |
-@@ -7222,7 +7222,7 @@ static int is_mddev_idle(struct mddev *mddev, int init) |
11852 |
+@@ -7232,7 +7232,7 @@ static int is_mddev_idle(struct mddev *mddev, int init) |
11853 |
struct gendisk *disk = rdev->bdev->bd_contains->bd_disk; |
11854 |
curr_events = (int)part_stat_read(&disk->part0, sectors[0]) + |
11855 |
(int)part_stat_read(&disk->part0, sectors[1]) - |
11856 |
@@ -44357,10 +46373,10 @@ index cb882aa..cb8aeca 100644 |
11857 |
read_bio->bi_vcnt = 0; |
11858 |
read_bio->bi_iter.bi_size = 0; |
11859 |
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c |
11860 |
-index ad1b9be..c6316b5 100644 |
11861 |
+index 6234b2e..4990801 100644 |
11862 |
--- a/drivers/md/raid5.c |
11863 |
+++ b/drivers/md/raid5.c |
11864 |
-@@ -1702,6 +1702,10 @@ static int grow_one_stripe(struct r5conf *conf, int hash) |
11865 |
+@@ -1731,6 +1731,10 @@ static int grow_one_stripe(struct r5conf *conf, int hash) |
11866 |
return 1; |
11867 |
} |
11868 |
|
11869 |
@@ -44371,7 +46387,7 @@ index ad1b9be..c6316b5 100644 |
11870 |
static int grow_stripes(struct r5conf *conf, int num) |
11871 |
{ |
11872 |
struct kmem_cache *sc; |
11873 |
-@@ -1713,7 +1717,11 @@ static int grow_stripes(struct r5conf *conf, int num) |
11874 |
+@@ -1742,7 +1746,11 @@ static int grow_stripes(struct r5conf *conf, int num) |
11875 |
"raid%d-%s", conf->level, mdname(conf->mddev)); |
11876 |
else |
11877 |
sprintf(conf->cache_name[0], |
11878 |
@@ -44383,7 +46399,7 @@ index ad1b9be..c6316b5 100644 |
11879 |
sprintf(conf->cache_name[1], "%s-alt", conf->cache_name[0]); |
11880 |
|
11881 |
conf->active_name = 0; |
11882 |
-@@ -1986,21 +1994,21 @@ static void raid5_end_read_request(struct bio * bi, int error) |
11883 |
+@@ -2018,21 +2026,21 @@ static void raid5_end_read_request(struct bio * bi, int error) |
11884 |
mdname(conf->mddev), STRIPE_SECTORS, |
11885 |
(unsigned long long)s, |
11886 |
bdevname(rdev->bdev, b)); |
11887 |
@@ -44409,7 +46425,7 @@ index ad1b9be..c6316b5 100644 |
11888 |
if (test_bit(R5_ReadRepl, &sh->dev[i].flags)) |
11889 |
printk_ratelimited( |
11890 |
KERN_WARNING |
11891 |
-@@ -2028,7 +2036,7 @@ static void raid5_end_read_request(struct bio * bi, int error) |
11892 |
+@@ -2060,7 +2068,7 @@ static void raid5_end_read_request(struct bio * bi, int error) |
11893 |
mdname(conf->mddev), |
11894 |
(unsigned long long)s, |
11895 |
bdn); |
11896 |
@@ -44418,7 +46434,7 @@ index ad1b9be..c6316b5 100644 |
11897 |
> conf->max_nr_stripes) |
11898 |
printk(KERN_WARNING |
11899 |
"md/raid:%s: Too many read errors, failing device %s.\n", |
11900 |
-@@ -3774,6 +3782,8 @@ static void handle_stripe(struct stripe_head *sh) |
11901 |
+@@ -3817,6 +3825,8 @@ static void handle_stripe(struct stripe_head *sh) |
11902 |
set_bit(R5_Wantwrite, &dev->flags); |
11903 |
if (prexor) |
11904 |
continue; |
11905 |
@@ -44572,7 +46588,7 @@ index b713403..53cb5ad 100644 |
11906 |
if (done && done != layer->shadow_buf) |
11907 |
vb2_buffer_done(&done->vb, VB2_BUF_STATE_DONE); |
11908 |
diff --git a/drivers/media/platform/s5p-tv/mixer_video.c b/drivers/media/platform/s5p-tv/mixer_video.c |
11909 |
-index a1ce55f..4a3c4d9 100644 |
11910 |
+index 8a8dbc8..b74c62d 100644 |
11911 |
--- a/drivers/media/platform/s5p-tv/mixer_video.c |
11912 |
+++ b/drivers/media/platform/s5p-tv/mixer_video.c |
11913 |
@@ -210,7 +210,7 @@ static void mxr_layer_default_geo(struct mxr_layer *layer) |
11914 |
@@ -44626,7 +46642,7 @@ index a1ce55f..4a3c4d9 100644 |
11915 |
|
11916 |
/* retrieve update selection rectangle */ |
11917 |
res.left = target->x_offset; |
11918 |
-@@ -950,13 +950,13 @@ static int start_streaming(struct vb2_queue *vq, unsigned int count) |
11919 |
+@@ -954,13 +954,13 @@ static int start_streaming(struct vb2_queue *vq, unsigned int count) |
11920 |
mxr_output_get(mdev); |
11921 |
|
11922 |
mxr_layer_update_output(layer); |
11923 |
@@ -44642,7 +46658,7 @@ index a1ce55f..4a3c4d9 100644 |
11924 |
mxr_streamer_get(mdev); |
11925 |
|
11926 |
return 0; |
11927 |
-@@ -1026,7 +1026,7 @@ static int stop_streaming(struct vb2_queue *vq) |
11928 |
+@@ -1030,7 +1030,7 @@ static void stop_streaming(struct vb2_queue *vq) |
11929 |
spin_unlock_irqrestore(&layer->enq_slock, flags); |
11930 |
|
11931 |
/* disabling layer in hardware */ |
11932 |
@@ -44651,7 +46667,7 @@ index a1ce55f..4a3c4d9 100644 |
11933 |
/* remove one streamer */ |
11934 |
mxr_streamer_put(mdev); |
11935 |
/* allow changes in output configuration */ |
11936 |
-@@ -1065,8 +1065,8 @@ void mxr_base_layer_unregister(struct mxr_layer *layer) |
11937 |
+@@ -1068,8 +1068,8 @@ void mxr_base_layer_unregister(struct mxr_layer *layer) |
11938 |
|
11939 |
void mxr_layer_release(struct mxr_layer *layer) |
11940 |
{ |
11941 |
@@ -44662,7 +46678,7 @@ index a1ce55f..4a3c4d9 100644 |
11942 |
} |
11943 |
|
11944 |
void mxr_base_layer_release(struct mxr_layer *layer) |
11945 |
-@@ -1092,7 +1092,7 @@ struct mxr_layer *mxr_base_layer_create(struct mxr_device *mdev, |
11946 |
+@@ -1095,7 +1095,7 @@ struct mxr_layer *mxr_base_layer_create(struct mxr_device *mdev, |
11947 |
|
11948 |
layer->mdev = mdev; |
11949 |
layer->idx = idx; |
11950 |
@@ -44685,7 +46701,7 @@ index c9388c4..ce71ece 100644 |
11951 |
.buffer_set = mxr_vp_buffer_set, |
11952 |
.stream_set = mxr_vp_stream_set, |
11953 |
diff --git a/drivers/media/platform/vivi.c b/drivers/media/platform/vivi.c |
11954 |
-index 3890f4f..b5c7511 100644 |
11955 |
+index d00bf3d..1301a0c 100644 |
11956 |
--- a/drivers/media/platform/vivi.c |
11957 |
+++ b/drivers/media/platform/vivi.c |
11958 |
@@ -58,8 +58,8 @@ MODULE_AUTHOR("Mauro Carvalho Chehab, Ted Walther and John Sokol"); |
11959 |
@@ -44876,7 +46892,7 @@ index ae0f56a..ec71784 100644 |
11960 |
/* debug */ |
11961 |
static int dvb_usb_dw2102_debug; |
11962 |
diff --git a/drivers/media/usb/dvb-usb/technisat-usb2.c b/drivers/media/usb/dvb-usb/technisat-usb2.c |
11963 |
-index 98d24ae..bc22415 100644 |
11964 |
+index d947e03..87fef42 100644 |
11965 |
--- a/drivers/media/usb/dvb-usb/technisat-usb2.c |
11966 |
+++ b/drivers/media/usb/dvb-usb/technisat-usb2.c |
11967 |
@@ -87,8 +87,11 @@ struct technisat_usb2_state { |
11968 |
@@ -44950,13 +46966,13 @@ index 98d24ae..bc22415 100644 |
11969 |
+ if (led == NULL) |
11970 |
+ return -ENOMEM; |
11971 |
|
11972 |
- if (disable_led_control && state != LED_OFF) |
11973 |
+ if (disable_led_control && state != TECH_LED_OFF) |
11974 |
return 0; |
11975 |
|
11976 |
+ led[0] = red ? SET_RED_LED_VENDOR_REQUEST : SET_GREEN_LED_VENDOR_REQUEST; |
11977 |
+ |
11978 |
switch (state) { |
11979 |
- case LED_ON: |
11980 |
+ case TECH_LED_ON: |
11981 |
led[1] = 0x82; |
11982 |
@@ -263,16 +274,22 @@ static int technisat_usb2_set_led(struct dvb_usb_device *d, int red, enum techni |
11983 |
red ? SET_RED_LED_VENDOR_REQUEST : SET_GREEN_LED_VENDOR_REQUEST, |
11984 |
@@ -45173,7 +47189,7 @@ index 55c6832..a91c7a6 100644 |
11985 |
if ((len - ctrl->minimum) % ctrl->step) |
11986 |
return -ERANGE; |
11987 |
diff --git a/drivers/media/v4l2-core/v4l2-device.c b/drivers/media/v4l2-core/v4l2-device.c |
11988 |
-index 02d1b63..5fd6b16 100644 |
11989 |
+index 015f92a..59e311e 100644 |
11990 |
--- a/drivers/media/v4l2-core/v4l2-device.c |
11991 |
+++ b/drivers/media/v4l2-core/v4l2-device.c |
11992 |
@@ -75,9 +75,9 @@ int v4l2_device_put(struct v4l2_device *v4l2_dev) |
11993 |
@@ -45189,7 +47205,7 @@ index 02d1b63..5fd6b16 100644 |
11994 |
|
11995 |
if (basename[len - 1] >= '0' && basename[len - 1] <= '9') |
11996 |
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c |
11997 |
-index d9113cc..7de6ccc 100644 |
11998 |
+index 16bffd8..3ab516a 100644 |
11999 |
--- a/drivers/media/v4l2-core/v4l2-ioctl.c |
12000 |
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c |
12001 |
@@ -2003,7 +2003,8 @@ struct v4l2_ioctl_info { |
12002 |
@@ -45211,44 +47227,44 @@ index d9113cc..7de6ccc 100644 |
12003 |
const struct v4l2_ioctl_info *info; |
12004 |
void *fh = file->private_data; |
12005 |
struct v4l2_fh *vfh = NULL; |
12006 |
-@@ -2260,7 +2261,7 @@ done: |
12007 |
- } |
12008 |
- |
12009 |
- static int check_array_args(unsigned int cmd, void *parg, size_t *array_size, |
12010 |
-- void * __user *user_ptr, void ***kernel_ptr) |
12011 |
-+ void __user **user_ptr, void ***kernel_ptr) |
12012 |
- { |
12013 |
- int ret = 0; |
12014 |
- |
12015 |
@@ -2276,7 +2277,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size, |
12016 |
ret = -EINVAL; |
12017 |
break; |
12018 |
} |
12019 |
- *user_ptr = (void __user *)buf->m.planes; |
12020 |
+ *user_ptr = (void __force_user *)buf->m.planes; |
12021 |
- *kernel_ptr = (void *)&buf->m.planes; |
12022 |
+ *kernel_ptr = (void **)&buf->m.planes; |
12023 |
*array_size = sizeof(struct v4l2_plane) * buf->length; |
12024 |
ret = 1; |
12025 |
+@@ -2293,7 +2294,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size, |
12026 |
+ ret = -EINVAL; |
12027 |
+ break; |
12028 |
+ } |
12029 |
+- *user_ptr = (void __user *)edid->edid; |
12030 |
++ *user_ptr = (void __force_user *)edid->edid; |
12031 |
+ *kernel_ptr = (void **)&edid->edid; |
12032 |
+ *array_size = edid->blocks * 128; |
12033 |
+ ret = 1; |
12034 |
@@ -2311,7 +2312,7 @@ static int check_array_args(unsigned int cmd, void *parg, size_t *array_size, |
12035 |
ret = -EINVAL; |
12036 |
break; |
12037 |
} |
12038 |
- *user_ptr = (void __user *)ctrls->controls; |
12039 |
+ *user_ptr = (void __force_user *)ctrls->controls; |
12040 |
- *kernel_ptr = (void *)&ctrls->controls; |
12041 |
+ *kernel_ptr = (void **)&ctrls->controls; |
12042 |
*array_size = sizeof(struct v4l2_ext_control) |
12043 |
* ctrls->count; |
12044 |
@@ -2412,7 +2413,7 @@ video_usercopy(struct file *file, unsigned int cmd, unsigned long arg, |
12045 |
} |
12046 |
|
12047 |
if (has_array_args) { |
12048 |
-- *kernel_ptr = user_ptr; |
12049 |
+- *kernel_ptr = (void __force *)user_ptr; |
12050 |
+ *kernel_ptr = (void __force_kernel *)user_ptr; |
12051 |
if (copy_to_user(user_ptr, mbuf, array_size)) |
12052 |
err = -EFAULT; |
12053 |
goto out_array_args; |
12054 |
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c |
12055 |
-index 570b18a..f880314 100644 |
12056 |
+index ebc0af7..baed058 100644 |
12057 |
--- a/drivers/message/fusion/mptbase.c |
12058 |
+++ b/drivers/message/fusion/mptbase.c |
12059 |
@@ -6755,8 +6755,13 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v) |
12060 |
@@ -45278,7 +47294,7 @@ index 570b18a..f880314 100644 |
12061 |
seq_printf(m, " {CurRepSz=%d} x {CurRepDepth=%d} = %d bytes ^= 0x%x\n", |
12062 |
ioc->reply_sz, ioc->reply_depth, ioc->reply_sz*ioc->reply_depth, sz); |
12063 |
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c |
12064 |
-index 00d339c..2ea899d 100644 |
12065 |
+index 711fcb5..5da1fb0 100644 |
12066 |
--- a/drivers/message/fusion/mptsas.c |
12067 |
+++ b/drivers/message/fusion/mptsas.c |
12068 |
@@ -446,6 +446,23 @@ mptsas_is_end_device(struct mptsas_devinfo * attached) |
12069 |
@@ -45330,7 +47346,7 @@ index 00d339c..2ea899d 100644 |
12070 |
mptsas_get_port(struct mptsas_phyinfo *phy_info) |
12071 |
{ |
12072 |
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c |
12073 |
-index 727819c..ad74694 100644 |
12074 |
+index 2a1c6f2..a04c6a2 100644 |
12075 |
--- a/drivers/message/fusion/mptscsih.c |
12076 |
+++ b/drivers/message/fusion/mptscsih.c |
12077 |
@@ -1271,15 +1271,16 @@ mptscsih_info(struct Scsi_Host *SChost) |
12078 |
@@ -45576,7 +47592,7 @@ index a83eed5..62a58a9 100644 |
12079 |
|
12080 |
if (node && !pdata) { |
12081 |
diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c |
12082 |
-index 460a014..21d3061 100644 |
12083 |
+index f9e42ea..614d240 100644 |
12084 |
--- a/drivers/mfd/tps65910.c |
12085 |
+++ b/drivers/mfd/tps65910.c |
12086 |
@@ -230,7 +230,7 @@ static int tps65910_irq_init(struct tps65910 *tps65910, int irq, |
12087 |
@@ -46051,10 +48067,10 @@ index f51b5ba..86614a7 100644 |
12088 |
/* |
12089 |
* dma onto stack is unsafe/nonportable, but callers to this |
12090 |
diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h |
12091 |
-index 6834977..824ee1b 100644 |
12092 |
+index 738fa24..1568451 100644 |
12093 |
--- a/drivers/mmc/host/dw_mmc.h |
12094 |
+++ b/drivers/mmc/host/dw_mmc.h |
12095 |
-@@ -259,5 +259,5 @@ struct dw_mci_drv_data { |
12096 |
+@@ -257,5 +257,5 @@ struct dw_mci_drv_data { |
12097 |
int (*parse_dt)(struct dw_mci *host); |
12098 |
int (*execute_tuning)(struct dw_mci_slot *slot, u32 opcode, |
12099 |
struct dw_mci_tuning_data *tuning_data); |
12100 |
@@ -46062,11 +48078,11 @@ index 6834977..824ee1b 100644 |
12101 |
+} __do_const; |
12102 |
#endif /* _DW_MMC_H_ */ |
12103 |
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c |
12104 |
-index 771c60a..12cb615 100644 |
12105 |
+index 7ad463e..2aa0079 100644 |
12106 |
--- a/drivers/mmc/host/mmci.c |
12107 |
+++ b/drivers/mmc/host/mmci.c |
12108 |
-@@ -1570,7 +1570,9 @@ static int mmci_probe(struct amba_device *dev, |
12109 |
- mmc->caps2 = plat->capabilities2; |
12110 |
+@@ -1506,7 +1506,9 @@ static int mmci_probe(struct amba_device *dev, |
12111 |
+ mmc->caps |= MMC_CAP_CMD23; |
12112 |
|
12113 |
if (variant->busy_detect) { |
12114 |
- mmci_ops.card_busy = mmci_card_busy; |
12115 |
@@ -46077,10 +48093,10 @@ index 771c60a..12cb615 100644 |
12116 |
mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY; |
12117 |
mmc->max_busy_timeout = 0; |
12118 |
diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c |
12119 |
-index b841bb7..d82712f5 100644 |
12120 |
+index ccec0e3..199f9ce 100644 |
12121 |
--- a/drivers/mmc/host/sdhci-esdhc-imx.c |
12122 |
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c |
12123 |
-@@ -1031,9 +1031,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) |
12124 |
+@@ -1034,9 +1034,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) |
12125 |
host->mmc->caps |= MMC_CAP_1_8V_DDR; |
12126 |
} |
12127 |
|
12128 |
@@ -46096,13 +48112,13 @@ index b841bb7..d82712f5 100644 |
12129 |
if (imx_data->socdata->flags & ESDHC_FLAG_STD_TUNING) |
12130 |
writel(readl(host->ioaddr + ESDHC_TUNING_CTRL) | |
12131 |
diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c |
12132 |
-index d61eb5a..88c0f5d 100644 |
12133 |
+index fa5954a..56840e5 100644 |
12134 |
--- a/drivers/mmc/host/sdhci-s3c.c |
12135 |
+++ b/drivers/mmc/host/sdhci-s3c.c |
12136 |
-@@ -657,9 +657,11 @@ static int sdhci_s3c_probe(struct platform_device *pdev) |
12137 |
+@@ -584,9 +584,11 @@ static int sdhci_s3c_probe(struct platform_device *pdev) |
12138 |
* we can use overriding functions instead of default. |
12139 |
*/ |
12140 |
- if (host->quirks & SDHCI_QUIRK_NONSTANDARD_CLOCK) { |
12141 |
+ if (sc->no_divider) { |
12142 |
- sdhci_s3c_ops.set_clock = sdhci_cmu_set_clock; |
12143 |
- sdhci_s3c_ops.get_min_clock = sdhci_cmu_get_min_clock; |
12144 |
- sdhci_s3c_ops.get_max_clock = sdhci_cmu_get_max_clock; |
12145 |
@@ -46115,7 +48131,7 @@ index d61eb5a..88c0f5d 100644 |
12146 |
|
12147 |
/* It supports additional host capabilities if needed */ |
12148 |
diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c |
12149 |
-index 6293855..3415551 100644 |
12150 |
+index 423666b..81ff5eb 100644 |
12151 |
--- a/drivers/mtd/chips/cfi_cmdset_0020.c |
12152 |
+++ b/drivers/mtd/chips/cfi_cmdset_0020.c |
12153 |
@@ -666,7 +666,7 @@ cfi_staa_writev(struct mtd_info *mtd, const struct kvec *vecs, |
12154 |
@@ -46128,7 +48144,7 @@ index 6293855..3415551 100644 |
12155 |
if (!ECCBUF_SIZE) { |
12156 |
/* We should fall back to a general writev implementation. |
12157 |
diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c |
12158 |
-index c07cd57..61c4fbd 100644 |
12159 |
+index 9f2012a..a81c720 100644 |
12160 |
--- a/drivers/mtd/nand/denali.c |
12161 |
+++ b/drivers/mtd/nand/denali.c |
12162 |
@@ -24,6 +24,7 @@ |
12163 |
@@ -46140,10 +48156,10 @@ index c07cd57..61c4fbd 100644 |
12164 |
#include "denali.h" |
12165 |
|
12166 |
diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c |
12167 |
-index bb77f75..47539b1 100644 |
12168 |
+index f638cd8..2cbf586 100644 |
12169 |
--- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c |
12170 |
+++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c |
12171 |
-@@ -370,7 +370,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, enum dma_data_direction dr) |
12172 |
+@@ -387,7 +387,7 @@ void prepare_data_dma(struct gpmi_nand_data *this, enum dma_data_direction dr) |
12173 |
|
12174 |
/* first try to map the upper buffer directly */ |
12175 |
if (virt_addr_valid(this->upper_buf) && |
12176 |
@@ -46178,7 +48194,7 @@ index cf49c22..971b133 100644 |
12177 |
struct sm_sysfs_attribute *vendor_attribute; |
12178 |
char *vendor; |
12179 |
diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c |
12180 |
-index f847e16..fc8dbe9 100644 |
12181 |
+index 5ab3c18..5c3a836 100644 |
12182 |
--- a/drivers/net/bonding/bond_netlink.c |
12183 |
+++ b/drivers/net/bonding/bond_netlink.c |
12184 |
@@ -542,7 +542,7 @@ nla_put_failure: |
12185 |
@@ -46191,10 +48207,10 @@ index f847e16..fc8dbe9 100644 |
12186 |
.priv_size = sizeof(struct bonding), |
12187 |
.setup = bond_setup, |
12188 |
diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig |
12189 |
-index 9e7d95d..d447b88 100644 |
12190 |
+index 4168822..f38eeddf 100644 |
12191 |
--- a/drivers/net/can/Kconfig |
12192 |
+++ b/drivers/net/can/Kconfig |
12193 |
-@@ -104,7 +104,7 @@ config CAN_JANZ_ICAN3 |
12194 |
+@@ -98,7 +98,7 @@ config CAN_JANZ_ICAN3 |
12195 |
|
12196 |
config CAN_FLEXCAN |
12197 |
tristate "Support for Freescale FLEXCAN based chips" |
12198 |
@@ -46204,7 +48220,7 @@ index 9e7d95d..d447b88 100644 |
12199 |
Say Y here if you want to support for Freescale FlexCAN. |
12200 |
|
12201 |
diff --git a/drivers/net/ethernet/8390/ax88796.c b/drivers/net/ethernet/8390/ax88796.c |
12202 |
-index 455d4c3..3353ee7 100644 |
12203 |
+index 1d162cc..b546a75 100644 |
12204 |
--- a/drivers/net/ethernet/8390/ax88796.c |
12205 |
+++ b/drivers/net/ethernet/8390/ax88796.c |
12206 |
@@ -889,9 +889,11 @@ static int ax_probe(struct platform_device *pdev) |
12207 |
@@ -46247,8 +48263,592 @@ index 7330681..7e9e463 100644 |
12208 |
|
12209 |
/* Scatter/gather IO is not supported, |
12210 |
* so it is turned off |
12211 |
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h |
12212 |
+index bf462ee8..18b8375 100644 |
12213 |
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h |
12214 |
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h |
12215 |
+@@ -986,14 +986,14 @@ do { \ |
12216 |
+ * operations, everything works on mask values. |
12217 |
+ */ |
12218 |
+ #define XMDIO_READ(_pdata, _mmd, _reg) \ |
12219 |
+- ((_pdata)->hw_if.read_mmd_regs((_pdata), 0, \ |
12220 |
++ ((_pdata)->hw_if->read_mmd_regs((_pdata), 0, \ |
12221 |
+ MII_ADDR_C45 | (_mmd << 16) | ((_reg) & 0xffff))) |
12222 |
+ |
12223 |
+ #define XMDIO_READ_BITS(_pdata, _mmd, _reg, _mask) \ |
12224 |
+ (XMDIO_READ((_pdata), _mmd, _reg) & _mask) |
12225 |
+ |
12226 |
+ #define XMDIO_WRITE(_pdata, _mmd, _reg, _val) \ |
12227 |
+- ((_pdata)->hw_if.write_mmd_regs((_pdata), 0, \ |
12228 |
++ ((_pdata)->hw_if->write_mmd_regs((_pdata), 0, \ |
12229 |
+ MII_ADDR_C45 | (_mmd << 16) | ((_reg) & 0xffff), (_val))) |
12230 |
+ |
12231 |
+ #define XMDIO_WRITE_BITS(_pdata, _mmd, _reg, _mask, _val) \ |
12232 |
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c |
12233 |
+index 6bb76d5..ded47a8 100644 |
12234 |
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c |
12235 |
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c |
12236 |
+@@ -273,7 +273,7 @@ static ssize_t xpcs_reg_value_read(struct file *filp, char __user *buffer, |
12237 |
+ struct xgbe_prv_data *pdata = filp->private_data; |
12238 |
+ unsigned int value; |
12239 |
+ |
12240 |
+- value = pdata->hw_if.read_mmd_regs(pdata, pdata->debugfs_xpcs_mmd, |
12241 |
++ value = pdata->hw_if->read_mmd_regs(pdata, pdata->debugfs_xpcs_mmd, |
12242 |
+ pdata->debugfs_xpcs_reg); |
12243 |
+ |
12244 |
+ return xgbe_common_read(buffer, count, ppos, value); |
12245 |
+@@ -291,7 +291,7 @@ static ssize_t xpcs_reg_value_write(struct file *filp, |
12246 |
+ if (len < 0) |
12247 |
+ return len; |
12248 |
+ |
12249 |
+- pdata->hw_if.write_mmd_regs(pdata, pdata->debugfs_xpcs_mmd, |
12250 |
++ pdata->hw_if->write_mmd_regs(pdata, pdata->debugfs_xpcs_mmd, |
12251 |
+ pdata->debugfs_xpcs_reg, value); |
12252 |
+ |
12253 |
+ return len; |
12254 |
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c |
12255 |
+index 6f1c859..e96ac1a 100644 |
12256 |
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c |
12257 |
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c |
12258 |
+@@ -236,7 +236,7 @@ err_ring: |
12259 |
+ |
12260 |
+ static void xgbe_wrapper_tx_descriptor_init(struct xgbe_prv_data *pdata) |
12261 |
+ { |
12262 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12263 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12264 |
+ struct xgbe_channel *channel; |
12265 |
+ struct xgbe_ring *ring; |
12266 |
+ struct xgbe_ring_data *rdata; |
12267 |
+@@ -277,7 +277,7 @@ static void xgbe_wrapper_tx_descriptor_init(struct xgbe_prv_data *pdata) |
12268 |
+ |
12269 |
+ static void xgbe_wrapper_rx_descriptor_init(struct xgbe_prv_data *pdata) |
12270 |
+ { |
12271 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12272 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12273 |
+ struct xgbe_channel *channel; |
12274 |
+ struct xgbe_ring *ring; |
12275 |
+ struct xgbe_ring_desc *rdesc; |
12276 |
+@@ -496,7 +496,7 @@ err_out: |
12277 |
+ static void xgbe_realloc_skb(struct xgbe_channel *channel) |
12278 |
+ { |
12279 |
+ struct xgbe_prv_data *pdata = channel->pdata; |
12280 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12281 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12282 |
+ struct xgbe_ring *ring = channel->rx_ring; |
12283 |
+ struct xgbe_ring_data *rdata; |
12284 |
+ struct sk_buff *skb = NULL; |
12285 |
+@@ -540,17 +540,12 @@ static void xgbe_realloc_skb(struct xgbe_channel *channel) |
12286 |
+ DBGPR("<--xgbe_realloc_skb\n"); |
12287 |
+ } |
12288 |
+ |
12289 |
+-void xgbe_init_function_ptrs_desc(struct xgbe_desc_if *desc_if) |
12290 |
+-{ |
12291 |
+- DBGPR("-->xgbe_init_function_ptrs_desc\n"); |
12292 |
+- |
12293 |
+- desc_if->alloc_ring_resources = xgbe_alloc_ring_resources; |
12294 |
+- desc_if->free_ring_resources = xgbe_free_ring_resources; |
12295 |
+- desc_if->map_tx_skb = xgbe_map_tx_skb; |
12296 |
+- desc_if->realloc_skb = xgbe_realloc_skb; |
12297 |
+- desc_if->unmap_skb = xgbe_unmap_skb; |
12298 |
+- desc_if->wrapper_tx_desc_init = xgbe_wrapper_tx_descriptor_init; |
12299 |
+- desc_if->wrapper_rx_desc_init = xgbe_wrapper_rx_descriptor_init; |
12300 |
+- |
12301 |
+- DBGPR("<--xgbe_init_function_ptrs_desc\n"); |
12302 |
+-} |
12303 |
++const struct xgbe_desc_if default_xgbe_desc_if = { |
12304 |
++ .alloc_ring_resources = xgbe_alloc_ring_resources, |
12305 |
++ .free_ring_resources = xgbe_free_ring_resources, |
12306 |
++ .map_tx_skb = xgbe_map_tx_skb, |
12307 |
++ .realloc_skb = xgbe_realloc_skb, |
12308 |
++ .unmap_skb = xgbe_unmap_skb, |
12309 |
++ .wrapper_tx_desc_init = xgbe_wrapper_tx_descriptor_init, |
12310 |
++ .wrapper_rx_desc_init = xgbe_wrapper_rx_descriptor_init, |
12311 |
++}; |
12312 |
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c |
12313 |
+index 002293b..5ced1dd 100644 |
12314 |
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c |
12315 |
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c |
12316 |
+@@ -2030,7 +2030,7 @@ static void xgbe_powerdown_rx(struct xgbe_prv_data *pdata) |
12317 |
+ |
12318 |
+ static int xgbe_init(struct xgbe_prv_data *pdata) |
12319 |
+ { |
12320 |
+- struct xgbe_desc_if *desc_if = &pdata->desc_if; |
12321 |
++ struct xgbe_desc_if *desc_if = pdata->desc_if; |
12322 |
+ int ret; |
12323 |
+ |
12324 |
+ DBGPR("-->xgbe_init\n"); |
12325 |
+@@ -2096,87 +2096,82 @@ static int xgbe_init(struct xgbe_prv_data *pdata) |
12326 |
+ return 0; |
12327 |
+ } |
12328 |
+ |
12329 |
+-void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *hw_if) |
12330 |
+-{ |
12331 |
+- DBGPR("-->xgbe_init_function_ptrs\n"); |
12332 |
+- |
12333 |
+- hw_if->tx_complete = xgbe_tx_complete; |
12334 |
+- |
12335 |
+- hw_if->set_promiscuous_mode = xgbe_set_promiscuous_mode; |
12336 |
+- hw_if->set_all_multicast_mode = xgbe_set_all_multicast_mode; |
12337 |
+- hw_if->set_addn_mac_addrs = xgbe_set_addn_mac_addrs; |
12338 |
+- hw_if->set_mac_address = xgbe_set_mac_address; |
12339 |
+- |
12340 |
+- hw_if->enable_rx_csum = xgbe_enable_rx_csum; |
12341 |
+- hw_if->disable_rx_csum = xgbe_disable_rx_csum; |
12342 |
+- |
12343 |
+- hw_if->enable_rx_vlan_stripping = xgbe_enable_rx_vlan_stripping; |
12344 |
+- hw_if->disable_rx_vlan_stripping = xgbe_disable_rx_vlan_stripping; |
12345 |
+- |
12346 |
+- hw_if->read_mmd_regs = xgbe_read_mmd_regs; |
12347 |
+- hw_if->write_mmd_regs = xgbe_write_mmd_regs; |
12348 |
+- |
12349 |
+- hw_if->set_gmii_speed = xgbe_set_gmii_speed; |
12350 |
+- hw_if->set_gmii_2500_speed = xgbe_set_gmii_2500_speed; |
12351 |
+- hw_if->set_xgmii_speed = xgbe_set_xgmii_speed; |
12352 |
+- |
12353 |
+- hw_if->enable_tx = xgbe_enable_tx; |
12354 |
+- hw_if->disable_tx = xgbe_disable_tx; |
12355 |
+- hw_if->enable_rx = xgbe_enable_rx; |
12356 |
+- hw_if->disable_rx = xgbe_disable_rx; |
12357 |
+- |
12358 |
+- hw_if->powerup_tx = xgbe_powerup_tx; |
12359 |
+- hw_if->powerdown_tx = xgbe_powerdown_tx; |
12360 |
+- hw_if->powerup_rx = xgbe_powerup_rx; |
12361 |
+- hw_if->powerdown_rx = xgbe_powerdown_rx; |
12362 |
+- |
12363 |
+- hw_if->pre_xmit = xgbe_pre_xmit; |
12364 |
+- hw_if->dev_read = xgbe_dev_read; |
12365 |
+- hw_if->enable_int = xgbe_enable_int; |
12366 |
+- hw_if->disable_int = xgbe_disable_int; |
12367 |
+- hw_if->init = xgbe_init; |
12368 |
+- hw_if->exit = xgbe_exit; |
12369 |
++const struct xgbe_hw_if default_xgbe_hw_if = { |
12370 |
++ .tx_complete = xgbe_tx_complete, |
12371 |
++ |
12372 |
++ .set_promiscuous_mode = xgbe_set_promiscuous_mode, |
12373 |
++ .set_all_multicast_mode = xgbe_set_all_multicast_mode, |
12374 |
++ .set_addn_mac_addrs = xgbe_set_addn_mac_addrs, |
12375 |
++ .set_mac_address = xgbe_set_mac_address, |
12376 |
++ |
12377 |
++ .enable_rx_csum = xgbe_enable_rx_csum, |
12378 |
++ .disable_rx_csum = xgbe_disable_rx_csum, |
12379 |
++ |
12380 |
++ .enable_rx_vlan_stripping = xgbe_enable_rx_vlan_stripping, |
12381 |
++ .disable_rx_vlan_stripping = xgbe_disable_rx_vlan_stripping, |
12382 |
++ |
12383 |
++ .read_mmd_regs = xgbe_read_mmd_regs, |
12384 |
++ .write_mmd_regs = xgbe_write_mmd_regs, |
12385 |
++ |
12386 |
++ .set_gmii_speed = xgbe_set_gmii_speed, |
12387 |
++ .set_gmii_2500_speed = xgbe_set_gmii_2500_speed, |
12388 |
++ .set_xgmii_speed = xgbe_set_xgmii_speed, |
12389 |
++ |
12390 |
++ .enable_tx = xgbe_enable_tx, |
12391 |
++ .disable_tx = xgbe_disable_tx, |
12392 |
++ .enable_rx = xgbe_enable_rx, |
12393 |
++ .disable_rx = xgbe_disable_rx, |
12394 |
++ |
12395 |
++ .powerup_tx = xgbe_powerup_tx, |
12396 |
++ .powerdown_tx = xgbe_powerdown_tx, |
12397 |
++ .powerup_rx = xgbe_powerup_rx, |
12398 |
++ .powerdown_rx = xgbe_powerdown_rx, |
12399 |
++ |
12400 |
++ .pre_xmit = xgbe_pre_xmit, |
12401 |
++ .dev_read = xgbe_dev_read, |
12402 |
++ .enable_int = xgbe_enable_int, |
12403 |
++ .disable_int = xgbe_disable_int, |
12404 |
++ .init = xgbe_init, |
12405 |
++ .exit = xgbe_exit, |
12406 |
+ |
12407 |
+ /* Descriptor related Sequences have to be initialized here */ |
12408 |
+- hw_if->tx_desc_init = xgbe_tx_desc_init; |
12409 |
+- hw_if->rx_desc_init = xgbe_rx_desc_init; |
12410 |
+- hw_if->tx_desc_reset = xgbe_tx_desc_reset; |
12411 |
+- hw_if->rx_desc_reset = xgbe_rx_desc_reset; |
12412 |
+- hw_if->is_last_desc = xgbe_is_last_desc; |
12413 |
+- hw_if->is_context_desc = xgbe_is_context_desc; |
12414 |
++ .tx_desc_init = xgbe_tx_desc_init, |
12415 |
++ .rx_desc_init = xgbe_rx_desc_init, |
12416 |
++ .tx_desc_reset = xgbe_tx_desc_reset, |
12417 |
++ .rx_desc_reset = xgbe_rx_desc_reset, |
12418 |
++ .is_last_desc = xgbe_is_last_desc, |
12419 |
++ .is_context_desc = xgbe_is_context_desc, |
12420 |
+ |
12421 |
+ /* For FLOW ctrl */ |
12422 |
+- hw_if->config_tx_flow_control = xgbe_config_tx_flow_control; |
12423 |
+- hw_if->config_rx_flow_control = xgbe_config_rx_flow_control; |
12424 |
++ .config_tx_flow_control = xgbe_config_tx_flow_control, |
12425 |
++ .config_rx_flow_control = xgbe_config_rx_flow_control, |
12426 |
+ |
12427 |
+ /* For RX coalescing */ |
12428 |
+- hw_if->config_rx_coalesce = xgbe_config_rx_coalesce; |
12429 |
+- hw_if->config_tx_coalesce = xgbe_config_tx_coalesce; |
12430 |
+- hw_if->usec_to_riwt = xgbe_usec_to_riwt; |
12431 |
+- hw_if->riwt_to_usec = xgbe_riwt_to_usec; |
12432 |
++ .config_rx_coalesce = xgbe_config_rx_coalesce, |
12433 |
++ .config_tx_coalesce = xgbe_config_tx_coalesce, |
12434 |
++ .usec_to_riwt = xgbe_usec_to_riwt, |
12435 |
++ .riwt_to_usec = xgbe_riwt_to_usec, |
12436 |
+ |
12437 |
+ /* For RX and TX threshold config */ |
12438 |
+- hw_if->config_rx_threshold = xgbe_config_rx_threshold; |
12439 |
+- hw_if->config_tx_threshold = xgbe_config_tx_threshold; |
12440 |
++ .config_rx_threshold = xgbe_config_rx_threshold, |
12441 |
++ .config_tx_threshold = xgbe_config_tx_threshold, |
12442 |
+ |
12443 |
+ /* For RX and TX Store and Forward Mode config */ |
12444 |
+- hw_if->config_rsf_mode = xgbe_config_rsf_mode; |
12445 |
+- hw_if->config_tsf_mode = xgbe_config_tsf_mode; |
12446 |
++ .config_rsf_mode = xgbe_config_rsf_mode, |
12447 |
++ .config_tsf_mode = xgbe_config_tsf_mode, |
12448 |
+ |
12449 |
+ /* For TX DMA Operating on Second Frame config */ |
12450 |
+- hw_if->config_osp_mode = xgbe_config_osp_mode; |
12451 |
++ .config_osp_mode = xgbe_config_osp_mode, |
12452 |
+ |
12453 |
+ /* For RX and TX PBL config */ |
12454 |
+- hw_if->config_rx_pbl_val = xgbe_config_rx_pbl_val; |
12455 |
+- hw_if->get_rx_pbl_val = xgbe_get_rx_pbl_val; |
12456 |
+- hw_if->config_tx_pbl_val = xgbe_config_tx_pbl_val; |
12457 |
+- hw_if->get_tx_pbl_val = xgbe_get_tx_pbl_val; |
12458 |
+- hw_if->config_pblx8 = xgbe_config_pblx8; |
12459 |
++ .config_rx_pbl_val = xgbe_config_rx_pbl_val, |
12460 |
++ .get_rx_pbl_val = xgbe_get_rx_pbl_val, |
12461 |
++ .config_tx_pbl_val = xgbe_config_tx_pbl_val, |
12462 |
++ .get_tx_pbl_val = xgbe_get_tx_pbl_val, |
12463 |
++ .config_pblx8 = xgbe_config_pblx8, |
12464 |
+ |
12465 |
+ /* For MMC statistics support */ |
12466 |
+- hw_if->tx_mmc_int = xgbe_tx_mmc_int; |
12467 |
+- hw_if->rx_mmc_int = xgbe_rx_mmc_int; |
12468 |
+- hw_if->read_mmc_stats = xgbe_read_mmc_stats; |
12469 |
+- |
12470 |
+- DBGPR("<--xgbe_init_function_ptrs\n"); |
12471 |
+-} |
12472 |
++ .tx_mmc_int = xgbe_tx_mmc_int, |
12473 |
++ .rx_mmc_int = xgbe_rx_mmc_int, |
12474 |
++ .read_mmc_stats = xgbe_read_mmc_stats, |
12475 |
++}; |
12476 |
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c |
12477 |
+index cfe3d93..07a78ae 100644 |
12478 |
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c |
12479 |
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c |
12480 |
+@@ -153,7 +153,7 @@ static int xgbe_calc_rx_buf_size(struct net_device *netdev, unsigned int mtu) |
12481 |
+ |
12482 |
+ static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata) |
12483 |
+ { |
12484 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12485 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12486 |
+ struct xgbe_channel *channel; |
12487 |
+ unsigned int i; |
12488 |
+ |
12489 |
+@@ -170,7 +170,7 @@ static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata) |
12490 |
+ |
12491 |
+ static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata) |
12492 |
+ { |
12493 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12494 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12495 |
+ struct xgbe_channel *channel; |
12496 |
+ unsigned int i; |
12497 |
+ |
12498 |
+@@ -188,7 +188,7 @@ static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata) |
12499 |
+ static irqreturn_t xgbe_isr(int irq, void *data) |
12500 |
+ { |
12501 |
+ struct xgbe_prv_data *pdata = data; |
12502 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12503 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12504 |
+ struct xgbe_channel *channel; |
12505 |
+ unsigned int dma_isr, dma_ch_isr; |
12506 |
+ unsigned int mac_isr; |
12507 |
+@@ -403,7 +403,7 @@ static void xgbe_napi_disable(struct xgbe_prv_data *pdata) |
12508 |
+ |
12509 |
+ void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata) |
12510 |
+ { |
12511 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12512 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12513 |
+ |
12514 |
+ DBGPR("-->xgbe_init_tx_coalesce\n"); |
12515 |
+ |
12516 |
+@@ -417,7 +417,7 @@ void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata) |
12517 |
+ |
12518 |
+ void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata) |
12519 |
+ { |
12520 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12521 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12522 |
+ |
12523 |
+ DBGPR("-->xgbe_init_rx_coalesce\n"); |
12524 |
+ |
12525 |
+@@ -431,7 +431,7 @@ void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata) |
12526 |
+ |
12527 |
+ static void xgbe_free_tx_skbuff(struct xgbe_prv_data *pdata) |
12528 |
+ { |
12529 |
+- struct xgbe_desc_if *desc_if = &pdata->desc_if; |
12530 |
++ struct xgbe_desc_if *desc_if = pdata->desc_if; |
12531 |
+ struct xgbe_channel *channel; |
12532 |
+ struct xgbe_ring *ring; |
12533 |
+ struct xgbe_ring_data *rdata; |
12534 |
+@@ -456,7 +456,7 @@ static void xgbe_free_tx_skbuff(struct xgbe_prv_data *pdata) |
12535 |
+ |
12536 |
+ static void xgbe_free_rx_skbuff(struct xgbe_prv_data *pdata) |
12537 |
+ { |
12538 |
+- struct xgbe_desc_if *desc_if = &pdata->desc_if; |
12539 |
++ struct xgbe_desc_if *desc_if = pdata->desc_if; |
12540 |
+ struct xgbe_channel *channel; |
12541 |
+ struct xgbe_ring *ring; |
12542 |
+ struct xgbe_ring_data *rdata; |
12543 |
+@@ -482,7 +482,7 @@ static void xgbe_free_rx_skbuff(struct xgbe_prv_data *pdata) |
12544 |
+ int xgbe_powerdown(struct net_device *netdev, unsigned int caller) |
12545 |
+ { |
12546 |
+ struct xgbe_prv_data *pdata = netdev_priv(netdev); |
12547 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12548 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12549 |
+ unsigned long flags; |
12550 |
+ |
12551 |
+ DBGPR("-->xgbe_powerdown\n"); |
12552 |
+@@ -520,7 +520,7 @@ int xgbe_powerdown(struct net_device *netdev, unsigned int caller) |
12553 |
+ int xgbe_powerup(struct net_device *netdev, unsigned int caller) |
12554 |
+ { |
12555 |
+ struct xgbe_prv_data *pdata = netdev_priv(netdev); |
12556 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12557 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12558 |
+ unsigned long flags; |
12559 |
+ |
12560 |
+ DBGPR("-->xgbe_powerup\n"); |
12561 |
+@@ -557,7 +557,7 @@ int xgbe_powerup(struct net_device *netdev, unsigned int caller) |
12562 |
+ |
12563 |
+ static int xgbe_start(struct xgbe_prv_data *pdata) |
12564 |
+ { |
12565 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12566 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12567 |
+ struct net_device *netdev = pdata->netdev; |
12568 |
+ |
12569 |
+ DBGPR("-->xgbe_start\n"); |
12570 |
+@@ -583,7 +583,7 @@ static int xgbe_start(struct xgbe_prv_data *pdata) |
12571 |
+ |
12572 |
+ static void xgbe_stop(struct xgbe_prv_data *pdata) |
12573 |
+ { |
12574 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12575 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12576 |
+ struct net_device *netdev = pdata->netdev; |
12577 |
+ |
12578 |
+ DBGPR("-->xgbe_stop\n"); |
12579 |
+@@ -603,7 +603,7 @@ static void xgbe_stop(struct xgbe_prv_data *pdata) |
12580 |
+ |
12581 |
+ static void xgbe_restart_dev(struct xgbe_prv_data *pdata, unsigned int reset) |
12582 |
+ { |
12583 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12584 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12585 |
+ |
12586 |
+ DBGPR("-->xgbe_restart_dev\n"); |
12587 |
+ |
12588 |
+@@ -741,8 +741,8 @@ static void xgbe_packet_info(struct xgbe_ring *ring, struct sk_buff *skb, |
12589 |
+ static int xgbe_open(struct net_device *netdev) |
12590 |
+ { |
12591 |
+ struct xgbe_prv_data *pdata = netdev_priv(netdev); |
12592 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12593 |
+- struct xgbe_desc_if *desc_if = &pdata->desc_if; |
12594 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12595 |
++ struct xgbe_desc_if *desc_if = pdata->desc_if; |
12596 |
+ int ret; |
12597 |
+ |
12598 |
+ DBGPR("-->xgbe_open\n"); |
12599 |
+@@ -804,8 +804,8 @@ err_clk: |
12600 |
+ static int xgbe_close(struct net_device *netdev) |
12601 |
+ { |
12602 |
+ struct xgbe_prv_data *pdata = netdev_priv(netdev); |
12603 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12604 |
+- struct xgbe_desc_if *desc_if = &pdata->desc_if; |
12605 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12606 |
++ struct xgbe_desc_if *desc_if = pdata->desc_if; |
12607 |
+ |
12608 |
+ DBGPR("-->xgbe_close\n"); |
12609 |
+ |
12610 |
+@@ -835,8 +835,8 @@ static int xgbe_close(struct net_device *netdev) |
12611 |
+ static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev) |
12612 |
+ { |
12613 |
+ struct xgbe_prv_data *pdata = netdev_priv(netdev); |
12614 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12615 |
+- struct xgbe_desc_if *desc_if = &pdata->desc_if; |
12616 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12617 |
++ struct xgbe_desc_if *desc_if = pdata->desc_if; |
12618 |
+ struct xgbe_channel *channel; |
12619 |
+ struct xgbe_ring *ring; |
12620 |
+ struct xgbe_packet_data *packet; |
12621 |
+@@ -903,7 +903,7 @@ tx_netdev_return: |
12622 |
+ static void xgbe_set_rx_mode(struct net_device *netdev) |
12623 |
+ { |
12624 |
+ struct xgbe_prv_data *pdata = netdev_priv(netdev); |
12625 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12626 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12627 |
+ unsigned int pr_mode, am_mode; |
12628 |
+ |
12629 |
+ DBGPR("-->xgbe_set_rx_mode\n"); |
12630 |
+@@ -930,7 +930,7 @@ static void xgbe_set_rx_mode(struct net_device *netdev) |
12631 |
+ static int xgbe_set_mac_address(struct net_device *netdev, void *addr) |
12632 |
+ { |
12633 |
+ struct xgbe_prv_data *pdata = netdev_priv(netdev); |
12634 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12635 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12636 |
+ struct sockaddr *saddr = addr; |
12637 |
+ |
12638 |
+ DBGPR("-->xgbe_set_mac_address\n"); |
12639 |
+@@ -976,7 +976,7 @@ static struct rtnl_link_stats64 *xgbe_get_stats64(struct net_device *netdev, |
12640 |
+ |
12641 |
+ DBGPR("-->%s\n", __func__); |
12642 |
+ |
12643 |
+- pdata->hw_if.read_mmc_stats(pdata); |
12644 |
++ pdata->hw_if->read_mmc_stats(pdata); |
12645 |
+ |
12646 |
+ s->rx_packets = pstats->rxframecount_gb; |
12647 |
+ s->rx_bytes = pstats->rxoctetcount_gb; |
12648 |
+@@ -1020,7 +1020,7 @@ static int xgbe_set_features(struct net_device *netdev, |
12649 |
+ netdev_features_t features) |
12650 |
+ { |
12651 |
+ struct xgbe_prv_data *pdata = netdev_priv(netdev); |
12652 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12653 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12654 |
+ unsigned int rxcsum_enabled, rxvlan_enabled; |
12655 |
+ |
12656 |
+ rxcsum_enabled = !!(pdata->netdev_features & NETIF_F_RXCSUM); |
12657 |
+@@ -1072,8 +1072,8 @@ struct net_device_ops *xgbe_get_netdev_ops(void) |
12658 |
+ static int xgbe_tx_poll(struct xgbe_channel *channel) |
12659 |
+ { |
12660 |
+ struct xgbe_prv_data *pdata = channel->pdata; |
12661 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12662 |
+- struct xgbe_desc_if *desc_if = &pdata->desc_if; |
12663 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12664 |
++ struct xgbe_desc_if *desc_if = pdata->desc_if; |
12665 |
+ struct xgbe_ring *ring = channel->tx_ring; |
12666 |
+ struct xgbe_ring_data *rdata; |
12667 |
+ struct xgbe_ring_desc *rdesc; |
12668 |
+@@ -1124,8 +1124,8 @@ static int xgbe_tx_poll(struct xgbe_channel *channel) |
12669 |
+ static int xgbe_rx_poll(struct xgbe_channel *channel, int budget) |
12670 |
+ { |
12671 |
+ struct xgbe_prv_data *pdata = channel->pdata; |
12672 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12673 |
+- struct xgbe_desc_if *desc_if = &pdata->desc_if; |
12674 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12675 |
++ struct xgbe_desc_if *desc_if = pdata->desc_if; |
12676 |
+ struct xgbe_ring *ring = channel->rx_ring; |
12677 |
+ struct xgbe_ring_data *rdata; |
12678 |
+ struct xgbe_packet_data *packet; |
12679 |
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c |
12680 |
+index 8909f2b..719e767 100644 |
12681 |
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c |
12682 |
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c |
12683 |
+@@ -202,7 +202,7 @@ static void xgbe_get_ethtool_stats(struct net_device *netdev, |
12684 |
+ |
12685 |
+ DBGPR("-->%s\n", __func__); |
12686 |
+ |
12687 |
+- pdata->hw_if.read_mmc_stats(pdata); |
12688 |
++ pdata->hw_if->read_mmc_stats(pdata); |
12689 |
+ for (i = 0; i < XGBE_STATS_COUNT; i++) { |
12690 |
+ stat = (u8 *)pdata + xgbe_gstring_stats[i].stat_offset; |
12691 |
+ *data++ = *(u64 *)stat; |
12692 |
+@@ -387,7 +387,7 @@ static int xgbe_get_coalesce(struct net_device *netdev, |
12693 |
+ struct ethtool_coalesce *ec) |
12694 |
+ { |
12695 |
+ struct xgbe_prv_data *pdata = netdev_priv(netdev); |
12696 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12697 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12698 |
+ unsigned int riwt; |
12699 |
+ |
12700 |
+ DBGPR("-->xgbe_get_coalesce\n"); |
12701 |
+@@ -410,7 +410,7 @@ static int xgbe_set_coalesce(struct net_device *netdev, |
12702 |
+ struct ethtool_coalesce *ec) |
12703 |
+ { |
12704 |
+ struct xgbe_prv_data *pdata = netdev_priv(netdev); |
12705 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12706 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12707 |
+ unsigned int rx_frames, rx_riwt, rx_usecs; |
12708 |
+ unsigned int tx_frames, tx_usecs; |
12709 |
+ |
12710 |
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c |
12711 |
+index 5a1891f..1b7888e 100644 |
12712 |
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c |
12713 |
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c |
12714 |
+@@ -210,12 +210,6 @@ static void xgbe_default_config(struct xgbe_prv_data *pdata) |
12715 |
+ DBGPR("<--xgbe_default_config\n"); |
12716 |
+ } |
12717 |
+ |
12718 |
+-static void xgbe_init_all_fptrs(struct xgbe_prv_data *pdata) |
12719 |
+-{ |
12720 |
+- xgbe_init_function_ptrs_dev(&pdata->hw_if); |
12721 |
+- xgbe_init_function_ptrs_desc(&pdata->desc_if); |
12722 |
+-} |
12723 |
+- |
12724 |
+ static int xgbe_probe(struct platform_device *pdev) |
12725 |
+ { |
12726 |
+ struct xgbe_prv_data *pdata; |
12727 |
+@@ -306,9 +300,8 @@ static int xgbe_probe(struct platform_device *pdev) |
12728 |
+ netdev->base_addr = (unsigned long)pdata->xgmac_regs; |
12729 |
+ |
12730 |
+ /* Set all the function pointers */ |
12731 |
+- xgbe_init_all_fptrs(pdata); |
12732 |
+- hw_if = &pdata->hw_if; |
12733 |
+- desc_if = &pdata->desc_if; |
12734 |
++ hw_if = pdata->hw_if = &default_xgbe_hw_if; |
12735 |
++ desc_if = pdata->desc_if = &default_xgbe_desc_if; |
12736 |
+ |
12737 |
+ /* Issue software reset to device */ |
12738 |
+ hw_if->exit(pdata); |
12739 |
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c |
12740 |
+index ea7a5d6..d10a742 100644 |
12741 |
+--- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c |
12742 |
++++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c |
12743 |
+@@ -128,7 +128,7 @@ |
12744 |
+ static int xgbe_mdio_read(struct mii_bus *mii, int prtad, int mmd_reg) |
12745 |
+ { |
12746 |
+ struct xgbe_prv_data *pdata = mii->priv; |
12747 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12748 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12749 |
+ int mmd_data; |
12750 |
+ |
12751 |
+ DBGPR_MDIO("-->xgbe_mdio_read: prtad=%#x mmd_reg=%#x\n", |
12752 |
+@@ -145,7 +145,7 @@ static int xgbe_mdio_write(struct mii_bus *mii, int prtad, int mmd_reg, |
12753 |
+ u16 mmd_val) |
12754 |
+ { |
12755 |
+ struct xgbe_prv_data *pdata = mii->priv; |
12756 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12757 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12758 |
+ int mmd_data = mmd_val; |
12759 |
+ |
12760 |
+ DBGPR_MDIO("-->xgbe_mdio_write: prtad=%#x mmd_reg=%#x mmd_data=%#x\n", |
12761 |
+@@ -161,7 +161,7 @@ static int xgbe_mdio_write(struct mii_bus *mii, int prtad, int mmd_reg, |
12762 |
+ static void xgbe_adjust_link(struct net_device *netdev) |
12763 |
+ { |
12764 |
+ struct xgbe_prv_data *pdata = netdev_priv(netdev); |
12765 |
+- struct xgbe_hw_if *hw_if = &pdata->hw_if; |
12766 |
++ struct xgbe_hw_if *hw_if = pdata->hw_if; |
12767 |
+ struct phy_device *phydev = pdata->phydev; |
12768 |
+ unsigned long flags; |
12769 |
+ int new_state = 0; |
12770 |
+diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h |
12771 |
+index ab06271..a560fa7 100644 |
12772 |
+--- a/drivers/net/ethernet/amd/xgbe/xgbe.h |
12773 |
++++ b/drivers/net/ethernet/amd/xgbe/xgbe.h |
12774 |
+@@ -527,8 +527,8 @@ struct xgbe_prv_data { |
12775 |
+ |
12776 |
+ int irq_number; |
12777 |
+ |
12778 |
+- struct xgbe_hw_if hw_if; |
12779 |
+- struct xgbe_desc_if desc_if; |
12780 |
++ const struct xgbe_hw_if *hw_if; |
12781 |
++ const struct xgbe_desc_if *desc_if; |
12782 |
+ |
12783 |
+ /* Rings for Tx/Rx on a DMA channel */ |
12784 |
+ struct xgbe_channel *channel; |
12785 |
+@@ -611,6 +611,9 @@ struct xgbe_prv_data { |
12786 |
+ #endif |
12787 |
+ }; |
12788 |
+ |
12789 |
++extern const struct xgbe_hw_if default_xgbe_hw_if; |
12790 |
++extern const struct xgbe_desc_if default_xgbe_desc_if; |
12791 |
++ |
12792 |
+ /* Function prototypes*/ |
12793 |
+ |
12794 |
+ void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *); |
12795 |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h |
12796 |
-index 3448cc0..67b2dc4 100644 |
12797 |
+index 571427c..e9fe9e7 100644 |
12798 |
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h |
12799 |
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h |
12800 |
@@ -1058,7 +1058,7 @@ static inline u8 bnx2x_get_path_func_num(struct bnx2x *bp) |
12801 |
@@ -46261,7 +48861,7 @@ index 3448cc0..67b2dc4 100644 |
12802 |
/* multicast configuration controlling object */ |
12803 |
bnx2x_init_mcast_obj(bp, &bp->mcast_obj, bp->fp->cl_id, bp->fp->cid, |
12804 |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c |
12805 |
-index 31297266..944cf6e 100644 |
12806 |
+index b193604..8873bfd 100644 |
12807 |
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c |
12808 |
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c |
12809 |
@@ -2329,15 +2329,14 @@ int bnx2x_config_rx_mode(struct bnx2x *bp, |
12810 |
@@ -46286,7 +48886,7 @@ index 31297266..944cf6e 100644 |
12811 |
} |
12812 |
|
12813 |
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h |
12814 |
-index 80f6c79..fb7d12d 100644 |
12815 |
+index 718ecd2..2183b2f 100644 |
12816 |
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h |
12817 |
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h |
12818 |
@@ -1340,8 +1340,7 @@ int bnx2x_vlan_mac_move(struct bnx2x *bp, |
12819 |
@@ -46299,21 +48899,8 @@ index 80f6c79..fb7d12d 100644 |
12820 |
|
12821 |
/** |
12822 |
* bnx2x_config_rx_mode - Send and RX_MODE ramrod according to the provided parameters. |
12823 |
-diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h |
12824 |
-index 6929adb..cc68830 100644 |
12825 |
---- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h |
12826 |
-+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.h |
12827 |
-@@ -571,7 +571,7 @@ static inline void __iomem *bnx2x_vf_doorbells(struct bnx2x *bp) |
12828 |
- return NULL; |
12829 |
- } |
12830 |
- |
12831 |
--static inline void bnx2x_vf_pci_dealloc(struct bnx2 *bp) {return 0; } |
12832 |
-+static inline void bnx2x_vf_pci_dealloc(struct bnx2x *bp) { } |
12833 |
- static inline int bnx2x_vf_pci_alloc(struct bnx2x *bp) {return 0; } |
12834 |
- static inline void bnx2x_pf_set_vfs_vlan(struct bnx2x *bp) {} |
12835 |
- static inline int bnx2x_sriov_configure(struct pci_dev *dev, int num_vfs) {return 0; } |
12836 |
diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h |
12837 |
-index 04321e5..b51cdc4 100644 |
12838 |
+index 461acca..2b546ba 100644 |
12839 |
--- a/drivers/net/ethernet/broadcom/tg3.h |
12840 |
+++ b/drivers/net/ethernet/broadcom/tg3.h |
12841 |
@@ -150,6 +150,7 @@ |
12842 |
@@ -46357,10 +48944,10 @@ index 8cffcdf..aadf043 100644 |
12843 |
#define L2T_SKB_CB(skb) ((struct l2t_skb_cb *)(skb)->cb) |
12844 |
|
12845 |
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c |
12846 |
-index 24e16e3..bfe6ef2 100644 |
12847 |
+index a83271c..cf00874 100644 |
12848 |
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c |
12849 |
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c |
12850 |
-@@ -2139,7 +2139,7 @@ static void get_regs(struct net_device *dev, struct ethtool_regs *regs, |
12851 |
+@@ -2174,7 +2174,7 @@ static void get_regs(struct net_device *dev, struct ethtool_regs *regs, |
12852 |
|
12853 |
int i; |
12854 |
struct adapter *ap = netdev2adap(dev); |
12855 |
@@ -46392,10 +48979,10 @@ index c05b66d..ed69872 100644 |
12856 |
break; |
12857 |
} |
12858 |
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c |
12859 |
-index 2b5ab7c..20e2e7f 100644 |
12860 |
+index 1e187fb..d024547 100644 |
12861 |
--- a/drivers/net/ethernet/emulex/benet/be_main.c |
12862 |
+++ b/drivers/net/ethernet/emulex/benet/be_main.c |
12863 |
-@@ -535,7 +535,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val) |
12864 |
+@@ -533,7 +533,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val) |
12865 |
|
12866 |
if (wrapped) |
12867 |
newacc += 65536; |
12868 |
@@ -46405,7 +48992,7 @@ index 2b5ab7c..20e2e7f 100644 |
12869 |
|
12870 |
static void populate_erx_stats(struct be_adapter *adapter, |
12871 |
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c |
12872 |
-index 68069ea..c4484f6 100644 |
12873 |
+index c77fa4a..7fd42fc 100644 |
12874 |
--- a/drivers/net/ethernet/faraday/ftgmac100.c |
12875 |
+++ b/drivers/net/ethernet/faraday/ftgmac100.c |
12876 |
@@ -30,6 +30,8 @@ |
12877 |
@@ -46418,7 +49005,7 @@ index 68069ea..c4484f6 100644 |
12878 |
|
12879 |
#include "ftgmac100.h" |
12880 |
diff --git a/drivers/net/ethernet/faraday/ftmac100.c b/drivers/net/ethernet/faraday/ftmac100.c |
12881 |
-index 8be5b40..081bc1b 100644 |
12882 |
+index 4ff1adc..0ea6bf4 100644 |
12883 |
--- a/drivers/net/ethernet/faraday/ftmac100.c |
12884 |
+++ b/drivers/net/ethernet/faraday/ftmac100.c |
12885 |
@@ -31,6 +31,8 @@ |
12886 |
@@ -46431,10 +49018,10 @@ index 8be5b40..081bc1b 100644 |
12887 |
#include "ftmac100.h" |
12888 |
|
12889 |
diff --git a/drivers/net/ethernet/intel/i40e/i40e_ptp.c b/drivers/net/ethernet/intel/i40e/i40e_ptp.c |
12890 |
-index e61e637..9117795 100644 |
12891 |
+index 101f439..59e7ec6 100644 |
12892 |
--- a/drivers/net/ethernet/intel/i40e/i40e_ptp.c |
12893 |
+++ b/drivers/net/ethernet/intel/i40e/i40e_ptp.c |
12894 |
-@@ -436,7 +436,7 @@ void i40e_ptp_set_increment(struct i40e_pf *pf) |
12895 |
+@@ -401,7 +401,7 @@ void i40e_ptp_set_increment(struct i40e_pf *pf) |
12896 |
wr32(hw, I40E_PRTTSYN_INC_H, incval >> 32); |
12897 |
|
12898 |
/* Update the base adjustement value. */ |
12899 |
@@ -46444,10 +49031,10 @@ index e61e637..9117795 100644 |
12900 |
} |
12901 |
|
12902 |
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c |
12903 |
-index 8902ae6..e7bcdce 100644 |
12904 |
+index 68f87ec..241dbe3 100644 |
12905 |
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c |
12906 |
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c |
12907 |
-@@ -771,7 +771,7 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter) |
12908 |
+@@ -792,7 +792,7 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter) |
12909 |
} |
12910 |
|
12911 |
/* update the base incval used to calculate frequency adjustment */ |
12912 |
@@ -46457,10 +49044,10 @@ index 8902ae6..e7bcdce 100644 |
12913 |
|
12914 |
/* need lock to prevent incorrect read while modifying cyclecounter */ |
12915 |
diff --git a/drivers/net/ethernet/neterion/vxge/vxge-config.c b/drivers/net/ethernet/neterion/vxge/vxge-config.c |
12916 |
-index 089b713..28d87ae 100644 |
12917 |
+index 2bbd01f..e8baa64 100644 |
12918 |
--- a/drivers/net/ethernet/neterion/vxge/vxge-config.c |
12919 |
+++ b/drivers/net/ethernet/neterion/vxge/vxge-config.c |
12920 |
-@@ -3461,7 +3461,10 @@ __vxge_hw_fifo_create(struct __vxge_hw_vpath_handle *vp, |
12921 |
+@@ -3457,7 +3457,10 @@ __vxge_hw_fifo_create(struct __vxge_hw_vpath_handle *vp, |
12922 |
struct __vxge_hw_fifo *fifo; |
12923 |
struct vxge_hw_fifo_config *config; |
12924 |
u32 txdl_size, txdl_per_memblock; |
12925 |
@@ -46472,7 +49059,7 @@ index 089b713..28d87ae 100644 |
12926 |
struct __vxge_hw_virtualpath *vpath; |
12927 |
|
12928 |
if ((vp == NULL) || (attr == NULL)) { |
12929 |
-@@ -3544,8 +3547,6 @@ __vxge_hw_fifo_create(struct __vxge_hw_vpath_handle *vp, |
12930 |
+@@ -3540,8 +3543,6 @@ __vxge_hw_fifo_create(struct __vxge_hw_vpath_handle *vp, |
12931 |
goto exit; |
12932 |
} |
12933 |
|
12934 |
@@ -46481,8 +49068,44 @@ index 089b713..28d87ae 100644 |
12935 |
fifo->mempool = |
12936 |
__vxge_hw_mempool_create(vpath->hldev, |
12937 |
fifo->config->memblock_size, |
12938 |
+diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c |
12939 |
+index 73e6683..464e910 100644 |
12940 |
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c |
12941 |
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c |
12942 |
+@@ -120,6 +120,10 @@ static void pch_gbe_mdio_write(struct net_device *netdev, int addr, int reg, |
12943 |
+ int data); |
12944 |
+ static void pch_gbe_set_multi(struct net_device *netdev); |
12945 |
+ |
12946 |
++static struct sock_filter ptp_filter[] = { |
12947 |
++ PTP_FILTER |
12948 |
++}; |
12949 |
++ |
12950 |
+ static int pch_ptp_match(struct sk_buff *skb, u16 uid_hi, u32 uid_lo, u16 seqid) |
12951 |
+ { |
12952 |
+ u8 *data = skb->data; |
12953 |
+@@ -127,7 +131,7 @@ static int pch_ptp_match(struct sk_buff *skb, u16 uid_hi, u32 uid_lo, u16 seqid) |
12954 |
+ u16 *hi, *id; |
12955 |
+ u32 lo; |
12956 |
+ |
12957 |
+- if (ptp_classify_raw(skb) == PTP_CLASS_NONE) |
12958 |
++ if (sk_run_filter(skb, ptp_filter) == PTP_CLASS_NONE) |
12959 |
+ return 0; |
12960 |
+ |
12961 |
+ offset = ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN; |
12962 |
+@@ -2631,6 +2635,11 @@ static int pch_gbe_probe(struct pci_dev *pdev, |
12963 |
+ |
12964 |
+ adapter->ptp_pdev = pci_get_bus_and_slot(adapter->pdev->bus->number, |
12965 |
+ PCI_DEVFN(12, 4)); |
12966 |
++ if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) { |
12967 |
++ dev_err(&pdev->dev, "Bad ptp filter\n"); |
12968 |
++ ret = -EINVAL; |
12969 |
++ goto err_free_netdev; |
12970 |
++ } |
12971 |
+ |
12972 |
+ netdev->netdev_ops = &pch_gbe_netdev_ops; |
12973 |
+ netdev->watchdog_timeo = PCH_GBE_WATCHDOG_PERIOD; |
12974 |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c |
12975 |
-index ba20c72..f30c0fe 100644 |
12976 |
+index f33559b..c7f50ac 100644 |
12977 |
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c |
12978 |
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c |
12979 |
@@ -2176,7 +2176,9 @@ int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter) |
12980 |
@@ -46528,10 +49151,10 @@ index be7d7a6..a8983f8 100644 |
12981 |
default: |
12982 |
dev_err(&adapter->pdev->dev, "Invalid Virtual NIC opmode\n"); |
12983 |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c |
12984 |
-index 37b979b..50f5b95 100644 |
12985 |
+index e46fc39..abe135b 100644 |
12986 |
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c |
12987 |
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c |
12988 |
-@@ -1217,7 +1217,7 @@ flash_temp: |
12989 |
+@@ -1228,7 +1228,7 @@ flash_temp: |
12990 |
int qlcnic_dump_fw(struct qlcnic_adapter *adapter) |
12991 |
{ |
12992 |
struct qlcnic_fw_dump *fw_dump = &adapter->ahw->fw_dump; |
12993 |
@@ -46541,10 +49164,10 @@ index 37b979b..50f5b95 100644 |
12994 |
u32 entry_offset, dump, no_entries, buf_offset = 0; |
12995 |
int i, k, ops_cnt, ops_index, dump_size = 0; |
12996 |
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c |
12997 |
-index aa1c079..2b1a3e8 100644 |
12998 |
+index 61623e9..ac97c27 100644 |
12999 |
--- a/drivers/net/ethernet/realtek/r8169.c |
13000 |
+++ b/drivers/net/ethernet/realtek/r8169.c |
13001 |
-@@ -758,22 +758,22 @@ struct rtl8169_private { |
13002 |
+@@ -759,22 +759,22 @@ struct rtl8169_private { |
13003 |
struct mdio_ops { |
13004 |
void (*write)(struct rtl8169_private *, int, int); |
13005 |
int (*read)(struct rtl8169_private *, int); |
13006 |
@@ -46599,11 +49222,94 @@ index 50617c5..b13724c 100644 |
13007 |
} |
13008 |
|
13009 |
/* To mask all all interrupts.*/ |
13010 |
+diff --git a/drivers/net/ethernet/ti/cpts.c b/drivers/net/ethernet/ti/cpts.c |
13011 |
+index 6b56f85..50e285f 100644 |
13012 |
+--- a/drivers/net/ethernet/ti/cpts.c |
13013 |
++++ b/drivers/net/ethernet/ti/cpts.c |
13014 |
+@@ -33,6 +33,10 @@ |
13015 |
+ |
13016 |
+ #ifdef CONFIG_TI_CPTS |
13017 |
+ |
13018 |
++static struct sock_filter ptp_filter[] = { |
13019 |
++ PTP_FILTER |
13020 |
++}; |
13021 |
++ |
13022 |
+ #define cpts_read32(c, r) __raw_readl(&c->reg->r) |
13023 |
+ #define cpts_write32(c, v, r) __raw_writel(v, &c->reg->r) |
13024 |
+ |
13025 |
+@@ -296,7 +300,7 @@ static u64 cpts_find_ts(struct cpts *cpts, struct sk_buff *skb, int ev_type) |
13026 |
+ u64 ns = 0; |
13027 |
+ struct cpts_event *event; |
13028 |
+ struct list_head *this, *next; |
13029 |
+- unsigned int class = ptp_classify_raw(skb); |
13030 |
++ unsigned int class = sk_run_filter(skb, ptp_filter); |
13031 |
+ unsigned long flags; |
13032 |
+ u16 seqid; |
13033 |
+ u8 mtype; |
13034 |
+@@ -367,6 +371,10 @@ int cpts_register(struct device *dev, struct cpts *cpts, |
13035 |
+ int err, i; |
13036 |
+ unsigned long flags; |
13037 |
+ |
13038 |
++ if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) { |
13039 |
++ pr_err("cpts: bad ptp filter\n"); |
13040 |
++ return -EINVAL; |
13041 |
++ } |
13042 |
+ cpts->info = cpts_info; |
13043 |
+ cpts->clock = ptp_clock_register(&cpts->info, dev); |
13044 |
+ if (IS_ERR(cpts->clock)) { |
13045 |
+diff --git a/drivers/net/ethernet/xscale/Kconfig b/drivers/net/ethernet/xscale/Kconfig |
13046 |
+index b81bc9f..3f43101 100644 |
13047 |
+--- a/drivers/net/ethernet/xscale/Kconfig |
13048 |
++++ b/drivers/net/ethernet/xscale/Kconfig |
13049 |
+@@ -23,7 +23,6 @@ config IXP4XX_ETH |
13050 |
+ tristate "Intel IXP4xx Ethernet support" |
13051 |
+ depends on ARM && ARCH_IXP4XX && IXP4XX_NPE && IXP4XX_QMGR |
13052 |
+ select PHYLIB |
13053 |
+- select NET_PTP_CLASSIFY |
13054 |
+ ---help--- |
13055 |
+ Say Y here if you want to use built-in Ethernet ports |
13056 |
+ on IXP4xx processor. |
13057 |
+diff --git a/drivers/net/ethernet/xscale/ixp4xx_eth.c b/drivers/net/ethernet/xscale/ixp4xx_eth.c |
13058 |
+index f7e0f0f..25283f1 100644 |
13059 |
+--- a/drivers/net/ethernet/xscale/ixp4xx_eth.c |
13060 |
++++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c |
13061 |
+@@ -256,6 +256,10 @@ static int ports_open; |
13062 |
+ static struct port *npe_port_tab[MAX_NPES]; |
13063 |
+ static struct dma_pool *dma_pool; |
13064 |
+ |
13065 |
++static struct sock_filter ptp_filter[] = { |
13066 |
++ PTP_FILTER |
13067 |
++}; |
13068 |
++ |
13069 |
+ static int ixp_ptp_match(struct sk_buff *skb, u16 uid_hi, u32 uid_lo, u16 seqid) |
13070 |
+ { |
13071 |
+ u8 *data = skb->data; |
13072 |
+@@ -263,7 +267,7 @@ static int ixp_ptp_match(struct sk_buff *skb, u16 uid_hi, u32 uid_lo, u16 seqid) |
13073 |
+ u16 *hi, *id; |
13074 |
+ u32 lo; |
13075 |
+ |
13076 |
+- if (ptp_classify_raw(skb) != PTP_CLASS_V1_IPV4) |
13077 |
++ if (sk_run_filter(skb, ptp_filter) != PTP_CLASS_V1_IPV4) |
13078 |
+ return 0; |
13079 |
+ |
13080 |
+ offset = ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN; |
13081 |
+@@ -1409,6 +1413,11 @@ static int eth_init_one(struct platform_device *pdev) |
13082 |
+ char phy_id[MII_BUS_ID_SIZE + 3]; |
13083 |
+ int err; |
13084 |
+ |
13085 |
++ if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) { |
13086 |
++ pr_err("ixp4xx_eth: bad ptp filter\n"); |
13087 |
++ return -EINVAL; |
13088 |
++ } |
13089 |
++ |
13090 |
+ if (!(dev = alloc_etherdev(sizeof(struct port)))) |
13091 |
+ return -ENOMEM; |
13092 |
+ |
13093 |
diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h |
13094 |
-index d18f711d..5755800 100644 |
13095 |
+index 6cc37c1..fdd9d77 100644 |
13096 |
--- a/drivers/net/hyperv/hyperv_net.h |
13097 |
+++ b/drivers/net/hyperv/hyperv_net.h |
13098 |
-@@ -101,7 +101,7 @@ struct rndis_device { |
13099 |
+@@ -170,7 +170,7 @@ struct rndis_device { |
13100 |
|
13101 |
enum rndis_device_state state; |
13102 |
bool link_state; |
13103 |
@@ -46613,10 +49319,10 @@ index d18f711d..5755800 100644 |
13104 |
spinlock_t request_lock; |
13105 |
struct list_head req_list; |
13106 |
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c |
13107 |
-index 143a98c..d54fbaa 100644 |
13108 |
+index 99c527a..6a2ce38 100644 |
13109 |
--- a/drivers/net/hyperv/rndis_filter.c |
13110 |
+++ b/drivers/net/hyperv/rndis_filter.c |
13111 |
-@@ -100,7 +100,7 @@ static struct rndis_request *get_rndis_request(struct rndis_device *dev, |
13112 |
+@@ -102,7 +102,7 @@ static struct rndis_request *get_rndis_request(struct rndis_device *dev, |
13113 |
* template |
13114 |
*/ |
13115 |
set = &rndis_msg->msg.set_req; |
13116 |
@@ -46625,7 +49331,7 @@ index 143a98c..d54fbaa 100644 |
13117 |
|
13118 |
/* Add to the request list */ |
13119 |
spin_lock_irqsave(&dev->request_lock, flags); |
13120 |
-@@ -834,7 +834,7 @@ static void rndis_filter_halt_device(struct rndis_device *dev) |
13121 |
+@@ -930,7 +930,7 @@ static void rndis_filter_halt_device(struct rndis_device *dev) |
13122 |
|
13123 |
/* Setup the rndis set */ |
13124 |
halt = &request->request_msg.msg.halt_req; |
13125 |
@@ -46648,10 +49354,19 @@ index 78f18be..1d19c62 100644 |
13126 |
priv = netdev_priv(dev); |
13127 |
priv->phy = phy; |
13128 |
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c |
13129 |
-index d650b91..7717c68 100644 |
13130 |
+index ef8a5c2..76877d6 100644 |
13131 |
--- a/drivers/net/macvlan.c |
13132 |
+++ b/drivers/net/macvlan.c |
13133 |
-@@ -985,13 +985,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = { |
13134 |
+@@ -264,7 +264,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port, |
13135 |
+ free_nskb: |
13136 |
+ kfree_skb(nskb); |
13137 |
+ err: |
13138 |
+- atomic_long_inc(&skb->dev->rx_dropped); |
13139 |
++ atomic_long_inc_unchecked(&skb->dev->rx_dropped); |
13140 |
+ } |
13141 |
+ |
13142 |
+ /* called under rcu_read_lock() from netif_receive_skb */ |
13143 |
+@@ -1134,13 +1134,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = { |
13144 |
int macvlan_link_register(struct rtnl_link_ops *ops) |
13145 |
{ |
13146 |
/* common fields */ |
13147 |
@@ -46674,7 +49389,7 @@ index d650b91..7717c68 100644 |
13148 |
|
13149 |
return rtnl_link_register(ops); |
13150 |
}; |
13151 |
-@@ -1045,7 +1047,7 @@ static int macvlan_device_event(struct notifier_block *unused, |
13152 |
+@@ -1220,7 +1222,7 @@ static int macvlan_device_event(struct notifier_block *unused, |
13153 |
return NOTIFY_DONE; |
13154 |
} |
13155 |
|
13156 |
@@ -46705,28 +49420,184 @@ index 3381c4f..dea5fd5 100644 |
13157 |
.notifier_call = macvtap_device_event, |
13158 |
}; |
13159 |
|
13160 |
+diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c |
13161 |
+index 9408157..d53b924 100644 |
13162 |
+--- a/drivers/net/phy/dp83640.c |
13163 |
++++ b/drivers/net/phy/dp83640.c |
13164 |
+@@ -27,7 +27,6 @@ |
13165 |
+ #include <linux/module.h> |
13166 |
+ #include <linux/net_tstamp.h> |
13167 |
+ #include <linux/netdevice.h> |
13168 |
+-#include <linux/if_vlan.h> |
13169 |
+ #include <linux/phy.h> |
13170 |
+ #include <linux/ptp_classify.h> |
13171 |
+ #include <linux/ptp_clock_kernel.h> |
13172 |
diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c |
13173 |
-index 3c41a83..5fe2d7f 100644 |
13174 |
+index d5b77ef..72ff14b 100644 |
13175 |
--- a/drivers/net/ppp/ppp_generic.c |
13176 |
+++ b/drivers/net/ppp/ppp_generic.c |
13177 |
-@@ -1016,7 +1016,6 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
13178 |
- void __user *addr = (void __user *) ifr->ifr_ifru.ifru_data; |
13179 |
- struct ppp_stats stats; |
13180 |
- struct ppp_comp_stats cstats; |
13181 |
-- char *vers; |
13182 |
+@@ -143,8 +143,9 @@ struct ppp { |
13183 |
+ struct sk_buff_head mrq; /* MP: receive reconstruction queue */ |
13184 |
+ #endif /* CONFIG_PPP_MULTILINK */ |
13185 |
+ #ifdef CONFIG_PPP_FILTER |
13186 |
+- struct sk_filter *pass_filter; /* filter for packets to pass */ |
13187 |
+- struct sk_filter *active_filter;/* filter for pkts to reset idle */ |
13188 |
++ struct sock_filter *pass_filter; /* filter for packets to pass */ |
13189 |
++ struct sock_filter *active_filter;/* filter for pkts to reset idle */ |
13190 |
++ unsigned pass_len, active_len; |
13191 |
+ #endif /* CONFIG_PPP_FILTER */ |
13192 |
+ struct net *ppp_net; /* the net we belong to */ |
13193 |
+ struct ppp_link_stats stats64; /* 64 bit network stats */ |
13194 |
+@@ -539,7 +540,7 @@ static int get_filter(void __user *arg, struct sock_filter **p) |
13195 |
+ { |
13196 |
+ struct sock_fprog uprog; |
13197 |
+ struct sock_filter *code = NULL; |
13198 |
+- int len; |
13199 |
++ int len, err; |
13200 |
|
13201 |
- switch (cmd) { |
13202 |
- case SIOCGPPPSTATS: |
13203 |
-@@ -1038,8 +1037,7 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
13204 |
- break; |
13205 |
+ if (copy_from_user(&uprog, arg, sizeof(uprog))) |
13206 |
+ return -EFAULT; |
13207 |
+@@ -554,6 +555,12 @@ static int get_filter(void __user *arg, struct sock_filter **p) |
13208 |
+ if (IS_ERR(code)) |
13209 |
+ return PTR_ERR(code); |
13210 |
|
13211 |
- case SIOCGPPPVER: |
13212 |
-- vers = PPP_VERSION; |
13213 |
-- if (copy_to_user(addr, vers, strlen(vers) + 1)) |
13214 |
-+ if (copy_to_user(addr, PPP_VERSION, sizeof(PPP_VERSION))) |
13215 |
- break; |
13216 |
- err = 0; |
13217 |
++ err = sk_chk_filter(code, uprog.len); |
13218 |
++ if (err) { |
13219 |
++ kfree(code); |
13220 |
++ return err; |
13221 |
++ } |
13222 |
++ |
13223 |
+ *p = code; |
13224 |
+ return uprog.len; |
13225 |
+ } |
13226 |
+@@ -748,52 +755,28 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
13227 |
+ case PPPIOCSPASS: |
13228 |
+ { |
13229 |
+ struct sock_filter *code; |
13230 |
+- |
13231 |
+ err = get_filter(argp, &code); |
13232 |
+ if (err >= 0) { |
13233 |
+- struct sock_fprog_kern fprog = { |
13234 |
+- .len = err, |
13235 |
+- .filter = code, |
13236 |
+- }; |
13237 |
+- |
13238 |
+ ppp_lock(ppp); |
13239 |
+- if (ppp->pass_filter) { |
13240 |
+- sk_unattached_filter_destroy(ppp->pass_filter); |
13241 |
+- ppp->pass_filter = NULL; |
13242 |
+- } |
13243 |
+- if (fprog.filter != NULL) |
13244 |
+- err = sk_unattached_filter_create(&ppp->pass_filter, |
13245 |
+- &fprog); |
13246 |
+- else |
13247 |
+- err = 0; |
13248 |
+- kfree(code); |
13249 |
++ kfree(ppp->pass_filter); |
13250 |
++ ppp->pass_filter = code; |
13251 |
++ ppp->pass_len = err; |
13252 |
+ ppp_unlock(ppp); |
13253 |
++ err = 0; |
13254 |
+ } |
13255 |
+ break; |
13256 |
+ } |
13257 |
+ case PPPIOCSACTIVE: |
13258 |
+ { |
13259 |
+ struct sock_filter *code; |
13260 |
+- |
13261 |
+ err = get_filter(argp, &code); |
13262 |
+ if (err >= 0) { |
13263 |
+- struct sock_fprog_kern fprog = { |
13264 |
+- .len = err, |
13265 |
+- .filter = code, |
13266 |
+- }; |
13267 |
+- |
13268 |
+ ppp_lock(ppp); |
13269 |
+- if (ppp->active_filter) { |
13270 |
+- sk_unattached_filter_destroy(ppp->active_filter); |
13271 |
+- ppp->active_filter = NULL; |
13272 |
+- } |
13273 |
+- if (fprog.filter != NULL) |
13274 |
+- err = sk_unattached_filter_create(&ppp->active_filter, |
13275 |
+- &fprog); |
13276 |
+- else |
13277 |
+- err = 0; |
13278 |
+- kfree(code); |
13279 |
++ kfree(ppp->active_filter); |
13280 |
++ ppp->active_filter = code; |
13281 |
++ ppp->active_len = err; |
13282 |
+ ppp_unlock(ppp); |
13283 |
++ err = 0; |
13284 |
+ } |
13285 |
break; |
13286 |
+ } |
13287 |
+@@ -1201,7 +1184,7 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb) |
13288 |
+ a four-byte PPP header on each packet */ |
13289 |
+ *skb_push(skb, 2) = 1; |
13290 |
+ if (ppp->pass_filter && |
13291 |
+- SK_RUN_FILTER(ppp->pass_filter, skb) == 0) { |
13292 |
++ sk_run_filter(skb, ppp->pass_filter) == 0) { |
13293 |
+ if (ppp->debug & 1) |
13294 |
+ netdev_printk(KERN_DEBUG, ppp->dev, |
13295 |
+ "PPP: outbound frame " |
13296 |
+@@ -1211,7 +1194,7 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb) |
13297 |
+ } |
13298 |
+ /* if this packet passes the active filter, record the time */ |
13299 |
+ if (!(ppp->active_filter && |
13300 |
+- SK_RUN_FILTER(ppp->active_filter, skb) == 0)) |
13301 |
++ sk_run_filter(skb, ppp->active_filter) == 0)) |
13302 |
+ ppp->last_xmit = jiffies; |
13303 |
+ skb_pull(skb, 2); |
13304 |
+ #else |
13305 |
+@@ -1835,7 +1818,7 @@ ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb) |
13306 |
+ |
13307 |
+ *skb_push(skb, 2) = 0; |
13308 |
+ if (ppp->pass_filter && |
13309 |
+- SK_RUN_FILTER(ppp->pass_filter, skb) == 0) { |
13310 |
++ sk_run_filter(skb, ppp->pass_filter) == 0) { |
13311 |
+ if (ppp->debug & 1) |
13312 |
+ netdev_printk(KERN_DEBUG, ppp->dev, |
13313 |
+ "PPP: inbound frame " |
13314 |
+@@ -1844,7 +1827,7 @@ ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb) |
13315 |
+ return; |
13316 |
+ } |
13317 |
+ if (!(ppp->active_filter && |
13318 |
+- SK_RUN_FILTER(ppp->active_filter, skb) == 0)) |
13319 |
++ sk_run_filter(skb, ppp->active_filter) == 0)) |
13320 |
+ ppp->last_recv = jiffies; |
13321 |
+ __skb_pull(skb, 2); |
13322 |
+ } else |
13323 |
+@@ -2689,10 +2672,6 @@ ppp_create_interface(struct net *net, int unit, int *retp) |
13324 |
+ ppp->minseq = -1; |
13325 |
+ skb_queue_head_init(&ppp->mrq); |
13326 |
+ #endif /* CONFIG_PPP_MULTILINK */ |
13327 |
+-#ifdef CONFIG_PPP_FILTER |
13328 |
+- ppp->pass_filter = NULL; |
13329 |
+- ppp->active_filter = NULL; |
13330 |
+-#endif /* CONFIG_PPP_FILTER */ |
13331 |
+ |
13332 |
+ /* |
13333 |
+ * drum roll: don't forget to set |
13334 |
+@@ -2823,15 +2802,10 @@ static void ppp_destroy_interface(struct ppp *ppp) |
13335 |
+ skb_queue_purge(&ppp->mrq); |
13336 |
+ #endif /* CONFIG_PPP_MULTILINK */ |
13337 |
+ #ifdef CONFIG_PPP_FILTER |
13338 |
+- if (ppp->pass_filter) { |
13339 |
+- sk_unattached_filter_destroy(ppp->pass_filter); |
13340 |
+- ppp->pass_filter = NULL; |
13341 |
+- } |
13342 |
+- |
13343 |
+- if (ppp->active_filter) { |
13344 |
+- sk_unattached_filter_destroy(ppp->active_filter); |
13345 |
+- ppp->active_filter = NULL; |
13346 |
+- } |
13347 |
++ kfree(ppp->pass_filter); |
13348 |
++ ppp->pass_filter = NULL; |
13349 |
++ kfree(ppp->active_filter); |
13350 |
++ ppp->active_filter = NULL; |
13351 |
+ #endif /* CONFIG_PPP_FILTER */ |
13352 |
+ |
13353 |
+ kfree_skb(ppp->xmit_pending); |
13354 |
diff --git a/drivers/net/slip/slhc.c b/drivers/net/slip/slhc.c |
13355 |
index 1252d9c..80e660b 100644 |
13356 |
--- a/drivers/net/slip/slhc.c |
13357 |
@@ -46741,7 +49612,7 @@ index 1252d9c..80e660b 100644 |
13358 |
|
13359 |
/* We've got a compressed packet; read the change byte */ |
13360 |
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c |
13361 |
-index ce4989b..b40b328 100644 |
13362 |
+index b4958c7..277cb96 100644 |
13363 |
--- a/drivers/net/team/team.c |
13364 |
+++ b/drivers/net/team/team.c |
13365 |
@@ -2868,7 +2868,7 @@ static int team_device_event(struct notifier_block *unused, |
13366 |
@@ -46753,11 +49624,61 @@ index ce4989b..b40b328 100644 |
13367 |
.notifier_call = team_device_event, |
13368 |
}; |
13369 |
|
13370 |
+diff --git a/drivers/net/team/team_mode_loadbalance.c b/drivers/net/team/team_mode_loadbalance.c |
13371 |
+index a58dfeb..dbde341 100644 |
13372 |
+--- a/drivers/net/team/team_mode_loadbalance.c |
13373 |
++++ b/drivers/net/team/team_mode_loadbalance.c |
13374 |
+@@ -49,7 +49,7 @@ struct lb_port_mapping { |
13375 |
+ struct lb_priv_ex { |
13376 |
+ struct team *team; |
13377 |
+ struct lb_port_mapping tx_hash_to_port_mapping[LB_TX_HASHTABLE_SIZE]; |
13378 |
+- struct sock_fprog_kern *orig_fprog; |
13379 |
++ struct sock_fprog *orig_fprog; |
13380 |
+ struct { |
13381 |
+ unsigned int refresh_interval; /* in tenths of second */ |
13382 |
+ struct delayed_work refresh_dw; |
13383 |
+@@ -241,15 +241,15 @@ static int lb_bpf_func_get(struct team *team, struct team_gsetter_ctx *ctx) |
13384 |
+ return 0; |
13385 |
+ } |
13386 |
+ |
13387 |
+-static int __fprog_create(struct sock_fprog_kern **pfprog, u32 data_len, |
13388 |
++static int __fprog_create(struct sock_fprog **pfprog, u32 data_len, |
13389 |
+ const void *data) |
13390 |
+ { |
13391 |
+- struct sock_fprog_kern *fprog; |
13392 |
++ struct sock_fprog *fprog; |
13393 |
+ struct sock_filter *filter = (struct sock_filter *) data; |
13394 |
+ |
13395 |
+ if (data_len % sizeof(struct sock_filter)) |
13396 |
+ return -EINVAL; |
13397 |
+- fprog = kmalloc(sizeof(*fprog), GFP_KERNEL); |
13398 |
++ fprog = kmalloc(sizeof(struct sock_fprog), GFP_KERNEL); |
13399 |
+ if (!fprog) |
13400 |
+ return -ENOMEM; |
13401 |
+ fprog->filter = kmemdup(filter, data_len, GFP_KERNEL); |
13402 |
+@@ -262,7 +262,7 @@ static int __fprog_create(struct sock_fprog_kern **pfprog, u32 data_len, |
13403 |
+ return 0; |
13404 |
+ } |
13405 |
+ |
13406 |
+-static void __fprog_destroy(struct sock_fprog_kern *fprog) |
13407 |
++static void __fprog_destroy(struct sock_fprog *fprog) |
13408 |
+ { |
13409 |
+ kfree(fprog->filter); |
13410 |
+ kfree(fprog); |
13411 |
+@@ -273,7 +273,7 @@ static int lb_bpf_func_set(struct team *team, struct team_gsetter_ctx *ctx) |
13412 |
+ struct lb_priv *lb_priv = get_lb_priv(team); |
13413 |
+ struct sk_filter *fp = NULL; |
13414 |
+ struct sk_filter *orig_fp; |
13415 |
+- struct sock_fprog_kern *fprog = NULL; |
13416 |
++ struct sock_fprog *fprog = NULL; |
13417 |
+ int err; |
13418 |
+ |
13419 |
+ if (ctx->data.bin_val.len) { |
13420 |
diff --git a/drivers/net/tun.c b/drivers/net/tun.c |
13421 |
-index ee328ba..c4a0041 100644 |
13422 |
+index 98bad1f..f197d7a 100644 |
13423 |
--- a/drivers/net/tun.c |
13424 |
+++ b/drivers/net/tun.c |
13425 |
-@@ -1876,7 +1876,7 @@ unlock: |
13426 |
+@@ -1854,7 +1854,7 @@ unlock: |
13427 |
} |
13428 |
|
13429 |
static long __tun_chr_ioctl(struct file *file, unsigned int cmd, |
13430 |
@@ -46766,7 +49687,7 @@ index ee328ba..c4a0041 100644 |
13431 |
{ |
13432 |
struct tun_file *tfile = file->private_data; |
13433 |
struct tun_struct *tun; |
13434 |
-@@ -1889,6 +1889,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, |
13435 |
+@@ -1867,6 +1867,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, |
13436 |
unsigned int ifindex; |
13437 |
int ret; |
13438 |
|
13439 |
@@ -46777,7 +49698,7 @@ index ee328ba..c4a0041 100644 |
13440 |
if (copy_from_user(&ifr, argp, ifreq_len)) |
13441 |
return -EFAULT; |
13442 |
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c |
13443 |
-index 660bd5e..ac59452 100644 |
13444 |
+index a4272ed..cdd69ff 100644 |
13445 |
--- a/drivers/net/usb/hso.c |
13446 |
+++ b/drivers/net/usb/hso.c |
13447 |
@@ -71,7 +71,7 @@ |
13448 |
@@ -46789,7 +49710,7 @@ index 660bd5e..ac59452 100644 |
13449 |
|
13450 |
#define MOD_AUTHOR "Option Wireless" |
13451 |
#define MOD_DESCRIPTION "USB High Speed Option driver" |
13452 |
-@@ -1179,7 +1179,7 @@ static void put_rxbuf_data_and_resubmit_ctrl_urb(struct hso_serial *serial) |
13453 |
+@@ -1177,7 +1177,7 @@ static void put_rxbuf_data_and_resubmit_ctrl_urb(struct hso_serial *serial) |
13454 |
struct urb *urb; |
13455 |
|
13456 |
urb = serial->rx_urb[0]; |
13457 |
@@ -46798,7 +49719,7 @@ index 660bd5e..ac59452 100644 |
13458 |
count = put_rxbuf_data(urb, serial); |
13459 |
if (count == -1) |
13460 |
return; |
13461 |
-@@ -1217,7 +1217,7 @@ static void hso_std_serial_read_bulk_callback(struct urb *urb) |
13462 |
+@@ -1215,7 +1215,7 @@ static void hso_std_serial_read_bulk_callback(struct urb *urb) |
13463 |
DUMP1(urb->transfer_buffer, urb->actual_length); |
13464 |
|
13465 |
/* Anyone listening? */ |
13466 |
@@ -46807,7 +49728,7 @@ index 660bd5e..ac59452 100644 |
13467 |
return; |
13468 |
|
13469 |
if (serial->parent->port_spec & HSO_INFO_CRC_BUG) |
13470 |
-@@ -1287,8 +1287,7 @@ static int hso_serial_open(struct tty_struct *tty, struct file *filp) |
13471 |
+@@ -1277,8 +1277,7 @@ static int hso_serial_open(struct tty_struct *tty, struct file *filp) |
13472 |
tty_port_tty_set(&serial->port, tty); |
13473 |
|
13474 |
/* check for port already opened, if not set the termios */ |
13475 |
@@ -46817,7 +49738,7 @@ index 660bd5e..ac59452 100644 |
13476 |
serial->rx_state = RX_IDLE; |
13477 |
/* Force default termio settings */ |
13478 |
_hso_serial_set_termios(tty, NULL); |
13479 |
-@@ -1300,7 +1299,7 @@ static int hso_serial_open(struct tty_struct *tty, struct file *filp) |
13480 |
+@@ -1288,7 +1287,7 @@ static int hso_serial_open(struct tty_struct *tty, struct file *filp) |
13481 |
result = hso_start_serial_device(serial->parent, GFP_KERNEL); |
13482 |
if (result) { |
13483 |
hso_stop_serial_device(serial->parent); |
13484 |
@@ -46826,7 +49747,7 @@ index 660bd5e..ac59452 100644 |
13485 |
kref_put(&serial->parent->ref, hso_serial_ref_free); |
13486 |
} |
13487 |
} else { |
13488 |
-@@ -1337,10 +1336,10 @@ static void hso_serial_close(struct tty_struct *tty, struct file *filp) |
13489 |
+@@ -1325,10 +1324,10 @@ static void hso_serial_close(struct tty_struct *tty, struct file *filp) |
13490 |
|
13491 |
/* reset the rts and dtr */ |
13492 |
/* do the actual close */ |
13493 |
@@ -46840,7 +49761,7 @@ index 660bd5e..ac59452 100644 |
13494 |
tty_port_tty_set(&serial->port, NULL); |
13495 |
if (!usb_gone) |
13496 |
hso_stop_serial_device(serial->parent); |
13497 |
-@@ -1416,7 +1415,7 @@ static void hso_serial_set_termios(struct tty_struct *tty, struct ktermios *old) |
13498 |
+@@ -1403,7 +1402,7 @@ static void hso_serial_set_termios(struct tty_struct *tty, struct ktermios *old) |
13499 |
|
13500 |
/* the actual setup */ |
13501 |
spin_lock_irqsave(&serial->serial_lock, flags); |
13502 |
@@ -46849,7 +49770,7 @@ index 660bd5e..ac59452 100644 |
13503 |
_hso_serial_set_termios(tty, old); |
13504 |
else |
13505 |
tty->termios = *old; |
13506 |
-@@ -1885,7 +1884,7 @@ static void intr_callback(struct urb *urb) |
13507 |
+@@ -1872,7 +1871,7 @@ static void intr_callback(struct urb *urb) |
13508 |
D1("Pending read interrupt on port %d\n", i); |
13509 |
spin_lock(&serial->serial_lock); |
13510 |
if (serial->rx_state == RX_IDLE && |
13511 |
@@ -46858,7 +49779,7 @@ index 660bd5e..ac59452 100644 |
13512 |
/* Setup and send a ctrl req read on |
13513 |
* port i */ |
13514 |
if (!serial->rx_urb_filled[0]) { |
13515 |
-@@ -3061,7 +3060,7 @@ static int hso_resume(struct usb_interface *iface) |
13516 |
+@@ -3045,7 +3044,7 @@ static int hso_resume(struct usb_interface *iface) |
13517 |
/* Start all serial ports */ |
13518 |
for (i = 0; i < HSO_SERIAL_TTY_MINORS; i++) { |
13519 |
if (serial_table[i] && (serial_table[i]->interface == iface)) { |
13520 |
@@ -46868,7 +49789,7 @@ index 660bd5e..ac59452 100644 |
13521 |
hso_start_serial_device(serial_table[i], GFP_NOIO); |
13522 |
hso_kick_transmit(dev2ser(serial_table[i])); |
13523 |
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c |
13524 |
-index d2c0070..3c3da43 100644 |
13525 |
+index 3eab74c..fb6097c 100644 |
13526 |
--- a/drivers/net/usb/r8152.c |
13527 |
+++ b/drivers/net/usb/r8152.c |
13528 |
@@ -567,7 +567,7 @@ struct r8152 { |
13529 |
@@ -46903,7 +49824,7 @@ index a2515887..6d13233 100644 |
13530 |
|
13531 |
/* we will have to manufacture ethernet headers, prepare template */ |
13532 |
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c |
13533 |
-index 8a852b5..668a4b6 100644 |
13534 |
+index 7d9f84a..7f690da 100644 |
13535 |
--- a/drivers/net/virtio_net.c |
13536 |
+++ b/drivers/net/virtio_net.c |
13537 |
@@ -47,7 +47,7 @@ module_param(gso, bool, 0444); |
13538 |
@@ -46916,10 +49837,10 @@ index 8a852b5..668a4b6 100644 |
13539 |
#define VIRTNET_DRIVER_VERSION "1.0.0" |
13540 |
|
13541 |
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c |
13542 |
-index 77dcf92..549924a 100644 |
13543 |
+index 9f79192..838cf95 100644 |
13544 |
--- a/drivers/net/vxlan.c |
13545 |
+++ b/drivers/net/vxlan.c |
13546 |
-@@ -2839,7 +2839,7 @@ nla_put_failure: |
13547 |
+@@ -2838,7 +2838,7 @@ nla_put_failure: |
13548 |
return -EMSGSIZE; |
13549 |
} |
13550 |
|
13551 |
@@ -46928,7 +49849,7 @@ index 77dcf92..549924a 100644 |
13552 |
.kind = "vxlan", |
13553 |
.maxtype = IFLA_VXLAN_MAX, |
13554 |
.policy = vxlan_policy, |
13555 |
-@@ -2886,7 +2886,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused, |
13556 |
+@@ -2885,7 +2885,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused, |
13557 |
return NOTIFY_DONE; |
13558 |
} |
13559 |
|
13560 |
@@ -47053,24 +49974,6 @@ index 5920c99..ff2e4a5 100644 |
13561 |
}; |
13562 |
|
13563 |
static void |
13564 |
-diff --git a/drivers/net/wan/x25_asy.c b/drivers/net/wan/x25_asy.c |
13565 |
-index 5895f19..fa9fdfa 100644 |
13566 |
---- a/drivers/net/wan/x25_asy.c |
13567 |
-+++ b/drivers/net/wan/x25_asy.c |
13568 |
-@@ -122,8 +122,12 @@ static int x25_asy_change_mtu(struct net_device *dev, int newmtu) |
13569 |
- { |
13570 |
- struct x25_asy *sl = netdev_priv(dev); |
13571 |
- unsigned char *xbuff, *rbuff; |
13572 |
-- int len = 2 * newmtu; |
13573 |
-+ int len; |
13574 |
- |
13575 |
-+ if (newmtu > 65534) |
13576 |
-+ return -EINVAL; |
13577 |
-+ |
13578 |
-+ len = 2 * newmtu; |
13579 |
- xbuff = kmalloc(len + 4, GFP_ATOMIC); |
13580 |
- rbuff = kmalloc(len + 4, GFP_ATOMIC); |
13581 |
- |
13582 |
diff --git a/drivers/net/wan/z85230.c b/drivers/net/wan/z85230.c |
13583 |
index feacc3b..5bac0de 100644 |
13584 |
--- a/drivers/net/wan/z85230.c |
13585 |
@@ -47150,7 +50053,7 @@ index 64747d4..17c4cf3 100644 |
13586 |
|
13587 |
/* Only super-user can write RIDs */ |
13588 |
diff --git a/drivers/net/wireless/at76c50x-usb.c b/drivers/net/wireless/at76c50x-usb.c |
13589 |
-index 99b3bfa..9559372 100644 |
13590 |
+index d48776e..373d049 100644 |
13591 |
--- a/drivers/net/wireless/at76c50x-usb.c |
13592 |
+++ b/drivers/net/wireless/at76c50x-usb.c |
13593 |
@@ -353,7 +353,7 @@ static int at76_dfu_get_state(struct usb_device *udev, u8 *state) |
13594 |
@@ -47163,7 +50066,7 @@ index 99b3bfa..9559372 100644 |
13595 |
return msecs_to_jiffies((s->poll_timeout[2] << 16) |
13596 |
| (s->poll_timeout[1] << 8) |
13597 |
diff --git a/drivers/net/wireless/ath/ath10k/htc.c b/drivers/net/wireless/ath/ath10k/htc.c |
13598 |
-index 7f1bccd..ca2ffca 100644 |
13599 |
+index e493db4..2c1853a 100644 |
13600 |
--- a/drivers/net/wireless/ath/ath10k/htc.c |
13601 |
+++ b/drivers/net/wireless/ath/ath10k/htc.c |
13602 |
@@ -840,7 +840,10 @@ void ath10k_htc_stop(struct ath10k_htc *htc) |
13603 |
@@ -47463,7 +50366,7 @@ index dc1d20c..f7a4f06 100644 |
13604 |
|
13605 |
D_INFO("*** LOAD DRIVER ***\n"); |
13606 |
diff --git a/drivers/net/wireless/iwlwifi/dvm/debugfs.c b/drivers/net/wireless/iwlwifi/dvm/debugfs.c |
13607 |
-index d2fe259..0c4c682 100644 |
13608 |
+index 0ffb6ff..c0b7f0e 100644 |
13609 |
--- a/drivers/net/wireless/iwlwifi/dvm/debugfs.c |
13610 |
+++ b/drivers/net/wireless/iwlwifi/dvm/debugfs.c |
13611 |
@@ -188,7 +188,7 @@ static ssize_t iwl_dbgfs_sram_write(struct file *file, |
13612 |
@@ -47571,7 +50474,7 @@ index d2fe259..0c4c682 100644 |
13613 |
int rts; |
13614 |
|
13615 |
if (!priv->cfg->ht_params) |
13616 |
-@@ -2205,7 +2205,7 @@ static ssize_t iwl_dbgfs_echo_test_write(struct file *file, |
13617 |
+@@ -2204,7 +2204,7 @@ static ssize_t iwl_dbgfs_echo_test_write(struct file *file, |
13618 |
{ |
13619 |
struct iwl_priv *priv = file->private_data; |
13620 |
char buf[8]; |
13621 |
@@ -47580,7 +50483,7 @@ index d2fe259..0c4c682 100644 |
13622 |
|
13623 |
memset(buf, 0, sizeof(buf)); |
13624 |
buf_size = min(count, sizeof(buf) - 1); |
13625 |
-@@ -2239,7 +2239,7 @@ static ssize_t iwl_dbgfs_log_event_write(struct file *file, |
13626 |
+@@ -2238,7 +2238,7 @@ static ssize_t iwl_dbgfs_log_event_write(struct file *file, |
13627 |
struct iwl_priv *priv = file->private_data; |
13628 |
u32 event_log_flag; |
13629 |
char buf[8]; |
13630 |
@@ -47589,7 +50492,7 @@ index d2fe259..0c4c682 100644 |
13631 |
|
13632 |
/* check that the interface is up */ |
13633 |
if (!iwl_is_ready(priv)) |
13634 |
-@@ -2293,7 +2293,7 @@ static ssize_t iwl_dbgfs_calib_disabled_write(struct file *file, |
13635 |
+@@ -2292,7 +2292,7 @@ static ssize_t iwl_dbgfs_calib_disabled_write(struct file *file, |
13636 |
struct iwl_priv *priv = file->private_data; |
13637 |
char buf[8]; |
13638 |
u32 calib_disabled; |
13639 |
@@ -47598,32 +50501,11 @@ index d2fe259..0c4c682 100644 |
13640 |
|
13641 |
memset(buf, 0, sizeof(buf)); |
13642 |
buf_size = min(count, sizeof(buf) - 1); |
13643 |
-diff --git a/drivers/net/wireless/iwlwifi/dvm/main.c b/drivers/net/wireless/iwlwifi/dvm/main.c |
13644 |
-index 6a6df71..eb5c93a 100644 |
13645 |
---- a/drivers/net/wireless/iwlwifi/dvm/main.c |
13646 |
-+++ b/drivers/net/wireless/iwlwifi/dvm/main.c |
13647 |
-@@ -1127,7 +1127,7 @@ static void iwl_option_config(struct iwl_priv *priv) |
13648 |
- static int iwl_eeprom_init_hw_params(struct iwl_priv *priv) |
13649 |
- { |
13650 |
- struct iwl_nvm_data *data = priv->nvm_data; |
13651 |
-- char *debug_msg; |
13652 |
-+ static const char debug_msg[] = "Device SKU: 24GHz %s %s, 52GHz %s %s, 11.n %s %s\n"; |
13653 |
- |
13654 |
- if (data->sku_cap_11n_enable && |
13655 |
- !priv->cfg->ht_params) { |
13656 |
-@@ -1141,7 +1141,6 @@ static int iwl_eeprom_init_hw_params(struct iwl_priv *priv) |
13657 |
- return -EINVAL; |
13658 |
- } |
13659 |
- |
13660 |
-- debug_msg = "Device SKU: 24GHz %s %s, 52GHz %s %s, 11.n %s %s\n"; |
13661 |
- IWL_DEBUG_INFO(priv, debug_msg, |
13662 |
- data->sku_cap_band_24GHz_enable ? "" : "NOT", "enabled", |
13663 |
- data->sku_cap_band_52GHz_enable ? "" : "NOT", "enabled", |
13664 |
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c |
13665 |
-index 295b24c..cb4f823 100644 |
13666 |
+index 788085b..0bc852a 100644 |
13667 |
--- a/drivers/net/wireless/iwlwifi/pcie/trans.c |
13668 |
+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c |
13669 |
-@@ -1558,7 +1558,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file, |
13670 |
+@@ -1598,7 +1598,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file, |
13671 |
struct isr_statistics *isr_stats = &trans_pcie->isr_stats; |
13672 |
|
13673 |
char buf[8]; |
13674 |
@@ -47632,7 +50514,7 @@ index 295b24c..cb4f823 100644 |
13675 |
u32 reset_flag; |
13676 |
|
13677 |
memset(buf, 0, sizeof(buf)); |
13678 |
-@@ -1579,7 +1579,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file, |
13679 |
+@@ -1619,7 +1619,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file, |
13680 |
{ |
13681 |
struct iwl_trans *trans = file->private_data; |
13682 |
char buf[8]; |
13683 |
@@ -47642,10 +50524,10 @@ index 295b24c..cb4f823 100644 |
13684 |
|
13685 |
memset(buf, 0, sizeof(buf)); |
13686 |
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c |
13687 |
-index 9d7a52f..2729a99 100644 |
13688 |
+index a312c65..162b13a 100644 |
13689 |
--- a/drivers/net/wireless/mac80211_hwsim.c |
13690 |
+++ b/drivers/net/wireless/mac80211_hwsim.c |
13691 |
-@@ -2570,20 +2570,20 @@ static int __init init_mac80211_hwsim(void) |
13692 |
+@@ -2573,20 +2573,20 @@ static int __init init_mac80211_hwsim(void) |
13693 |
if (channels < 1) |
13694 |
return -EINVAL; |
13695 |
|
13696 |
@@ -47681,7 +50563,7 @@ index 9d7a52f..2729a99 100644 |
13697 |
spin_lock_init(&hwsim_radio_lock); |
13698 |
INIT_LIST_HEAD(&hwsim_radios); |
13699 |
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c |
13700 |
-index 39d22a1..4ec8612 100644 |
13701 |
+index d2a9a08..0cb175d 100644 |
13702 |
--- a/drivers/net/wireless/rndis_wlan.c |
13703 |
+++ b/drivers/net/wireless/rndis_wlan.c |
13704 |
@@ -1236,7 +1236,7 @@ static int set_rts_threshold(struct usbnet *usbdev, u32 rts_threshold) |
13705 |
@@ -47694,7 +50576,7 @@ index 39d22a1..4ec8612 100644 |
13706 |
|
13707 |
tmp = cpu_to_le32(rts_threshold); |
13708 |
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h |
13709 |
-index 5d45a1a..6f5f041 100644 |
13710 |
+index d13f25c..2573994 100644 |
13711 |
--- a/drivers/net/wireless/rt2x00/rt2x00.h |
13712 |
+++ b/drivers/net/wireless/rt2x00/rt2x00.h |
13713 |
@@ -375,7 +375,7 @@ struct rt2x00_intf { |
13714 |
@@ -47975,10 +50857,10 @@ index 61be1d9..dec05d7 100644 |
13715 |
}; |
13716 |
|
13717 |
diff --git a/drivers/parport/procfs.c b/drivers/parport/procfs.c |
13718 |
-index 92ed045..62d39bd7 100644 |
13719 |
+index 3b47080..6cd05dd 100644 |
13720 |
--- a/drivers/parport/procfs.c |
13721 |
+++ b/drivers/parport/procfs.c |
13722 |
-@@ -64,7 +64,7 @@ static int do_active_device(ctl_table *table, int write, |
13723 |
+@@ -64,7 +64,7 @@ static int do_active_device(struct ctl_table *table, int write, |
13724 |
|
13725 |
*ppos += len; |
13726 |
|
13727 |
@@ -47987,7 +50869,7 @@ index 92ed045..62d39bd7 100644 |
13728 |
} |
13729 |
|
13730 |
#ifdef CONFIG_PARPORT_1284 |
13731 |
-@@ -106,7 +106,7 @@ static int do_autoprobe(ctl_table *table, int write, |
13732 |
+@@ -106,7 +106,7 @@ static int do_autoprobe(struct ctl_table *table, int write, |
13733 |
|
13734 |
*ppos += len; |
13735 |
|
13736 |
@@ -48012,7 +50894,7 @@ index 8dcccff..35d701d 100644 |
13737 |
|
13738 |
return retval; |
13739 |
diff --git a/drivers/pci/hotplug/cpcihp_generic.c b/drivers/pci/hotplug/cpcihp_generic.c |
13740 |
-index 7536eef..52dc8fa 100644 |
13741 |
+index 04fcd78..39e83f1 100644 |
13742 |
--- a/drivers/pci/hotplug/cpcihp_generic.c |
13743 |
+++ b/drivers/pci/hotplug/cpcihp_generic.c |
13744 |
@@ -73,7 +73,6 @@ static u16 port; |
13745 |
@@ -48043,7 +50925,7 @@ index 7536eef..52dc8fa 100644 |
13746 |
|
13747 |
status = cpci_hp_register_controller(&generic_hpc); |
13748 |
diff --git a/drivers/pci/hotplug/cpcihp_zt5550.c b/drivers/pci/hotplug/cpcihp_zt5550.c |
13749 |
-index e8c4a7c..7046f5c 100644 |
13750 |
+index 6757b3e..d3bad62 100644 |
13751 |
--- a/drivers/pci/hotplug/cpcihp_zt5550.c |
13752 |
+++ b/drivers/pci/hotplug/cpcihp_zt5550.c |
13753 |
@@ -59,7 +59,6 @@ |
13754 |
@@ -48088,10 +50970,10 @@ index e8c4a7c..7046f5c 100644 |
13755 |
info("using ENUM# polling mode"); |
13756 |
} |
13757 |
diff --git a/drivers/pci/hotplug/cpqphp_nvram.c b/drivers/pci/hotplug/cpqphp_nvram.c |
13758 |
-index 76ba8a1..20ca857 100644 |
13759 |
+index 0968a9b..5a00edf 100644 |
13760 |
--- a/drivers/pci/hotplug/cpqphp_nvram.c |
13761 |
+++ b/drivers/pci/hotplug/cpqphp_nvram.c |
13762 |
-@@ -428,9 +428,13 @@ static u32 store_HRT (void __iomem *rom_start) |
13763 |
+@@ -427,9 +427,13 @@ static u32 store_HRT (void __iomem *rom_start) |
13764 |
|
13765 |
void compaq_nvram_init (void __iomem *rom_start) |
13766 |
{ |
13767 |
@@ -48106,10 +50988,10 @@ index 76ba8a1..20ca857 100644 |
13768 |
|
13769 |
/* initialize our int15 lock */ |
13770 |
diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c |
13771 |
-index cfa92a9..29539c5 100644 |
13772 |
+index 56d8486..f26113f 100644 |
13773 |
--- a/drivers/pci/hotplug/pci_hotplug_core.c |
13774 |
+++ b/drivers/pci/hotplug/pci_hotplug_core.c |
13775 |
-@@ -441,8 +441,10 @@ int __pci_hp_register(struct hotplug_slot *slot, struct pci_bus *bus, |
13776 |
+@@ -436,8 +436,10 @@ int __pci_hp_register(struct hotplug_slot *slot, struct pci_bus *bus, |
13777 |
return -EINVAL; |
13778 |
} |
13779 |
|
13780 |
@@ -48123,7 +51005,7 @@ index cfa92a9..29539c5 100644 |
13781 |
mutex_lock(&pci_hp_mutex); |
13782 |
/* |
13783 |
diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c |
13784 |
-index 0e0a2ff..29dff57 100644 |
13785 |
+index a2297db..7c7d161 100644 |
13786 |
--- a/drivers/pci/hotplug/pciehp_core.c |
13787 |
+++ b/drivers/pci/hotplug/pciehp_core.c |
13788 |
@@ -92,7 +92,7 @@ static int init_slot(struct controller *ctrl) |
13789 |
@@ -48136,10 +51018,10 @@ index 0e0a2ff..29dff57 100644 |
13790 |
int retval = -ENOMEM; |
13791 |
|
13792 |
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c |
13793 |
-index fb02fc2..83dc2c3 100644 |
13794 |
+index 13f3d30..363cb44 100644 |
13795 |
--- a/drivers/pci/msi.c |
13796 |
+++ b/drivers/pci/msi.c |
13797 |
-@@ -524,8 +524,8 @@ static int populate_msi_sysfs(struct pci_dev *pdev) |
13798 |
+@@ -523,8 +523,8 @@ static int populate_msi_sysfs(struct pci_dev *pdev) |
13799 |
{ |
13800 |
struct attribute **msi_attrs; |
13801 |
struct attribute *msi_attr; |
13802 |
@@ -48150,7 +51032,7 @@ index fb02fc2..83dc2c3 100644 |
13803 |
const struct attribute_group **msi_irq_groups; |
13804 |
struct msi_desc *entry; |
13805 |
int ret = -ENOMEM; |
13806 |
-@@ -589,7 +589,7 @@ error_attrs: |
13807 |
+@@ -584,7 +584,7 @@ error_attrs: |
13808 |
count = 0; |
13809 |
msi_attr = msi_attrs[count]; |
13810 |
while (msi_attr) { |
13811 |
@@ -48160,10 +51042,10 @@ index fb02fc2..83dc2c3 100644 |
13812 |
kfree(msi_dev_attr); |
13813 |
++count; |
13814 |
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c |
13815 |
-index 4e0acef..bd98e31 100644 |
13816 |
+index 9ff0a90..e819dda 100644 |
13817 |
--- a/drivers/pci/pci-sysfs.c |
13818 |
+++ b/drivers/pci/pci-sysfs.c |
13819 |
-@@ -1101,7 +1101,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine) |
13820 |
+@@ -1134,7 +1134,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine) |
13821 |
{ |
13822 |
/* allocate attribute structure, piggyback attribute name */ |
13823 |
int name_len = write_combine ? 13 : 10; |
13824 |
@@ -48172,7 +51054,7 @@ index 4e0acef..bd98e31 100644 |
13825 |
int retval; |
13826 |
|
13827 |
res_attr = kzalloc(sizeof(*res_attr) + name_len, GFP_ATOMIC); |
13828 |
-@@ -1286,7 +1286,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor |
13829 |
+@@ -1311,7 +1311,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor |
13830 |
static int pci_create_capabilities_sysfs(struct pci_dev *dev) |
13831 |
{ |
13832 |
int retval; |
13833 |
@@ -48181,7 +51063,7 @@ index 4e0acef..bd98e31 100644 |
13834 |
|
13835 |
/* If the device has VPD, try to expose it in sysfs. */ |
13836 |
if (dev->vpd) { |
13837 |
-@@ -1333,7 +1333,7 @@ int __must_check pci_create_sysfs_dev_files (struct pci_dev *pdev) |
13838 |
+@@ -1358,7 +1358,7 @@ int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev) |
13839 |
{ |
13840 |
int retval; |
13841 |
int rom_size = 0; |
13842 |
@@ -48191,7 +51073,7 @@ index 4e0acef..bd98e31 100644 |
13843 |
if (!sysfs_initialized) |
13844 |
return -EACCES; |
13845 |
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h |
13846 |
-index 6bd0822..35bc2b3 100644 |
13847 |
+index 0601890..dc15007 100644 |
13848 |
--- a/drivers/pci/pci.h |
13849 |
+++ b/drivers/pci/pci.h |
13850 |
@@ -91,7 +91,7 @@ struct pci_vpd_ops { |
13851 |
@@ -48221,12 +51103,12 @@ index e1e7026..d28dd33 100644 |
13852 |
#define ASPM_STATE_ALL (ASPM_STATE_L0S | ASPM_STATE_L1) |
13853 |
|
13854 |
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c |
13855 |
-index ef09f5f..49ac62f 100644 |
13856 |
+index e3cf8a2..be1baf0 100644 |
13857 |
--- a/drivers/pci/probe.c |
13858 |
+++ b/drivers/pci/probe.c |
13859 |
-@@ -175,7 +175,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, |
13860 |
+@@ -176,7 +176,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, |
13861 |
struct pci_bus_region region, inverted_region; |
13862 |
- bool bar_too_big = false, bar_disabled = false; |
13863 |
+ bool bar_too_big = false, bar_too_high = false, bar_invalid = false; |
13864 |
|
13865 |
- mask = type ? PCI_ROM_ADDRESS_MASK : ~0; |
13866 |
+ mask = type ? (u32)PCI_ROM_ADDRESS_MASK : ~0; |
13867 |
@@ -48234,7 +51116,7 @@ index ef09f5f..49ac62f 100644 |
13868 |
/* No printks while decoding is disabled! */ |
13869 |
if (!dev->mmio_always_on) { |
13870 |
diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c |
13871 |
-index 46d1378..30e452b 100644 |
13872 |
+index 3f155e7..0f4b1f0 100644 |
13873 |
--- a/drivers/pci/proc.c |
13874 |
+++ b/drivers/pci/proc.c |
13875 |
@@ -434,7 +434,16 @@ static const struct file_operations proc_bus_pci_dev_operations = { |
13876 |
@@ -48255,10 +51137,10 @@ index 46d1378..30e452b 100644 |
13877 |
&proc_bus_pci_dev_operations); |
13878 |
proc_initialized = 1; |
13879 |
diff --git a/drivers/platform/chrome/chromeos_laptop.c b/drivers/platform/chrome/chromeos_laptop.c |
13880 |
-index 7f3aad0..7d604bb 100644 |
13881 |
+index 7f1a2e2..bc4b405 100644 |
13882 |
--- a/drivers/platform/chrome/chromeos_laptop.c |
13883 |
+++ b/drivers/platform/chrome/chromeos_laptop.c |
13884 |
-@@ -406,7 +406,7 @@ static struct chromeos_laptop cr48 = { |
13885 |
+@@ -395,7 +395,7 @@ static struct chromeos_laptop cr48 = { |
13886 |
.callback = chromeos_laptop_dmi_matched, \ |
13887 |
.driver_data = (void *)&board_ |
13888 |
|
13889 |
@@ -48268,10 +51150,10 @@ index 7f3aad0..7d604bb 100644 |
13890 |
.ident = "Samsung Series 5 550", |
13891 |
.matches = { |
13892 |
diff --git a/drivers/platform/x86/alienware-wmi.c b/drivers/platform/x86/alienware-wmi.c |
13893 |
-index 541f951..4dfd598 100644 |
13894 |
+index 297b664..ab91e39 100644 |
13895 |
--- a/drivers/platform/x86/alienware-wmi.c |
13896 |
+++ b/drivers/platform/x86/alienware-wmi.c |
13897 |
-@@ -132,7 +132,7 @@ struct wmax_led_args { |
13898 |
+@@ -133,7 +133,7 @@ struct wmax_led_args { |
13899 |
} __packed; |
13900 |
|
13901 |
static struct platform_device *platform_device; |
13902 |
@@ -48280,7 +51162,7 @@ index 541f951..4dfd598 100644 |
13903 |
static struct attribute **zone_attrs; |
13904 |
static struct platform_zone *zone_data; |
13905 |
|
13906 |
-@@ -143,7 +143,7 @@ static struct platform_driver platform_driver = { |
13907 |
+@@ -144,7 +144,7 @@ static struct platform_driver platform_driver = { |
13908 |
} |
13909 |
}; |
13910 |
|
13911 |
@@ -48290,10 +51172,10 @@ index 541f951..4dfd598 100644 |
13912 |
}; |
13913 |
|
13914 |
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c |
13915 |
-index c5e082f..d6307a0 100644 |
13916 |
+index 3c6cced..12e0771 100644 |
13917 |
--- a/drivers/platform/x86/asus-wmi.c |
13918 |
+++ b/drivers/platform/x86/asus-wmi.c |
13919 |
-@@ -1595,6 +1595,10 @@ static int show_dsts(struct seq_file *m, void *data) |
13920 |
+@@ -1592,6 +1592,10 @@ static int show_dsts(struct seq_file *m, void *data) |
13921 |
int err; |
13922 |
u32 retval = -1; |
13923 |
|
13924 |
@@ -48304,7 +51186,7 @@ index c5e082f..d6307a0 100644 |
13925 |
err = asus_wmi_get_devstate(asus, asus->debug.dev_id, &retval); |
13926 |
|
13927 |
if (err < 0) |
13928 |
-@@ -1611,6 +1615,10 @@ static int show_devs(struct seq_file *m, void *data) |
13929 |
+@@ -1608,6 +1612,10 @@ static int show_devs(struct seq_file *m, void *data) |
13930 |
int err; |
13931 |
u32 retval = -1; |
13932 |
|
13933 |
@@ -48315,7 +51197,7 @@ index c5e082f..d6307a0 100644 |
13934 |
err = asus_wmi_set_devstate(asus->debug.dev_id, asus->debug.ctrl_param, |
13935 |
&retval); |
13936 |
|
13937 |
-@@ -1635,6 +1643,10 @@ static int show_call(struct seq_file *m, void *data) |
13938 |
+@@ -1632,6 +1640,10 @@ static int show_call(struct seq_file *m, void *data) |
13939 |
union acpi_object *obj; |
13940 |
acpi_status status; |
13941 |
|
13942 |
@@ -48423,7 +51305,7 @@ index 9c5a074..06c976a 100644 |
13943 |
static ssize_t sony_nc_smart_conn_store(struct device *dev, |
13944 |
struct device_attribute *attr, |
13945 |
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c |
13946 |
-index 15e61c1..40a39c7 100644 |
13947 |
+index d82f196..5458f34 100644 |
13948 |
--- a/drivers/platform/x86/thinkpad_acpi.c |
13949 |
+++ b/drivers/platform/x86/thinkpad_acpi.c |
13950 |
@@ -2094,7 +2094,7 @@ static int hotkey_mask_get(void) |
13951 |
@@ -48507,28 +51389,6 @@ index 438d4c7..ca8a2fb 100644 |
13952 |
+ |
13953 |
+ pax_close_kernel(); |
13954 |
} |
13955 |
-diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c |
13956 |
-index 01712cb..782e822 100644 |
13957 |
---- a/drivers/pnp/resource.c |
13958 |
-+++ b/drivers/pnp/resource.c |
13959 |
-@@ -360,7 +360,7 @@ int pnp_check_irq(struct pnp_dev *dev, struct resource *res) |
13960 |
- return 1; |
13961 |
- |
13962 |
- /* check if the resource is valid */ |
13963 |
-- if (*irq < 0 || *irq > 15) |
13964 |
-+ if (*irq > 15) |
13965 |
- return 0; |
13966 |
- |
13967 |
- /* check if the resource is reserved */ |
13968 |
-@@ -424,7 +424,7 @@ int pnp_check_dma(struct pnp_dev *dev, struct resource *res) |
13969 |
- return 1; |
13970 |
- |
13971 |
- /* check if the resource is valid */ |
13972 |
-- if (*dma < 0 || *dma == 4 || *dma > 7) |
13973 |
-+ if (*dma == 4 || *dma > 7) |
13974 |
- return 0; |
13975 |
- |
13976 |
- /* check if the resource is reserved */ |
13977 |
diff --git a/drivers/power/pda_power.c b/drivers/power/pda_power.c |
13978 |
index 0c52e2a..3421ab7 100644 |
13979 |
--- a/drivers/power/pda_power.c |
13980 |
@@ -48574,7 +51434,7 @@ index cc439fd..8fa30df 100644 |
13981 |
|
13982 |
#endif /* CONFIG_SYSFS */ |
13983 |
diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c |
13984 |
-index 2660664..75fcb04 100644 |
13985 |
+index 5a5a24e..f7a3754 100644 |
13986 |
--- a/drivers/power/power_supply_core.c |
13987 |
+++ b/drivers/power/power_supply_core.c |
13988 |
@@ -28,7 +28,10 @@ EXPORT_SYMBOL_GPL(power_supply_class); |
13989 |
@@ -48589,7 +51449,7 @@ index 2660664..75fcb04 100644 |
13990 |
|
13991 |
static bool __power_supply_is_supplied_by(struct power_supply *supplier, |
13992 |
struct power_supply *supply) |
13993 |
-@@ -628,7 +631,7 @@ static int __init power_supply_class_init(void) |
13994 |
+@@ -639,7 +642,7 @@ static int __init power_supply_class_init(void) |
13995 |
return PTR_ERR(power_supply_class); |
13996 |
|
13997 |
power_supply_class->dev_uevent = power_supply_uevent; |
13998 |
@@ -48811,6 +51671,18 @@ index 84419af..268ede8 100644 |
13999 |
power_zone->zone_dev_attrs[count++] = |
14000 |
&dev_attr_energy_uj.attr; |
14001 |
} |
14002 |
+diff --git a/drivers/ptp/Kconfig b/drivers/ptp/Kconfig |
14003 |
+index ee3de34..bec7285 100644 |
14004 |
+--- a/drivers/ptp/Kconfig |
14005 |
++++ b/drivers/ptp/Kconfig |
14006 |
+@@ -8,7 +8,6 @@ config PTP_1588_CLOCK |
14007 |
+ tristate "PTP clock support" |
14008 |
+ depends on NET |
14009 |
+ select PPS |
14010 |
+- select NET_PTP_CLASSIFY |
14011 |
+ help |
14012 |
+ The IEEE 1588 standard defines a method to precisely |
14013 |
+ synchronize distributed clocks over Ethernet networks. The |
14014 |
diff --git a/drivers/ptp/ptp_private.h b/drivers/ptp/ptp_private.h |
14015 |
index 9c5d414..c7900ce 100644 |
14016 |
--- a/drivers/ptp/ptp_private.h |
14017 |
@@ -48838,10 +51710,10 @@ index 302e626..12579af 100644 |
14018 |
da->attr.name = info->pin_config[i].name; |
14019 |
da->attr.mode = 0644; |
14020 |
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c |
14021 |
-index 9a09f3c..450b523 100644 |
14022 |
+index 4c1f999..11078c9 100644 |
14023 |
--- a/drivers/regulator/core.c |
14024 |
+++ b/drivers/regulator/core.c |
14025 |
-@@ -3380,7 +3380,7 @@ regulator_register(const struct regulator_desc *regulator_desc, |
14026 |
+@@ -3391,7 +3391,7 @@ regulator_register(const struct regulator_desc *regulator_desc, |
14027 |
{ |
14028 |
const struct regulation_constraints *constraints = NULL; |
14029 |
const struct regulator_init_data *init_data; |
14030 |
@@ -48850,8 +51722,8 @@ index 9a09f3c..450b523 100644 |
14031 |
struct regulator_dev *rdev; |
14032 |
struct device *dev; |
14033 |
int ret, i; |
14034 |
-@@ -3450,7 +3450,7 @@ regulator_register(const struct regulator_desc *regulator_desc, |
14035 |
- rdev->dev.of_node = config->of_node; |
14036 |
+@@ -3461,7 +3461,7 @@ regulator_register(const struct regulator_desc *regulator_desc, |
14037 |
+ rdev->dev.of_node = of_node_get(config->of_node); |
14038 |
rdev->dev.parent = dev; |
14039 |
dev_set_name(&rdev->dev, "regulator.%d", |
14040 |
- atomic_inc_return(®ulator_no) - 1); |
14041 |
@@ -48915,10 +51787,10 @@ index f374fa5..26f0683 100644 |
14042 |
mc13xxx_data = mc13xxx_parse_regulators_dt(pdev, mc13892_regulators, |
14043 |
ARRAY_SIZE(mc13892_regulators)); |
14044 |
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c |
14045 |
-index 0963c93..ea29cce 100644 |
14046 |
+index b0e4a3e..e5dc11e 100644 |
14047 |
--- a/drivers/rtc/rtc-cmos.c |
14048 |
+++ b/drivers/rtc/rtc-cmos.c |
14049 |
-@@ -777,7 +777,9 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq) |
14050 |
+@@ -789,7 +789,9 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq) |
14051 |
hpet_rtc_timer_init(); |
14052 |
|
14053 |
/* export at least the first block of NVRAM */ |
14054 |
@@ -48978,47 +51850,6 @@ index 11880c1..b823aa4 100644 |
14055 |
|
14056 |
ret = sysfs_create_bin_file(&pdev->dev.kobj, &m48t59_nvram_attr); |
14057 |
if (ret) |
14058 |
-diff --git a/drivers/scsi/aic7xxx/aic79xx_pci.c b/drivers/scsi/aic7xxx/aic79xx_pci.c |
14059 |
-index 14b5f8d..cc9bd26 100644 |
14060 |
---- a/drivers/scsi/aic7xxx/aic79xx_pci.c |
14061 |
-+++ b/drivers/scsi/aic7xxx/aic79xx_pci.c |
14062 |
-@@ -827,7 +827,7 @@ ahd_pci_intr(struct ahd_softc *ahd) |
14063 |
- for (bit = 0; bit < 8; bit++) { |
14064 |
- |
14065 |
- if ((pci_status[i] & (0x1 << bit)) != 0) { |
14066 |
-- static const char *s; |
14067 |
-+ const char *s; |
14068 |
- |
14069 |
- s = pci_status_strings[bit]; |
14070 |
- if (i == 7/*TARG*/ && bit == 3) |
14071 |
-@@ -887,23 +887,15 @@ ahd_pci_split_intr(struct ahd_softc *ahd, u_int intstat) |
14072 |
- |
14073 |
- for (bit = 0; bit < 8; bit++) { |
14074 |
- |
14075 |
-- if ((split_status[i] & (0x1 << bit)) != 0) { |
14076 |
-- static const char *s; |
14077 |
-- |
14078 |
-- s = split_status_strings[bit]; |
14079 |
-- printk(s, ahd_name(ahd), |
14080 |
-+ if ((split_status[i] & (0x1 << bit)) != 0) |
14081 |
-+ printk(split_status_strings[bit], ahd_name(ahd), |
14082 |
- split_status_source[i]); |
14083 |
-- } |
14084 |
- |
14085 |
- if (i > 1) |
14086 |
- continue; |
14087 |
- |
14088 |
-- if ((sg_split_status[i] & (0x1 << bit)) != 0) { |
14089 |
-- static const char *s; |
14090 |
-- |
14091 |
-- s = split_status_strings[bit]; |
14092 |
-- printk(s, ahd_name(ahd), "SG"); |
14093 |
-- } |
14094 |
-+ if ((sg_split_status[i] & (0x1 << bit)) != 0) |
14095 |
-+ printk(split_status_strings[bit], ahd_name(ahd), "SG"); |
14096 |
- } |
14097 |
- } |
14098 |
- /* |
14099 |
diff --git a/drivers/scsi/bfa/bfa_fcpim.h b/drivers/scsi/bfa/bfa_fcpim.h |
14100 |
index e693af6..2e525b6 100644 |
14101 |
--- a/drivers/scsi/bfa/bfa_fcpim.h |
14102 |
@@ -49214,10 +52045,10 @@ index 3cbb57a..95e47a3 100644 |
14103 |
|
14104 |
/* These three are default values which can be overridden */ |
14105 |
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c |
14106 |
-index fda6cf1..7a6b5d8 100644 |
14107 |
+index 31184b3..cc44bbf 100644 |
14108 |
--- a/drivers/scsi/hpsa.c |
14109 |
+++ b/drivers/scsi/hpsa.c |
14110 |
-@@ -699,10 +699,10 @@ static inline u32 next_command(struct ctlr_info *h, u8 q) |
14111 |
+@@ -701,10 +701,10 @@ static inline u32 next_command(struct ctlr_info *h, u8 q) |
14112 |
unsigned long flags; |
14113 |
|
14114 |
if (h->transMethod & CFGTBL_Trans_io_accel1) |
14115 |
@@ -49230,7 +52061,7 @@ index fda6cf1..7a6b5d8 100644 |
14116 |
|
14117 |
if ((rq->head[rq->current_entry] & 1) == rq->wraparound) { |
14118 |
a = rq->head[rq->current_entry]; |
14119 |
-@@ -5460,7 +5460,7 @@ static void start_io(struct ctlr_info *h) |
14120 |
+@@ -5455,7 +5455,7 @@ static void start_io(struct ctlr_info *h, unsigned long *flags) |
14121 |
while (!list_empty(&h->reqQ)) { |
14122 |
c = list_entry(h->reqQ.next, struct CommandList, list); |
14123 |
/* can't do anything if fifo is full */ |
14124 |
@@ -49239,16 +52070,16 @@ index fda6cf1..7a6b5d8 100644 |
14125 |
h->fifo_recently_full = 1; |
14126 |
dev_warn(&h->pdev->dev, "fifo full\n"); |
14127 |
break; |
14128 |
-@@ -5484,7 +5484,7 @@ static void start_io(struct ctlr_info *h) |
14129 |
+@@ -5477,7 +5477,7 @@ static void start_io(struct ctlr_info *h, unsigned long *flags) |
14130 |
|
14131 |
/* Tell the controller execute command */ |
14132 |
- spin_unlock_irqrestore(&h->lock, flags); |
14133 |
+ spin_unlock_irqrestore(&h->lock, *flags); |
14134 |
- h->access.submit_command(h, c); |
14135 |
+ h->access->submit_command(h, c); |
14136 |
- spin_lock_irqsave(&h->lock, flags); |
14137 |
+ spin_lock_irqsave(&h->lock, *flags); |
14138 |
} |
14139 |
- spin_unlock_irqrestore(&h->lock, flags); |
14140 |
-@@ -5492,17 +5492,17 @@ static void start_io(struct ctlr_info *h) |
14141 |
+ } |
14142 |
+@@ -5493,17 +5493,17 @@ static void lock_and_start_io(struct ctlr_info *h) |
14143 |
|
14144 |
static inline unsigned long get_next_completion(struct ctlr_info *h, u8 q) |
14145 |
{ |
14146 |
@@ -49269,7 +52100,7 @@ index fda6cf1..7a6b5d8 100644 |
14147 |
(h->interrupts_enabled == 0); |
14148 |
} |
14149 |
|
14150 |
-@@ -6456,7 +6456,7 @@ static int hpsa_pci_init(struct ctlr_info *h) |
14151 |
+@@ -6459,7 +6459,7 @@ static int hpsa_pci_init(struct ctlr_info *h) |
14152 |
if (prod_index < 0) |
14153 |
return -ENODEV; |
14154 |
h->product_name = products[prod_index].product_name; |
14155 |
@@ -49278,16 +52109,16 @@ index fda6cf1..7a6b5d8 100644 |
14156 |
|
14157 |
pci_disable_link_state(h->pdev, PCIE_LINK_STATE_L0S | |
14158 |
PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM); |
14159 |
-@@ -6735,7 +6735,7 @@ static void controller_lockup_detected(struct ctlr_info *h) |
14160 |
- { |
14161 |
+@@ -6781,7 +6781,7 @@ static void controller_lockup_detected(struct ctlr_info *h) |
14162 |
unsigned long flags; |
14163 |
+ u32 lockup_detected; |
14164 |
|
14165 |
- h->access.set_intr_mask(h, HPSA_INTR_OFF); |
14166 |
+ h->access->set_intr_mask(h, HPSA_INTR_OFF); |
14167 |
spin_lock_irqsave(&h->lock, flags); |
14168 |
- h->lockup_detected = readl(h->vaddr + SA5_SCRATCHPAD_OFFSET); |
14169 |
- spin_unlock_irqrestore(&h->lock, flags); |
14170 |
-@@ -6963,7 +6963,7 @@ reinit_after_soft_reset: |
14171 |
+ lockup_detected = readl(h->vaddr + SA5_SCRATCHPAD_OFFSET); |
14172 |
+ if (!lockup_detected) { |
14173 |
+@@ -7022,7 +7022,7 @@ reinit_after_soft_reset: |
14174 |
} |
14175 |
|
14176 |
/* make sure the board interrupts are off */ |
14177 |
@@ -49296,7 +52127,7 @@ index fda6cf1..7a6b5d8 100644 |
14178 |
|
14179 |
if (hpsa_request_irq(h, do_hpsa_intr_msi, do_hpsa_intr_intx)) |
14180 |
goto clean2; |
14181 |
-@@ -6998,7 +6998,7 @@ reinit_after_soft_reset: |
14182 |
+@@ -7057,7 +7057,7 @@ reinit_after_soft_reset: |
14183 |
* fake ones to scoop up any residual completions. |
14184 |
*/ |
14185 |
spin_lock_irqsave(&h->lock, flags); |
14186 |
@@ -49305,7 +52136,7 @@ index fda6cf1..7a6b5d8 100644 |
14187 |
spin_unlock_irqrestore(&h->lock, flags); |
14188 |
free_irqs(h); |
14189 |
rc = hpsa_request_irq(h, hpsa_msix_discard_completions, |
14190 |
-@@ -7017,9 +7017,9 @@ reinit_after_soft_reset: |
14191 |
+@@ -7076,9 +7076,9 @@ reinit_after_soft_reset: |
14192 |
dev_info(&h->pdev->dev, "Board READY.\n"); |
14193 |
dev_info(&h->pdev->dev, |
14194 |
"Waiting for stale completions to drain.\n"); |
14195 |
@@ -49317,7 +52148,7 @@ index fda6cf1..7a6b5d8 100644 |
14196 |
|
14197 |
rc = controller_reset_failed(h->cfgtable); |
14198 |
if (rc) |
14199 |
-@@ -7045,7 +7045,7 @@ reinit_after_soft_reset: |
14200 |
+@@ -7104,7 +7104,7 @@ reinit_after_soft_reset: |
14201 |
h->drv_req_rescan = 0; |
14202 |
|
14203 |
/* Turn the interrupts on so we can service requests */ |
14204 |
@@ -49326,7 +52157,7 @@ index fda6cf1..7a6b5d8 100644 |
14205 |
|
14206 |
hpsa_hba_inquiry(h); |
14207 |
hpsa_register_scsi(h); /* hook ourselves into SCSI subsystem */ |
14208 |
-@@ -7114,7 +7114,7 @@ static void hpsa_shutdown(struct pci_dev *pdev) |
14209 |
+@@ -7169,7 +7169,7 @@ static void hpsa_shutdown(struct pci_dev *pdev) |
14210 |
* To write all data in the battery backed cache to disks |
14211 |
*/ |
14212 |
hpsa_flush_cache(h); |
14213 |
@@ -49335,7 +52166,7 @@ index fda6cf1..7a6b5d8 100644 |
14214 |
hpsa_free_irqs_and_disable_msix(h); |
14215 |
} |
14216 |
|
14217 |
-@@ -7232,7 +7232,7 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) |
14218 |
+@@ -7287,7 +7287,7 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) |
14219 |
CFGTBL_Trans_enable_directed_msix | |
14220 |
(trans_support & (CFGTBL_Trans_io_accel1 | |
14221 |
CFGTBL_Trans_io_accel2)); |
14222 |
@@ -49344,7 +52175,16 @@ index fda6cf1..7a6b5d8 100644 |
14223 |
|
14224 |
/* This is a bit complicated. There are 8 registers on |
14225 |
* the controller which we write to to tell it 8 different |
14226 |
-@@ -7297,12 +7297,12 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) |
14227 |
+@@ -7329,7 +7329,7 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) |
14228 |
+ * perform the superfluous readl() after each command submission. |
14229 |
+ */ |
14230 |
+ if (trans_support & (CFGTBL_Trans_io_accel1 | CFGTBL_Trans_io_accel2)) |
14231 |
+- access = SA5_performant_access_no_read; |
14232 |
++ access = &SA5_performant_access_no_read; |
14233 |
+ |
14234 |
+ /* Controller spec: zero out this buffer. */ |
14235 |
+ for (i = 0; i < h->nreply_queues; i++) |
14236 |
+@@ -7359,12 +7359,12 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support) |
14237 |
* enable outbound interrupt coalescing in accelerator mode; |
14238 |
*/ |
14239 |
if (trans_support & CFGTBL_Trans_io_accel1) { |
14240 |
@@ -49360,10 +52200,10 @@ index fda6cf1..7a6b5d8 100644 |
14241 |
writel(4, &h->cfgtable->HostWrite.CoalIntCount); |
14242 |
} |
14243 |
diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h |
14244 |
-index 44235a2..962e91b 100644 |
14245 |
+index 24472ce..8782caf 100644 |
14246 |
--- a/drivers/scsi/hpsa.h |
14247 |
+++ b/drivers/scsi/hpsa.h |
14248 |
-@@ -128,7 +128,7 @@ struct ctlr_info { |
14249 |
+@@ -127,7 +127,7 @@ struct ctlr_info { |
14250 |
unsigned int msix_vector; |
14251 |
unsigned int msi_vector; |
14252 |
int intr_mode; /* either PERF_MODE_INT or SIMPLE_MODE_INT */ |
14253 |
@@ -49372,7 +52212,7 @@ index 44235a2..962e91b 100644 |
14254 |
char hba_mode_enabled; |
14255 |
|
14256 |
/* queue and queue Info */ |
14257 |
-@@ -541,35 +541,35 @@ static unsigned long SA5_ioaccel_mode1_completed(struct ctlr_info *h, u8 q) |
14258 |
+@@ -536,43 +536,43 @@ static unsigned long SA5_ioaccel_mode1_completed(struct ctlr_info *h, u8 q) |
14259 |
} |
14260 |
|
14261 |
static struct access_method SA5_access = { |
14262 |
@@ -49427,6 +52267,19 @@ index 44235a2..962e91b 100644 |
14263 |
+ .command_completed = SA5_performant_completed, |
14264 |
}; |
14265 |
|
14266 |
+ static struct access_method SA5_performant_access_no_read = { |
14267 |
+- SA5_submit_command_no_read, |
14268 |
+- SA5_performant_intr_mask, |
14269 |
+- SA5_fifo_full, |
14270 |
+- SA5_performant_intr_pending, |
14271 |
+- SA5_performant_completed, |
14272 |
++ .submit_command = SA5_submit_command_no_read, |
14273 |
++ .set_intr_mask = SA5_performant_intr_mask, |
14274 |
++ .fifo_full = SA5_fifo_full, |
14275 |
++ .intr_pending = SA5_performant_intr_pending, |
14276 |
++ .command_completed = SA5_performant_completed, |
14277 |
+ }; |
14278 |
+ |
14279 |
struct board_type { |
14280 |
diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c |
14281 |
index 1b3a094..068e683 100644 |
14282 |
@@ -49587,7 +52440,7 @@ index 766098a..1c6c971 100644 |
14283 |
.qc_issue = sas_ata_qc_issue, |
14284 |
.qc_fill_rtf = sas_ata_qc_fill_rtf, |
14285 |
diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h |
14286 |
-index 94a3caf..a118dec 100644 |
14287 |
+index 434e903..5a4a79b 100644 |
14288 |
--- a/drivers/scsi/lpfc/lpfc.h |
14289 |
+++ b/drivers/scsi/lpfc/lpfc.h |
14290 |
@@ -430,7 +430,7 @@ struct lpfc_vport { |
14291 |
@@ -49599,7 +52452,7 @@ index 94a3caf..a118dec 100644 |
14292 |
#endif |
14293 |
uint8_t stat_data_enabled; |
14294 |
uint8_t stat_data_blocked; |
14295 |
-@@ -879,8 +879,8 @@ struct lpfc_hba { |
14296 |
+@@ -880,8 +880,8 @@ struct lpfc_hba { |
14297 |
struct timer_list fabric_block_timer; |
14298 |
unsigned long bit_flags; |
14299 |
#define FABRIC_COMANDS_BLOCKED 0 |
14300 |
@@ -49610,7 +52463,7 @@ index 94a3caf..a118dec 100644 |
14301 |
unsigned long last_rsrc_error_time; |
14302 |
unsigned long last_ramp_down_time; |
14303 |
#ifdef CONFIG_SCSI_LPFC_DEBUG_FS |
14304 |
-@@ -915,7 +915,7 @@ struct lpfc_hba { |
14305 |
+@@ -916,7 +916,7 @@ struct lpfc_hba { |
14306 |
|
14307 |
struct dentry *debug_slow_ring_trc; |
14308 |
struct lpfc_debugfs_trc *slow_ring_trc; |
14309 |
@@ -49620,7 +52473,7 @@ index 94a3caf..a118dec 100644 |
14310 |
struct dentry *idiag_root; |
14311 |
struct dentry *idiag_pci_cfg; |
14312 |
diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c |
14313 |
-index 828c08e..e3378e0 100644 |
14314 |
+index b0aedce..89c6ca6 100644 |
14315 |
--- a/drivers/scsi/lpfc/lpfc_debugfs.c |
14316 |
+++ b/drivers/scsi/lpfc/lpfc_debugfs.c |
14317 |
@@ -106,7 +106,7 @@ MODULE_PARM_DESC(lpfc_debugfs_mask_disc_trc, |
14318 |
@@ -49703,10 +52556,10 @@ index 828c08e..e3378e0 100644 |
14319 |
snprintf(name, sizeof(name), "discovery_trace"); |
14320 |
vport->debug_disc_trc = |
14321 |
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c |
14322 |
-index 635eeb3..038aef6 100644 |
14323 |
+index 06f9a5b..82812092 100644 |
14324 |
--- a/drivers/scsi/lpfc/lpfc_init.c |
14325 |
+++ b/drivers/scsi/lpfc/lpfc_init.c |
14326 |
-@@ -11194,8 +11194,10 @@ lpfc_init(void) |
14327 |
+@@ -11296,8 +11296,10 @@ lpfc_init(void) |
14328 |
"misc_register returned with status %d", error); |
14329 |
|
14330 |
if (lpfc_enable_npiv) { |
14331 |
@@ -49720,7 +52573,7 @@ index 635eeb3..038aef6 100644 |
14332 |
lpfc_transport_template = |
14333 |
fc_attach_transport(&lpfc_transport_functions); |
14334 |
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c |
14335 |
-index 462453e..c0023a6 100644 |
14336 |
+index 2df11da..e660a2c 100644 |
14337 |
--- a/drivers/scsi/lpfc/lpfc_scsi.c |
14338 |
+++ b/drivers/scsi/lpfc/lpfc_scsi.c |
14339 |
@@ -382,7 +382,7 @@ lpfc_rampdown_queue_depth(struct lpfc_hba *phba) |
14340 |
@@ -49755,7 +52608,7 @@ index 462453e..c0023a6 100644 |
14341 |
|
14342 |
/** |
14343 |
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c |
14344 |
-index 6fd7d40..b444223 100644 |
14345 |
+index 5055f92..376cd98 100644 |
14346 |
--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c |
14347 |
+++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c |
14348 |
@@ -1557,7 +1557,7 @@ _scsih_get_resync(struct device *dev) |
14349 |
@@ -49776,7 +52629,7 @@ index 6fd7d40..b444223 100644 |
14350 |
unsigned long flags; |
14351 |
Mpi2RaidVolPage0_t vol_pg0; |
14352 |
Mpi2ConfigReply_t mpi_reply; |
14353 |
-@@ -6637,7 +6637,7 @@ _scsih_sas_ir_operation_status_event(struct MPT2SAS_ADAPTER *ioc, |
14354 |
+@@ -6631,7 +6631,7 @@ _scsih_sas_ir_operation_status_event(struct MPT2SAS_ADAPTER *ioc, |
14355 |
struct fw_event_work *fw_event) |
14356 |
{ |
14357 |
Mpi2EventDataIrOperationStatus_t *event_data = fw_event->event_data; |
14358 |
@@ -49785,7 +52638,7 @@ index 6fd7d40..b444223 100644 |
14359 |
unsigned long flags; |
14360 |
u16 handle; |
14361 |
|
14362 |
-@@ -7108,7 +7108,7 @@ _scsih_scan_for_devices_after_reset(struct MPT2SAS_ADAPTER *ioc) |
14363 |
+@@ -7102,7 +7102,7 @@ _scsih_scan_for_devices_after_reset(struct MPT2SAS_ADAPTER *ioc) |
14364 |
u64 sas_address; |
14365 |
struct _sas_device *sas_device; |
14366 |
struct _sas_node *expander_device; |
14367 |
@@ -49902,7 +52755,7 @@ index e1d150f..6c6df44 100644 |
14368 |
/* To indicate add/delete/modify during CCN */ |
14369 |
u8 change_detected; |
14370 |
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c |
14371 |
-index 07befcf..c0bff13 100644 |
14372 |
+index 16fe519..3b1ec82 100644 |
14373 |
--- a/drivers/scsi/qla2xxx/qla_attr.c |
14374 |
+++ b/drivers/scsi/qla2xxx/qla_attr.c |
14375 |
@@ -2188,7 +2188,7 @@ qla24xx_vport_disable(struct fc_vport *fc_vport, bool disable) |
14376 |
@@ -49924,10 +52777,10 @@ index 07befcf..c0bff13 100644 |
14377 |
.show_host_node_name = 1, |
14378 |
.show_host_port_name = 1, |
14379 |
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h |
14380 |
-index e665e81..16e84e6 100644 |
14381 |
+index d48dea8..0845f78 100644 |
14382 |
--- a/drivers/scsi/qla2xxx/qla_gbl.h |
14383 |
+++ b/drivers/scsi/qla2xxx/qla_gbl.h |
14384 |
-@@ -557,8 +557,8 @@ extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *); |
14385 |
+@@ -569,8 +569,8 @@ extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *); |
14386 |
struct device_attribute; |
14387 |
extern struct device_attribute *qla2x00_host_attrs[]; |
14388 |
struct fc_function_template; |
14389 |
@@ -49939,10 +52792,10 @@ index e665e81..16e84e6 100644 |
14390 |
extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *, bool); |
14391 |
extern void qla2x00_init_host_attr(scsi_qla_host_t *); |
14392 |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c |
14393 |
-index 19e99cc..b3c0b7b 100644 |
14394 |
+index d96bfb5..d7afe90 100644 |
14395 |
--- a/drivers/scsi/qla2xxx/qla_os.c |
14396 |
+++ b/drivers/scsi/qla2xxx/qla_os.c |
14397 |
-@@ -1493,8 +1493,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha) |
14398 |
+@@ -1490,8 +1490,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha) |
14399 |
!pci_set_consistent_dma_mask(ha->pdev, DMA_BIT_MASK(64))) { |
14400 |
/* Ok, a 64bit DMA mask is applicable. */ |
14401 |
ha->flags.enable_64bit_addressing = 1; |
14402 |
@@ -49956,7 +52809,7 @@ index 19e99cc..b3c0b7b 100644 |
14403 |
} |
14404 |
} |
14405 |
diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h |
14406 |
-index 73a5022..4e0797c 100644 |
14407 |
+index 8f6d0fb..1b21097 100644 |
14408 |
--- a/drivers/scsi/qla4xxx/ql4_def.h |
14409 |
+++ b/drivers/scsi/qla4xxx/ql4_def.h |
14410 |
@@ -305,7 +305,7 @@ struct ddb_entry { |
14411 |
@@ -49969,10 +52822,10 @@ index 73a5022..4e0797c 100644 |
14412 |
uint32_t default_time2wait; /* Default Min time between |
14413 |
* relogins (+aens) */ |
14414 |
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c |
14415 |
-index 459b9f7..2930a68 100644 |
14416 |
+index 3202063..f9f0ff6 100644 |
14417 |
--- a/drivers/scsi/qla4xxx/ql4_os.c |
14418 |
+++ b/drivers/scsi/qla4xxx/ql4_os.c |
14419 |
-@@ -4499,12 +4499,12 @@ static void qla4xxx_check_relogin_flash_ddb(struct iscsi_cls_session *cls_sess) |
14420 |
+@@ -4494,12 +4494,12 @@ static void qla4xxx_check_relogin_flash_ddb(struct iscsi_cls_session *cls_sess) |
14421 |
*/ |
14422 |
if (!iscsi_is_session_online(cls_sess)) { |
14423 |
/* Reset retry relogin timer */ |
14424 |
@@ -49987,7 +52840,7 @@ index 459b9f7..2930a68 100644 |
14425 |
ddb_entry->default_time2wait + 4)); |
14426 |
set_bit(DPC_RELOGIN_DEVICE, &ha->dpc_flags); |
14427 |
atomic_set(&ddb_entry->retry_relogin_timer, |
14428 |
-@@ -6609,7 +6609,7 @@ static void qla4xxx_setup_flash_ddb_entry(struct scsi_qla_host *ha, |
14429 |
+@@ -6607,7 +6607,7 @@ static void qla4xxx_setup_flash_ddb_entry(struct scsi_qla_host *ha, |
14430 |
|
14431 |
atomic_set(&ddb_entry->retry_relogin_timer, INVALID_ENTRY); |
14432 |
atomic_set(&ddb_entry->relogin_timer, 0); |
14433 |
@@ -50010,10 +52863,10 @@ index 88d46fe..7351be5 100644 |
14434 |
/* check if the device is still usable */ |
14435 |
if (unlikely(cmd->device->sdev_state == SDEV_DEL)) { |
14436 |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c |
14437 |
-index d99ab3b..c4ccdef 100644 |
14438 |
+index 3f50dfc..86af487 100644 |
14439 |
--- a/drivers/scsi/scsi_lib.c |
14440 |
+++ b/drivers/scsi/scsi_lib.c |
14441 |
-@@ -1472,7 +1472,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q) |
14442 |
+@@ -1423,7 +1423,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q) |
14443 |
shost = sdev->host; |
14444 |
scsi_init_cmd_errh(cmd); |
14445 |
cmd->result = DID_NO_CONNECT << 16; |
14446 |
@@ -50022,7 +52875,7 @@ index d99ab3b..c4ccdef 100644 |
14447 |
|
14448 |
/* |
14449 |
* SCSI request completion path will do scsi_device_unbusy(), |
14450 |
-@@ -1498,9 +1498,9 @@ static void scsi_softirq_done(struct request *rq) |
14451 |
+@@ -1449,9 +1449,9 @@ static void scsi_softirq_done(struct request *rq) |
14452 |
|
14453 |
INIT_LIST_HEAD(&cmd->eh_entry); |
14454 |
|
14455 |
@@ -50061,7 +52914,7 @@ index e51add0..1e06a96 100644 |
14456 |
/* |
14457 |
* TODO: need to fixup sg_tablesize, max_segment_size, |
14458 |
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c |
14459 |
-index f80908f..22aba76 100644 |
14460 |
+index 521f583..6b15966 100644 |
14461 |
--- a/drivers/scsi/scsi_transport_fc.c |
14462 |
+++ b/drivers/scsi/scsi_transport_fc.c |
14463 |
@@ -498,7 +498,7 @@ static DECLARE_TRANSPORT_CLASS(fc_vport_class, |
14464 |
@@ -50163,10 +53016,10 @@ index 13e8983..d306a68 100644 |
14465 |
|
14466 |
transport_setup_device(&rport->dev); |
14467 |
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c |
14468 |
-index bffbd4b..cb1b68a 100644 |
14469 |
+index 6825eda..be470c4 100644 |
14470 |
--- a/drivers/scsi/sd.c |
14471 |
+++ b/drivers/scsi/sd.c |
14472 |
-@@ -2971,7 +2971,7 @@ static int sd_probe(struct device *dev) |
14473 |
+@@ -2954,7 +2954,7 @@ static int sd_probe(struct device *dev) |
14474 |
sdkp->disk = gd; |
14475 |
sdkp->index = index; |
14476 |
atomic_set(&sdkp->openers, 0); |
14477 |
@@ -50176,7 +53029,7 @@ index bffbd4b..cb1b68a 100644 |
14478 |
if (!sdp->request_queue->rq_timeout) { |
14479 |
if (sdp->type != TYPE_MOD) |
14480 |
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c |
14481 |
-index df5e961..df6b97f 100644 |
14482 |
+index 53268aab..17c2764 100644 |
14483 |
--- a/drivers/scsi/sg.c |
14484 |
+++ b/drivers/scsi/sg.c |
14485 |
@@ -1102,7 +1102,7 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg) |
14486 |
@@ -50189,7 +53042,7 @@ index df5e961..df6b97f 100644 |
14487 |
return blk_trace_startstop(sdp->device->request_queue, 1); |
14488 |
case BLKTRACESTOP: |
14489 |
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c |
14490 |
-index 939edf4..3f50423 100644 |
14491 |
+index d4f9670..d37b662 100644 |
14492 |
--- a/drivers/spi/spi.c |
14493 |
+++ b/drivers/spi/spi.c |
14494 |
@@ -2204,7 +2204,7 @@ int spi_bus_unlock(struct spi_master *master) |
14495 |
@@ -50202,7 +53055,7 @@ index 939edf4..3f50423 100644 |
14496 |
static u8 *buf; |
14497 |
|
14498 |
diff --git a/drivers/staging/android/timed_output.c b/drivers/staging/android/timed_output.c |
14499 |
-index 2c61783..4d49e4e 100644 |
14500 |
+index c341ac1..bf9799f 100644 |
14501 |
--- a/drivers/staging/android/timed_output.c |
14502 |
+++ b/drivers/staging/android/timed_output.c |
14503 |
@@ -25,7 +25,7 @@ |
14504 |
@@ -50246,10 +53099,10 @@ index fe47cd3..19a1bd1 100644 |
14505 |
static struct tty_driver *gdm_driver[TTY_MAX_COUNT]; |
14506 |
static struct gdm *gdm_table[TTY_MAX_COUNT][GDM_TTY_MINOR]; |
14507 |
diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c |
14508 |
-index c270c9a..94ddf82 100644 |
14509 |
+index def8280..e3fd96a 100644 |
14510 |
--- a/drivers/staging/imx-drm/imx-drm-core.c |
14511 |
+++ b/drivers/staging/imx-drm/imx-drm-core.c |
14512 |
-@@ -362,7 +362,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc, |
14513 |
+@@ -355,7 +355,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc, |
14514 |
if (imxdrm->pipes >= MAX_CRTC) |
14515 |
return -EINVAL; |
14516 |
|
14517 |
@@ -50337,7 +53190,7 @@ index 750cac4..e4d751f 100644 |
14518 |
srpc_service_t ping_test_service; |
14519 |
void ping_init_test_service(void) |
14520 |
diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h |
14521 |
-index 3e25f00..0d59cf5 100644 |
14522 |
+index 0c6b784..c64235c 100644 |
14523 |
--- a/drivers/staging/lustre/lustre/include/lustre_dlm.h |
14524 |
+++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h |
14525 |
@@ -1141,7 +1141,7 @@ struct ldlm_callback_suite { |
14526 |
@@ -50350,10 +53203,10 @@ index 3e25f00..0d59cf5 100644 |
14527 |
/* ldlm_lockd.c */ |
14528 |
int ldlm_del_waiting_lock(struct ldlm_lock *lock); |
14529 |
diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h |
14530 |
-index 72cf3fe..4beac19 100644 |
14531 |
+index d5c4613..a341678 100644 |
14532 |
--- a/drivers/staging/lustre/lustre/include/obd.h |
14533 |
+++ b/drivers/staging/lustre/lustre/include/obd.h |
14534 |
-@@ -1427,7 +1427,7 @@ struct md_ops { |
14535 |
+@@ -1439,7 +1439,7 @@ struct md_ops { |
14536 |
* lprocfs_alloc_md_stats() in obdclass/lprocfs_status.c. Also, add a |
14537 |
* wrapper function in include/linux/obd_class.h. |
14538 |
*/ |
14539 |
@@ -50407,10 +53260,10 @@ index e947b91..f408990 100644 |
14540 |
dummy.data = &backoff; |
14541 |
dummy.proc_handler = &proc_dointvec; |
14542 |
diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c |
14543 |
-index 24ae26d..9d09cab 100644 |
14544 |
+index b16ee08..a3db5c6 100644 |
14545 |
--- a/drivers/staging/lustre/lustre/libcfs/module.c |
14546 |
+++ b/drivers/staging/lustre/lustre/libcfs/module.c |
14547 |
-@@ -313,11 +313,11 @@ out: |
14548 |
+@@ -314,11 +314,11 @@ out: |
14549 |
|
14550 |
|
14551 |
struct cfs_psdev_ops libcfs_psdev_ops = { |
14552 |
@@ -50428,7 +53281,7 @@ index 24ae26d..9d09cab 100644 |
14553 |
|
14554 |
extern int insert_proc(void); |
14555 |
diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c |
14556 |
-index 7fbc18e..f982071 100644 |
14557 |
+index ae6f61a..03c3d5d 100644 |
14558 |
--- a/drivers/staging/lustre/lustre/llite/dir.c |
14559 |
+++ b/drivers/staging/lustre/lustre/llite/dir.c |
14560 |
@@ -660,7 +660,7 @@ int ll_dir_setdirstripe(struct inode *dir, struct lmv_user_md *lump, |
14561 |
@@ -50525,7 +53378,7 @@ index a0f4868..139f1fb 100644 |
14562 |
dev_kfree_skb_irq(skb); |
14563 |
} |
14564 |
diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c |
14565 |
-index ff7214a..6dd90f0 100644 |
14566 |
+index da9dd6b..8e3e0f5 100644 |
14567 |
--- a/drivers/staging/octeon/ethernet.c |
14568 |
+++ b/drivers/staging/octeon/ethernet.c |
14569 |
@@ -247,11 +247,11 @@ static struct net_device_stats *cvm_oct_common_get_stats(struct net_device *dev) |
14570 |
@@ -50545,10 +53398,10 @@ index ff7214a..6dd90f0 100644 |
14571 |
} |
14572 |
|
14573 |
diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h |
14574 |
-index c274b34..f84de76 100644 |
14575 |
+index c59fccd..79f8fc2 100644 |
14576 |
--- a/drivers/staging/rtl8188eu/include/hal_intf.h |
14577 |
+++ b/drivers/staging/rtl8188eu/include/hal_intf.h |
14578 |
-@@ -271,7 +271,7 @@ struct hal_ops { |
14579 |
+@@ -267,7 +267,7 @@ struct hal_ops { |
14580 |
s32 (*c2h_handler)(struct adapter *padapter, |
14581 |
struct c2h_evt_hdr *c2h_evt); |
14582 |
c2h_id_filter c2h_id_filter_ccx; |
14583 |
@@ -50583,45 +53436,6 @@ index dc23395..cf7e9b1 100644 |
14584 |
|
14585 |
struct io_req { |
14586 |
struct list_head list; |
14587 |
-diff --git a/drivers/staging/rtl8723au/include/hal_intf.h b/drivers/staging/rtl8723au/include/hal_intf.h |
14588 |
-index d183f4b..3f4903d 100644 |
14589 |
---- a/drivers/staging/rtl8723au/include/hal_intf.h |
14590 |
-+++ b/drivers/staging/rtl8723au/include/hal_intf.h |
14591 |
-@@ -251,7 +251,7 @@ struct hal_ops { |
14592 |
- void (*hal_reset_security_engine)(struct rtw_adapter *adapter); |
14593 |
- s32 (*c2h_handler)(struct rtw_adapter *padapter, struct c2h_evt_hdr *c2h_evt); |
14594 |
- c2h_id_filter c2h_id_filter_ccx; |
14595 |
--}; |
14596 |
-+} __no_const; |
14597 |
- |
14598 |
- enum rt_eeprom_type { |
14599 |
- EEPROM_93C46, |
14600 |
-diff --git a/drivers/staging/rtl8723au/include/rtw_io.h b/drivers/staging/rtl8723au/include/rtw_io.h |
14601 |
-index 8d39d800..3f21c0c 100644 |
14602 |
---- a/drivers/staging/rtl8723au/include/rtw_io.h |
14603 |
-+++ b/drivers/staging/rtl8723au/include/rtw_io.h |
14604 |
-@@ -130,7 +130,7 @@ struct _io_ops |
14605 |
- void (*_read_port_cancel)(struct intf_hdl *pintfhdl); |
14606 |
- void (*_write_port_cancel)(struct intf_hdl *pintfhdl); |
14607 |
- |
14608 |
--}; |
14609 |
-+} __no_const; |
14610 |
- |
14611 |
- struct io_req { |
14612 |
- struct list_head list; |
14613 |
-diff --git a/drivers/staging/sbe-2t3e3/netdev.c b/drivers/staging/sbe-2t3e3/netdev.c |
14614 |
-index fe6c951..72935ba 100644 |
14615 |
---- a/drivers/staging/sbe-2t3e3/netdev.c |
14616 |
-+++ b/drivers/staging/sbe-2t3e3/netdev.c |
14617 |
-@@ -51,7 +51,7 @@ static int t3e3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
14618 |
- t3e3_if_config(sc, cmd_2t3e3, (char *)¶m, &resp, &rlen); |
14619 |
- |
14620 |
- if (rlen) |
14621 |
-- if (copy_to_user(data, &resp, rlen)) |
14622 |
-+ if (rlen > sizeof resp || copy_to_user(data, &resp, rlen)) |
14623 |
- return -EFAULT; |
14624 |
- |
14625 |
- return 0; |
14626 |
diff --git a/drivers/staging/usbip/vhci.h b/drivers/staging/usbip/vhci.h |
14627 |
index a863a98..d272795 100644 |
14628 |
--- a/drivers/staging/usbip/vhci.h |
14629 |
@@ -50636,7 +53450,7 @@ index a863a98..d272795 100644 |
14630 |
/* |
14631 |
* NOTE: |
14632 |
diff --git a/drivers/staging/usbip/vhci_hcd.c b/drivers/staging/usbip/vhci_hcd.c |
14633 |
-index 70e1755..de41855 100644 |
14634 |
+index 0007d30..c06a693 100644 |
14635 |
--- a/drivers/staging/usbip/vhci_hcd.c |
14636 |
+++ b/drivers/staging/usbip/vhci_hcd.c |
14637 |
@@ -439,7 +439,7 @@ static void vhci_tx_urb(struct urb *urb) |
14638 |
@@ -50648,7 +53462,7 @@ index 70e1755..de41855 100644 |
14639 |
if (priv->seqnum == 0xffff) |
14640 |
dev_info(&urb->dev->dev, "seqnum max\n"); |
14641 |
|
14642 |
-@@ -685,7 +685,7 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) |
14643 |
+@@ -686,7 +686,7 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) |
14644 |
return -ENOMEM; |
14645 |
} |
14646 |
|
14647 |
@@ -50657,7 +53471,7 @@ index 70e1755..de41855 100644 |
14648 |
if (unlink->seqnum == 0xffff) |
14649 |
pr_info("seqnum max\n"); |
14650 |
|
14651 |
-@@ -889,7 +889,7 @@ static int vhci_start(struct usb_hcd *hcd) |
14652 |
+@@ -891,7 +891,7 @@ static int vhci_start(struct usb_hcd *hcd) |
14653 |
vdev->rhport = rhport; |
14654 |
} |
14655 |
|
14656 |
@@ -50680,10 +53494,10 @@ index d07fcb5..358e1e1 100644 |
14657 |
return; |
14658 |
} |
14659 |
diff --git a/drivers/staging/vt6655/hostap.c b/drivers/staging/vt6655/hostap.c |
14660 |
-index 6eecd53..29317c6 100644 |
14661 |
+index 317c2a8..ffeb4ef 100644 |
14662 |
--- a/drivers/staging/vt6655/hostap.c |
14663 |
+++ b/drivers/staging/vt6655/hostap.c |
14664 |
-@@ -69,14 +69,13 @@ static int msglevel = MSG_LEVEL_INFO; |
14665 |
+@@ -68,14 +68,13 @@ static int msglevel = MSG_LEVEL_INFO; |
14666 |
* |
14667 |
*/ |
14668 |
|
14669 |
@@ -50700,7 +53514,7 @@ index 6eecd53..29317c6 100644 |
14670 |
|
14671 |
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Enabling hostapd mode\n", dev->name); |
14672 |
|
14673 |
-@@ -88,6 +87,8 @@ static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked) |
14674 |
+@@ -87,6 +86,8 @@ static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked) |
14675 |
*apdev_priv = *pDevice; |
14676 |
eth_hw_addr_inherit(pDevice->apdev, dev); |
14677 |
|
14678 |
@@ -50709,36 +53523,6 @@ index 6eecd53..29317c6 100644 |
14679 |
pDevice->apdev->netdev_ops = &apdev_netdev_ops; |
14680 |
|
14681 |
pDevice->apdev->type = ARPHRD_IEEE80211; |
14682 |
-diff --git a/drivers/staging/vt6656/hostap.c b/drivers/staging/vt6656/hostap.c |
14683 |
-index 67ba48b..24e602f 100644 |
14684 |
---- a/drivers/staging/vt6656/hostap.c |
14685 |
-+++ b/drivers/staging/vt6656/hostap.c |
14686 |
-@@ -60,14 +60,13 @@ static int msglevel =MSG_LEVEL_INFO; |
14687 |
- * |
14688 |
- */ |
14689 |
- |
14690 |
-+static net_device_ops_no_const apdev_netdev_ops; |
14691 |
-+ |
14692 |
- static int hostap_enable_hostapd(struct vnt_private *pDevice, int rtnl_locked) |
14693 |
- { |
14694 |
- struct vnt_private *apdev_priv; |
14695 |
- struct net_device *dev = pDevice->dev; |
14696 |
- int ret; |
14697 |
-- const struct net_device_ops apdev_netdev_ops = { |
14698 |
-- .ndo_start_xmit = pDevice->tx_80211, |
14699 |
-- }; |
14700 |
- |
14701 |
- DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Enabling hostapd mode\n", dev->name); |
14702 |
- |
14703 |
-@@ -79,6 +78,8 @@ static int hostap_enable_hostapd(struct vnt_private *pDevice, int rtnl_locked) |
14704 |
- *apdev_priv = *pDevice; |
14705 |
- memcpy(pDevice->apdev->dev_addr, dev->dev_addr, ETH_ALEN); |
14706 |
- |
14707 |
-+ /* only half broken now */ |
14708 |
-+ apdev_netdev_ops.ndo_start_xmit = pDevice->tx_80211; |
14709 |
- pDevice->apdev->netdev_ops = &apdev_netdev_ops; |
14710 |
- |
14711 |
- pDevice->apdev->type = ARPHRD_IEEE80211; |
14712 |
diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c |
14713 |
index e7e9372..161f530 100644 |
14714 |
--- a/drivers/target/sbp/sbp_target.c |
14715 |
@@ -50762,7 +53546,7 @@ index e7e9372..161f530 100644 |
14716 |
login->tgt_agt = sbp_target_agent_register(login); |
14717 |
if (IS_ERR(login->tgt_agt)) { |
14718 |
diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c |
14719 |
-index 6ea95d2..88607b4 100644 |
14720 |
+index 98da901..bb443e8 100644 |
14721 |
--- a/drivers/target/target_core_device.c |
14722 |
+++ b/drivers/target/target_core_device.c |
14723 |
@@ -1525,7 +1525,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name) |
14724 |
@@ -50775,7 +53559,7 @@ index 6ea95d2..88607b4 100644 |
14725 |
spin_lock_init(&dev->t10_wwn.t10_vpd_lock); |
14726 |
INIT_LIST_HEAD(&dev->t10_pr.registration_list); |
14727 |
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c |
14728 |
-index 14772e9..42d9f63 100644 |
14729 |
+index 7fa62fc..abdd041 100644 |
14730 |
--- a/drivers/target/target_core_transport.c |
14731 |
+++ b/drivers/target/target_core_transport.c |
14732 |
@@ -1165,7 +1165,7 @@ transport_check_alloc_task_attr(struct se_cmd *cmd) |
14733 |
@@ -50784,11 +53568,11 @@ index 14772e9..42d9f63 100644 |
14734 |
*/ |
14735 |
- cmd->se_ordered_id = atomic_inc_return(&dev->dev_ordered_id); |
14736 |
+ cmd->se_ordered_id = atomic_inc_return_unchecked(&dev->dev_ordered_id); |
14737 |
- smp_mb__after_atomic_inc(); |
14738 |
+ smp_mb__after_atomic(); |
14739 |
pr_debug("Allocated se_ordered_id: %u for Task Attr: 0x%02x on %s\n", |
14740 |
cmd->se_ordered_id, cmd->sam_task_attr, |
14741 |
diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c |
14742 |
-index 04b1be7..5eff86d 100644 |
14743 |
+index 4b2b999..cad9fa5 100644 |
14744 |
--- a/drivers/thermal/of-thermal.c |
14745 |
+++ b/drivers/thermal/of-thermal.c |
14746 |
@@ -30,6 +30,7 @@ |
14747 |
@@ -50852,7 +53636,7 @@ index a57bb5a..1f727d33 100644 |
14748 |
struct tty_struct *tty; |
14749 |
struct tty_ldisc *ld; |
14750 |
diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c |
14751 |
-index 0ff7fda..dbc7d52 100644 |
14752 |
+index 4fcec1d..5a036f7 100644 |
14753 |
--- a/drivers/tty/hvc/hvc_console.c |
14754 |
+++ b/drivers/tty/hvc/hvc_console.c |
14755 |
@@ -342,7 +342,7 @@ static int hvc_open(struct tty_struct *tty, struct file * filp) |
14756 |
@@ -51278,7 +54062,7 @@ index 2ebe47b..3205833 100644 |
14757 |
|
14758 |
dlci->modem_rx = 0; |
14759 |
diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c |
14760 |
-index 0391f17..31fa586 100644 |
14761 |
+index f44f1ba..a8d5915 100644 |
14762 |
--- a/drivers/tty/n_tty.c |
14763 |
+++ b/drivers/tty/n_tty.c |
14764 |
@@ -115,7 +115,7 @@ struct n_tty_data { |
14765 |
@@ -51377,6 +54161,21 @@ index 1274499..f541382 100644 |
14766 |
&soft->is_intr_type[intr_type].is_num_intrs); |
14767 |
|
14768 |
this_mir = this_ir = pending_intrs(soft, intr_type); |
14769 |
+diff --git a/drivers/tty/serial/kgdb_nmi.c b/drivers/tty/serial/kgdb_nmi.c |
14770 |
+index cfadf29..8cf4595 100644 |
14771 |
+--- a/drivers/tty/serial/kgdb_nmi.c |
14772 |
++++ b/drivers/tty/serial/kgdb_nmi.c |
14773 |
+@@ -51,7 +51,9 @@ static int kgdb_nmi_console_setup(struct console *co, char *options) |
14774 |
+ * I/O utilities that messages sent to the console will automatically |
14775 |
+ * be displayed on the dbg_io. |
14776 |
+ */ |
14777 |
+- dbg_io_ops->is_console = true; |
14778 |
++ pax_open_kernel(); |
14779 |
++ *(int *)&dbg_io_ops->is_console = true; |
14780 |
++ pax_close_kernel(); |
14781 |
+ |
14782 |
+ return 0; |
14783 |
+ } |
14784 |
diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c |
14785 |
index a260cde..6b2b5ce 100644 |
14786 |
--- a/drivers/tty/serial/kgdboc.c |
14787 |
@@ -51484,10 +54283,10 @@ index a260cde..6b2b5ce 100644 |
14788 |
/* This is only available if kgdboc is a built in for early debugging */ |
14789 |
static int __init kgdboc_early_init(char *opt) |
14790 |
diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c |
14791 |
-index 7307dc4..ce4fe90 100644 |
14792 |
+index 72000a6..a190bc4 100644 |
14793 |
--- a/drivers/tty/serial/msm_serial.c |
14794 |
+++ b/drivers/tty/serial/msm_serial.c |
14795 |
-@@ -1026,7 +1026,7 @@ static struct uart_driver msm_uart_driver = { |
14796 |
+@@ -981,7 +981,7 @@ static struct uart_driver msm_uart_driver = { |
14797 |
.cons = MSM_CONSOLE, |
14798 |
}; |
14799 |
|
14800 |
@@ -51496,7 +54295,7 @@ index 7307dc4..ce4fe90 100644 |
14801 |
|
14802 |
static const struct of_device_id msm_uartdm_table[] = { |
14803 |
{ .compatible = "qcom,msm-uartdm-v1.1", .data = (void *)UARTDM_1P1 }, |
14804 |
-@@ -1045,7 +1045,7 @@ static int __init msm_serial_probe(struct platform_device *pdev) |
14805 |
+@@ -1000,7 +1000,7 @@ static int msm_serial_probe(struct platform_device *pdev) |
14806 |
int irq; |
14807 |
|
14808 |
if (pdev->id == -1) |
14809 |
@@ -51506,10 +54305,10 @@ index 7307dc4..ce4fe90 100644 |
14810 |
if (unlikely(pdev->id < 0 || pdev->id >= UART_NR)) |
14811 |
return -ENXIO; |
14812 |
diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c |
14813 |
-index 1f5505e..a1a767d 100644 |
14814 |
+index c1d3ebd..f618a93 100644 |
14815 |
--- a/drivers/tty/serial/samsung.c |
14816 |
+++ b/drivers/tty/serial/samsung.c |
14817 |
-@@ -463,11 +463,16 @@ static void s3c24xx_serial_shutdown(struct uart_port *port) |
14818 |
+@@ -486,11 +486,16 @@ static void s3c24xx_serial_shutdown(struct uart_port *port) |
14819 |
} |
14820 |
} |
14821 |
|
14822 |
@@ -51523,10 +54322,10 @@ index 1f5505e..a1a767d 100644 |
14823 |
+ if (s3c24xx_serial_has_interrupt_mask(port)) |
14824 |
+ return s3c64xx_serial_startup(port); |
14825 |
+ |
14826 |
- dbg("s3c24xx_serial_startup: port=%p (%08lx,%p)\n", |
14827 |
- port->mapbase, port->membase); |
14828 |
+ dbg("s3c24xx_serial_startup: port=%p (%08llx,%p)\n", |
14829 |
+ port, (unsigned long long)port->mapbase, port->membase); |
14830 |
|
14831 |
-@@ -1141,10 +1146,6 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, |
14832 |
+@@ -1164,10 +1169,6 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, |
14833 |
/* setup info for port */ |
14834 |
port->dev = &platdev->dev; |
14835 |
|
14836 |
@@ -51538,10 +54337,10 @@ index 1f5505e..a1a767d 100644 |
14837 |
|
14838 |
if (cfg->uart_flags & UPF_CONS_FLOW) { |
14839 |
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c |
14840 |
-index b68550d..a62d7f8 100644 |
14841 |
+index fbf6c5a..3939d92 100644 |
14842 |
--- a/drivers/tty/serial/serial_core.c |
14843 |
+++ b/drivers/tty/serial/serial_core.c |
14844 |
-@@ -1329,7 +1329,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp) |
14845 |
+@@ -1333,7 +1333,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp) |
14846 |
|
14847 |
pr_debug("uart_close(%d) called\n", uport ? uport->line : -1); |
14848 |
|
14849 |
@@ -51550,7 +54349,7 @@ index b68550d..a62d7f8 100644 |
14850 |
return; |
14851 |
|
14852 |
/* |
14853 |
-@@ -1456,7 +1456,7 @@ static void uart_hangup(struct tty_struct *tty) |
14854 |
+@@ -1460,7 +1460,7 @@ static void uart_hangup(struct tty_struct *tty) |
14855 |
uart_flush_buffer(tty); |
14856 |
uart_shutdown(tty, state); |
14857 |
spin_lock_irqsave(&port->lock, flags); |
14858 |
@@ -51559,7 +54358,7 @@ index b68550d..a62d7f8 100644 |
14859 |
clear_bit(ASYNCB_NORMAL_ACTIVE, &port->flags); |
14860 |
spin_unlock_irqrestore(&port->lock, flags); |
14861 |
tty_port_tty_set(port, NULL); |
14862 |
-@@ -1554,7 +1554,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp) |
14863 |
+@@ -1558,7 +1558,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp) |
14864 |
goto end; |
14865 |
} |
14866 |
|
14867 |
@@ -51568,7 +54367,7 @@ index b68550d..a62d7f8 100644 |
14868 |
if (!state->uart_port || state->uart_port->flags & UPF_DEAD) { |
14869 |
retval = -ENXIO; |
14870 |
goto err_dec_count; |
14871 |
-@@ -1594,7 +1594,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp) |
14872 |
+@@ -1598,7 +1598,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp) |
14873 |
end: |
14874 |
return retval; |
14875 |
err_dec_count: |
14876 |
@@ -51967,10 +54766,10 @@ index 53ba853..3c30f6d 100644 |
14877 |
if (!retval) |
14878 |
port->flags |= ASYNC_NORMAL_ACTIVE; |
14879 |
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c |
14880 |
-index ce396ec..04a37be 100644 |
14881 |
+index 454b658..57b1430 100644 |
14882 |
--- a/drivers/tty/sysrq.c |
14883 |
+++ b/drivers/tty/sysrq.c |
14884 |
-@@ -1075,7 +1075,7 @@ EXPORT_SYMBOL(unregister_sysrq_key); |
14885 |
+@@ -1084,7 +1084,7 @@ EXPORT_SYMBOL(unregister_sysrq_key); |
14886 |
static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf, |
14887 |
size_t count, loff_t *ppos) |
14888 |
{ |
14889 |
@@ -52418,10 +55217,10 @@ index 257876e..4304364 100644 |
14890 |
dev->rawdescriptors[i] + (*ppos - pos), |
14891 |
min(len, alloclen))) { |
14892 |
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c |
14893 |
-index 9c4e292..b89877f 100644 |
14894 |
+index bec31e2..b8091cd 100644 |
14895 |
--- a/drivers/usb/core/hcd.c |
14896 |
+++ b/drivers/usb/core/hcd.c |
14897 |
-@@ -1550,7 +1550,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) |
14898 |
+@@ -1554,7 +1554,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) |
14899 |
*/ |
14900 |
usb_get_urb(urb); |
14901 |
atomic_inc(&urb->use_count); |
14902 |
@@ -52430,7 +55229,7 @@ index 9c4e292..b89877f 100644 |
14903 |
usbmon_urb_submit(&hcd->self, urb); |
14904 |
|
14905 |
/* NOTE requirements on root-hub callers (usbfs and the hub |
14906 |
-@@ -1577,7 +1577,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) |
14907 |
+@@ -1581,7 +1581,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags) |
14908 |
urb->hcpriv = NULL; |
14909 |
INIT_LIST_HEAD(&urb->urb_list); |
14910 |
atomic_dec(&urb->use_count); |
14911 |
@@ -52440,7 +55239,7 @@ index 9c4e292..b89877f 100644 |
14912 |
wake_up(&usb_kill_urb_queue); |
14913 |
usb_put_urb(urb); |
14914 |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c |
14915 |
-index 00c4b96..b4498c8 100644 |
14916 |
+index 0e950ad..a2be5b0 100644 |
14917 |
--- a/drivers/usb/core/hub.c |
14918 |
+++ b/drivers/usb/core/hub.c |
14919 |
@@ -27,6 +27,7 @@ |
14920 |
@@ -52451,7 +55250,7 @@ index 00c4b96..b4498c8 100644 |
14921 |
|
14922 |
#include <asm/uaccess.h> |
14923 |
#include <asm/byteorder.h> |
14924 |
-@@ -4531,6 +4532,10 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, |
14925 |
+@@ -4594,6 +4595,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, |
14926 |
goto done; |
14927 |
return; |
14928 |
} |
14929 |
@@ -52520,10 +55319,10 @@ index 4d11449..f4ccabf 100644 |
14930 |
INIT_LIST_HEAD(&dev->ep0.urb_list); |
14931 |
dev->ep0.desc.bLength = USB_DT_ENDPOINT_SIZE; |
14932 |
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c |
14933 |
-index 85f398d..d375bbe 100644 |
14934 |
+index dab7927..6f53afc 100644 |
14935 |
--- a/drivers/usb/dwc3/gadget.c |
14936 |
+++ b/drivers/usb/dwc3/gadget.c |
14937 |
-@@ -550,8 +550,6 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, |
14938 |
+@@ -615,8 +615,6 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, |
14939 |
if (!usb_endpoint_xfer_isoc(desc)) |
14940 |
return 0; |
14941 |
|
14942 |
@@ -52683,10 +55482,10 @@ index 7a55fea..cc0ed4f 100644 |
14943 |
#include "u_uac1.h" |
14944 |
|
14945 |
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c |
14946 |
-index 7ae0c4d..35521b7 100644 |
14947 |
+index cc305c7..cf6da4a 100644 |
14948 |
--- a/drivers/usb/host/ehci-hub.c |
14949 |
+++ b/drivers/usb/host/ehci-hub.c |
14950 |
-@@ -780,7 +780,7 @@ static struct urb *request_single_step_set_feature_urb( |
14951 |
+@@ -771,7 +771,7 @@ static struct urb *request_single_step_set_feature_urb( |
14952 |
urb->transfer_flags = URB_DIR_IN; |
14953 |
usb_get_urb(urb); |
14954 |
atomic_inc(&urb->use_count); |
14955 |
@@ -52695,7 +55494,7 @@ index 7ae0c4d..35521b7 100644 |
14956 |
urb->setup_dma = dma_map_single( |
14957 |
hcd->self.controller, |
14958 |
urb->setup_packet, |
14959 |
-@@ -847,7 +847,7 @@ static int ehset_single_step_set_feature(struct usb_hcd *hcd, int port) |
14960 |
+@@ -838,7 +838,7 @@ static int ehset_single_step_set_feature(struct usb_hcd *hcd, int port) |
14961 |
urb->status = -EINPROGRESS; |
14962 |
usb_get_urb(urb); |
14963 |
atomic_inc(&urb->use_count); |
14964 |
@@ -52735,11 +55534,11 @@ index d0d8fad..668ef7b 100644 |
14965 |
} |
14966 |
|
14967 |
diff --git a/drivers/usb/misc/appledisplay.c b/drivers/usb/misc/appledisplay.c |
14968 |
-index ba6a5d6..f88f7f3 100644 |
14969 |
+index b3d245e..99549ed 100644 |
14970 |
--- a/drivers/usb/misc/appledisplay.c |
14971 |
+++ b/drivers/usb/misc/appledisplay.c |
14972 |
-@@ -83,7 +83,7 @@ struct appledisplay { |
14973 |
- spinlock_t lock; |
14974 |
+@@ -84,7 +84,7 @@ struct appledisplay { |
14975 |
+ struct mutex sysfslock; /* concurrent read and write */ |
14976 |
}; |
14977 |
|
14978 |
-static atomic_t count_displays = ATOMIC_INIT(0); |
14979 |
@@ -52747,7 +55546,7 @@ index ba6a5d6..f88f7f3 100644 |
14980 |
static struct workqueue_struct *wq; |
14981 |
|
14982 |
static void appledisplay_complete(struct urb *urb) |
14983 |
-@@ -281,7 +281,7 @@ static int appledisplay_probe(struct usb_interface *iface, |
14984 |
+@@ -288,7 +288,7 @@ static int appledisplay_probe(struct usb_interface *iface, |
14985 |
|
14986 |
/* Register backlight device */ |
14987 |
snprintf(bl_name, sizeof(bl_name), "appledisplay%d", |
14988 |
@@ -52845,10 +55644,10 @@ index 3e2e4ed..060c9b8 100644 |
14989 |
|
14990 |
/* Return the xfer's ID. */ |
14991 |
diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c |
14992 |
-index 512f479..7e041d0 100644 |
14993 |
+index f018d8d..ccab63f 100644 |
14994 |
--- a/drivers/vfio/vfio.c |
14995 |
+++ b/drivers/vfio/vfio.c |
14996 |
-@@ -487,7 +487,7 @@ static int vfio_group_nb_add_dev(struct vfio_group *group, struct device *dev) |
14997 |
+@@ -481,7 +481,7 @@ static int vfio_group_nb_add_dev(struct vfio_group *group, struct device *dev) |
14998 |
return 0; |
14999 |
|
15000 |
/* TODO Prevent device auto probing */ |
15001 |
@@ -53035,37 +55834,10 @@ index 900aa4e..6d49418 100644 |
15002 |
} |
15003 |
EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup); |
15004 |
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c |
15005 |
-index b6d5008..5bca7bf 100644 |
15006 |
+index b5e85f6..290f8c7 100644 |
15007 |
--- a/drivers/video/fbdev/core/fbmem.c |
15008 |
+++ b/drivers/video/fbdev/core/fbmem.c |
15009 |
-@@ -433,7 +433,7 @@ static void fb_do_show_logo(struct fb_info *info, struct fb_image *image, |
15010 |
- image->dx += image->width + 8; |
15011 |
- } |
15012 |
- } else if (rotate == FB_ROTATE_UD) { |
15013 |
-- for (x = 0; x < num && image->dx >= 0; x++) { |
15014 |
-+ for (x = 0; x < num && (__s32)image->dx >= 0; x++) { |
15015 |
- info->fbops->fb_imageblit(info, image); |
15016 |
- image->dx -= image->width + 8; |
15017 |
- } |
15018 |
-@@ -445,7 +445,7 @@ static void fb_do_show_logo(struct fb_info *info, struct fb_image *image, |
15019 |
- image->dy += image->height + 8; |
15020 |
- } |
15021 |
- } else if (rotate == FB_ROTATE_CCW) { |
15022 |
-- for (x = 0; x < num && image->dy >= 0; x++) { |
15023 |
-+ for (x = 0; x < num && (__s32)image->dy >= 0; x++) { |
15024 |
- info->fbops->fb_imageblit(info, image); |
15025 |
- image->dy -= image->height + 8; |
15026 |
- } |
15027 |
-@@ -1179,7 +1179,7 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd, |
15028 |
- return -EFAULT; |
15029 |
- if (con2fb.console < 1 || con2fb.console > MAX_NR_CONSOLES) |
15030 |
- return -EINVAL; |
15031 |
-- if (con2fb.framebuffer < 0 || con2fb.framebuffer >= FB_MAX) |
15032 |
-+ if (con2fb.framebuffer >= FB_MAX) |
15033 |
- return -EINVAL; |
15034 |
- if (!registered_fb[con2fb.framebuffer]) |
15035 |
- request_module("fb%d", con2fb.framebuffer); |
15036 |
-@@ -1300,7 +1300,7 @@ static int do_fscreeninfo_to_user(struct fb_fix_screeninfo *fix, |
15037 |
+@@ -1301,7 +1301,7 @@ static int do_fscreeninfo_to_user(struct fb_fix_screeninfo *fix, |
15038 |
__u32 data; |
15039 |
int err; |
15040 |
|
15041 |
@@ -56392,7 +59164,7 @@ index fef20db..d28b1ab 100644 |
15042 |
return -ENOMEM; |
15043 |
return 0; |
15044 |
diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c |
15045 |
-index c71e886..61d3d44b 100644 |
15046 |
+index cc1cfae..41158ad 100644 |
15047 |
--- a/fs/9p/vfs_addr.c |
15048 |
+++ b/fs/9p/vfs_addr.c |
15049 |
@@ -187,7 +187,7 @@ static int v9fs_vfs_writepage_locked(struct page *page) |
15050 |
@@ -56405,7 +59177,7 @@ index c71e886..61d3d44b 100644 |
15051 |
if (retval > 0) |
15052 |
retval = 0; |
15053 |
diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c |
15054 |
-index 53161ec..e261d8a 100644 |
15055 |
+index 7fa4f7a..a7ebf8c 100644 |
15056 |
--- a/fs/9p/vfs_inode.c |
15057 |
+++ b/fs/9p/vfs_inode.c |
15058 |
@@ -1312,7 +1312,7 @@ static void *v9fs_vfs_follow_link(struct dentry *dentry, struct nameidata *nd) |
15059 |
@@ -56453,10 +59225,18 @@ index 2946712..f737435 100644 |
15060 |
&data); |
15061 |
if (!inode) { |
15062 |
diff --git a/fs/aio.c b/fs/aio.c |
15063 |
-index 6d68e01..573d8dc 100644 |
15064 |
+index 1c9c5f0..94455bc 100644 |
15065 |
--- a/fs/aio.c |
15066 |
+++ b/fs/aio.c |
15067 |
-@@ -380,7 +380,7 @@ static int aio_setup_ring(struct kioctx *ctx) |
15068 |
+@@ -141,6 +141,7 @@ struct kioctx { |
15069 |
+ |
15070 |
+ struct { |
15071 |
+ unsigned tail; |
15072 |
++ unsigned completed_events; |
15073 |
+ spinlock_t completion_lock; |
15074 |
+ } ____cacheline_aligned_in_smp; |
15075 |
+ |
15076 |
+@@ -380,7 +381,7 @@ static int aio_setup_ring(struct kioctx *ctx) |
15077 |
size += sizeof(struct io_event) * nr_events; |
15078 |
|
15079 |
nr_pages = PFN_UP(size); |
15080 |
@@ -56465,6 +59245,122 @@ index 6d68e01..573d8dc 100644 |
15081 |
return -EINVAL; |
15082 |
|
15083 |
file = aio_private_file(ctx, nr_pages); |
15084 |
+@@ -880,6 +881,68 @@ out: |
15085 |
+ return ret; |
15086 |
+ } |
15087 |
+ |
15088 |
++/* refill_reqs_available |
15089 |
++ * Updates the reqs_available reference counts used for tracking the |
15090 |
++ * number of free slots in the completion ring. This can be called |
15091 |
++ * from aio_complete() (to optimistically update reqs_available) or |
15092 |
++ * from aio_get_req() (the we're out of events case). It must be |
15093 |
++ * called holding ctx->completion_lock. |
15094 |
++ */ |
15095 |
++static void refill_reqs_available(struct kioctx *ctx, unsigned head, |
15096 |
++ unsigned tail) |
15097 |
++{ |
15098 |
++ unsigned events_in_ring, completed; |
15099 |
++ |
15100 |
++ /* Clamp head since userland can write to it. */ |
15101 |
++ head %= ctx->nr_events; |
15102 |
++ if (head <= tail) |
15103 |
++ events_in_ring = tail - head; |
15104 |
++ else |
15105 |
++ events_in_ring = ctx->nr_events - (head - tail); |
15106 |
++ |
15107 |
++ completed = ctx->completed_events; |
15108 |
++ if (events_in_ring < completed) |
15109 |
++ completed -= events_in_ring; |
15110 |
++ else |
15111 |
++ completed = 0; |
15112 |
++ |
15113 |
++ if (!completed) |
15114 |
++ return; |
15115 |
++ |
15116 |
++ ctx->completed_events -= completed; |
15117 |
++ put_reqs_available(ctx, completed); |
15118 |
++} |
15119 |
++ |
15120 |
++/* user_refill_reqs_available |
15121 |
++ * Called to refill reqs_available when aio_get_req() encounters an |
15122 |
++ * out of space in the completion ring. |
15123 |
++ */ |
15124 |
++static void user_refill_reqs_available(struct kioctx *ctx) |
15125 |
++{ |
15126 |
++ spin_lock_irq(&ctx->completion_lock); |
15127 |
++ if (ctx->completed_events) { |
15128 |
++ struct aio_ring *ring; |
15129 |
++ unsigned head; |
15130 |
++ |
15131 |
++ /* Access of ring->head may race with aio_read_events_ring() |
15132 |
++ * here, but that's okay since whether we read the old version |
15133 |
++ * or the new version, and either will be valid. The important |
15134 |
++ * part is that head cannot pass tail since we prevent |
15135 |
++ * aio_complete() from updating tail by holding |
15136 |
++ * ctx->completion_lock. Even if head is invalid, the check |
15137 |
++ * against ctx->completed_events below will make sure we do the |
15138 |
++ * safe/right thing. |
15139 |
++ */ |
15140 |
++ ring = kmap_atomic(ctx->ring_pages[0]); |
15141 |
++ head = ring->head; |
15142 |
++ kunmap_atomic(ring); |
15143 |
++ |
15144 |
++ refill_reqs_available(ctx, head, ctx->tail); |
15145 |
++ } |
15146 |
++ |
15147 |
++ spin_unlock_irq(&ctx->completion_lock); |
15148 |
++} |
15149 |
++ |
15150 |
+ /* aio_get_req |
15151 |
+ * Allocate a slot for an aio request. |
15152 |
+ * Returns NULL if no requests are free. |
15153 |
+@@ -888,8 +951,11 @@ static inline struct kiocb *aio_get_req(struct kioctx *ctx) |
15154 |
+ { |
15155 |
+ struct kiocb *req; |
15156 |
+ |
15157 |
+- if (!get_reqs_available(ctx)) |
15158 |
+- return NULL; |
15159 |
++ if (!get_reqs_available(ctx)) { |
15160 |
++ user_refill_reqs_available(ctx); |
15161 |
++ if (!get_reqs_available(ctx)) |
15162 |
++ return NULL; |
15163 |
++ } |
15164 |
+ |
15165 |
+ req = kmem_cache_alloc(kiocb_cachep, GFP_KERNEL|__GFP_ZERO); |
15166 |
+ if (unlikely(!req)) |
15167 |
+@@ -948,8 +1014,8 @@ void aio_complete(struct kiocb *iocb, long res, long res2) |
15168 |
+ struct kioctx *ctx = iocb->ki_ctx; |
15169 |
+ struct aio_ring *ring; |
15170 |
+ struct io_event *ev_page, *event; |
15171 |
++ unsigned tail, pos, head; |
15172 |
+ unsigned long flags; |
15173 |
+- unsigned tail, pos; |
15174 |
+ |
15175 |
+ /* |
15176 |
+ * Special case handling for sync iocbs: |
15177 |
+@@ -1010,10 +1076,14 @@ void aio_complete(struct kiocb *iocb, long res, long res2) |
15178 |
+ ctx->tail = tail; |
15179 |
+ |
15180 |
+ ring = kmap_atomic(ctx->ring_pages[0]); |
15181 |
++ head = ring->head; |
15182 |
+ ring->tail = tail; |
15183 |
+ kunmap_atomic(ring); |
15184 |
+ flush_dcache_page(ctx->ring_pages[0]); |
15185 |
+ |
15186 |
++ ctx->completed_events++; |
15187 |
++ if (ctx->completed_events > 1) |
15188 |
++ refill_reqs_available(ctx, head, tail); |
15189 |
+ spin_unlock_irqrestore(&ctx->completion_lock, flags); |
15190 |
+ |
15191 |
+ pr_debug("added to ring %p at [%u]\n", iocb, tail); |
15192 |
+@@ -1028,7 +1098,6 @@ void aio_complete(struct kiocb *iocb, long res, long res2) |
15193 |
+ |
15194 |
+ /* everything turned out well, dispose of the aiocb. */ |
15195 |
+ kiocb_free(iocb); |
15196 |
+- put_reqs_available(ctx, 1); |
15197 |
+ |
15198 |
+ /* |
15199 |
+ * We have to order our ring_info tail store above and test |
15200 |
diff --git a/fs/attr.c b/fs/attr.c |
15201 |
index 6530ced..4a827e2 100644 |
15202 |
--- a/fs/attr.c |
15203 |
@@ -56626,7 +59522,7 @@ index ca0ba15..0fa3257 100644 |
15204 |
fd_offset + ex.a_text); |
15205 |
if (error != N_DATADDR(ex)) { |
15206 |
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c |
15207 |
-index aa3cb62..bc53934 100644 |
15208 |
+index 3892c1a..4e27c04 100644 |
15209 |
--- a/fs/binfmt_elf.c |
15210 |
+++ b/fs/binfmt_elf.c |
15211 |
@@ -34,6 +34,7 @@ |
15212 |
@@ -57334,7 +60230,7 @@ index aa3cb62..bc53934 100644 |
15213 |
load_bias); |
15214 |
if (!IS_ERR((void *)elf_entry)) { |
15215 |
/* |
15216 |
-@@ -1122,7 +1602,7 @@ static bool always_dump_vma(struct vm_area_struct *vma) |
15217 |
+@@ -1130,7 +1610,7 @@ static bool always_dump_vma(struct vm_area_struct *vma) |
15218 |
* Decide what to dump of a segment, part, all or none. |
15219 |
*/ |
15220 |
static unsigned long vma_dump_size(struct vm_area_struct *vma, |
15221 |
@@ -57343,7 +60239,7 @@ index aa3cb62..bc53934 100644 |
15222 |
{ |
15223 |
#define FILTER(type) (mm_flags & (1UL << MMF_DUMP_##type)) |
15224 |
|
15225 |
-@@ -1160,7 +1640,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma, |
15226 |
+@@ -1168,7 +1648,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma, |
15227 |
if (vma->vm_file == NULL) |
15228 |
return 0; |
15229 |
|
15230 |
@@ -57352,7 +60248,7 @@ index aa3cb62..bc53934 100644 |
15231 |
goto whole; |
15232 |
|
15233 |
/* |
15234 |
-@@ -1367,9 +1847,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm) |
15235 |
+@@ -1375,9 +1855,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm) |
15236 |
{ |
15237 |
elf_addr_t *auxv = (elf_addr_t *) mm->saved_auxv; |
15238 |
int i = 0; |
15239 |
@@ -57364,7 +60260,7 @@ index aa3cb62..bc53934 100644 |
15240 |
fill_note(note, "CORE", NT_AUXV, i * sizeof(elf_addr_t), auxv); |
15241 |
} |
15242 |
|
15243 |
-@@ -1378,7 +1858,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata, |
15244 |
+@@ -1386,7 +1866,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata, |
15245 |
{ |
15246 |
mm_segment_t old_fs = get_fs(); |
15247 |
set_fs(KERNEL_DS); |
15248 |
@@ -57373,7 +60269,7 @@ index aa3cb62..bc53934 100644 |
15249 |
set_fs(old_fs); |
15250 |
fill_note(note, "CORE", NT_SIGINFO, sizeof(*csigdata), csigdata); |
15251 |
} |
15252 |
-@@ -2002,14 +2482,14 @@ static void fill_extnum_info(struct elfhdr *elf, struct elf_shdr *shdr4extnum, |
15253 |
+@@ -2010,14 +2490,14 @@ static void fill_extnum_info(struct elfhdr *elf, struct elf_shdr *shdr4extnum, |
15254 |
} |
15255 |
|
15256 |
static size_t elf_core_vma_data_size(struct vm_area_struct *gate_vma, |
15257 |
@@ -57390,7 +60286,7 @@ index aa3cb62..bc53934 100644 |
15258 |
return size; |
15259 |
} |
15260 |
|
15261 |
-@@ -2100,7 +2580,7 @@ static int elf_core_dump(struct coredump_params *cprm) |
15262 |
+@@ -2108,7 +2588,7 @@ static int elf_core_dump(struct coredump_params *cprm) |
15263 |
|
15264 |
dataoff = offset = roundup(offset, ELF_EXEC_PAGESIZE); |
15265 |
|
15266 |
@@ -57399,7 +60295,7 @@ index aa3cb62..bc53934 100644 |
15267 |
offset += elf_core_extra_data_size(); |
15268 |
e_shoff = offset; |
15269 |
|
15270 |
-@@ -2128,7 +2608,7 @@ static int elf_core_dump(struct coredump_params *cprm) |
15271 |
+@@ -2136,7 +2616,7 @@ static int elf_core_dump(struct coredump_params *cprm) |
15272 |
phdr.p_offset = offset; |
15273 |
phdr.p_vaddr = vma->vm_start; |
15274 |
phdr.p_paddr = 0; |
15275 |
@@ -57408,7 +60304,7 @@ index aa3cb62..bc53934 100644 |
15276 |
phdr.p_memsz = vma->vm_end - vma->vm_start; |
15277 |
offset += phdr.p_filesz; |
15278 |
phdr.p_flags = vma->vm_flags & VM_READ ? PF_R : 0; |
15279 |
-@@ -2161,7 +2641,7 @@ static int elf_core_dump(struct coredump_params *cprm) |
15280 |
+@@ -2169,7 +2649,7 @@ static int elf_core_dump(struct coredump_params *cprm) |
15281 |
unsigned long addr; |
15282 |
unsigned long end; |
15283 |
|
15284 |
@@ -57417,7 +60313,7 @@ index aa3cb62..bc53934 100644 |
15285 |
|
15286 |
for (addr = vma->vm_start; addr < end; addr += PAGE_SIZE) { |
15287 |
struct page *page; |
15288 |
-@@ -2202,6 +2682,167 @@ out: |
15289 |
+@@ -2210,6 +2690,167 @@ out: |
15290 |
|
15291 |
#endif /* CONFIG_ELF_CORE */ |
15292 |
|
15293 |
@@ -57585,42 +60481,11 @@ index aa3cb62..bc53934 100644 |
15294 |
static int __init init_elf_binfmt(void) |
15295 |
{ |
15296 |
register_binfmt(&elf_format); |
15297 |
-diff --git a/fs/bio.c b/fs/bio.c |
15298 |
-index 6f0362b..26a7496 100644 |
15299 |
---- a/fs/bio.c |
15300 |
-+++ b/fs/bio.c |
15301 |
-@@ -1144,7 +1144,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q, |
15302 |
- /* |
15303 |
- * Overflow, abort |
15304 |
- */ |
15305 |
-- if (end < start) |
15306 |
-+ if (end < start || end - start > INT_MAX - nr_pages) |
15307 |
- return ERR_PTR(-EINVAL); |
15308 |
- |
15309 |
- nr_pages += end - start; |
15310 |
-@@ -1278,7 +1278,7 @@ static struct bio *__bio_map_user_iov(struct request_queue *q, |
15311 |
- /* |
15312 |
- * Overflow, abort |
15313 |
- */ |
15314 |
-- if (end < start) |
15315 |
-+ if (end < start || end - start > INT_MAX - nr_pages) |
15316 |
- return ERR_PTR(-EINVAL); |
15317 |
- |
15318 |
- nr_pages += end - start; |
15319 |
-@@ -1540,7 +1540,7 @@ static void bio_copy_kern_endio(struct bio *bio, int err) |
15320 |
- const int read = bio_data_dir(bio) == READ; |
15321 |
- struct bio_map_data *bmd = bio->bi_private; |
15322 |
- int i; |
15323 |
-- char *p = bmd->sgvecs[0].iov_base; |
15324 |
-+ char *p = (char __force_kernel *)bmd->sgvecs[0].iov_base; |
15325 |
- |
15326 |
- bio_for_each_segment_all(bvec, bio, i) { |
15327 |
- char *addr = page_address(bvec->bv_page); |
15328 |
diff --git a/fs/block_dev.c b/fs/block_dev.c |
15329 |
-index 552a8d1..d51ccf3 100644 |
15330 |
+index 6d72746..536d1db 100644 |
15331 |
--- a/fs/block_dev.c |
15332 |
+++ b/fs/block_dev.c |
15333 |
-@@ -637,7 +637,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole, |
15334 |
+@@ -701,7 +701,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole, |
15335 |
else if (bdev->bd_contains == bdev) |
15336 |
return true; /* is a whole device which isn't held */ |
15337 |
|
15338 |
@@ -57630,10 +60495,10 @@ index 552a8d1..d51ccf3 100644 |
15339 |
else if (whole->bd_holder != NULL) |
15340 |
return false; /* is a partition of a held device */ |
15341 |
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c |
15342 |
-index 1bcfcdb..e942132 100644 |
15343 |
+index aeab453..48dbafc 100644 |
15344 |
--- a/fs/btrfs/ctree.c |
15345 |
+++ b/fs/btrfs/ctree.c |
15346 |
-@@ -1216,9 +1216,12 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans, |
15347 |
+@@ -1184,9 +1184,12 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans, |
15348 |
free_extent_buffer(buf); |
15349 |
add_root_to_dirty_list(root); |
15350 |
} else { |
15351 |
@@ -57650,10 +60515,10 @@ index 1bcfcdb..e942132 100644 |
15352 |
|
15353 |
WARN_ON(trans->transid != btrfs_header_generation(parent)); |
15354 |
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c |
15355 |
-index 33e561a..16df7ae 100644 |
15356 |
+index da775bf..882da68 100644 |
15357 |
--- a/fs/btrfs/delayed-inode.c |
15358 |
+++ b/fs/btrfs/delayed-inode.c |
15359 |
-@@ -459,7 +459,7 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node, |
15360 |
+@@ -462,7 +462,7 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node, |
15361 |
|
15362 |
static void finish_one_item(struct btrfs_delayed_root *delayed_root) |
15363 |
{ |
15364 |
@@ -57662,7 +60527,7 @@ index 33e561a..16df7ae 100644 |
15365 |
if ((atomic_dec_return(&delayed_root->items) < |
15366 |
BTRFS_DELAYED_BACKGROUND || seq % BTRFS_DELAYED_BATCH == 0) && |
15367 |
waitqueue_active(&delayed_root->wait)) |
15368 |
-@@ -1409,7 +1409,7 @@ void btrfs_assert_delayed_root_empty(struct btrfs_root *root) |
15369 |
+@@ -1412,7 +1412,7 @@ void btrfs_assert_delayed_root_empty(struct btrfs_root *root) |
15370 |
|
15371 |
static int could_end_wait(struct btrfs_delayed_root *delayed_root, int seq) |
15372 |
{ |
15373 |
@@ -57671,7 +60536,7 @@ index 33e561a..16df7ae 100644 |
15374 |
|
15375 |
if (val < seq || val >= seq + BTRFS_DELAYED_BATCH) |
15376 |
return 1; |
15377 |
-@@ -1433,7 +1433,7 @@ void btrfs_balance_delayed_items(struct btrfs_root *root) |
15378 |
+@@ -1436,7 +1436,7 @@ void btrfs_balance_delayed_items(struct btrfs_root *root) |
15379 |
int seq; |
15380 |
int ret; |
15381 |
|
15382 |
@@ -57703,10 +60568,10 @@ index f70119f..ab5894d 100644 |
15383 |
spin_lock_init(&delayed_root->lock); |
15384 |
init_waitqueue_head(&delayed_root->wait); |
15385 |
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c |
15386 |
-index 2f6d7b1..f186382 100644 |
15387 |
+index 47aceb4..7d28b1c 100644 |
15388 |
--- a/fs/btrfs/ioctl.c |
15389 |
+++ b/fs/btrfs/ioctl.c |
15390 |
-@@ -3575,9 +3575,12 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg) |
15391 |
+@@ -3965,9 +3965,12 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg) |
15392 |
for (i = 0; i < num_types; i++) { |
15393 |
struct btrfs_space_info *tmp; |
15394 |
|
15395 |
@@ -57719,7 +60584,7 @@ index 2f6d7b1..f186382 100644 |
15396 |
info = NULL; |
15397 |
rcu_read_lock(); |
15398 |
list_for_each_entry_rcu(tmp, &root->fs_info->space_info, |
15399 |
-@@ -3599,10 +3602,7 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg) |
15400 |
+@@ -3989,10 +3992,7 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg) |
15401 |
memcpy(dest, &space, sizeof(space)); |
15402 |
dest++; |
15403 |
space_args.total_spaces++; |
15404 |
@@ -57731,7 +60596,7 @@ index 2f6d7b1..f186382 100644 |
15405 |
up_read(&info->groups_sem); |
15406 |
} |
15407 |
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c |
15408 |
-index 9601d25..2896d6c 100644 |
15409 |
+index 8e16bca..6eabd9e 100644 |
15410 |
--- a/fs/btrfs/super.c |
15411 |
+++ b/fs/btrfs/super.c |
15412 |
@@ -270,7 +270,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans, |
15413 |
@@ -57744,10 +60609,10 @@ index 9601d25..2896d6c 100644 |
15414 |
wake_up(&root->fs_info->transaction_wait); |
15415 |
wake_up(&root->fs_info->transaction_blocked_wait); |
15416 |
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c |
15417 |
-index 4825cd2..b2fe768 100644 |
15418 |
+index 7869936..7e153dc 100644 |
15419 |
--- a/fs/btrfs/sysfs.c |
15420 |
+++ b/fs/btrfs/sysfs.c |
15421 |
-@@ -438,7 +438,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add) |
15422 |
+@@ -475,7 +475,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add) |
15423 |
for (set = 0; set < FEAT_MAX; set++) { |
15424 |
int i; |
15425 |
struct attribute *attrs[2]; |
15426 |
@@ -57756,60 +60621,24 @@ index 4825cd2..b2fe768 100644 |
15427 |
.name = "features", |
15428 |
.attrs = attrs, |
15429 |
}; |
15430 |
-diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c |
15431 |
-index e2f45fc..b036909 100644 |
15432 |
---- a/fs/btrfs/tree-log.c |
15433 |
-+++ b/fs/btrfs/tree-log.c |
15434 |
-@@ -2533,7 +2533,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, |
15435 |
- blk_finish_plug(&plug); |
15436 |
- btrfs_abort_transaction(trans, root, ret); |
15437 |
- btrfs_free_logged_extents(log, log_transid); |
15438 |
-- ACCESS_ONCE(root->fs_info->last_trans_log_full_commit) = |
15439 |
-+ ACCESS_ONCE_RW(root->fs_info->last_trans_log_full_commit) = |
15440 |
- trans->transid; |
15441 |
- mutex_unlock(&root->log_mutex); |
15442 |
- goto out; |
15443 |
-@@ -2577,7 +2577,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, |
15444 |
- list_del_init(&root_log_ctx.list); |
15445 |
- |
15446 |
- blk_finish_plug(&plug); |
15447 |
-- ACCESS_ONCE(root->fs_info->last_trans_log_full_commit) = |
15448 |
-+ ACCESS_ONCE_RW(root->fs_info->last_trans_log_full_commit) = |
15449 |
- trans->transid; |
15450 |
- if (ret != -ENOSPC) { |
15451 |
- btrfs_abort_transaction(trans, root, ret); |
15452 |
-@@ -2622,7 +2622,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, |
15453 |
- * now that we've moved on to the tree of log tree roots, |
15454 |
- * check the full commit flag again |
15455 |
- */ |
15456 |
-- if (ACCESS_ONCE(root->fs_info->last_trans_log_full_commit) == |
15457 |
-+ if (ACCESS_ONCE_RW(root->fs_info->last_trans_log_full_commit) == |
15458 |
- trans->transid) { |
15459 |
- blk_finish_plug(&plug); |
15460 |
- btrfs_wait_marked_extents(log, &log->dirty_log_pages, mark); |
15461 |
-@@ -2637,7 +2637,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, |
15462 |
- EXTENT_DIRTY | EXTENT_NEW); |
15463 |
- blk_finish_plug(&plug); |
15464 |
- if (ret) { |
15465 |
-- ACCESS_ONCE(root->fs_info->last_trans_log_full_commit) = |
15466 |
-+ ACCESS_ONCE_RW(root->fs_info->last_trans_log_full_commit) = |
15467 |
- trans->transid; |
15468 |
- btrfs_abort_transaction(trans, root, ret); |
15469 |
- btrfs_free_logged_extents(log, log_transid); |
15470 |
-@@ -2667,7 +2667,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, |
15471 |
- */ |
15472 |
- ret = write_ctree_super(trans, root->fs_info->tree_root, 1); |
15473 |
- if (ret) { |
15474 |
-- ACCESS_ONCE(root->fs_info->last_trans_log_full_commit) = |
15475 |
-+ ACCESS_ONCE_RW(root->fs_info->last_trans_log_full_commit) = |
15476 |
- trans->transid; |
15477 |
- btrfs_abort_transaction(trans, root, ret); |
15478 |
- goto out_wake_log_root; |
15479 |
+diff --git a/fs/btrfs/tree-log.h b/fs/btrfs/tree-log.h |
15480 |
+index 7f5b41b..e589c13 100644 |
15481 |
+--- a/fs/btrfs/tree-log.h |
15482 |
++++ b/fs/btrfs/tree-log.h |
15483 |
+@@ -41,7 +41,7 @@ static inline void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx) |
15484 |
+ static inline void btrfs_set_log_full_commit(struct btrfs_fs_info *fs_info, |
15485 |
+ struct btrfs_trans_handle *trans) |
15486 |
+ { |
15487 |
+- ACCESS_ONCE(fs_info->last_trans_log_full_commit) = trans->transid; |
15488 |
++ ACCESS_ONCE_RW(fs_info->last_trans_log_full_commit) = trans->transid; |
15489 |
+ } |
15490 |
+ |
15491 |
+ static inline int btrfs_need_log_full_commit(struct btrfs_fs_info *fs_info, |
15492 |
diff --git a/fs/buffer.c b/fs/buffer.c |
15493 |
-index 9ddb9fc..7aa2487 100644 |
15494 |
+index eba6e4f..af1182c 100644 |
15495 |
--- a/fs/buffer.c |
15496 |
+++ b/fs/buffer.c |
15497 |
-@@ -3428,7 +3428,7 @@ void __init buffer_init(void) |
15498 |
+@@ -3429,7 +3429,7 @@ void __init buffer_init(void) |
15499 |
bh_cachep = kmem_cache_create("buffer_head", |
15500 |
sizeof(struct buffer_head), 0, |
15501 |
(SLAB_RECLAIM_ACCOUNT|SLAB_PANIC| |
15502 |
@@ -57819,7 +60648,7 @@ index 9ddb9fc..7aa2487 100644 |
15503 |
|
15504 |
/* |
15505 |
diff --git a/fs/cachefiles/bind.c b/fs/cachefiles/bind.c |
15506 |
-index 5b99baf..47fffb5 100644 |
15507 |
+index d749731..dd333a6 100644 |
15508 |
--- a/fs/cachefiles/bind.c |
15509 |
+++ b/fs/cachefiles/bind.c |
15510 |
@@ -39,13 +39,11 @@ int cachefiles_daemon_bind(struct cachefiles_cache *cache, char *args) |
15511 |
@@ -57839,7 +60668,7 @@ index 5b99baf..47fffb5 100644 |
15512 |
cache->brun_percent < 100); |
15513 |
|
15514 |
diff --git a/fs/cachefiles/daemon.c b/fs/cachefiles/daemon.c |
15515 |
-index 0a1467b..6a53245 100644 |
15516 |
+index b078d30..db23012 100644 |
15517 |
--- a/fs/cachefiles/daemon.c |
15518 |
+++ b/fs/cachefiles/daemon.c |
15519 |
@@ -196,7 +196,7 @@ static ssize_t cachefiles_daemon_read(struct file *file, char __user *_buffer, |
15520 |
@@ -57860,7 +60689,7 @@ index 0a1467b..6a53245 100644 |
15521 |
return -EOPNOTSUPP; |
15522 |
|
15523 |
/* drag the command string into the kernel so we can parse it */ |
15524 |
-@@ -386,7 +386,7 @@ static int cachefiles_daemon_fstop(struct cachefiles_cache *cache, char *args) |
15525 |
+@@ -385,7 +385,7 @@ static int cachefiles_daemon_fstop(struct cachefiles_cache *cache, char *args) |
15526 |
if (args[0] != '%' || args[1] != '\0') |
15527 |
return -EINVAL; |
15528 |
|
15529 |
@@ -57869,7 +60698,7 @@ index 0a1467b..6a53245 100644 |
15530 |
return cachefiles_daemon_range_error(cache, args); |
15531 |
|
15532 |
cache->fstop_percent = fstop; |
15533 |
-@@ -458,7 +458,7 @@ static int cachefiles_daemon_bstop(struct cachefiles_cache *cache, char *args) |
15534 |
+@@ -457,7 +457,7 @@ static int cachefiles_daemon_bstop(struct cachefiles_cache *cache, char *args) |
15535 |
if (args[0] != '%' || args[1] != '\0') |
15536 |
return -EINVAL; |
15537 |
|
15538 |
@@ -57879,10 +60708,10 @@ index 0a1467b..6a53245 100644 |
15539 |
|
15540 |
cache->bstop_percent = bstop; |
15541 |
diff --git a/fs/cachefiles/internal.h b/fs/cachefiles/internal.h |
15542 |
-index 5349473..d6c0b93 100644 |
15543 |
+index 3d50998..0550d67 100644 |
15544 |
--- a/fs/cachefiles/internal.h |
15545 |
+++ b/fs/cachefiles/internal.h |
15546 |
-@@ -59,7 +59,7 @@ struct cachefiles_cache { |
15547 |
+@@ -66,7 +66,7 @@ struct cachefiles_cache { |
15548 |
wait_queue_head_t daemon_pollwq; /* poll waitqueue for daemon */ |
15549 |
struct rb_root active_nodes; /* active nodes (can't be culled) */ |
15550 |
rwlock_t active_lock; /* lock for active_nodes */ |
15551 |
@@ -57891,7 +60720,7 @@ index 5349473..d6c0b93 100644 |
15552 |
unsigned frun_percent; /* when to stop culling (% files) */ |
15553 |
unsigned fcull_percent; /* when to start culling (% files) */ |
15554 |
unsigned fstop_percent; /* when to stop allocating (% files) */ |
15555 |
-@@ -171,19 +171,19 @@ extern int cachefiles_check_in_use(struct cachefiles_cache *cache, |
15556 |
+@@ -178,19 +178,19 @@ extern int cachefiles_check_in_use(struct cachefiles_cache *cache, |
15557 |
* proc.c |
15558 |
*/ |
15559 |
#ifdef CONFIG_CACHEFILES_HISTOGRAM |
15560 |
@@ -57917,10 +60746,10 @@ index 5349473..d6c0b93 100644 |
15561 |
|
15562 |
#else |
15563 |
diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c |
15564 |
-index c0a6817..ea811166 100644 |
15565 |
+index 5bf2b41..85b93f9 100644 |
15566 |
--- a/fs/cachefiles/namei.c |
15567 |
+++ b/fs/cachefiles/namei.c |
15568 |
-@@ -317,7 +317,7 @@ try_again: |
15569 |
+@@ -312,7 +312,7 @@ try_again: |
15570 |
/* first step is to make up a grave dentry in the graveyard */ |
15571 |
sprintf(nbuffer, "%08x%08x", |
15572 |
(uint32_t) get_seconds(), |
15573 |
@@ -58052,10 +60881,10 @@ index f3ac415..3d2420c 100644 |
15574 |
server->ops->print_stats(m, tcon); |
15575 |
} |
15576 |
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c |
15577 |
-index 5be1f997..fa1015a1 100644 |
15578 |
+index 8883980..c8ade72 100644 |
15579 |
--- a/fs/cifs/cifsfs.c |
15580 |
+++ b/fs/cifs/cifsfs.c |
15581 |
-@@ -1068,7 +1068,7 @@ cifs_init_request_bufs(void) |
15582 |
+@@ -1072,7 +1072,7 @@ cifs_init_request_bufs(void) |
15583 |
*/ |
15584 |
cifs_req_cachep = kmem_cache_create("cifs_request", |
15585 |
CIFSMaxBufSize + max_hdr_size, 0, |
15586 |
@@ -58064,7 +60893,7 @@ index 5be1f997..fa1015a1 100644 |
15587 |
if (cifs_req_cachep == NULL) |
15588 |
return -ENOMEM; |
15589 |
|
15590 |
-@@ -1095,7 +1095,7 @@ cifs_init_request_bufs(void) |
15591 |
+@@ -1099,7 +1099,7 @@ cifs_init_request_bufs(void) |
15592 |
efficient to alloc 1 per page off the slab compared to 17K (5page) |
15593 |
alloc of large cifs buffers even when page debugging is on */ |
15594 |
cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq", |
15595 |
@@ -58073,7 +60902,7 @@ index 5be1f997..fa1015a1 100644 |
15596 |
NULL); |
15597 |
if (cifs_sm_req_cachep == NULL) { |
15598 |
mempool_destroy(cifs_req_poolp); |
15599 |
-@@ -1180,8 +1180,8 @@ init_cifs(void) |
15600 |
+@@ -1184,8 +1184,8 @@ init_cifs(void) |
15601 |
atomic_set(&bufAllocCount, 0); |
15602 |
atomic_set(&smBufAllocCount, 0); |
15603 |
#ifdef CONFIG_CIFS_STATS2 |
15604 |
@@ -58085,10 +60914,10 @@ index 5be1f997..fa1015a1 100644 |
15605 |
|
15606 |
atomic_set(&midCount, 0); |
15607 |
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h |
15608 |
-index 30f6e92..e915ba5 100644 |
15609 |
+index de6aed8..a0a76fd 100644 |
15610 |
--- a/fs/cifs/cifsglob.h |
15611 |
+++ b/fs/cifs/cifsglob.h |
15612 |
-@@ -806,35 +806,35 @@ struct cifs_tcon { |
15613 |
+@@ -807,35 +807,35 @@ struct cifs_tcon { |
15614 |
__u16 Flags; /* optional support bits */ |
15615 |
enum statusEnum tidStatus; |
15616 |
#ifdef CONFIG_CIFS_STATS |
15617 |
@@ -58148,7 +60977,7 @@ index 30f6e92..e915ba5 100644 |
15618 |
} smb2_stats; |
15619 |
#endif /* CONFIG_CIFS_SMB2 */ |
15620 |
} stats; |
15621 |
-@@ -1170,7 +1170,7 @@ convert_delimiter(char *path, char delim) |
15622 |
+@@ -1172,7 +1172,7 @@ convert_delimiter(char *path, char delim) |
15623 |
} |
15624 |
|
15625 |
#ifdef CONFIG_CIFS_STATS |
15626 |
@@ -58157,7 +60986,7 @@ index 30f6e92..e915ba5 100644 |
15627 |
|
15628 |
static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon, |
15629 |
unsigned int bytes) |
15630 |
-@@ -1536,8 +1536,8 @@ GLOBAL_EXTERN atomic_t tconInfoReconnectCount; |
15631 |
+@@ -1538,8 +1538,8 @@ GLOBAL_EXTERN atomic_t tconInfoReconnectCount; |
15632 |
/* Various Debug counters */ |
15633 |
GLOBAL_EXTERN atomic_t bufAllocCount; /* current number allocated */ |
15634 |
#ifdef CONFIG_CIFS_STATS2 |
15635 |
@@ -58169,7 +60998,7 @@ index 30f6e92..e915ba5 100644 |
15636 |
GLOBAL_EXTERN atomic_t smBufAllocCount; |
15637 |
GLOBAL_EXTERN atomic_t midCount; |
15638 |
diff --git a/fs/cifs/file.c b/fs/cifs/file.c |
15639 |
-index 5ed03e0..e9a3a6c 100644 |
15640 |
+index e90a1e9..908699d 100644 |
15641 |
--- a/fs/cifs/file.c |
15642 |
+++ b/fs/cifs/file.c |
15643 |
@@ -1900,10 +1900,14 @@ static int cifs_writepages(struct address_space *mapping, |
15644 |
@@ -58322,7 +61151,7 @@ index d1fdfa8..94558f8 100644 |
15645 |
} |
15646 |
|
15647 |
diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c |
15648 |
-index 35ddc3e..563e809 100644 |
15649 |
+index 787844b..8e7bc7d 100644 |
15650 |
--- a/fs/cifs/smb2ops.c |
15651 |
+++ b/fs/cifs/smb2ops.c |
15652 |
@@ -364,8 +364,8 @@ smb2_clear_stats(struct cifs_tcon *tcon) |
15653 |
@@ -58443,10 +61272,10 @@ index 35ddc3e..563e809 100644 |
15654 |
} |
15655 |
|
15656 |
diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c |
15657 |
-index 1fb6ad2..758e171 100644 |
15658 |
+index b0b260d..c8927e1 100644 |
15659 |
--- a/fs/cifs/smb2pdu.c |
15660 |
+++ b/fs/cifs/smb2pdu.c |
15661 |
-@@ -2097,8 +2097,7 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon, |
15662 |
+@@ -2105,8 +2105,7 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon, |
15663 |
default: |
15664 |
cifs_dbg(VFS, "info level %u isn't supported\n", |
15665 |
srch_inf->info_level); |
15666 |
@@ -58679,7 +61508,7 @@ index e822890..fed89d9 100644 |
15667 |
return 1; |
15668 |
if (a < b) |
15669 |
diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c |
15670 |
-index e081acb..911df21 100644 |
15671 |
+index 668dcab..daebcd6 100644 |
15672 |
--- a/fs/configfs/dir.c |
15673 |
+++ b/fs/configfs/dir.c |
15674 |
@@ -1548,7 +1548,8 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx) |
15675 |
@@ -58813,7 +61642,7 @@ index a93f7e6..d58bcbe 100644 |
15676 |
return 0; |
15677 |
while (nr) { |
15678 |
diff --git a/fs/dcache.c b/fs/dcache.c |
15679 |
-index e99c6f5..2838bf58 100644 |
15680 |
+index 06f6585..f95a6d1 100644 |
15681 |
--- a/fs/dcache.c |
15682 |
+++ b/fs/dcache.c |
15683 |
@@ -1445,7 +1445,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name) |
15684 |
@@ -58878,7 +61707,7 @@ index e4141f2..d8263e8 100644 |
15685 |
i += packet_length_size; |
15686 |
if (copy_to_user(&buf[i], msg_ctx->msg, msg_ctx->msg_size)) |
15687 |
diff --git a/fs/exec.c b/fs/exec.c |
15688 |
-index 238b7aa..a421d91 100644 |
15689 |
+index a3d33fe..49e9bc9 100644 |
15690 |
--- a/fs/exec.c |
15691 |
+++ b/fs/exec.c |
15692 |
@@ -56,8 +56,20 @@ |
15693 |
@@ -59195,7 +62024,7 @@ index 238b7aa..a421d91 100644 |
15694 |
tsk->mm->vmacache_seqnum = 0; |
15695 |
vmacache_flush(tsk); |
15696 |
task_unlock(tsk); |
15697 |
-@@ -1246,7 +1325,7 @@ static void check_unsafe_exec(struct linux_binprm *bprm) |
15698 |
+@@ -1247,7 +1326,7 @@ static void check_unsafe_exec(struct linux_binprm *bprm) |
15699 |
} |
15700 |
rcu_read_unlock(); |
15701 |
|
15702 |
@@ -59204,7 +62033,7 @@ index 238b7aa..a421d91 100644 |
15703 |
bprm->unsafe |= LSM_UNSAFE_SHARE; |
15704 |
else |
15705 |
p->fs->in_exec = 1; |
15706 |
-@@ -1422,6 +1501,31 @@ static int exec_binprm(struct linux_binprm *bprm) |
15707 |
+@@ -1423,6 +1502,31 @@ static int exec_binprm(struct linux_binprm *bprm) |
15708 |
return ret; |
15709 |
} |
15710 |
|
15711 |
@@ -59236,7 +62065,7 @@ index 238b7aa..a421d91 100644 |
15712 |
/* |
15713 |
* sys_execve() executes a new program. |
15714 |
*/ |
15715 |
-@@ -1429,6 +1533,11 @@ static int do_execve_common(struct filename *filename, |
15716 |
+@@ -1430,6 +1534,11 @@ static int do_execve_common(struct filename *filename, |
15717 |
struct user_arg_ptr argv, |
15718 |
struct user_arg_ptr envp) |
15719 |
{ |
15720 |
@@ -59248,7 +62077,7 @@ index 238b7aa..a421d91 100644 |
15721 |
struct linux_binprm *bprm; |
15722 |
struct file *file; |
15723 |
struct files_struct *displaced; |
15724 |
-@@ -1437,6 +1546,8 @@ static int do_execve_common(struct filename *filename, |
15725 |
+@@ -1438,6 +1547,8 @@ static int do_execve_common(struct filename *filename, |
15726 |
if (IS_ERR(filename)) |
15727 |
return PTR_ERR(filename); |
15728 |
|
15729 |
@@ -59257,7 +62086,7 @@ index 238b7aa..a421d91 100644 |
15730 |
/* |
15731 |
* We move the actual failure in case of RLIMIT_NPROC excess from |
15732 |
* set*uid() to execve() because too many poorly written programs |
15733 |
-@@ -1474,11 +1585,21 @@ static int do_execve_common(struct filename *filename, |
15734 |
+@@ -1475,11 +1586,21 @@ static int do_execve_common(struct filename *filename, |
15735 |
if (IS_ERR(file)) |
15736 |
goto out_unmark; |
15737 |
|
15738 |
@@ -59279,7 +62108,7 @@ index 238b7aa..a421d91 100644 |
15739 |
retval = bprm_mm_init(bprm); |
15740 |
if (retval) |
15741 |
goto out_unmark; |
15742 |
-@@ -1495,24 +1616,70 @@ static int do_execve_common(struct filename *filename, |
15743 |
+@@ -1496,24 +1617,70 @@ static int do_execve_common(struct filename *filename, |
15744 |
if (retval < 0) |
15745 |
goto out; |
15746 |
|
15747 |
@@ -59354,7 +62183,7 @@ index 238b7aa..a421d91 100644 |
15748 |
current->fs->in_exec = 0; |
15749 |
current->in_execve = 0; |
15750 |
acct_update_integrals(current); |
15751 |
-@@ -1523,6 +1690,14 @@ static int do_execve_common(struct filename *filename, |
15752 |
+@@ -1524,6 +1691,14 @@ static int do_execve_common(struct filename *filename, |
15753 |
put_files_struct(displaced); |
15754 |
return retval; |
15755 |
|
15756 |
@@ -59369,7 +62198,7 @@ index 238b7aa..a421d91 100644 |
15757 |
out: |
15758 |
if (bprm->mm) { |
15759 |
acct_arg_size(bprm, 0); |
15760 |
-@@ -1614,3 +1789,312 @@ COMPAT_SYSCALL_DEFINE3(execve, const char __user *, filename, |
15761 |
+@@ -1615,3 +1790,312 @@ COMPAT_SYSCALL_DEFINE3(execve, const char __user *, filename, |
15762 |
return compat_do_execve(getname(filename), argv, envp); |
15763 |
} |
15764 |
#endif |
15765 |
@@ -59767,10 +62596,10 @@ index c6874be..f8a6ae8 100644 |
15766 |
|
15767 |
static int |
15768 |
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c |
15769 |
-index 5c56785..77698a2 100644 |
15770 |
+index fca3820..e1ea241 100644 |
15771 |
--- a/fs/ext4/balloc.c |
15772 |
+++ b/fs/ext4/balloc.c |
15773 |
-@@ -534,8 +534,8 @@ static int ext4_has_free_clusters(struct ext4_sb_info *sbi, |
15774 |
+@@ -553,8 +553,8 @@ static int ext4_has_free_clusters(struct ext4_sb_info *sbi, |
15775 |
/* Hm, nope. Are (enough) root reserved clusters available? */ |
15776 |
if (uid_eq(sbi->s_resuid, current_fsuid()) || |
15777 |
(!gid_eq(sbi->s_resgid, GLOBAL_ROOT_GID) && in_group_p(sbi->s_resgid)) || |
15778 |
@@ -59782,10 +62611,10 @@ index 5c56785..77698a2 100644 |
15779 |
if (free_clusters >= (nclusters + dirty_clusters + |
15780 |
resv_clusters)) |
15781 |
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h |
15782 |
-index f542e48..c0275f5 100644 |
15783 |
+index 7cc5a0e..851f176 100644 |
15784 |
--- a/fs/ext4/ext4.h |
15785 |
+++ b/fs/ext4/ext4.h |
15786 |
-@@ -1274,19 +1274,19 @@ struct ext4_sb_info { |
15787 |
+@@ -1276,19 +1276,19 @@ struct ext4_sb_info { |
15788 |
unsigned long s_mb_last_start; |
15789 |
|
15790 |
/* stats for buddy allocator */ |
15791 |
@@ -59815,26 +62644,11 @@ index f542e48..c0275f5 100644 |
15792 |
atomic_t s_lock_busy; |
15793 |
|
15794 |
/* locality groups */ |
15795 |
-diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c |
15796 |
-index e6574d7..c30cbe2 100644 |
15797 |
---- a/fs/ext4/indirect.c |
15798 |
-+++ b/fs/ext4/indirect.c |
15799 |
-@@ -1345,8 +1345,8 @@ static int free_hole_blocks(handle_t *handle, struct inode *inode, |
15800 |
- if (level == 0 || |
15801 |
- (bh && all_zeroes((__le32 *)bh->b_data, |
15802 |
- (__le32 *)bh->b_data + addr_per_block))) { |
15803 |
-- ext4_free_data(handle, inode, parent_bh, &blk, &blk+1); |
15804 |
-- *i_data = 0; |
15805 |
-+ ext4_free_data(handle, inode, parent_bh, |
15806 |
-+ i_data, i_data + 1); |
15807 |
- } |
15808 |
- brelse(bh); |
15809 |
- bh = NULL; |
15810 |
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c |
15811 |
-index 2735a72..d083044 100644 |
15812 |
+index 2dcb936..f5625a0 100644 |
15813 |
--- a/fs/ext4/mballoc.c |
15814 |
+++ b/fs/ext4/mballoc.c |
15815 |
-@@ -1889,7 +1889,7 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac, |
15816 |
+@@ -1899,7 +1899,7 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac, |
15817 |
BUG_ON(ac->ac_b_ex.fe_len != ac->ac_g_ex.fe_len); |
15818 |
|
15819 |
if (EXT4_SB(sb)->s_mb_stats) |
15820 |
@@ -59843,7 +62657,7 @@ index 2735a72..d083044 100644 |
15821 |
|
15822 |
break; |
15823 |
} |
15824 |
-@@ -2199,7 +2199,7 @@ repeat: |
15825 |
+@@ -2209,7 +2209,7 @@ repeat: |
15826 |
ac->ac_status = AC_STATUS_CONTINUE; |
15827 |
ac->ac_flags |= EXT4_MB_HINT_FIRST; |
15828 |
cr = 3; |
15829 |
@@ -59852,7 +62666,7 @@ index 2735a72..d083044 100644 |
15830 |
goto repeat; |
15831 |
} |
15832 |
} |
15833 |
-@@ -2707,25 +2707,25 @@ int ext4_mb_release(struct super_block *sb) |
15834 |
+@@ -2715,25 +2715,25 @@ int ext4_mb_release(struct super_block *sb) |
15835 |
if (sbi->s_mb_stats) { |
15836 |
ext4_msg(sb, KERN_INFO, |
15837 |
"mballoc: %u blocks %u reqs (%u success)", |
15838 |
@@ -59888,7 +62702,7 @@ index 2735a72..d083044 100644 |
15839 |
} |
15840 |
|
15841 |
free_percpu(sbi->s_locality_groups); |
15842 |
-@@ -3179,16 +3179,16 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac) |
15843 |
+@@ -3189,16 +3189,16 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac) |
15844 |
struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb); |
15845 |
|
15846 |
if (sbi->s_mb_stats && ac->ac_g_ex.fe_len > 1) { |
15847 |
@@ -59911,7 +62725,7 @@ index 2735a72..d083044 100644 |
15848 |
} |
15849 |
|
15850 |
if (ac->ac_op == EXT4_MB_HISTORY_ALLOC) |
15851 |
-@@ -3593,7 +3593,7 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac) |
15852 |
+@@ -3603,7 +3603,7 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac) |
15853 |
trace_ext4_mb_new_inode_pa(ac, pa); |
15854 |
|
15855 |
ext4_mb_use_inode_pa(ac, pa); |
15856 |
@@ -59920,7 +62734,7 @@ index 2735a72..d083044 100644 |
15857 |
|
15858 |
ei = EXT4_I(ac->ac_inode); |
15859 |
grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group); |
15860 |
-@@ -3653,7 +3653,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac) |
15861 |
+@@ -3663,7 +3663,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac) |
15862 |
trace_ext4_mb_new_group_pa(ac, pa); |
15863 |
|
15864 |
ext4_mb_use_group_pa(ac, pa); |
15865 |
@@ -59929,7 +62743,7 @@ index 2735a72..d083044 100644 |
15866 |
|
15867 |
grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group); |
15868 |
lg = ac->ac_lg; |
15869 |
-@@ -3742,7 +3742,7 @@ ext4_mb_release_inode_pa(struct ext4_buddy *e4b, struct buffer_head *bitmap_bh, |
15870 |
+@@ -3752,7 +3752,7 @@ ext4_mb_release_inode_pa(struct ext4_buddy *e4b, struct buffer_head *bitmap_bh, |
15871 |
* from the bitmap and continue. |
15872 |
*/ |
15873 |
} |
15874 |
@@ -59938,7 +62752,7 @@ index 2735a72..d083044 100644 |
15875 |
|
15876 |
return err; |
15877 |
} |
15878 |
-@@ -3760,7 +3760,7 @@ ext4_mb_release_group_pa(struct ext4_buddy *e4b, |
15879 |
+@@ -3770,7 +3770,7 @@ ext4_mb_release_group_pa(struct ext4_buddy *e4b, |
15880 |
ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, &bit); |
15881 |
BUG_ON(group != e4b->bd_group && pa->pa_len != 0); |
15882 |
mb_free_blocks(pa->pa_inode, e4b, bit, pa->pa_len); |
15883 |
@@ -59948,7 +62762,7 @@ index 2735a72..d083044 100644 |
15884 |
|
15885 |
return 0; |
15886 |
diff --git a/fs/ext4/mmp.c b/fs/ext4/mmp.c |
15887 |
-index 04434ad..6404663 100644 |
15888 |
+index 32bce84..112d969 100644 |
15889 |
--- a/fs/ext4/mmp.c |
15890 |
+++ b/fs/ext4/mmp.c |
15891 |
@@ -113,7 +113,7 @@ static int read_mmp_block(struct super_block *sb, struct buffer_head **bh, |
15892 |
@@ -59961,10 +62775,10 @@ index 04434ad..6404663 100644 |
15893 |
"MMP failure info: last update time: %llu, last update " |
15894 |
"node: %s, last update device: %s\n", |
15895 |
diff --git a/fs/ext4/super.c b/fs/ext4/super.c |
15896 |
-index 29a403c..f58dbdb 100644 |
15897 |
+index 6df7bc6..410a655 100644 |
15898 |
--- a/fs/ext4/super.c |
15899 |
+++ b/fs/ext4/super.c |
15900 |
-@@ -1275,7 +1275,7 @@ static ext4_fsblk_t get_sb_block(void **data) |
15901 |
+@@ -1276,7 +1276,7 @@ static ext4_fsblk_t get_sb_block(void **data) |
15902 |
} |
15903 |
|
15904 |
#define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3)) |
15905 |
@@ -59973,7 +62787,7 @@ index 29a403c..f58dbdb 100644 |
15906 |
"Contact linux-ext4@×××××××××××.org if you think we should keep it.\n"; |
15907 |
|
15908 |
#ifdef CONFIG_QUOTA |
15909 |
-@@ -2453,7 +2453,7 @@ struct ext4_attr { |
15910 |
+@@ -2464,7 +2464,7 @@ struct ext4_attr { |
15911 |
int offset; |
15912 |
int deprecated_val; |
15913 |
} u; |
15914 |
@@ -59983,10 +62797,10 @@ index 29a403c..f58dbdb 100644 |
15915 |
static int parse_strtoull(const char *buf, |
15916 |
unsigned long long max, unsigned long long *value) |
15917 |
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c |
15918 |
-index 4eec399..1d9444c 100644 |
15919 |
+index e738733..9843a6c 100644 |
15920 |
--- a/fs/ext4/xattr.c |
15921 |
+++ b/fs/ext4/xattr.c |
15922 |
-@@ -383,7 +383,7 @@ static int |
15923 |
+@@ -386,7 +386,7 @@ static int |
15924 |
ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry, |
15925 |
char *buffer, size_t buffer_size) |
15926 |
{ |
15927 |
@@ -59995,7 +62809,7 @@ index 4eec399..1d9444c 100644 |
15928 |
|
15929 |
for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) { |
15930 |
const struct xattr_handler *handler = |
15931 |
-@@ -400,9 +400,10 @@ ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry, |
15932 |
+@@ -403,9 +403,10 @@ ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry, |
15933 |
buffer += size; |
15934 |
} |
15935 |
rest -= size; |
15936 |
@@ -60055,7 +62869,7 @@ index 999ff5c..ac037c9 100644 |
15937 |
goto out_err; |
15938 |
} |
15939 |
diff --git a/fs/file.c b/fs/file.c |
15940 |
-index 8f294cf..d0f3872 100644 |
15941 |
+index 66923fe..2849783 100644 |
15942 |
--- a/fs/file.c |
15943 |
+++ b/fs/file.c |
15944 |
@@ -16,6 +16,7 @@ |
15945 |
@@ -60066,7 +62880,7 @@ index 8f294cf..d0f3872 100644 |
15946 |
#include <linux/fdtable.h> |
15947 |
#include <linux/bitops.h> |
15948 |
#include <linux/interrupt.h> |
15949 |
-@@ -144,7 +145,7 @@ out: |
15950 |
+@@ -139,7 +140,7 @@ out: |
15951 |
* Return <0 error code on error; 1 on successful completion. |
15952 |
* The files->file_lock should be held on entry, and will be held on exit. |
15953 |
*/ |
15954 |
@@ -60075,7 +62889,7 @@ index 8f294cf..d0f3872 100644 |
15955 |
__releases(files->file_lock) |
15956 |
__acquires(files->file_lock) |
15957 |
{ |
15958 |
-@@ -189,7 +190,7 @@ static int expand_fdtable(struct files_struct *files, int nr) |
15959 |
+@@ -184,7 +185,7 @@ static int expand_fdtable(struct files_struct *files, int nr) |
15960 |
* expanded and execution may have blocked. |
15961 |
* The files->file_lock should be held on entry, and will be held on exit. |
15962 |
*/ |
15963 |
@@ -60084,7 +62898,7 @@ index 8f294cf..d0f3872 100644 |
15964 |
{ |
15965 |
struct fdtable *fdt; |
15966 |
|
15967 |
-@@ -804,6 +805,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags) |
15968 |
+@@ -799,6 +800,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags) |
15969 |
if (!file) |
15970 |
return __close_fd(files, fd); |
15971 |
|
15972 |
@@ -60092,7 +62906,7 @@ index 8f294cf..d0f3872 100644 |
15973 |
if (fd >= rlimit(RLIMIT_NOFILE)) |
15974 |
return -EBADF; |
15975 |
|
15976 |
-@@ -830,6 +832,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags) |
15977 |
+@@ -825,6 +827,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags) |
15978 |
if (unlikely(oldfd == newfd)) |
15979 |
return -EINVAL; |
15980 |
|
15981 |
@@ -60100,7 +62914,7 @@ index 8f294cf..d0f3872 100644 |
15982 |
if (newfd >= rlimit(RLIMIT_NOFILE)) |
15983 |
return -EBADF; |
15984 |
|
15985 |
-@@ -885,6 +888,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes) |
15986 |
+@@ -880,6 +883,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes) |
15987 |
int f_dupfd(unsigned int from, struct file *file, unsigned flags) |
15988 |
{ |
15989 |
int err; |
15990 |
@@ -60212,7 +63026,7 @@ index 7dca743..543d620 100644 |
15991 |
.seq = SEQCNT_ZERO(init_fs.seq), |
15992 |
.umask = 0022, |
15993 |
diff --git a/fs/fscache/cookie.c b/fs/fscache/cookie.c |
15994 |
-index 29d7feb..303644d 100644 |
15995 |
+index aec01be..cf81ff9 100644 |
15996 |
--- a/fs/fscache/cookie.c |
15997 |
+++ b/fs/fscache/cookie.c |
15998 |
@@ -19,7 +19,7 @@ |
15999 |
@@ -60357,10 +63171,10 @@ index 29d7feb..303644d 100644 |
16000 |
__fscache_use_cookie(cookie); |
16001 |
if (fscache_submit_op(object, op) < 0) |
16002 |
diff --git a/fs/fscache/internal.h b/fs/fscache/internal.h |
16003 |
-index 4226f66..0fb3f45 100644 |
16004 |
+index bc6c08f..09c0d96 100644 |
16005 |
--- a/fs/fscache/internal.h |
16006 |
+++ b/fs/fscache/internal.h |
16007 |
-@@ -133,8 +133,8 @@ extern void fscache_operation_gc(struct work_struct *); |
16008 |
+@@ -139,8 +139,8 @@ extern void fscache_operation_gc(struct work_struct *); |
16009 |
extern int fscache_wait_for_deferred_lookup(struct fscache_cookie *); |
16010 |
extern int fscache_wait_for_operation_activation(struct fscache_object *, |
16011 |
struct fscache_operation *, |
16012 |
@@ -60371,7 +63185,7 @@ index 4226f66..0fb3f45 100644 |
16013 |
void (*)(struct fscache_operation *)); |
16014 |
extern void fscache_invalidate_writes(struct fscache_cookie *); |
16015 |
|
16016 |
-@@ -153,101 +153,101 @@ extern void fscache_proc_cleanup(void); |
16017 |
+@@ -159,101 +159,101 @@ extern void fscache_proc_cleanup(void); |
16018 |
* stats.c |
16019 |
*/ |
16020 |
#ifdef CONFIG_FSCACHE_STATS |
16021 |
@@ -60554,7 +63368,7 @@ index 4226f66..0fb3f45 100644 |
16022 |
|
16023 |
extern atomic_t fscache_n_cop_alloc_object; |
16024 |
extern atomic_t fscache_n_cop_lookup_object; |
16025 |
-@@ -272,6 +272,11 @@ static inline void fscache_stat(atomic_t *stat) |
16026 |
+@@ -278,6 +278,11 @@ static inline void fscache_stat(atomic_t *stat) |
16027 |
atomic_inc(stat); |
16028 |
} |
16029 |
|
16030 |
@@ -60566,7 +63380,7 @@ index 4226f66..0fb3f45 100644 |
16031 |
static inline void fscache_stat_d(atomic_t *stat) |
16032 |
{ |
16033 |
atomic_dec(stat); |
16034 |
-@@ -284,6 +289,7 @@ extern const struct file_operations fscache_stats_fops; |
16035 |
+@@ -290,6 +295,7 @@ extern const struct file_operations fscache_stats_fops; |
16036 |
|
16037 |
#define __fscache_stat(stat) (NULL) |
16038 |
#define fscache_stat(stat) do {} while (0) |
16039 |
@@ -60690,7 +63504,7 @@ index d3b4539..ed0c659 100644 |
16040 |
object->cache->ops->update_object(object); |
16041 |
fscache_stat_d(&fscache_n_cop_update_object); |
16042 |
diff --git a/fs/fscache/operation.c b/fs/fscache/operation.c |
16043 |
-index 318071a..379938b 100644 |
16044 |
+index e7b87a0..a85d47a 100644 |
16045 |
--- a/fs/fscache/operation.c |
16046 |
+++ b/fs/fscache/operation.c |
16047 |
@@ -17,7 +17,7 @@ |
16048 |
@@ -60711,7 +63525,7 @@ index 318071a..379938b 100644 |
16049 |
switch (op->flags & FSCACHE_OP_TYPE) { |
16050 |
case FSCACHE_OP_ASYNC: |
16051 |
_debug("queue async"); |
16052 |
-@@ -73,7 +73,7 @@ static void fscache_run_op(struct fscache_object *object, |
16053 |
+@@ -72,7 +72,7 @@ static void fscache_run_op(struct fscache_object *object, |
16054 |
wake_up_bit(&op->flags, FSCACHE_OP_WAITING); |
16055 |
if (op->processor) |
16056 |
fscache_enqueue_operation(op); |
16057 |
@@ -60720,7 +63534,7 @@ index 318071a..379938b 100644 |
16058 |
} |
16059 |
|
16060 |
/* |
16061 |
-@@ -105,11 +105,11 @@ int fscache_submit_exclusive_op(struct fscache_object *object, |
16062 |
+@@ -104,11 +104,11 @@ int fscache_submit_exclusive_op(struct fscache_object *object, |
16063 |
if (object->n_in_progress > 0) { |
16064 |
atomic_inc(&op->usage); |
16065 |
list_add_tail(&op->pend_link, &object->pending_ops); |
16066 |
@@ -60734,7 +63548,7 @@ index 318071a..379938b 100644 |
16067 |
fscache_start_operations(object); |
16068 |
} else { |
16069 |
ASSERTCMP(object->n_in_progress, ==, 0); |
16070 |
-@@ -125,7 +125,7 @@ int fscache_submit_exclusive_op(struct fscache_object *object, |
16071 |
+@@ -124,7 +124,7 @@ int fscache_submit_exclusive_op(struct fscache_object *object, |
16072 |
object->n_exclusive++; /* reads and writes must wait */ |
16073 |
atomic_inc(&op->usage); |
16074 |
list_add_tail(&op->pend_link, &object->pending_ops); |
16075 |
@@ -60743,7 +63557,7 @@ index 318071a..379938b 100644 |
16076 |
ret = 0; |
16077 |
} else { |
16078 |
/* If we're in any other state, there must have been an I/O |
16079 |
-@@ -212,11 +212,11 @@ int fscache_submit_op(struct fscache_object *object, |
16080 |
+@@ -211,11 +211,11 @@ int fscache_submit_op(struct fscache_object *object, |
16081 |
if (object->n_exclusive > 0) { |
16082 |
atomic_inc(&op->usage); |
16083 |
list_add_tail(&op->pend_link, &object->pending_ops); |
16084 |
@@ -60757,7 +63571,7 @@ index 318071a..379938b 100644 |
16085 |
fscache_start_operations(object); |
16086 |
} else { |
16087 |
ASSERTCMP(object->n_exclusive, ==, 0); |
16088 |
-@@ -228,10 +228,10 @@ int fscache_submit_op(struct fscache_object *object, |
16089 |
+@@ -227,10 +227,10 @@ int fscache_submit_op(struct fscache_object *object, |
16090 |
object->n_ops++; |
16091 |
atomic_inc(&op->usage); |
16092 |
list_add_tail(&op->pend_link, &object->pending_ops); |
16093 |
@@ -60770,7 +63584,7 @@ index 318071a..379938b 100644 |
16094 |
op->state = FSCACHE_OP_ST_CANCELLED; |
16095 |
ret = -ENOBUFS; |
16096 |
} else if (!test_bit(FSCACHE_IOERROR, &object->cache->flags)) { |
16097 |
-@@ -310,7 +310,7 @@ int fscache_cancel_op(struct fscache_operation *op, |
16098 |
+@@ -309,7 +309,7 @@ int fscache_cancel_op(struct fscache_operation *op, |
16099 |
ret = -EBUSY; |
16100 |
if (op->state == FSCACHE_OP_ST_PENDING) { |
16101 |
ASSERT(!list_empty(&op->pend_link)); |
16102 |
@@ -60779,7 +63593,7 @@ index 318071a..379938b 100644 |
16103 |
list_del_init(&op->pend_link); |
16104 |
if (do_cancel) |
16105 |
do_cancel(op); |
16106 |
-@@ -342,7 +342,7 @@ void fscache_cancel_all_ops(struct fscache_object *object) |
16107 |
+@@ -341,7 +341,7 @@ void fscache_cancel_all_ops(struct fscache_object *object) |
16108 |
while (!list_empty(&object->pending_ops)) { |
16109 |
op = list_entry(object->pending_ops.next, |
16110 |
struct fscache_operation, pend_link); |
16111 |
@@ -60788,7 +63602,7 @@ index 318071a..379938b 100644 |
16112 |
list_del_init(&op->pend_link); |
16113 |
|
16114 |
ASSERTCMP(op->state, ==, FSCACHE_OP_ST_PENDING); |
16115 |
-@@ -414,7 +414,7 @@ void fscache_put_operation(struct fscache_operation *op) |
16116 |
+@@ -413,7 +413,7 @@ void fscache_put_operation(struct fscache_operation *op) |
16117 |
op->state, ==, FSCACHE_OP_ST_CANCELLED); |
16118 |
op->state = FSCACHE_OP_ST_DEAD; |
16119 |
|
16120 |
@@ -60797,7 +63611,7 @@ index 318071a..379938b 100644 |
16121 |
|
16122 |
if (op->release) { |
16123 |
op->release(op); |
16124 |
-@@ -433,7 +433,7 @@ void fscache_put_operation(struct fscache_operation *op) |
16125 |
+@@ -432,7 +432,7 @@ void fscache_put_operation(struct fscache_operation *op) |
16126 |
* lock, and defer it otherwise */ |
16127 |
if (!spin_trylock(&object->lock)) { |
16128 |
_debug("defer put"); |
16129 |
@@ -60806,7 +63620,7 @@ index 318071a..379938b 100644 |
16130 |
|
16131 |
cache = object->cache; |
16132 |
spin_lock(&cache->op_gc_list_lock); |
16133 |
-@@ -486,7 +486,7 @@ void fscache_operation_gc(struct work_struct *work) |
16134 |
+@@ -485,7 +485,7 @@ void fscache_operation_gc(struct work_struct *work) |
16135 |
|
16136 |
_debug("GC DEFERRED REL OBJ%x OP%x", |
16137 |
object->debug_id, op->debug_id); |
16138 |
@@ -60816,7 +63630,7 @@ index 318071a..379938b 100644 |
16139 |
ASSERTCMP(atomic_read(&op->usage), ==, 0); |
16140 |
ASSERTCMP(op->state, ==, FSCACHE_OP_ST_DEAD); |
16141 |
diff --git a/fs/fscache/page.c b/fs/fscache/page.c |
16142 |
-index 7f5c658..6c1e164 100644 |
16143 |
+index ed70714..67f4982 100644 |
16144 |
--- a/fs/fscache/page.c |
16145 |
+++ b/fs/fscache/page.c |
16146 |
@@ -61,7 +61,7 @@ try_again: |
16147 |
@@ -61599,10 +64413,10 @@ index 40d13c7..ddf52b9 100644 |
16148 |
seq_printf(m, "CacheOp: alo=%d luo=%d luc=%d gro=%d\n", |
16149 |
atomic_read(&fscache_n_cop_alloc_object), |
16150 |
diff --git a/fs/fuse/cuse.c b/fs/fuse/cuse.c |
16151 |
-index 13b691a..1ffca5ae 100644 |
16152 |
+index 966ace8..030a03a 100644 |
16153 |
--- a/fs/fuse/cuse.c |
16154 |
+++ b/fs/fuse/cuse.c |
16155 |
-@@ -607,10 +607,12 @@ static int __init cuse_init(void) |
16156 |
+@@ -611,10 +611,12 @@ static int __init cuse_init(void) |
16157 |
INIT_LIST_HEAD(&cuse_conntbl[i]); |
16158 |
|
16159 |
/* inherit and extend fuse_dev_operations */ |
16160 |
@@ -61620,7 +64434,7 @@ index 13b691a..1ffca5ae 100644 |
16161 |
cuse_class = class_create(THIS_MODULE, "cuse"); |
16162 |
if (IS_ERR(cuse_class)) |
16163 |
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c |
16164 |
-index 75fa055..73b76d8 100644 |
16165 |
+index ca88731..8e9c55d 100644 |
16166 |
--- a/fs/fuse/dev.c |
16167 |
+++ b/fs/fuse/dev.c |
16168 |
@@ -1318,7 +1318,7 @@ static ssize_t fuse_dev_splice_read(struct file *in, loff_t *ppos, |
16169 |
@@ -61642,10 +64456,10 @@ index 75fa055..73b76d8 100644 |
16170 |
} |
16171 |
|
16172 |
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c |
16173 |
-index 202a972..c4836eb 100644 |
16174 |
+index 0c60482..025724f 100644 |
16175 |
--- a/fs/fuse/dir.c |
16176 |
+++ b/fs/fuse/dir.c |
16177 |
-@@ -1479,7 +1479,7 @@ static char *read_link(struct dentry *dentry) |
16178 |
+@@ -1485,7 +1485,7 @@ static char *read_link(struct dentry *dentry) |
16179 |
return link; |
16180 |
} |
16181 |
|
16182 |
@@ -61655,7 +64469,7 @@ index 202a972..c4836eb 100644 |
16183 |
if (!IS_ERR(link)) |
16184 |
free_page((unsigned long) link); |
16185 |
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c |
16186 |
-index 9c470fd..aae410e 100644 |
16187 |
+index bb529f3..454c253 100644 |
16188 |
--- a/fs/hostfs/hostfs_kern.c |
16189 |
+++ b/fs/hostfs/hostfs_kern.c |
16190 |
@@ -898,7 +898,7 @@ static void *hostfs_follow_link(struct dentry *dentry, struct nameidata *nd) |
16191 |
@@ -61668,10 +64482,10 @@ index 9c470fd..aae410e 100644 |
16192 |
__putname(s); |
16193 |
} |
16194 |
diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c |
16195 |
-index e19d4c0..8a357a9 100644 |
16196 |
+index 1e2872b..7aea000 100644 |
16197 |
--- a/fs/hugetlbfs/inode.c |
16198 |
+++ b/fs/hugetlbfs/inode.c |
16199 |
-@@ -152,6 +152,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr, |
16200 |
+@@ -154,6 +154,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr, |
16201 |
struct mm_struct *mm = current->mm; |
16202 |
struct vm_area_struct *vma; |
16203 |
struct hstate *h = hstate_file(file); |
16204 |
@@ -61679,7 +64493,7 @@ index e19d4c0..8a357a9 100644 |
16205 |
struct vm_unmapped_area_info info; |
16206 |
|
16207 |
if (len & ~huge_page_mask(h)) |
16208 |
-@@ -165,17 +166,26 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr, |
16209 |
+@@ -167,17 +168,26 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr, |
16210 |
return addr; |
16211 |
} |
16212 |
|
16213 |
@@ -61708,7 +64522,7 @@ index e19d4c0..8a357a9 100644 |
16214 |
info.high_limit = TASK_SIZE; |
16215 |
info.align_mask = PAGE_MASK & ~huge_page_mask(h); |
16216 |
info.align_offset = 0; |
16217 |
-@@ -921,7 +931,7 @@ static struct file_system_type hugetlbfs_fs_type = { |
16218 |
+@@ -919,7 +929,7 @@ static struct file_system_type hugetlbfs_fs_type = { |
16219 |
}; |
16220 |
MODULE_ALIAS_FS("hugetlbfs"); |
16221 |
|
16222 |
@@ -61718,7 +64532,7 @@ index e19d4c0..8a357a9 100644 |
16223 |
static int can_do_hugetlb_shm(void) |
16224 |
{ |
16225 |
diff --git a/fs/inode.c b/fs/inode.c |
16226 |
-index d2fb2f2..a6444b0 100644 |
16227 |
+index 6eecb7f..abec305 100644 |
16228 |
--- a/fs/inode.c |
16229 |
+++ b/fs/inode.c |
16230 |
@@ -839,16 +839,20 @@ unsigned int get_next_ino(void) |
16231 |
@@ -61953,10 +64767,10 @@ index a6597d6..41b30ec 100644 |
16232 |
|
16233 |
/* |
16234 |
diff --git a/fs/jfs/super.c b/fs/jfs/super.c |
16235 |
-index 97f7fda..09bd33d 100644 |
16236 |
+index adf8cb0..bb935fa 100644 |
16237 |
--- a/fs/jfs/super.c |
16238 |
+++ b/fs/jfs/super.c |
16239 |
-@@ -885,7 +885,7 @@ static int __init init_jfs_fs(void) |
16240 |
+@@ -893,7 +893,7 @@ static int __init init_jfs_fs(void) |
16241 |
|
16242 |
jfs_inode_cachep = |
16243 |
kmem_cache_create("jfs_ip", sizeof(struct jfs_inode_info), 0, |
16244 |
@@ -61979,10 +64793,10 @@ index a693f5b..82276a1 100644 |
16245 |
unsigned long hash = init_name_hash(); |
16246 |
unsigned int len = strlen(name); |
16247 |
diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c |
16248 |
-index 5e9a80c..3853a24 100644 |
16249 |
+index d895b4b..0b8af77 100644 |
16250 |
--- a/fs/kernfs/file.c |
16251 |
+++ b/fs/kernfs/file.c |
16252 |
-@@ -33,7 +33,7 @@ static DEFINE_MUTEX(kernfs_open_file_mutex); |
16253 |
+@@ -34,7 +34,7 @@ static DEFINE_MUTEX(kernfs_open_file_mutex); |
16254 |
|
16255 |
struct kernfs_open_node { |
16256 |
atomic_t refcnt; |
16257 |
@@ -61991,7 +64805,7 @@ index 5e9a80c..3853a24 100644 |
16258 |
wait_queue_head_t poll; |
16259 |
struct list_head files; /* goes through kernfs_open_file.list */ |
16260 |
}; |
16261 |
-@@ -149,7 +149,7 @@ static int kernfs_seq_show(struct seq_file *sf, void *v) |
16262 |
+@@ -163,7 +163,7 @@ static int kernfs_seq_show(struct seq_file *sf, void *v) |
16263 |
{ |
16264 |
struct kernfs_open_file *of = sf->private; |
16265 |
|
16266 |
@@ -62000,7 +64814,7 @@ index 5e9a80c..3853a24 100644 |
16267 |
|
16268 |
return of->kn->attr.ops->seq_show(sf, v); |
16269 |
} |
16270 |
-@@ -361,12 +361,12 @@ static int kernfs_vma_page_mkwrite(struct vm_area_struct *vma, |
16271 |
+@@ -375,12 +375,12 @@ static int kernfs_vma_page_mkwrite(struct vm_area_struct *vma, |
16272 |
return ret; |
16273 |
} |
16274 |
|
16275 |
@@ -62016,7 +64830,7 @@ index 5e9a80c..3853a24 100644 |
16276 |
|
16277 |
if (!of->vm_ops) |
16278 |
return -EINVAL; |
16279 |
-@@ -567,7 +567,7 @@ static int kernfs_get_open_node(struct kernfs_node *kn, |
16280 |
+@@ -581,7 +581,7 @@ static int kernfs_get_open_node(struct kernfs_node *kn, |
16281 |
return -ENOMEM; |
16282 |
|
16283 |
atomic_set(&new_on->refcnt, 0); |
16284 |
@@ -62025,7 +64839,7 @@ index 5e9a80c..3853a24 100644 |
16285 |
init_waitqueue_head(&new_on->poll); |
16286 |
INIT_LIST_HEAD(&new_on->files); |
16287 |
goto retry; |
16288 |
-@@ -773,7 +773,7 @@ static unsigned int kernfs_fop_poll(struct file *filp, poll_table *wait) |
16289 |
+@@ -787,7 +787,7 @@ static unsigned int kernfs_fop_poll(struct file *filp, poll_table *wait) |
16290 |
|
16291 |
kernfs_put_active(kn); |
16292 |
|
16293 |
@@ -62034,15 +64848,15 @@ index 5e9a80c..3853a24 100644 |
16294 |
goto trigger; |
16295 |
|
16296 |
return DEFAULT_POLLMASK; |
16297 |
-@@ -798,7 +798,7 @@ void kernfs_notify(struct kernfs_node *kn) |
16298 |
- if (!WARN_ON(kernfs_type(kn) != KERNFS_FILE)) { |
16299 |
- on = kn->attr.open; |
16300 |
- if (on) { |
16301 |
-- atomic_inc(&on->event); |
16302 |
-+ atomic_inc_unchecked(&on->event); |
16303 |
- wake_up_interruptible(&on->poll); |
16304 |
- } |
16305 |
+@@ -818,7 +818,7 @@ repeat: |
16306 |
+ |
16307 |
+ on = kn->attr.open; |
16308 |
+ if (on) { |
16309 |
+- atomic_inc(&on->event); |
16310 |
++ atomic_inc_unchecked(&on->event); |
16311 |
+ wake_up_interruptible(&on->poll); |
16312 |
} |
16313 |
+ |
16314 |
diff --git a/fs/kernfs/symlink.c b/fs/kernfs/symlink.c |
16315 |
index 8a19889..4c3069a 100644 |
16316 |
--- a/fs/kernfs/symlink.c |
16317 |
@@ -62057,10 +64871,10 @@ index 8a19889..4c3069a 100644 |
16318 |
free_page((unsigned long)page); |
16319 |
} |
16320 |
diff --git a/fs/libfs.c b/fs/libfs.c |
16321 |
-index a184424..944ddce 100644 |
16322 |
+index 88e3e00..979c262 100644 |
16323 |
--- a/fs/libfs.c |
16324 |
+++ b/fs/libfs.c |
16325 |
-@@ -159,6 +159,9 @@ int dcache_readdir(struct file *file, struct dir_context *ctx) |
16326 |
+@@ -160,6 +160,9 @@ int dcache_readdir(struct file *file, struct dir_context *ctx) |
16327 |
|
16328 |
for (p = q->next; p != &dentry->d_subdirs; p = p->next) { |
16329 |
struct dentry *next = list_entry(p, struct dentry, d_u.d_child); |
16330 |
@@ -62070,7 +64884,7 @@ index a184424..944ddce 100644 |
16331 |
spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED); |
16332 |
if (!simple_positive(next)) { |
16333 |
spin_unlock(&next->d_lock); |
16334 |
-@@ -167,7 +170,12 @@ int dcache_readdir(struct file *file, struct dir_context *ctx) |
16335 |
+@@ -168,7 +171,12 @@ int dcache_readdir(struct file *file, struct dir_context *ctx) |
16336 |
|
16337 |
spin_unlock(&next->d_lock); |
16338 |
spin_unlock(&dentry->d_lock); |
16339 |
@@ -62084,7 +64898,7 @@ index a184424..944ddce 100644 |
16340 |
next->d_inode->i_ino, dt_type(next->d_inode))) |
16341 |
return 0; |
16342 |
spin_lock(&dentry->d_lock); |
16343 |
-@@ -999,7 +1007,7 @@ EXPORT_SYMBOL(noop_fsync); |
16344 |
+@@ -1027,7 +1035,7 @@ EXPORT_SYMBOL(noop_fsync); |
16345 |
void kfree_put_link(struct dentry *dentry, struct nameidata *nd, |
16346 |
void *cookie) |
16347 |
{ |
16348 |
@@ -62112,18 +64926,19 @@ index acd3947..1f896e2 100644 |
16349 |
memcpy(c->data, &cookie, 4); |
16350 |
c->len=4; |
16351 |
diff --git a/fs/locks.c b/fs/locks.c |
16352 |
-index e390bd9..c79870e 100644 |
16353 |
+index 717fbc4..74628c3 100644 |
16354 |
--- a/fs/locks.c |
16355 |
+++ b/fs/locks.c |
16356 |
-@@ -2315,16 +2315,16 @@ void locks_remove_file(struct file *filp) |
16357 |
+@@ -2327,7 +2327,7 @@ void locks_remove_file(struct file *filp) |
16358 |
locks_remove_posix(filp, (fl_owner_t)filp); |
16359 |
|
16360 |
if (filp->f_op->flock) { |
16361 |
- struct file_lock fl = { |
16362 |
+ struct file_lock flock = { |
16363 |
+ .fl_owner = (fl_owner_t)filp, |
16364 |
.fl_pid = current->tgid, |
16365 |
.fl_file = filp, |
16366 |
- .fl_flags = FL_FLOCK, |
16367 |
+@@ -2335,9 +2335,9 @@ void locks_remove_file(struct file *filp) |
16368 |
.fl_type = F_UNLCK, |
16369 |
.fl_end = OFFSET_MAX, |
16370 |
}; |
16371 |
@@ -62862,10 +65677,10 @@ index f4ccfe6..a5cf064 100644 |
16372 |
static struct callback_op callback_ops[]; |
16373 |
|
16374 |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c |
16375 |
-index c79f3e7..d61d671 100644 |
16376 |
+index 9927913..faffc5c 100644 |
16377 |
--- a/fs/nfs/inode.c |
16378 |
+++ b/fs/nfs/inode.c |
16379 |
-@@ -1209,16 +1209,16 @@ static int nfs_size_need_update(const struct inode *inode, const struct nfs_fatt |
16380 |
+@@ -1219,16 +1219,16 @@ static int nfs_size_need_update(const struct inode *inode, const struct nfs_fatt |
16381 |
return nfs_size_to_loff_t(fattr->size) > i_size_read(inode); |
16382 |
} |
16383 |
|
16384 |
@@ -62899,10 +65714,10 @@ index 8f854dd..d0fec26 100644 |
16385 |
|
16386 |
posix_acl_release(acl); |
16387 |
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c |
16388 |
-index 95e3720..46c23fa 100644 |
16389 |
+index 8f029db..3688b84 100644 |
16390 |
--- a/fs/nfsd/nfs4proc.c |
16391 |
+++ b/fs/nfsd/nfs4proc.c |
16392 |
-@@ -1169,7 +1169,7 @@ struct nfsd4_operation { |
16393 |
+@@ -1157,7 +1157,7 @@ struct nfsd4_operation { |
16394 |
nfsd4op_rsize op_rsize_bop; |
16395 |
stateid_getter op_get_currentstateid; |
16396 |
stateid_setter op_set_currentstateid; |
16397 |
@@ -62912,10 +65727,10 @@ index 95e3720..46c23fa 100644 |
16398 |
static struct nfsd4_operation nfsd4_ops[]; |
16399 |
|
16400 |
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c |
16401 |
-index 3297158..7bb8436 100644 |
16402 |
+index 944275c..6fc40a7 100644 |
16403 |
--- a/fs/nfsd/nfs4xdr.c |
16404 |
+++ b/fs/nfsd/nfs4xdr.c |
16405 |
-@@ -1541,7 +1541,7 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p) |
16406 |
+@@ -1539,7 +1539,7 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p) |
16407 |
|
16408 |
typedef __be32(*nfsd4_dec)(struct nfsd4_compoundargs *argp, void *); |
16409 |
|
16410 |
@@ -62925,10 +65740,10 @@ index 3297158..7bb8436 100644 |
16411 |
[OP_CLOSE] = (nfsd4_dec)nfsd4_decode_close, |
16412 |
[OP_COMMIT] = (nfsd4_dec)nfsd4_decode_commit, |
16413 |
diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c |
16414 |
-index f8f060f..c4ba09a 100644 |
16415 |
+index 6040da8..4348565 100644 |
16416 |
--- a/fs/nfsd/nfscache.c |
16417 |
+++ b/fs/nfsd/nfscache.c |
16418 |
-@@ -519,14 +519,17 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) |
16419 |
+@@ -518,17 +518,20 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) |
16420 |
{ |
16421 |
struct svc_cacherep *rp = rqstp->rq_cacherep; |
16422 |
struct kvec *resv = &rqstp->rq_res.head[0], *cachv; |
16423 |
@@ -62948,21 +65763,34 @@ index f8f060f..c4ba09a 100644 |
16424 |
+ } |
16425 |
|
16426 |
/* Don't cache excessive amounts of data and XDR failures */ |
16427 |
- if (!statp || len > (256 >> 2)) { |
16428 |
+- if (!statp || len > (256 >> 2)) { |
16429 |
++ if (!statp || len > (256 >> 2) || len < 0) { |
16430 |
+ nfsd_reply_cache_free(rp); |
16431 |
+ return; |
16432 |
+ } |
16433 |
+@@ -536,7 +539,7 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp) |
16434 |
+ switch (cachetype) { |
16435 |
+ case RC_REPLSTAT: |
16436 |
+ if (len != 1) |
16437 |
+- printk("nfsd: RC_REPLSTAT/reply len %d!\n",len); |
16438 |
++ printk("nfsd: RC_REPLSTAT/reply len %ld!\n",len); |
16439 |
+ rp->c_replstat = *statp; |
16440 |
+ break; |
16441 |
+ case RC_REPLBUFF: |
16442 |
diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c |
16443 |
-index 16f0673..1c2c30ab 100644 |
16444 |
+index 140c496..e9cbf14 100644 |
16445 |
--- a/fs/nfsd/vfs.c |
16446 |
+++ b/fs/nfsd/vfs.c |
16447 |
-@@ -843,7 +843,7 @@ nfsd_vfs_read(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, |
16448 |
- } else { |
16449 |
- oldfs = get_fs(); |
16450 |
- set_fs(KERNEL_DS); |
16451 |
-- host_err = vfs_readv(file, (struct iovec __user *)vec, vlen, &offset); |
16452 |
-+ host_err = vfs_readv(file, (struct iovec __force_user *)vec, vlen, &offset); |
16453 |
- set_fs(oldfs); |
16454 |
- } |
16455 |
+@@ -855,7 +855,7 @@ int nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen, |
16456 |
|
16457 |
-@@ -934,7 +934,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, |
16458 |
+ oldfs = get_fs(); |
16459 |
+ set_fs(KERNEL_DS); |
16460 |
+- host_err = vfs_readv(file, (struct iovec __user *)vec, vlen, &offset); |
16461 |
++ host_err = vfs_readv(file, (struct iovec __force_user *)vec, vlen, &offset); |
16462 |
+ set_fs(oldfs); |
16463 |
+ return nfsd_finish_read(file, count, host_err); |
16464 |
+ } |
16465 |
+@@ -943,7 +943,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file, |
16466 |
|
16467 |
/* Write the data. */ |
16468 |
oldfs = get_fs(); set_fs(KERNEL_DS); |
16469 |
@@ -62971,7 +65799,7 @@ index 16f0673..1c2c30ab 100644 |
16470 |
set_fs(oldfs); |
16471 |
if (host_err < 0) |
16472 |
goto out_nfserr; |
16473 |
-@@ -1479,7 +1479,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp) |
16474 |
+@@ -1482,7 +1482,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp) |
16475 |
*/ |
16476 |
|
16477 |
oldfs = get_fs(); set_fs(KERNEL_DS); |
16478 |
@@ -62981,7 +65809,7 @@ index 16f0673..1c2c30ab 100644 |
16479 |
|
16480 |
if (host_err < 0) |
16481 |
diff --git a/fs/nls/nls_base.c b/fs/nls/nls_base.c |
16482 |
-index 52ccd34..43a53b1 100644 |
16483 |
+index 52ccd34..7a6b202 100644 |
16484 |
--- a/fs/nls/nls_base.c |
16485 |
+++ b/fs/nls/nls_base.c |
16486 |
@@ -234,21 +234,25 @@ EXPORT_SYMBOL(utf16s_to_utf8s); |
16487 |
@@ -63033,6 +65861,24 @@ index 52ccd34..43a53b1 100644 |
16488 |
spin_unlock(&nls_lock); |
16489 |
return 0; |
16490 |
} |
16491 |
+@@ -272,7 +278,7 @@ int unregister_nls(struct nls_table * nls) |
16492 |
+ return -EINVAL; |
16493 |
+ } |
16494 |
+ |
16495 |
+-static struct nls_table *find_nls(char *charset) |
16496 |
++static struct nls_table *find_nls(const char *charset) |
16497 |
+ { |
16498 |
+ struct nls_table *nls; |
16499 |
+ spin_lock(&nls_lock); |
16500 |
+@@ -288,7 +294,7 @@ static struct nls_table *find_nls(char *charset) |
16501 |
+ return nls; |
16502 |
+ } |
16503 |
+ |
16504 |
+-struct nls_table *load_nls(char *charset) |
16505 |
++struct nls_table *load_nls(const char *charset) |
16506 |
+ { |
16507 |
+ return try_then_request_module(find_nls(charset), "nls_%s", charset); |
16508 |
+ } |
16509 |
diff --git a/fs/nls/nls_euc-jp.c b/fs/nls/nls_euc-jp.c |
16510 |
index 162b3f1..6076a7c 100644 |
16511 |
--- a/fs/nls/nls_euc-jp.c |
16512 |
@@ -63068,10 +65914,10 @@ index a80a741..7b96e1b 100644 |
16513 |
} |
16514 |
|
16515 |
diff --git a/fs/notify/fanotify/fanotify_user.c b/fs/notify/fanotify/fanotify_user.c |
16516 |
-index 732648b..d3b017f 100644 |
16517 |
+index 3fdc8a3..5888623 100644 |
16518 |
--- a/fs/notify/fanotify/fanotify_user.c |
16519 |
+++ b/fs/notify/fanotify/fanotify_user.c |
16520 |
-@@ -203,8 +203,8 @@ static ssize_t copy_event_to_user(struct fsnotify_group *group, |
16521 |
+@@ -216,8 +216,8 @@ static ssize_t copy_event_to_user(struct fsnotify_group *group, |
16522 |
|
16523 |
fd = fanotify_event_metadata.fd; |
16524 |
ret = -EFAULT; |
16525 |
@@ -63118,7 +65964,7 @@ index 9e38daf..5727cae 100644 |
16526 |
"inode 0x%lx or driver bug.", vdir->i_ino); |
16527 |
goto err_out; |
16528 |
diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c |
16529 |
-index db9bd8a..8338fb6 100644 |
16530 |
+index 5c9e2c8..96e4ba0 100644 |
16531 |
--- a/fs/ntfs/file.c |
16532 |
+++ b/fs/ntfs/file.c |
16533 |
@@ -1282,7 +1282,7 @@ static inline size_t ntfs_copy_from_user(struct page **pages, |
16534 |
@@ -63131,7 +65977,7 @@ index db9bd8a..8338fb6 100644 |
16535 |
do { |
16536 |
len = PAGE_CACHE_SIZE - ofs; |
16537 |
diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c |
16538 |
-index 9de2491..3306095 100644 |
16539 |
+index 6c3296e..c0b99f0 100644 |
16540 |
--- a/fs/ntfs/super.c |
16541 |
+++ b/fs/ntfs/super.c |
16542 |
@@ -688,7 +688,7 @@ static struct buffer_head *read_ntfs_boot_sector(struct super_block *sb, |
16543 |
@@ -63175,7 +66021,7 @@ index 0440134..d52c93a 100644 |
16544 |
bail: |
16545 |
if (handle) |
16546 |
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h |
16547 |
-index 8d64a97..c37665d 100644 |
16548 |
+index bbec539..7b266d5 100644 |
16549 |
--- a/fs/ocfs2/ocfs2.h |
16550 |
+++ b/fs/ocfs2/ocfs2.h |
16551 |
@@ -236,11 +236,11 @@ enum ocfs2_vol_state |
16552 |
@@ -63254,7 +66100,7 @@ index 0cb889a..6a26b24 100644 |
16553 |
} |
16554 |
} |
16555 |
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c |
16556 |
-index a7cdd56..c583144 100644 |
16557 |
+index ddb662b..f701c83 100644 |
16558 |
--- a/fs/ocfs2/super.c |
16559 |
+++ b/fs/ocfs2/super.c |
16560 |
@@ -300,11 +300,11 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len) |
16561 |
@@ -63274,7 +66120,7 @@ index a7cdd56..c583144 100644 |
16562 |
|
16563 |
out += snprintf(buf + out, len - out, |
16564 |
"%10s => State: %u Descriptor: %llu Size: %u bits " |
16565 |
-@@ -2104,11 +2104,11 @@ static int ocfs2_initialize_super(struct super_block *sb, |
16566 |
+@@ -2100,11 +2100,11 @@ static int ocfs2_initialize_super(struct super_block *sb, |
16567 |
|
16568 |
mutex_init(&osb->system_file_mutex); |
16569 |
|
16570 |
@@ -63292,7 +66138,7 @@ index a7cdd56..c583144 100644 |
16571 |
/* Copy the blockcheck stats from the superblock probe */ |
16572 |
osb->osb_ecc_stats = *stats; |
16573 |
diff --git a/fs/open.c b/fs/open.c |
16574 |
-index dd24f21..c1f4b3a 100644 |
16575 |
+index d6fd3ac..6ccf474 100644 |
16576 |
--- a/fs/open.c |
16577 |
+++ b/fs/open.c |
16578 |
@@ -32,6 +32,8 @@ |
16579 |
@@ -63396,7 +66242,7 @@ index dd24f21..c1f4b3a 100644 |
16580 |
newattrs.ia_valid = ATTR_CTIME; |
16581 |
if (user != (uid_t) -1) { |
16582 |
if (!uid_valid(uid)) |
16583 |
-@@ -977,6 +1014,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode) |
16584 |
+@@ -983,6 +1020,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode) |
16585 |
} else { |
16586 |
fsnotify_open(f); |
16587 |
fd_install(fd, f); |
16588 |
@@ -63405,7 +66251,7 @@ index dd24f21..c1f4b3a 100644 |
16589 |
} |
16590 |
putname(tmp); |
16591 |
diff --git a/fs/pipe.c b/fs/pipe.c |
16592 |
-index 034bffa..6c6b522 100644 |
16593 |
+index 21981e5..3d5f55c 100644 |
16594 |
--- a/fs/pipe.c |
16595 |
+++ b/fs/pipe.c |
16596 |
@@ -56,7 +56,7 @@ unsigned int pipe_min_size = PAGE_SIZE; |
16597 |
@@ -63426,7 +66272,7 @@ index 034bffa..6c6b522 100644 |
16598 |
mutex_unlock(&pipe->mutex); |
16599 |
} |
16600 |
EXPORT_SYMBOL(pipe_unlock); |
16601 |
-@@ -342,9 +342,9 @@ pipe_read(struct kiocb *iocb, const struct iovec *_iov, |
16602 |
+@@ -292,9 +292,9 @@ pipe_read(struct kiocb *iocb, struct iov_iter *to) |
16603 |
} |
16604 |
if (bufs) /* More to do? */ |
16605 |
continue; |
16606 |
@@ -63438,8 +66284,8 @@ index 034bffa..6c6b522 100644 |
16607 |
/* syscall merging: Usually we must not sleep |
16608 |
* if O_NONBLOCK is set, or if we got some data. |
16609 |
* But if a writer sleeps in kernel space, then |
16610 |
-@@ -406,7 +406,7 @@ pipe_write(struct kiocb *iocb, const struct iovec *_iov, |
16611 |
- ret = 0; |
16612 |
+@@ -351,7 +351,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from) |
16613 |
+ |
16614 |
__pipe_lock(pipe); |
16615 |
|
16616 |
- if (!pipe->readers) { |
16617 |
@@ -63447,7 +66293,7 @@ index 034bffa..6c6b522 100644 |
16618 |
send_sig(SIGPIPE, current, 0); |
16619 |
ret = -EPIPE; |
16620 |
goto out; |
16621 |
-@@ -461,7 +461,7 @@ redo1: |
16622 |
+@@ -387,7 +387,7 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from) |
16623 |
for (;;) { |
16624 |
int bufs; |
16625 |
|
16626 |
@@ -63456,7 +66302,7 @@ index 034bffa..6c6b522 100644 |
16627 |
send_sig(SIGPIPE, current, 0); |
16628 |
if (!ret) |
16629 |
ret = -EPIPE; |
16630 |
-@@ -552,9 +552,9 @@ redo2: |
16631 |
+@@ -455,9 +455,9 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from) |
16632 |
kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); |
16633 |
do_wakeup = 0; |
16634 |
} |
16635 |
@@ -63468,7 +66314,7 @@ index 034bffa..6c6b522 100644 |
16636 |
} |
16637 |
out: |
16638 |
__pipe_unlock(pipe); |
16639 |
-@@ -609,7 +609,7 @@ pipe_poll(struct file *filp, poll_table *wait) |
16640 |
+@@ -512,7 +512,7 @@ pipe_poll(struct file *filp, poll_table *wait) |
16641 |
mask = 0; |
16642 |
if (filp->f_mode & FMODE_READ) { |
16643 |
mask = (nrbufs > 0) ? POLLIN | POLLRDNORM : 0; |
16644 |
@@ -63477,7 +66323,7 @@ index 034bffa..6c6b522 100644 |
16645 |
mask |= POLLHUP; |
16646 |
} |
16647 |
|
16648 |
-@@ -619,7 +619,7 @@ pipe_poll(struct file *filp, poll_table *wait) |
16649 |
+@@ -522,7 +522,7 @@ pipe_poll(struct file *filp, poll_table *wait) |
16650 |
* Most Unices do not set POLLERR for FIFOs but on Linux they |
16651 |
* behave exactly like pipes for poll(). |
16652 |
*/ |
16653 |
@@ -63486,7 +66332,7 @@ index 034bffa..6c6b522 100644 |
16654 |
mask |= POLLERR; |
16655 |
} |
16656 |
|
16657 |
-@@ -631,7 +631,7 @@ static void put_pipe_info(struct inode *inode, struct pipe_inode_info *pipe) |
16658 |
+@@ -534,7 +534,7 @@ static void put_pipe_info(struct inode *inode, struct pipe_inode_info *pipe) |
16659 |
int kill = 0; |
16660 |
|
16661 |
spin_lock(&inode->i_lock); |
16662 |
@@ -63495,7 +66341,7 @@ index 034bffa..6c6b522 100644 |
16663 |
inode->i_pipe = NULL; |
16664 |
kill = 1; |
16665 |
} |
16666 |
-@@ -648,11 +648,11 @@ pipe_release(struct inode *inode, struct file *file) |
16667 |
+@@ -551,11 +551,11 @@ pipe_release(struct inode *inode, struct file *file) |
16668 |
|
16669 |
__pipe_lock(pipe); |
16670 |
if (file->f_mode & FMODE_READ) |
16671 |
@@ -63510,7 +66356,7 @@ index 034bffa..6c6b522 100644 |
16672 |
wake_up_interruptible_sync_poll(&pipe->wait, POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM | POLLERR | POLLHUP); |
16673 |
kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); |
16674 |
kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT); |
16675 |
-@@ -717,7 +717,7 @@ void free_pipe_info(struct pipe_inode_info *pipe) |
16676 |
+@@ -620,7 +620,7 @@ void free_pipe_info(struct pipe_inode_info *pipe) |
16677 |
kfree(pipe); |
16678 |
} |
16679 |
|
16680 |
@@ -63519,7 +66365,7 @@ index 034bffa..6c6b522 100644 |
16681 |
|
16682 |
/* |
16683 |
* pipefs_dname() is called from d_path(). |
16684 |
-@@ -747,8 +747,9 @@ static struct inode * get_pipe_inode(void) |
16685 |
+@@ -650,8 +650,9 @@ static struct inode * get_pipe_inode(void) |
16686 |
goto fail_iput; |
16687 |
|
16688 |
inode->i_pipe = pipe; |
16689 |
@@ -63531,7 +66377,7 @@ index 034bffa..6c6b522 100644 |
16690 |
inode->i_fop = &pipefifo_fops; |
16691 |
|
16692 |
/* |
16693 |
-@@ -927,17 +928,17 @@ static int fifo_open(struct inode *inode, struct file *filp) |
16694 |
+@@ -830,17 +831,17 @@ static int fifo_open(struct inode *inode, struct file *filp) |
16695 |
spin_lock(&inode->i_lock); |
16696 |
if (inode->i_pipe) { |
16697 |
pipe = inode->i_pipe; |
16698 |
@@ -63552,7 +66398,7 @@ index 034bffa..6c6b522 100644 |
16699 |
spin_unlock(&inode->i_lock); |
16700 |
free_pipe_info(pipe); |
16701 |
pipe = inode->i_pipe; |
16702 |
-@@ -962,10 +963,10 @@ static int fifo_open(struct inode *inode, struct file *filp) |
16703 |
+@@ -865,10 +866,10 @@ static int fifo_open(struct inode *inode, struct file *filp) |
16704 |
* opened, even when there is no process writing the FIFO. |
16705 |
*/ |
16706 |
pipe->r_counter++; |
16707 |
@@ -63565,7 +66411,7 @@ index 034bffa..6c6b522 100644 |
16708 |
if ((filp->f_flags & O_NONBLOCK)) { |
16709 |
/* suppress POLLHUP until we have |
16710 |
* seen a writer */ |
16711 |
-@@ -984,14 +985,14 @@ static int fifo_open(struct inode *inode, struct file *filp) |
16712 |
+@@ -887,14 +888,14 @@ static int fifo_open(struct inode *inode, struct file *filp) |
16713 |
* errno=ENXIO when there is no process reading the FIFO. |
16714 |
*/ |
16715 |
ret = -ENXIO; |
16716 |
@@ -63583,7 +66429,7 @@ index 034bffa..6c6b522 100644 |
16717 |
if (wait_for_partner(pipe, &pipe->r_counter)) |
16718 |
goto err_wr; |
16719 |
} |
16720 |
-@@ -1005,11 +1006,11 @@ static int fifo_open(struct inode *inode, struct file *filp) |
16721 |
+@@ -908,11 +909,11 @@ static int fifo_open(struct inode *inode, struct file *filp) |
16722 |
* the process can at least talk to itself. |
16723 |
*/ |
16724 |
|
16725 |
@@ -63598,7 +66444,7 @@ index 034bffa..6c6b522 100644 |
16726 |
wake_up_partner(pipe); |
16727 |
break; |
16728 |
|
16729 |
-@@ -1023,13 +1024,13 @@ static int fifo_open(struct inode *inode, struct file *filp) |
16730 |
+@@ -926,13 +927,13 @@ static int fifo_open(struct inode *inode, struct file *filp) |
16731 |
return 0; |
16732 |
|
16733 |
err_rd: |
16734 |
@@ -64967,7 +67813,7 @@ index 5dbadec..473af2f 100644 |
16735 |
} |
16736 |
|
16737 |
diff --git a/fs/proc/stat.c b/fs/proc/stat.c |
16738 |
-index 9d231e9..2e1b51a 100644 |
16739 |
+index bf2d03f..f058f9c 100644 |
16740 |
--- a/fs/proc/stat.c |
16741 |
+++ b/fs/proc/stat.c |
16742 |
@@ -11,6 +11,7 @@ |
16743 |
@@ -65084,7 +67930,7 @@ index 9d231e9..2e1b51a 100644 |
16744 |
seq_printf(p, "softirq %llu", (unsigned long long)sum_softirq); |
16745 |
|
16746 |
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c |
16747 |
-index c4b2646..84f0d7b 100644 |
16748 |
+index cfa63ee..fce112e 100644 |
16749 |
--- a/fs/proc/task_mmu.c |
16750 |
+++ b/fs/proc/task_mmu.c |
16751 |
@@ -13,12 +13,19 @@ |
16752 |
@@ -65184,7 +68030,7 @@ index c4b2646..84f0d7b 100644 |
16753 |
goto done; |
16754 |
} |
16755 |
|
16756 |
-@@ -322,8 +350,9 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) |
16757 |
+@@ -328,8 +356,9 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) |
16758 |
* Thread stack in /proc/PID/task/TID/maps or |
16759 |
* the main process stack. |
16760 |
*/ |
16761 |
@@ -65196,7 +68042,7 @@ index c4b2646..84f0d7b 100644 |
16762 |
name = "[stack]"; |
16763 |
} else { |
16764 |
/* Thread stack in /proc/PID/maps */ |
16765 |
-@@ -347,6 +376,13 @@ static int show_map(struct seq_file *m, void *v, int is_pid) |
16766 |
+@@ -353,6 +382,13 @@ static int show_map(struct seq_file *m, void *v, int is_pid) |
16767 |
struct proc_maps_private *priv = m->private; |
16768 |
struct task_struct *task = priv->task; |
16769 |
|
16770 |
@@ -65210,7 +68056,7 @@ index c4b2646..84f0d7b 100644 |
16771 |
show_map_vma(m, vma, is_pid); |
16772 |
|
16773 |
if (m->count < m->size) /* vma is copied successfully */ |
16774 |
-@@ -587,12 +623,23 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) |
16775 |
+@@ -593,12 +629,23 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) |
16776 |
.private = &mss, |
16777 |
}; |
16778 |
|
16779 |
@@ -65239,7 +68085,7 @@ index c4b2646..84f0d7b 100644 |
16780 |
show_map_vma(m, vma, is_pid); |
16781 |
|
16782 |
seq_printf(m, |
16783 |
-@@ -610,7 +657,11 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) |
16784 |
+@@ -616,7 +663,11 @@ static int show_smap(struct seq_file *m, void *v, int is_pid) |
16785 |
"KernelPageSize: %8lu kB\n" |
16786 |
"MMUPageSize: %8lu kB\n" |
16787 |
"Locked: %8lu kB\n", |
16788 |
@@ -65251,7 +68097,7 @@ index c4b2646..84f0d7b 100644 |
16789 |
mss.resident >> 10, |
16790 |
(unsigned long)(mss.pss >> (10 + PSS_SHIFT)), |
16791 |
mss.shared_clean >> 10, |
16792 |
-@@ -1388,6 +1439,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) |
16793 |
+@@ -1398,6 +1449,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) |
16794 |
char buffer[64]; |
16795 |
int nid; |
16796 |
|
16797 |
@@ -65265,7 +68111,7 @@ index c4b2646..84f0d7b 100644 |
16798 |
if (!mm) |
16799 |
return 0; |
16800 |
|
16801 |
-@@ -1405,11 +1463,15 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) |
16802 |
+@@ -1415,11 +1473,15 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) |
16803 |
mpol_to_str(buffer, sizeof(buffer), pol); |
16804 |
mpol_cond_put(pol); |
16805 |
|
16806 |
@@ -65276,11 +68122,11 @@ index c4b2646..84f0d7b 100644 |
16807 |
+#endif |
16808 |
|
16809 |
if (file) { |
16810 |
- seq_printf(m, " file="); |
16811 |
+ seq_puts(m, " file="); |
16812 |
- seq_path(m, &file->f_path, "\n\t= "); |
16813 |
+ seq_path(m, &file->f_path, "\n\t\\= "); |
16814 |
} else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) { |
16815 |
- seq_printf(m, " heap"); |
16816 |
+ seq_puts(m, " heap"); |
16817 |
} else { |
16818 |
diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c |
16819 |
index 678455d..ebd3245 100644 |
16820 |
@@ -65305,7 +68151,7 @@ index 678455d..ebd3245 100644 |
16821 |
pid_t tid = vm_is_stack(priv->task, vma, is_pid); |
16822 |
|
16823 |
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c |
16824 |
-index 6a8e785..41f2a6c 100644 |
16825 |
+index 382aa89..6b03974 100644 |
16826 |
--- a/fs/proc/vmcore.c |
16827 |
+++ b/fs/proc/vmcore.c |
16828 |
@@ -105,9 +105,13 @@ static ssize_t read_from_oldmem(char *buf, size_t count, |
16829 |
@@ -65397,10 +68243,10 @@ index 72d2917..c917c12 100644 |
16830 |
if (!msg_head) { |
16831 |
printk(KERN_ERR |
16832 |
diff --git a/fs/read_write.c b/fs/read_write.c |
16833 |
-index 31c6efa..a068805 100644 |
16834 |
+index 009d854..16ce214 100644 |
16835 |
--- a/fs/read_write.c |
16836 |
+++ b/fs/read_write.c |
16837 |
-@@ -450,7 +450,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t |
16838 |
+@@ -495,7 +495,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t |
16839 |
|
16840 |
old_fs = get_fs(); |
16841 |
set_fs(get_ds()); |
16842 |
@@ -65410,10 +68256,10 @@ index 31c6efa..a068805 100644 |
16843 |
count = MAX_RW_COUNT; |
16844 |
if (file->f_op->write) |
16845 |
diff --git a/fs/readdir.c b/fs/readdir.c |
16846 |
-index 5b53d99..a6c3049 100644 |
16847 |
+index 33fd922..e0d6094 100644 |
16848 |
--- a/fs/readdir.c |
16849 |
+++ b/fs/readdir.c |
16850 |
-@@ -17,6 +17,7 @@ |
16851 |
+@@ -18,6 +18,7 @@ |
16852 |
#include <linux/security.h> |
16853 |
#include <linux/syscalls.h> |
16854 |
#include <linux/unistd.h> |
16855 |
@@ -65421,7 +68267,7 @@ index 5b53d99..a6c3049 100644 |
16856 |
|
16857 |
#include <asm/uaccess.h> |
16858 |
|
16859 |
-@@ -69,6 +70,7 @@ struct old_linux_dirent { |
16860 |
+@@ -71,6 +72,7 @@ struct old_linux_dirent { |
16861 |
struct readdir_callback { |
16862 |
struct dir_context ctx; |
16863 |
struct old_linux_dirent __user * dirent; |
16864 |
@@ -65429,7 +68275,7 @@ index 5b53d99..a6c3049 100644 |
16865 |
int result; |
16866 |
}; |
16867 |
|
16868 |
-@@ -86,6 +88,10 @@ static int fillonedir(void * __buf, const char * name, int namlen, loff_t offset |
16869 |
+@@ -88,6 +90,10 @@ static int fillonedir(void * __buf, const char * name, int namlen, loff_t offset |
16870 |
buf->result = -EOVERFLOW; |
16871 |
return -EOVERFLOW; |
16872 |
} |
16873 |
@@ -65440,7 +68286,7 @@ index 5b53d99..a6c3049 100644 |
16874 |
buf->result++; |
16875 |
dirent = buf->dirent; |
16876 |
if (!access_ok(VERIFY_WRITE, dirent, |
16877 |
-@@ -117,6 +123,7 @@ SYSCALL_DEFINE3(old_readdir, unsigned int, fd, |
16878 |
+@@ -119,6 +125,7 @@ SYSCALL_DEFINE3(old_readdir, unsigned int, fd, |
16879 |
if (!f.file) |
16880 |
return -EBADF; |
16881 |
|
16882 |
@@ -65448,7 +68294,7 @@ index 5b53d99..a6c3049 100644 |
16883 |
error = iterate_dir(f.file, &buf.ctx); |
16884 |
if (buf.result) |
16885 |
error = buf.result; |
16886 |
-@@ -142,6 +149,7 @@ struct getdents_callback { |
16887 |
+@@ -144,6 +151,7 @@ struct getdents_callback { |
16888 |
struct dir_context ctx; |
16889 |
struct linux_dirent __user * current_dir; |
16890 |
struct linux_dirent __user * previous; |
16891 |
@@ -65456,7 +68302,7 @@ index 5b53d99..a6c3049 100644 |
16892 |
int count; |
16893 |
int error; |
16894 |
}; |
16895 |
-@@ -163,6 +171,10 @@ static int filldir(void * __buf, const char * name, int namlen, loff_t offset, |
16896 |
+@@ -165,6 +173,10 @@ static int filldir(void * __buf, const char * name, int namlen, loff_t offset, |
16897 |
buf->error = -EOVERFLOW; |
16898 |
return -EOVERFLOW; |
16899 |
} |
16900 |
@@ -65467,7 +68313,7 @@ index 5b53d99..a6c3049 100644 |
16901 |
dirent = buf->previous; |
16902 |
if (dirent) { |
16903 |
if (__put_user(offset, &dirent->d_off)) |
16904 |
-@@ -208,6 +220,7 @@ SYSCALL_DEFINE3(getdents, unsigned int, fd, |
16905 |
+@@ -210,6 +222,7 @@ SYSCALL_DEFINE3(getdents, unsigned int, fd, |
16906 |
if (!f.file) |
16907 |
return -EBADF; |
16908 |
|
16909 |
@@ -65475,7 +68321,7 @@ index 5b53d99..a6c3049 100644 |
16910 |
error = iterate_dir(f.file, &buf.ctx); |
16911 |
if (error >= 0) |
16912 |
error = buf.error; |
16913 |
-@@ -226,6 +239,7 @@ struct getdents_callback64 { |
16914 |
+@@ -228,6 +241,7 @@ struct getdents_callback64 { |
16915 |
struct dir_context ctx; |
16916 |
struct linux_dirent64 __user * current_dir; |
16917 |
struct linux_dirent64 __user * previous; |
16918 |
@@ -65483,7 +68329,7 @@ index 5b53d99..a6c3049 100644 |
16919 |
int count; |
16920 |
int error; |
16921 |
}; |
16922 |
-@@ -241,6 +255,10 @@ static int filldir64(void * __buf, const char * name, int namlen, loff_t offset, |
16923 |
+@@ -243,6 +257,10 @@ static int filldir64(void * __buf, const char * name, int namlen, loff_t offset, |
16924 |
buf->error = -EINVAL; /* only used if we fail.. */ |
16925 |
if (reclen > buf->count) |
16926 |
return -EINVAL; |
16927 |
@@ -65494,7 +68340,7 @@ index 5b53d99..a6c3049 100644 |
16928 |
dirent = buf->previous; |
16929 |
if (dirent) { |
16930 |
if (__put_user(offset, &dirent->d_off)) |
16931 |
-@@ -288,6 +306,7 @@ SYSCALL_DEFINE3(getdents64, unsigned int, fd, |
16932 |
+@@ -290,6 +308,7 @@ SYSCALL_DEFINE3(getdents64, unsigned int, fd, |
16933 |
if (!f.file) |
16934 |
return -EBADF; |
16935 |
|
16936 |
@@ -65503,23 +68349,23 @@ index 5b53d99..a6c3049 100644 |
16937 |
if (error >= 0) |
16938 |
error = buf.error; |
16939 |
diff --git a/fs/reiserfs/do_balan.c b/fs/reiserfs/do_balan.c |
16940 |
-index 9a3c68c..767933e 100644 |
16941 |
+index 54fdf19..987862b 100644 |
16942 |
--- a/fs/reiserfs/do_balan.c |
16943 |
+++ b/fs/reiserfs/do_balan.c |
16944 |
-@@ -1546,7 +1546,7 @@ void do_balance(struct tree_balance *tb, /* tree_balance structure */ |
16945 |
+@@ -1872,7 +1872,7 @@ void do_balance(struct tree_balance *tb, struct item_head *ih, |
16946 |
return; |
16947 |
} |
16948 |
|
16949 |
-- atomic_inc(&(fs_generation(tb->tb_sb))); |
16950 |
-+ atomic_inc_unchecked(&(fs_generation(tb->tb_sb))); |
16951 |
+- atomic_inc(&fs_generation(tb->tb_sb)); |
16952 |
++ atomic_inc_unchecked(&fs_generation(tb->tb_sb)); |
16953 |
do_balance_starts(tb); |
16954 |
|
16955 |
- /* balance leaf returns 0 except if combining L R and S into |
16956 |
+ /* |
16957 |
diff --git a/fs/reiserfs/item_ops.c b/fs/reiserfs/item_ops.c |
16958 |
-index ee382ef..f4eb6eb5 100644 |
16959 |
+index cfaee91..b9d0d60 100644 |
16960 |
--- a/fs/reiserfs/item_ops.c |
16961 |
+++ b/fs/reiserfs/item_ops.c |
16962 |
-@@ -725,18 +725,18 @@ static void errcatch_print_vi(struct virtual_item *vi) |
16963 |
+@@ -724,18 +724,18 @@ static void errcatch_print_vi(struct virtual_item *vi) |
16964 |
} |
16965 |
|
16966 |
static struct item_operations errcatch_ops = { |
16967 |
@@ -65548,7 +68394,7 @@ index ee382ef..f4eb6eb5 100644 |
16968 |
+ .print_vi = errcatch_print_vi |
16969 |
}; |
16970 |
|
16971 |
- ////////////////////////////////////////////////////////////////////////////// |
16972 |
+ #if ! (TYPE_STAT_DATA == 0 && TYPE_INDIRECT == 1 && TYPE_DIRECT == 2 && TYPE_DIRENTRY == 3) |
16973 |
diff --git a/fs/reiserfs/procfs.c b/fs/reiserfs/procfs.c |
16974 |
index 02b0b7d..c85018b 100644 |
16975 |
--- a/fs/reiserfs/procfs.c |
16976 |
@@ -65563,20 +68409,20 @@ index 02b0b7d..c85018b 100644 |
16977 |
SF(s_do_balance), SF(s_unneeded_left_neighbor), |
16978 |
SF(s_good_search_by_key_reada), SF(s_bmaps), |
16979 |
diff --git a/fs/reiserfs/reiserfs.h b/fs/reiserfs/reiserfs.h |
16980 |
-index 83d4eac..04e39a7 100644 |
16981 |
+index bf53888..227f5ae 100644 |
16982 |
--- a/fs/reiserfs/reiserfs.h |
16983 |
+++ b/fs/reiserfs/reiserfs.h |
16984 |
-@@ -453,7 +453,7 @@ struct reiserfs_sb_info { |
16985 |
+@@ -573,7 +573,7 @@ struct reiserfs_sb_info { |
16986 |
/* Comment? -Hans */ |
16987 |
wait_queue_head_t s_wait; |
16988 |
- /* To be obsoleted soon by per buffer seals.. -Hans */ |
16989 |
-- atomic_t s_generation_counter; // increased by one every time the |
16990 |
-+ atomic_unchecked_t s_generation_counter; // increased by one every time the |
16991 |
- // tree gets re-balanced |
16992 |
- unsigned long s_properties; /* File system properties. Currently holds |
16993 |
- on-disk FS format */ |
16994 |
-@@ -1972,7 +1972,7 @@ static inline loff_t max_reiserfs_offset(struct inode *inode) |
16995 |
- #define REISERFS_USER_MEM 1 /* reiserfs user memory mode */ |
16996 |
+ /* increased by one every time the tree gets re-balanced */ |
16997 |
+- atomic_t s_generation_counter; |
16998 |
++ atomic_unchecked_t s_generation_counter; |
16999 |
+ |
17000 |
+ /* File system properties. Currently holds on-disk FS format */ |
17001 |
+ unsigned long s_properties; |
17002 |
+@@ -2294,7 +2294,7 @@ static inline loff_t max_reiserfs_offset(struct inode *inode) |
17003 |
+ #define REISERFS_USER_MEM 1 /* user memory mode */ |
17004 |
|
17005 |
#define fs_generation(s) (REISERFS_SB(s)->s_generation_counter) |
17006 |
-#define get_generation(s) atomic_read (&fs_generation(s)) |
17007 |
@@ -65605,19 +68451,33 @@ index 467bb1c..cf9d65a 100644 |
17008 |
return -EINVAL; |
17009 |
|
17010 |
diff --git a/fs/seq_file.c b/fs/seq_file.c |
17011 |
-index 1d641bb..c2f4743 100644 |
17012 |
+index 3857b72..0b7281e 100644 |
17013 |
--- a/fs/seq_file.c |
17014 |
+++ b/fs/seq_file.c |
17015 |
-@@ -10,6 +10,8 @@ |
17016 |
- #include <linux/seq_file.h> |
17017 |
+@@ -12,6 +12,8 @@ |
17018 |
#include <linux/slab.h> |
17019 |
#include <linux/cred.h> |
17020 |
+ #include <linux/mm.h> |
17021 |
+#include <linux/sched.h> |
17022 |
+#include <linux/grsecurity.h> |
17023 |
|
17024 |
#include <asm/uaccess.h> |
17025 |
#include <asm/page.h> |
17026 |
-@@ -60,6 +62,9 @@ int seq_open(struct file *file, const struct seq_operations *op) |
17027 |
+@@ -34,12 +36,7 @@ static void seq_set_overflow(struct seq_file *m) |
17028 |
+ |
17029 |
+ static void *seq_buf_alloc(unsigned long size) |
17030 |
+ { |
17031 |
+- void *buf; |
17032 |
+- |
17033 |
+- buf = kmalloc(size, GFP_KERNEL | __GFP_NOWARN); |
17034 |
+- if (!buf && size > PAGE_SIZE) |
17035 |
+- buf = vmalloc(size); |
17036 |
+- return buf; |
17037 |
++ return kmalloc(size, GFP_KERNEL | GFP_USERCOPY); |
17038 |
+ } |
17039 |
+ |
17040 |
+ /** |
17041 |
+@@ -72,6 +69,9 @@ int seq_open(struct file *file, const struct seq_operations *op) |
17042 |
#ifdef CONFIG_USER_NS |
17043 |
p->user_ns = file->f_cred->user_ns; |
17044 |
#endif |
17045 |
@@ -65627,7 +68487,7 @@ index 1d641bb..c2f4743 100644 |
17046 |
|
17047 |
/* |
17048 |
* Wrappers around seq_open(e.g. swaps_open) need to be |
17049 |
-@@ -82,6 +87,16 @@ int seq_open(struct file *file, const struct seq_operations *op) |
17050 |
+@@ -94,6 +94,16 @@ int seq_open(struct file *file, const struct seq_operations *op) |
17051 |
} |
17052 |
EXPORT_SYMBOL(seq_open); |
17053 |
|
17054 |
@@ -65644,25 +68504,7 @@ index 1d641bb..c2f4743 100644 |
17055 |
static int traverse(struct seq_file *m, loff_t offset) |
17056 |
{ |
17057 |
loff_t pos = 0, index; |
17058 |
-@@ -96,7 +111,7 @@ static int traverse(struct seq_file *m, loff_t offset) |
17059 |
- return 0; |
17060 |
- } |
17061 |
- if (!m->buf) { |
17062 |
-- m->buf = kmalloc(m->size = PAGE_SIZE, GFP_KERNEL); |
17063 |
-+ m->buf = kmalloc(m->size = PAGE_SIZE, GFP_KERNEL | GFP_USERCOPY); |
17064 |
- if (!m->buf) |
17065 |
- return -ENOMEM; |
17066 |
- } |
17067 |
-@@ -137,7 +152,7 @@ Eoverflow: |
17068 |
- m->op->stop(m, p); |
17069 |
- kfree(m->buf); |
17070 |
- m->count = 0; |
17071 |
-- m->buf = kmalloc(m->size <<= 1, GFP_KERNEL); |
17072 |
-+ m->buf = kmalloc(m->size <<= 1, GFP_KERNEL | GFP_USERCOPY); |
17073 |
- return !m->buf ? -ENOMEM : -EAGAIN; |
17074 |
- } |
17075 |
- |
17076 |
-@@ -153,7 +168,7 @@ Eoverflow: |
17077 |
+@@ -165,7 +175,7 @@ Eoverflow: |
17078 |
ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) |
17079 |
{ |
17080 |
struct seq_file *m = file->private_data; |
17081 |
@@ -65671,25 +68513,7 @@ index 1d641bb..c2f4743 100644 |
17082 |
loff_t pos; |
17083 |
size_t n; |
17084 |
void *p; |
17085 |
-@@ -192,7 +207,7 @@ ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) |
17086 |
- |
17087 |
- /* grab buffer if we didn't have one */ |
17088 |
- if (!m->buf) { |
17089 |
-- m->buf = kmalloc(m->size = PAGE_SIZE, GFP_KERNEL); |
17090 |
-+ m->buf = kmalloc(m->size = PAGE_SIZE, GFP_KERNEL | GFP_USERCOPY); |
17091 |
- if (!m->buf) |
17092 |
- goto Enomem; |
17093 |
- } |
17094 |
-@@ -234,7 +249,7 @@ ssize_t seq_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) |
17095 |
- m->op->stop(m, p); |
17096 |
- kfree(m->buf); |
17097 |
- m->count = 0; |
17098 |
-- m->buf = kmalloc(m->size <<= 1, GFP_KERNEL); |
17099 |
-+ m->buf = kmalloc(m->size <<= 1, GFP_KERNEL | GFP_USERCOPY); |
17100 |
- if (!m->buf) |
17101 |
- goto Enomem; |
17102 |
- m->version = 0; |
17103 |
-@@ -584,7 +599,7 @@ static void single_stop(struct seq_file *p, void *v) |
17104 |
+@@ -596,7 +606,7 @@ static void single_stop(struct seq_file *p, void *v) |
17105 |
int single_open(struct file *file, int (*show)(struct seq_file *, void *), |
17106 |
void *data) |
17107 |
{ |
17108 |
@@ -65698,7 +68522,7 @@ index 1d641bb..c2f4743 100644 |
17109 |
int res = -ENOMEM; |
17110 |
|
17111 |
if (op) { |
17112 |
-@@ -620,6 +635,17 @@ int single_open_size(struct file *file, int (*show)(struct seq_file *, void *), |
17113 |
+@@ -632,6 +642,17 @@ int single_open_size(struct file *file, int (*show)(struct seq_file *, void *), |
17114 |
} |
17115 |
EXPORT_SYMBOL(single_open_size); |
17116 |
|
17117 |
@@ -65717,10 +68541,10 @@ index 1d641bb..c2f4743 100644 |
17118 |
{ |
17119 |
const struct seq_operations *op = ((struct seq_file *)file->private_data)->op; |
17120 |
diff --git a/fs/splice.c b/fs/splice.c |
17121 |
-index e246954..bd4f5b5 100644 |
17122 |
+index f5cb9ba..8ddb1e9 100644 |
17123 |
--- a/fs/splice.c |
17124 |
+++ b/fs/splice.c |
17125 |
-@@ -192,7 +192,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe, |
17126 |
+@@ -193,7 +193,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe, |
17127 |
pipe_lock(pipe); |
17128 |
|
17129 |
for (;;) { |
17130 |
@@ -65729,7 +68553,7 @@ index e246954..bd4f5b5 100644 |
17131 |
send_sig(SIGPIPE, current, 0); |
17132 |
if (!ret) |
17133 |
ret = -EPIPE; |
17134 |
-@@ -215,7 +215,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe, |
17135 |
+@@ -216,7 +216,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe, |
17136 |
page_nr++; |
17137 |
ret += buf->len; |
17138 |
|
17139 |
@@ -65738,7 +68562,7 @@ index e246954..bd4f5b5 100644 |
17140 |
do_wakeup = 1; |
17141 |
|
17142 |
if (!--spd->nr_pages) |
17143 |
-@@ -246,9 +246,9 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe, |
17144 |
+@@ -247,9 +247,9 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe, |
17145 |
do_wakeup = 0; |
17146 |
} |
17147 |
|
17148 |
@@ -65750,7 +68574,7 @@ index e246954..bd4f5b5 100644 |
17149 |
} |
17150 |
|
17151 |
pipe_unlock(pipe); |
17152 |
-@@ -575,7 +575,7 @@ static ssize_t kernel_readv(struct file *file, const struct iovec *vec, |
17153 |
+@@ -576,7 +576,7 @@ static ssize_t kernel_readv(struct file *file, const struct iovec *vec, |
17154 |
old_fs = get_fs(); |
17155 |
set_fs(get_ds()); |
17156 |
/* The cast to a user pointer is valid due to the set_fs() */ |
17157 |
@@ -65759,7 +68583,7 @@ index e246954..bd4f5b5 100644 |
17158 |
set_fs(old_fs); |
17159 |
|
17160 |
return res; |
17161 |
-@@ -590,7 +590,7 @@ ssize_t kernel_write(struct file *file, const char *buf, size_t count, |
17162 |
+@@ -591,7 +591,7 @@ ssize_t kernel_write(struct file *file, const char *buf, size_t count, |
17163 |
old_fs = get_fs(); |
17164 |
set_fs(get_ds()); |
17165 |
/* The cast to a user pointer is valid due to the set_fs() */ |
17166 |
@@ -65768,7 +68592,7 @@ index e246954..bd4f5b5 100644 |
17167 |
set_fs(old_fs); |
17168 |
|
17169 |
return res; |
17170 |
-@@ -643,7 +643,7 @@ ssize_t default_file_splice_read(struct file *in, loff_t *ppos, |
17171 |
+@@ -644,7 +644,7 @@ ssize_t default_file_splice_read(struct file *in, loff_t *ppos, |
17172 |
goto err; |
17173 |
|
17174 |
this_len = min_t(size_t, len, PAGE_CACHE_SIZE - offset); |
17175 |
@@ -65777,7 +68601,7 @@ index e246954..bd4f5b5 100644 |
17176 |
vec[i].iov_len = this_len; |
17177 |
spd.pages[i] = page; |
17178 |
spd.nr_pages++; |
17179 |
-@@ -839,7 +839,7 @@ int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_desc *sd, |
17180 |
+@@ -783,7 +783,7 @@ static int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_des |
17181 |
ops->release(pipe, buf); |
17182 |
pipe->curbuf = (pipe->curbuf + 1) & (pipe->buffers - 1); |
17183 |
pipe->nrbufs--; |
17184 |
@@ -65786,8 +68610,8 @@ index e246954..bd4f5b5 100644 |
17185 |
sd->need_wakeup = true; |
17186 |
} |
17187 |
|
17188 |
-@@ -864,10 +864,10 @@ EXPORT_SYMBOL(splice_from_pipe_feed); |
17189 |
- int splice_from_pipe_next(struct pipe_inode_info *pipe, struct splice_desc *sd) |
17190 |
+@@ -807,10 +807,10 @@ static int splice_from_pipe_feed(struct pipe_inode_info *pipe, struct splice_des |
17191 |
+ static int splice_from_pipe_next(struct pipe_inode_info *pipe, struct splice_desc *sd) |
17192 |
{ |
17193 |
while (!pipe->nrbufs) { |
17194 |
- if (!pipe->writers) |
17195 |
@@ -65799,7 +68623,16 @@ index e246954..bd4f5b5 100644 |
17196 |
return 0; |
17197 |
|
17198 |
if (sd->flags & SPLICE_F_NONBLOCK) |
17199 |
-@@ -1189,7 +1189,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, |
17200 |
+@@ -1040,7 +1040,7 @@ iter_file_splice_write(struct pipe_inode_info *pipe, struct file *out, |
17201 |
+ ops->release(pipe, buf); |
17202 |
+ pipe->curbuf = (pipe->curbuf + 1) & (pipe->buffers - 1); |
17203 |
+ pipe->nrbufs--; |
17204 |
+- if (pipe->files) |
17205 |
++ if (atomic_read(&pipe->files)) |
17206 |
+ sd.need_wakeup = true; |
17207 |
+ } else { |
17208 |
+ buf->offset += ret; |
17209 |
+@@ -1200,7 +1200,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, |
17210 |
* out of the pipe right after the splice_to_pipe(). So set |
17211 |
* PIPE_READERS appropriately. |
17212 |
*/ |
17213 |
@@ -65808,7 +68641,7 @@ index e246954..bd4f5b5 100644 |
17214 |
|
17215 |
current->splice_pipe = pipe; |
17216 |
} |
17217 |
-@@ -1485,6 +1485,7 @@ static int get_iovec_page_array(const struct iovec __user *iov, |
17218 |
+@@ -1496,6 +1496,7 @@ static int get_iovec_page_array(const struct iovec __user *iov, |
17219 |
|
17220 |
partial[buffers].offset = off; |
17221 |
partial[buffers].len = plen; |
17222 |
@@ -65816,7 +68649,7 @@ index e246954..bd4f5b5 100644 |
17223 |
|
17224 |
off = 0; |
17225 |
len -= plen; |
17226 |
-@@ -1721,9 +1722,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags) |
17227 |
+@@ -1732,9 +1733,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags) |
17228 |
ret = -ERESTARTSYS; |
17229 |
break; |
17230 |
} |
17231 |
@@ -65828,7 +68661,7 @@ index e246954..bd4f5b5 100644 |
17232 |
if (flags & SPLICE_F_NONBLOCK) { |
17233 |
ret = -EAGAIN; |
17234 |
break; |
17235 |
-@@ -1755,7 +1756,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) |
17236 |
+@@ -1766,7 +1767,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) |
17237 |
pipe_lock(pipe); |
17238 |
|
17239 |
while (pipe->nrbufs >= pipe->buffers) { |
17240 |
@@ -65837,7 +68670,7 @@ index e246954..bd4f5b5 100644 |
17241 |
send_sig(SIGPIPE, current, 0); |
17242 |
ret = -EPIPE; |
17243 |
break; |
17244 |
-@@ -1768,9 +1769,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) |
17245 |
+@@ -1779,9 +1780,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags) |
17246 |
ret = -ERESTARTSYS; |
17247 |
break; |
17248 |
} |
17249 |
@@ -65849,7 +68682,7 @@ index e246954..bd4f5b5 100644 |
17250 |
} |
17251 |
|
17252 |
pipe_unlock(pipe); |
17253 |
-@@ -1806,14 +1807,14 @@ retry: |
17254 |
+@@ -1817,14 +1818,14 @@ retry: |
17255 |
pipe_double_lock(ipipe, opipe); |
17256 |
|
17257 |
do { |
17258 |
@@ -65866,7 +68699,7 @@ index e246954..bd4f5b5 100644 |
17259 |
break; |
17260 |
|
17261 |
/* |
17262 |
-@@ -1910,7 +1911,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, |
17263 |
+@@ -1921,7 +1922,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, |
17264 |
pipe_double_lock(ipipe, opipe); |
17265 |
|
17266 |
do { |
17267 |
@@ -65875,7 +68708,7 @@ index e246954..bd4f5b5 100644 |
17268 |
send_sig(SIGPIPE, current, 0); |
17269 |
if (!ret) |
17270 |
ret = -EPIPE; |
17271 |
-@@ -1955,7 +1956,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, |
17272 |
+@@ -1966,7 +1967,7 @@ static int link_pipe(struct pipe_inode_info *ipipe, |
17273 |
* return EAGAIN if we have the potential of some data in the |
17274 |
* future, otherwise just return 0 |
17275 |
*/ |
17276 |
@@ -65984,7 +68817,7 @@ index 69d4889..a810bd4 100644 |
17277 |
if (sbi->s_bytesex == BYTESEX_PDP) |
17278 |
return PDP_swab((__force __u32)n); |
17279 |
diff --git a/fs/ubifs/io.c b/fs/ubifs/io.c |
17280 |
-index e18b988..f1d4ad0f 100644 |
17281 |
+index 2290d58..7791371 100644 |
17282 |
--- a/fs/ubifs/io.c |
17283 |
+++ b/fs/ubifs/io.c |
17284 |
@@ -155,7 +155,7 @@ int ubifs_leb_change(struct ubifs_info *c, int lnum, const void *buf, int len) |
17285 |
@@ -66057,7 +68890,7 @@ index aa138d6..5f3a811 100644 |
17286 |
error = notify_change(path->dentry, &newattrs, &delegated_inode); |
17287 |
mutex_unlock(&inode->i_mutex); |
17288 |
diff --git a/fs/xattr.c b/fs/xattr.c |
17289 |
-index 3377dff..f394815 100644 |
17290 |
+index c69e6d4..cc56af5 100644 |
17291 |
--- a/fs/xattr.c |
17292 |
+++ b/fs/xattr.c |
17293 |
@@ -227,6 +227,27 @@ int vfs_xattr_cmp(struct dentry *dentry, const char *xattr_name, |
17294 |
@@ -66209,10 +69042,10 @@ index 3377dff..f394815 100644 |
17295 |
} |
17296 |
fdput(f); |
17297 |
diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c |
17298 |
-index f0efc7e..ba72910 100644 |
17299 |
+index 75c3fe5..b0f6bbe 100644 |
17300 |
--- a/fs/xfs/xfs_bmap.c |
17301 |
+++ b/fs/xfs/xfs_bmap.c |
17302 |
-@@ -584,7 +584,7 @@ xfs_bmap_validate_ret( |
17303 |
+@@ -583,7 +583,7 @@ xfs_bmap_validate_ret( |
17304 |
|
17305 |
#else |
17306 |
#define xfs_bmap_check_leaf_extents(cur, ip, whichfork) do { } while (0) |
17307 |
@@ -66222,10 +69055,10 @@ index f0efc7e..ba72910 100644 |
17308 |
|
17309 |
/* |
17310 |
diff --git a/fs/xfs/xfs_dir2_readdir.c b/fs/xfs/xfs_dir2_readdir.c |
17311 |
-index aead369..0dfecfd 100644 |
17312 |
+index 48e99af..54ebae3 100644 |
17313 |
--- a/fs/xfs/xfs_dir2_readdir.c |
17314 |
+++ b/fs/xfs/xfs_dir2_readdir.c |
17315 |
-@@ -160,7 +160,12 @@ xfs_dir2_sf_getdents( |
17316 |
+@@ -159,7 +159,12 @@ xfs_dir2_sf_getdents( |
17317 |
ino = dp->d_ops->sf_get_ino(sfp, sfep); |
17318 |
filetype = dp->d_ops->sf_get_ftype(sfep); |
17319 |
ctx->pos = off & 0x7fffffff; |
17320 |
@@ -66233,14 +69066,14 @@ index aead369..0dfecfd 100644 |
17321 |
+ if (dp->i_df.if_u1.if_data == dp->i_df.if_u2.if_inline_data) { |
17322 |
+ char name[sfep->namelen]; |
17323 |
+ memcpy(name, sfep->name, sfep->namelen); |
17324 |
-+ if (!dir_emit(ctx, name, sfep->namelen, ino, xfs_dir3_get_dtype(mp, filetype))) |
17325 |
++ if (!dir_emit(ctx, name, sfep->namelen, ino, xfs_dir3_get_dtype(dp->i_mount, filetype))) |
17326 |
+ return 0; |
17327 |
+ } else if (!dir_emit(ctx, (char *)sfep->name, sfep->namelen, ino, |
17328 |
- xfs_dir3_get_dtype(mp, filetype))) |
17329 |
+ xfs_dir3_get_dtype(dp->i_mount, filetype))) |
17330 |
return 0; |
17331 |
sfep = dp->d_ops->sf_nextentry(sfp, sfep); |
17332 |
diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c |
17333 |
-index 6152cbe..f0f9eaa 100644 |
17334 |
+index 8bc1bbc..0d6911b 100644 |
17335 |
--- a/fs/xfs/xfs_ioctl.c |
17336 |
+++ b/fs/xfs/xfs_ioctl.c |
17337 |
@@ -122,7 +122,7 @@ xfs_find_handle( |
17338 |
@@ -70305,10 +73138,10 @@ index 0000000..18ffbbd |
17339 |
+} |
17340 |
diff --git a/grsecurity/gracl_cap.c b/grsecurity/gracl_cap.c |
17341 |
new file mode 100644 |
17342 |
-index 0000000..bdd51ea |
17343 |
+index 0000000..1a94c11 |
17344 |
--- /dev/null |
17345 |
+++ b/grsecurity/gracl_cap.c |
17346 |
-@@ -0,0 +1,110 @@ |
17347 |
+@@ -0,0 +1,127 @@ |
17348 |
+#include <linux/kernel.h> |
17349 |
+#include <linux/module.h> |
17350 |
+#include <linux/sched.h> |
17351 |
@@ -70319,6 +73152,29 @@ index 0000000..bdd51ea |
17352 |
+extern const char *captab_log[]; |
17353 |
+extern int captab_log_entries; |
17354 |
+ |
17355 |
++int gr_learn_cap(const struct task_struct *task, const struct cred *cred, const int cap) |
17356 |
++{ |
17357 |
++ struct acl_subject_label *curracl; |
17358 |
++ |
17359 |
++ if (!gr_acl_is_enabled()) |
17360 |
++ return 1; |
17361 |
++ |
17362 |
++ curracl = task->acl; |
17363 |
++ |
17364 |
++ if (curracl->mode & (GR_LEARN | GR_INHERITLEARN)) { |
17365 |
++ security_learn(GR_LEARN_AUDIT_MSG, task->role->rolename, |
17366 |
++ task->role->roletype, GR_GLOBAL_UID(cred->uid), |
17367 |
++ GR_GLOBAL_GID(cred->gid), task->exec_file ? |
17368 |
++ gr_to_filename(task->exec_file->f_path.dentry, |
17369 |
++ task->exec_file->f_path.mnt) : curracl->filename, |
17370 |
++ curracl->filename, 0UL, |
17371 |
++ 0UL, "", (unsigned long) cap, &task->signal->saved_ip); |
17372 |
++ return 1; |
17373 |
++ } |
17374 |
++ |
17375 |
++ return 0; |
17376 |
++} |
17377 |
++ |
17378 |
+int gr_task_acl_is_capable(const struct task_struct *task, const struct cred *cred, const int cap) |
17379 |
+{ |
17380 |
+ struct acl_subject_label *curracl; |
17381 |
@@ -70355,19 +73211,13 @@ index 0000000..bdd51ea |
17382 |
+ return 1; |
17383 |
+ } |
17384 |
+ |
17385 |
-+ curracl = task->acl; |
17386 |
-+ |
17387 |
-+ if ((curracl->mode & (GR_LEARN | GR_INHERITLEARN)) |
17388 |
-+ && cap_raised(cred->cap_effective, cap)) { |
17389 |
-+ security_learn(GR_LEARN_AUDIT_MSG, task->role->rolename, |
17390 |
-+ task->role->roletype, GR_GLOBAL_UID(cred->uid), |
17391 |
-+ GR_GLOBAL_GID(cred->gid), task->exec_file ? |
17392 |
-+ gr_to_filename(task->exec_file->f_path.dentry, |
17393 |
-+ task->exec_file->f_path.mnt) : curracl->filename, |
17394 |
-+ curracl->filename, 0UL, |
17395 |
-+ 0UL, "", (unsigned long) cap, &task->signal->saved_ip); |
17396 |
++ /* only learn the capability use if the process has the capability in the |
17397 |
++ general case, the two uses in sys.c of gr_learn_cap are an exception |
17398 |
++ to this rule to ensure any role transition involves what the full-learned |
17399 |
++ policy believes in a privileged process |
17400 |
++ */ |
17401 |
++ if (cap_raised(cred->cap_effective, cap) && gr_learn_cap(task, cred, cap)) |
17402 |
+ return 1; |
17403 |
-+ } |
17404 |
+ |
17405 |
+ if ((cap >= 0) && (cap < captab_log_entries) && cap_raised(cred->cap_effective, cap) && !cap_raised(cap_audit, cap)) |
17406 |
+ gr_log_cap(GR_DONT_AUDIT, GR_CAP_ACL_MSG, task, captab_log[cap]); |
17407 |
@@ -74398,10 +77248,10 @@ index 0000000..baa635c |
17408 |
+} |
17409 |
diff --git a/grsecurity/grsec_disabled.c b/grsecurity/grsec_disabled.c |
17410 |
new file mode 100644 |
17411 |
-index 0000000..de31e65 |
17412 |
+index 0000000..2d3bcb7 |
17413 |
--- /dev/null |
17414 |
+++ b/grsecurity/grsec_disabled.c |
17415 |
-@@ -0,0 +1,434 @@ |
17416 |
+@@ -0,0 +1,440 @@ |
17417 |
+#include <linux/kernel.h> |
17418 |
+#include <linux/module.h> |
17419 |
+#include <linux/sched.h> |
17420 |
@@ -74443,6 +77293,12 @@ index 0000000..de31e65 |
17421 |
+ return 0; |
17422 |
+} |
17423 |
+ |
17424 |
++int |
17425 |
++gr_learn_cap(const struct task_struct *task, const struct cred *cred, const int cap) |
17426 |
++{ |
17427 |
++ return 0; |
17428 |
++} |
17429 |
++ |
17430 |
+void |
17431 |
+gr_handle_proc_create(const struct dentry *dentry, const struct inode *inode) |
17432 |
+{ |
17433 |
@@ -77627,10 +80483,10 @@ index b7babf0..97f4c4f 100644 |
17434 |
+ |
17435 |
#endif /* _ASM_GENERIC_ATOMIC_LONG_H */ |
17436 |
diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h |
17437 |
-index 33bd2de..f31bff97 100644 |
17438 |
+index 9c79e76..9f7827d 100644 |
17439 |
--- a/include/asm-generic/atomic.h |
17440 |
+++ b/include/asm-generic/atomic.h |
17441 |
-@@ -153,7 +153,7 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) |
17442 |
+@@ -154,7 +154,7 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u) |
17443 |
* Atomically clears the bits set in @mask from @v |
17444 |
*/ |
17445 |
#ifndef atomic_clear_mask |
17446 |
@@ -77668,10 +80524,10 @@ index b18ce4f..2ee2843 100644 |
17447 |
+ |
17448 |
#endif /* _ASM_GENERIC_ATOMIC64_H */ |
17449 |
diff --git a/include/asm-generic/barrier.h b/include/asm-generic/barrier.h |
17450 |
-index 6f692f8..2ad9dd2 100644 |
17451 |
+index 1402fa8..025a736 100644 |
17452 |
--- a/include/asm-generic/barrier.h |
17453 |
+++ b/include/asm-generic/barrier.h |
17454 |
-@@ -66,7 +66,7 @@ |
17455 |
+@@ -74,7 +74,7 @@ |
17456 |
do { \ |
17457 |
compiletime_assert_atomic_type(*p); \ |
17458 |
smp_mb(); \ |
17459 |
@@ -77909,10 +80765,10 @@ index 810431d..0ec4804f 100644 |
17460 |
* (puds are folded into pgds so this doesn't get actually called, |
17461 |
* but the define is needed for a generic inline function.) |
17462 |
diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h |
17463 |
-index a8015a7..7a4407b 100644 |
17464 |
+index 53b2acc..f4568e7 100644 |
17465 |
--- a/include/asm-generic/pgtable.h |
17466 |
+++ b/include/asm-generic/pgtable.h |
17467 |
-@@ -815,6 +815,22 @@ static inline void pmdp_set_numa(struct mm_struct *mm, unsigned long addr, |
17468 |
+@@ -819,6 +819,22 @@ static inline void pmdp_set_numa(struct mm_struct *mm, unsigned long addr, |
17469 |
} |
17470 |
#endif /* CONFIG_NUMA_BALANCING */ |
17471 |
|
17472 |
@@ -77961,10 +80817,10 @@ index 72d8803..cb9749c 100644 |
17473 |
+ |
17474 |
#endif /* __ASM_GENERIC_UACCESS_H */ |
17475 |
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h |
17476 |
-index 146e4ff..f4f9609 100644 |
17477 |
+index c1c0b0c..05c9588 100644 |
17478 |
--- a/include/asm-generic/vmlinux.lds.h |
17479 |
+++ b/include/asm-generic/vmlinux.lds.h |
17480 |
-@@ -251,6 +251,7 @@ |
17481 |
+@@ -231,6 +231,7 @@ |
17482 |
.rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ |
17483 |
VMLINUX_SYMBOL(__start_rodata) = .; \ |
17484 |
*(.rodata) *(.rodata.*) \ |
17485 |
@@ -77972,7 +80828,7 @@ index 146e4ff..f4f9609 100644 |
17486 |
*(__vermagic) /* Kernel version magic */ \ |
17487 |
. = ALIGN(8); \ |
17488 |
VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .; \ |
17489 |
-@@ -737,17 +738,18 @@ |
17490 |
+@@ -719,17 +720,18 @@ |
17491 |
* section in the linker script will go there too. @phdr should have |
17492 |
* a leading colon. |
17493 |
* |
17494 |
@@ -78009,7 +80865,7 @@ index 016c2f1..c4baa98 100644 |
17495 |
struct crypto_instance { |
17496 |
struct crypto_alg alg; |
17497 |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h |
17498 |
-index a7c2a86..078f1b6 100644 |
17499 |
+index 8af71a8..7fe6c19 100644 |
17500 |
--- a/include/drm/drmP.h |
17501 |
+++ b/include/drm/drmP.h |
17502 |
@@ -68,6 +68,7 @@ |
17503 |
@@ -78020,7 +80876,7 @@ index a7c2a86..078f1b6 100644 |
17504 |
#include <drm/drm.h> |
17505 |
#include <drm/drm_sarea.h> |
17506 |
#include <drm/drm_vma_manager.h> |
17507 |
-@@ -268,10 +269,12 @@ do { \ |
17508 |
+@@ -261,10 +262,12 @@ do { \ |
17509 |
* \param cmd command. |
17510 |
* \param arg argument. |
17511 |
*/ |
17512 |
@@ -78035,7 +80891,7 @@ index a7c2a86..078f1b6 100644 |
17513 |
unsigned long arg); |
17514 |
|
17515 |
#define DRM_IOCTL_NR(n) _IOC_NR(n) |
17516 |
-@@ -287,10 +290,10 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd, |
17517 |
+@@ -280,10 +283,10 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd, |
17518 |
struct drm_ioctl_desc { |
17519 |
unsigned int cmd; |
17520 |
int flags; |
17521 |
@@ -78048,7 +80904,7 @@ index a7c2a86..078f1b6 100644 |
17522 |
|
17523 |
/** |
17524 |
* Creates a driver or general drm_ioctl_desc array entry for the given |
17525 |
-@@ -1001,7 +1004,8 @@ struct drm_info_list { |
17526 |
+@@ -983,7 +986,8 @@ struct drm_info_list { |
17527 |
int (*show)(struct seq_file*, void*); /** show callback */ |
17528 |
u32 driver_features; /**< Required driver features for this entry */ |
17529 |
void *data; |
17530 |
@@ -78058,17 +80914,17 @@ index a7c2a86..078f1b6 100644 |
17531 |
|
17532 |
/** |
17533 |
* debugfs node structure. This structure represents a debugfs file. |
17534 |
-@@ -1083,7 +1087,7 @@ struct drm_device { |
17535 |
+@@ -1067,7 +1071,7 @@ struct drm_device { |
17536 |
|
17537 |
/** \name Usage Counters */ |
17538 |
/*@{ */ |
17539 |
-- int open_count; /**< Outstanding files open */ |
17540 |
-+ local_t open_count; /**< Outstanding files open */ |
17541 |
+- int open_count; /**< Outstanding files open, protected by drm_global_mutex. */ |
17542 |
++ local_t open_count; /**< Outstanding files open, protected by drm_global_mutex. */ |
17543 |
+ spinlock_t buf_lock; /**< For drm_device::buf_use and a few other things. */ |
17544 |
int buf_use; /**< Buffers in use -- cannot alloc */ |
17545 |
atomic_t buf_alloc; /**< Buffer allocation in progress */ |
17546 |
- /*@} */ |
17547 |
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h |
17548 |
-index 36a5feb..d9f01aa 100644 |
17549 |
+index a3d75fe..6802f9c 100644 |
17550 |
--- a/include/drm/drm_crtc_helper.h |
17551 |
+++ b/include/drm/drm_crtc_helper.h |
17552 |
@@ -109,7 +109,7 @@ struct drm_encoder_helper_funcs { |
17553 |
@@ -78081,7 +80937,7 @@ index 36a5feb..d9f01aa 100644 |
17554 |
/** |
17555 |
* drm_connector_helper_funcs - helper operations for connectors |
17556 |
diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h |
17557 |
-index 012d58f..d0a0642 100644 |
17558 |
+index a70d456..6ea07cd 100644 |
17559 |
--- a/include/drm/i915_pciids.h |
17560 |
+++ b/include/drm/i915_pciids.h |
17561 |
@@ -37,7 +37,7 @@ |
17562 |
@@ -78192,10 +81048,10 @@ index 61f29e5..e67c658 100644 |
17563 |
extern void __register_binfmt(struct linux_binfmt *fmt, int insert); |
17564 |
|
17565 |
diff --git a/include/linux/bitops.h b/include/linux/bitops.h |
17566 |
-index be5fd38..d71192a 100644 |
17567 |
+index cbc5833..8123ebc 100644 |
17568 |
--- a/include/linux/bitops.h |
17569 |
+++ b/include/linux/bitops.h |
17570 |
-@@ -102,7 +102,7 @@ static inline __u64 ror64(__u64 word, unsigned int shift) |
17571 |
+@@ -122,7 +122,7 @@ static inline __u64 ror64(__u64 word, unsigned int shift) |
17572 |
* @word: value to rotate |
17573 |
* @shift: bits to roll |
17574 |
*/ |
17575 |
@@ -78204,7 +81060,7 @@ index be5fd38..d71192a 100644 |
17576 |
{ |
17577 |
return (word << shift) | (word >> (32 - shift)); |
17578 |
} |
17579 |
-@@ -112,7 +112,7 @@ static inline __u32 rol32(__u32 word, unsigned int shift) |
17580 |
+@@ -132,7 +132,7 @@ static inline __u32 rol32(__u32 word, unsigned int shift) |
17581 |
* @word: value to rotate |
17582 |
* @shift: bits to roll |
17583 |
*/ |
17584 |
@@ -78213,7 +81069,7 @@ index be5fd38..d71192a 100644 |
17585 |
{ |
17586 |
return (word >> shift) | (word << (32 - shift)); |
17587 |
} |
17588 |
-@@ -168,7 +168,7 @@ static inline __s32 sign_extend32(__u32 value, int index) |
17589 |
+@@ -188,7 +188,7 @@ static inline __s32 sign_extend32(__u32 value, int index) |
17590 |
return (__s32)(value << shift) >> shift; |
17591 |
} |
17592 |
|
17593 |
@@ -78223,10 +81079,10 @@ index be5fd38..d71192a 100644 |
17594 |
if (sizeof(l) == 4) |
17595 |
return fls(l); |
17596 |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h |
17597 |
-index 0d84981..bb741c0 100644 |
17598 |
+index 8699bcf..279485d 100644 |
17599 |
--- a/include/linux/blkdev.h |
17600 |
+++ b/include/linux/blkdev.h |
17601 |
-@@ -1584,7 +1584,7 @@ struct block_device_operations { |
17602 |
+@@ -1625,7 +1625,7 @@ struct block_device_operations { |
17603 |
/* this callback is with swap_lock and sometimes page table lock held */ |
17604 |
void (*swap_slot_free_notify) (struct block_device *, unsigned long); |
17605 |
struct module *owner; |
17606 |
@@ -78312,10 +81168,10 @@ index 4ce9056..86caac6 100644 |
17607 |
extern struct cleancache_ops * |
17608 |
cleancache_register_ops(struct cleancache_ops *ops); |
17609 |
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h |
17610 |
-index 5119174..8e264f8 100644 |
17611 |
+index 0c287db..5efa775 100644 |
17612 |
--- a/include/linux/clk-provider.h |
17613 |
+++ b/include/linux/clk-provider.h |
17614 |
-@@ -174,6 +174,7 @@ struct clk_ops { |
17615 |
+@@ -180,6 +180,7 @@ struct clk_ops { |
17616 |
void (*init)(struct clk_hw *hw); |
17617 |
int (*debug_init)(struct clk_hw *hw, struct dentry *dentry); |
17618 |
}; |
17619 |
@@ -78385,7 +81241,7 @@ index 2507fd2..55203f8 100644 |
17620 |
* Mark a position in code as unreachable. This can be used to |
17621 |
* suppress control flow warnings after asm blocks that transfer |
17622 |
diff --git a/include/linux/compiler.h b/include/linux/compiler.h |
17623 |
-index ee7239e..7c11769 100644 |
17624 |
+index d5ad7b1..3b74638 100644 |
17625 |
--- a/include/linux/compiler.h |
17626 |
+++ b/include/linux/compiler.h |
17627 |
@@ -5,11 +5,14 @@ |
17628 |
@@ -78511,7 +81367,7 @@ index ee7239e..7c11769 100644 |
17629 |
/* Simple shorthand for a section definition */ |
17630 |
#ifndef __section |
17631 |
# define __section(S) __attribute__ ((__section__(#S))) |
17632 |
-@@ -369,7 +435,8 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); |
17633 |
+@@ -378,7 +444,8 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); |
17634 |
* use is to mediate communication between process-level code and irq/NMI |
17635 |
* handlers, all running on the same CPU. |
17636 |
*/ |
17637 |
@@ -78562,10 +81418,10 @@ index 34025df..d94bbbc 100644 |
17638 |
/* |
17639 |
* Users often need to create attribute structures for their configurable |
17640 |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h |
17641 |
-index 5ae5100..b809662 100644 |
17642 |
+index 8f8ae95..b9b0e6d 100644 |
17643 |
--- a/include/linux/cpufreq.h |
17644 |
+++ b/include/linux/cpufreq.h |
17645 |
-@@ -200,6 +200,7 @@ struct global_attr { |
17646 |
+@@ -202,6 +202,7 @@ struct global_attr { |
17647 |
ssize_t (*store)(struct kobject *a, struct attribute *b, |
17648 |
const char *c, size_t count); |
17649 |
}; |
17650 |
@@ -78573,7 +81429,7 @@ index 5ae5100..b809662 100644 |
17651 |
|
17652 |
#define define_one_global_ro(_name) \ |
17653 |
static struct global_attr _name = \ |
17654 |
-@@ -242,7 +243,7 @@ struct cpufreq_driver { |
17655 |
+@@ -268,7 +269,7 @@ struct cpufreq_driver { |
17656 |
bool boost_supported; |
17657 |
bool boost_enabled; |
17658 |
int (*set_boost) (int state); |
17659 |
@@ -78583,7 +81439,7 @@ index 5ae5100..b809662 100644 |
17660 |
/* flags */ |
17661 |
#define CPUFREQ_STICKY (1 << 0) /* driver isn't removed even if |
17662 |
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h |
17663 |
-index b0238cb..db89e1e 100644 |
17664 |
+index 25e0df6..952dffd 100644 |
17665 |
--- a/include/linux/cpuidle.h |
17666 |
+++ b/include/linux/cpuidle.h |
17667 |
@@ -50,7 +50,8 @@ struct cpuidle_state { |
17668 |
@@ -78596,7 +81452,7 @@ index b0238cb..db89e1e 100644 |
17669 |
|
17670 |
/* Idle State Flags */ |
17671 |
#define CPUIDLE_FLAG_TIME_VALID (0x01) /* is residency time measurable? */ |
17672 |
-@@ -211,7 +212,7 @@ struct cpuidle_governor { |
17673 |
+@@ -209,7 +210,7 @@ struct cpuidle_governor { |
17674 |
void (*reflect) (struct cpuidle_device *dev, int index); |
17675 |
|
17676 |
struct module *owner; |
17677 |
@@ -78606,7 +81462,7 @@ index b0238cb..db89e1e 100644 |
17678 |
#ifdef CONFIG_CPU_IDLE |
17679 |
extern int cpuidle_register_governor(struct cpuidle_governor *gov); |
17680 |
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h |
17681 |
-index d08e4d2..95fad61 100644 |
17682 |
+index 2997af6..424ddc1 100644 |
17683 |
--- a/include/linux/cpumask.h |
17684 |
+++ b/include/linux/cpumask.h |
17685 |
@@ -118,17 +118,17 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp) |
17686 |
@@ -78630,7 +81486,7 @@ index d08e4d2..95fad61 100644 |
17687 |
const struct cpumask *srcp, |
17688 |
const struct cpumask *andp) |
17689 |
{ |
17690 |
-@@ -167,7 +167,7 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp) |
17691 |
+@@ -174,7 +174,7 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp) |
17692 |
* |
17693 |
* Returns >= nr_cpu_ids if no further cpus set. |
17694 |
*/ |
17695 |
@@ -78639,7 +81495,7 @@ index d08e4d2..95fad61 100644 |
17696 |
{ |
17697 |
/* -1 is a legal arg here. */ |
17698 |
if (n != -1) |
17699 |
-@@ -182,7 +182,7 @@ static inline unsigned int cpumask_next(int n, const struct cpumask *srcp) |
17700 |
+@@ -189,7 +189,7 @@ static inline unsigned int cpumask_next(int n, const struct cpumask *srcp) |
17701 |
* |
17702 |
* Returns >= nr_cpu_ids if no further cpus unset. |
17703 |
*/ |
17704 |
@@ -78648,15 +81504,15 @@ index d08e4d2..95fad61 100644 |
17705 |
{ |
17706 |
/* -1 is a legal arg here. */ |
17707 |
if (n != -1) |
17708 |
-@@ -190,7 +190,7 @@ static inline unsigned int cpumask_next_zero(int n, const struct cpumask *srcp) |
17709 |
+@@ -197,7 +197,7 @@ static inline unsigned int cpumask_next_zero(int n, const struct cpumask *srcp) |
17710 |
return find_next_zero_bit(cpumask_bits(srcp), nr_cpumask_bits, n+1); |
17711 |
} |
17712 |
|
17713 |
-int cpumask_next_and(int n, const struct cpumask *, const struct cpumask *); |
17714 |
+int cpumask_next_and(int n, const struct cpumask *, const struct cpumask *) __intentional_overflow(-1); |
17715 |
int cpumask_any_but(const struct cpumask *mask, unsigned int cpu); |
17716 |
+ int cpumask_set_cpu_local_first(int i, int numa_node, cpumask_t *dstp); |
17717 |
|
17718 |
- /** |
17719 |
diff --git a/include/linux/cred.h b/include/linux/cred.h |
17720 |
index f61d6c8..d372d95 100644 |
17721 |
--- a/include/linux/cred.h |
17722 |
@@ -78766,7 +81622,7 @@ index 7925bf0..d5143d2 100644 |
17723 |
|
17724 |
#define large_malloc(a) vmalloc(a) |
17725 |
diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h |
17726 |
-index d48dc00..211ee54 100644 |
17727 |
+index f1863dc..5c26074 100644 |
17728 |
--- a/include/linux/devfreq.h |
17729 |
+++ b/include/linux/devfreq.h |
17730 |
@@ -114,7 +114,7 @@ struct devfreq_governor { |
17731 |
@@ -78779,7 +81635,7 @@ index d48dc00..211ee54 100644 |
17732 |
/** |
17733 |
* struct devfreq - Device devfreq structure |
17734 |
diff --git a/include/linux/device.h b/include/linux/device.h |
17735 |
-index d1d1c05..a90fdb0 100644 |
17736 |
+index af424ac..fd46ddf 100644 |
17737 |
--- a/include/linux/device.h |
17738 |
+++ b/include/linux/device.h |
17739 |
@@ -310,7 +310,7 @@ struct subsys_interface { |
17740 |
@@ -78815,10 +81671,10 @@ index d1d1c05..a90fdb0 100644 |
17741 |
ssize_t device_show_ulong(struct device *dev, struct device_attribute *attr, |
17742 |
char *buf); |
17743 |
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h |
17744 |
-index fd4aee2..1f28db9 100644 |
17745 |
+index 931b709..89b2d89 100644 |
17746 |
--- a/include/linux/dma-mapping.h |
17747 |
+++ b/include/linux/dma-mapping.h |
17748 |
-@@ -54,7 +54,7 @@ struct dma_map_ops { |
17749 |
+@@ -60,7 +60,7 @@ struct dma_map_ops { |
17750 |
u64 (*get_required_mask)(struct device *dev); |
17751 |
#endif |
17752 |
int is_phys; |
17753 |
@@ -78828,7 +81684,7 @@ index fd4aee2..1f28db9 100644 |
17754 |
#define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1)) |
17755 |
|
17756 |
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h |
17757 |
-index 72cb0dd..7fe9a4b 100644 |
17758 |
+index d2c5cc7..d193394 100644 |
17759 |
--- a/include/linux/dmaengine.h |
17760 |
+++ b/include/linux/dmaengine.h |
17761 |
@@ -1147,9 +1147,9 @@ struct dma_pinned_list { |
17762 |
@@ -78844,10 +81700,10 @@ index 72cb0dd..7fe9a4b 100644 |
17763 |
unsigned int offset, size_t len); |
17764 |
|
17765 |
diff --git a/include/linux/efi.h b/include/linux/efi.h |
17766 |
-index 6c100ff..e3289b4 100644 |
17767 |
+index 41bbf8b..bd3a718 100644 |
17768 |
--- a/include/linux/efi.h |
17769 |
+++ b/include/linux/efi.h |
17770 |
-@@ -1009,6 +1009,7 @@ struct efivar_operations { |
17771 |
+@@ -1027,6 +1027,7 @@ struct efivar_operations { |
17772 |
efi_set_variable_t *set_variable; |
17773 |
efi_query_variable_store_t *query_variable_store; |
17774 |
}; |
17775 |
@@ -78895,7 +81751,7 @@ index a729120..6ede2c9 100644 |
17776 |
return (long) ptr; |
17777 |
} |
17778 |
diff --git a/include/linux/extcon.h b/include/linux/extcon.h |
17779 |
-index f488145..3b6b04e 100644 |
17780 |
+index 36f49c4..a2a1f4c 100644 |
17781 |
--- a/include/linux/extcon.h |
17782 |
+++ b/include/linux/extcon.h |
17783 |
@@ -135,7 +135,7 @@ struct extcon_dev { |
17784 |
@@ -78908,10 +81764,10 @@ index f488145..3b6b04e 100644 |
17785 |
|
17786 |
/** |
17787 |
diff --git a/include/linux/fb.h b/include/linux/fb.h |
17788 |
-index fe6ac95..898d41d 100644 |
17789 |
+index b6bfda9..1f13487 100644 |
17790 |
--- a/include/linux/fb.h |
17791 |
+++ b/include/linux/fb.h |
17792 |
-@@ -304,7 +304,7 @@ struct fb_ops { |
17793 |
+@@ -305,7 +305,7 @@ struct fb_ops { |
17794 |
/* called at KDB enter and leave time to prepare the console */ |
17795 |
int (*fb_debug_enter)(struct fb_info *info); |
17796 |
int (*fb_debug_leave)(struct fb_info *info); |
17797 |
@@ -78933,6 +81789,534 @@ index 230f87b..1fd0485 100644 |
17798 |
void do_close_on_exec(struct files_struct *); |
17799 |
int iterate_fd(struct files_struct *, unsigned, |
17800 |
int (*)(const void *, struct file *, unsigned), |
17801 |
+diff --git a/include/linux/filter.h b/include/linux/filter.h |
17802 |
+index a7e3c48..e568c8e 100644 |
17803 |
+--- a/include/linux/filter.h |
17804 |
++++ b/include/linux/filter.h |
17805 |
+@@ -9,330 +9,28 @@ |
17806 |
+ #include <linux/workqueue.h> |
17807 |
+ #include <uapi/linux/filter.h> |
17808 |
+ |
17809 |
+-/* Internally used and optimized filter representation with extended |
17810 |
+- * instruction set based on top of classic BPF. |
17811 |
+- */ |
17812 |
+- |
17813 |
+-/* instruction classes */ |
17814 |
+-#define BPF_ALU64 0x07 /* alu mode in double word width */ |
17815 |
+- |
17816 |
+-/* ld/ldx fields */ |
17817 |
+-#define BPF_DW 0x18 /* double word */ |
17818 |
+-#define BPF_XADD 0xc0 /* exclusive add */ |
17819 |
+- |
17820 |
+-/* alu/jmp fields */ |
17821 |
+-#define BPF_MOV 0xb0 /* mov reg to reg */ |
17822 |
+-#define BPF_ARSH 0xc0 /* sign extending arithmetic shift right */ |
17823 |
+- |
17824 |
+-/* change endianness of a register */ |
17825 |
+-#define BPF_END 0xd0 /* flags for endianness conversion: */ |
17826 |
+-#define BPF_TO_LE 0x00 /* convert to little-endian */ |
17827 |
+-#define BPF_TO_BE 0x08 /* convert to big-endian */ |
17828 |
+-#define BPF_FROM_LE BPF_TO_LE |
17829 |
+-#define BPF_FROM_BE BPF_TO_BE |
17830 |
+- |
17831 |
+-#define BPF_JNE 0x50 /* jump != */ |
17832 |
+-#define BPF_JSGT 0x60 /* SGT is signed '>', GT in x86 */ |
17833 |
+-#define BPF_JSGE 0x70 /* SGE is signed '>=', GE in x86 */ |
17834 |
+-#define BPF_CALL 0x80 /* function call */ |
17835 |
+-#define BPF_EXIT 0x90 /* function return */ |
17836 |
+- |
17837 |
+-/* Register numbers */ |
17838 |
+-enum { |
17839 |
+- BPF_REG_0 = 0, |
17840 |
+- BPF_REG_1, |
17841 |
+- BPF_REG_2, |
17842 |
+- BPF_REG_3, |
17843 |
+- BPF_REG_4, |
17844 |
+- BPF_REG_5, |
17845 |
+- BPF_REG_6, |
17846 |
+- BPF_REG_7, |
17847 |
+- BPF_REG_8, |
17848 |
+- BPF_REG_9, |
17849 |
+- BPF_REG_10, |
17850 |
+- __MAX_BPF_REG, |
17851 |
+-}; |
17852 |
+- |
17853 |
+-/* BPF has 10 general purpose 64-bit registers and stack frame. */ |
17854 |
+-#define MAX_BPF_REG __MAX_BPF_REG |
17855 |
+- |
17856 |
+-/* ArgX, context and stack frame pointer register positions. Note, |
17857 |
+- * Arg1, Arg2, Arg3, etc are used as argument mappings of function |
17858 |
+- * calls in BPF_CALL instruction. |
17859 |
+- */ |
17860 |
+-#define BPF_REG_ARG1 BPF_REG_1 |
17861 |
+-#define BPF_REG_ARG2 BPF_REG_2 |
17862 |
+-#define BPF_REG_ARG3 BPF_REG_3 |
17863 |
+-#define BPF_REG_ARG4 BPF_REG_4 |
17864 |
+-#define BPF_REG_ARG5 BPF_REG_5 |
17865 |
+-#define BPF_REG_CTX BPF_REG_6 |
17866 |
+-#define BPF_REG_FP BPF_REG_10 |
17867 |
+- |
17868 |
+-/* Additional register mappings for converted user programs. */ |
17869 |
+-#define BPF_REG_A BPF_REG_0 |
17870 |
+-#define BPF_REG_X BPF_REG_7 |
17871 |
+-#define BPF_REG_TMP BPF_REG_8 |
17872 |
+- |
17873 |
+-/* BPF program can access up to 512 bytes of stack space. */ |
17874 |
+-#define MAX_BPF_STACK 512 |
17875 |
+- |
17876 |
+-/* Helper macros for filter block array initializers. */ |
17877 |
+- |
17878 |
+-/* ALU ops on registers, bpf_add|sub|...: dst_reg += src_reg */ |
17879 |
+- |
17880 |
+-#define BPF_ALU64_REG(OP, DST, SRC) \ |
17881 |
+- ((struct sock_filter_int) { \ |
17882 |
+- .code = BPF_ALU64 | BPF_OP(OP) | BPF_X, \ |
17883 |
+- .dst_reg = DST, \ |
17884 |
+- .src_reg = SRC, \ |
17885 |
+- .off = 0, \ |
17886 |
+- .imm = 0 }) |
17887 |
+- |
17888 |
+-#define BPF_ALU32_REG(OP, DST, SRC) \ |
17889 |
+- ((struct sock_filter_int) { \ |
17890 |
+- .code = BPF_ALU | BPF_OP(OP) | BPF_X, \ |
17891 |
+- .dst_reg = DST, \ |
17892 |
+- .src_reg = SRC, \ |
17893 |
+- .off = 0, \ |
17894 |
+- .imm = 0 }) |
17895 |
+- |
17896 |
+-/* ALU ops on immediates, bpf_add|sub|...: dst_reg += imm32 */ |
17897 |
+- |
17898 |
+-#define BPF_ALU64_IMM(OP, DST, IMM) \ |
17899 |
+- ((struct sock_filter_int) { \ |
17900 |
+- .code = BPF_ALU64 | BPF_OP(OP) | BPF_K, \ |
17901 |
+- .dst_reg = DST, \ |
17902 |
+- .src_reg = 0, \ |
17903 |
+- .off = 0, \ |
17904 |
+- .imm = IMM }) |
17905 |
+- |
17906 |
+-#define BPF_ALU32_IMM(OP, DST, IMM) \ |
17907 |
+- ((struct sock_filter_int) { \ |
17908 |
+- .code = BPF_ALU | BPF_OP(OP) | BPF_K, \ |
17909 |
+- .dst_reg = DST, \ |
17910 |
+- .src_reg = 0, \ |
17911 |
+- .off = 0, \ |
17912 |
+- .imm = IMM }) |
17913 |
+- |
17914 |
+-/* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ |
17915 |
+- |
17916 |
+-#define BPF_ENDIAN(TYPE, DST, LEN) \ |
17917 |
+- ((struct sock_filter_int) { \ |
17918 |
+- .code = BPF_ALU | BPF_END | BPF_SRC(TYPE), \ |
17919 |
+- .dst_reg = DST, \ |
17920 |
+- .src_reg = 0, \ |
17921 |
+- .off = 0, \ |
17922 |
+- .imm = LEN }) |
17923 |
+- |
17924 |
+-/* Short form of mov, dst_reg = src_reg */ |
17925 |
+- |
17926 |
+-#define BPF_MOV64_REG(DST, SRC) \ |
17927 |
+- ((struct sock_filter_int) { \ |
17928 |
+- .code = BPF_ALU64 | BPF_MOV | BPF_X, \ |
17929 |
+- .dst_reg = DST, \ |
17930 |
+- .src_reg = SRC, \ |
17931 |
+- .off = 0, \ |
17932 |
+- .imm = 0 }) |
17933 |
+- |
17934 |
+-#define BPF_MOV32_REG(DST, SRC) \ |
17935 |
+- ((struct sock_filter_int) { \ |
17936 |
+- .code = BPF_ALU | BPF_MOV | BPF_X, \ |
17937 |
+- .dst_reg = DST, \ |
17938 |
+- .src_reg = SRC, \ |
17939 |
+- .off = 0, \ |
17940 |
+- .imm = 0 }) |
17941 |
+- |
17942 |
+-/* Short form of mov, dst_reg = imm32 */ |
17943 |
+- |
17944 |
+-#define BPF_MOV64_IMM(DST, IMM) \ |
17945 |
+- ((struct sock_filter_int) { \ |
17946 |
+- .code = BPF_ALU64 | BPF_MOV | BPF_K, \ |
17947 |
+- .dst_reg = DST, \ |
17948 |
+- .src_reg = 0, \ |
17949 |
+- .off = 0, \ |
17950 |
+- .imm = IMM }) |
17951 |
+- |
17952 |
+-#define BPF_MOV32_IMM(DST, IMM) \ |
17953 |
+- ((struct sock_filter_int) { \ |
17954 |
+- .code = BPF_ALU | BPF_MOV | BPF_K, \ |
17955 |
+- .dst_reg = DST, \ |
17956 |
+- .src_reg = 0, \ |
17957 |
+- .off = 0, \ |
17958 |
+- .imm = IMM }) |
17959 |
+- |
17960 |
+-/* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ |
17961 |
+- |
17962 |
+-#define BPF_MOV64_RAW(TYPE, DST, SRC, IMM) \ |
17963 |
+- ((struct sock_filter_int) { \ |
17964 |
+- .code = BPF_ALU64 | BPF_MOV | BPF_SRC(TYPE), \ |
17965 |
+- .dst_reg = DST, \ |
17966 |
+- .src_reg = SRC, \ |
17967 |
+- .off = 0, \ |
17968 |
+- .imm = IMM }) |
17969 |
+- |
17970 |
+-#define BPF_MOV32_RAW(TYPE, DST, SRC, IMM) \ |
17971 |
+- ((struct sock_filter_int) { \ |
17972 |
+- .code = BPF_ALU | BPF_MOV | BPF_SRC(TYPE), \ |
17973 |
+- .dst_reg = DST, \ |
17974 |
+- .src_reg = SRC, \ |
17975 |
+- .off = 0, \ |
17976 |
+- .imm = IMM }) |
17977 |
+- |
17978 |
+-/* Direct packet access, R0 = *(uint *) (skb->data + imm32) */ |
17979 |
+- |
17980 |
+-#define BPF_LD_ABS(SIZE, IMM) \ |
17981 |
+- ((struct sock_filter_int) { \ |
17982 |
+- .code = BPF_LD | BPF_SIZE(SIZE) | BPF_ABS, \ |
17983 |
+- .dst_reg = 0, \ |
17984 |
+- .src_reg = 0, \ |
17985 |
+- .off = 0, \ |
17986 |
+- .imm = IMM }) |
17987 |
+- |
17988 |
+-/* Indirect packet access, R0 = *(uint *) (skb->data + src_reg + imm32) */ |
17989 |
+- |
17990 |
+-#define BPF_LD_IND(SIZE, SRC, IMM) \ |
17991 |
+- ((struct sock_filter_int) { \ |
17992 |
+- .code = BPF_LD | BPF_SIZE(SIZE) | BPF_IND, \ |
17993 |
+- .dst_reg = 0, \ |
17994 |
+- .src_reg = SRC, \ |
17995 |
+- .off = 0, \ |
17996 |
+- .imm = IMM }) |
17997 |
+- |
17998 |
+-/* Memory load, dst_reg = *(uint *) (src_reg + off16) */ |
17999 |
+- |
18000 |
+-#define BPF_LDX_MEM(SIZE, DST, SRC, OFF) \ |
18001 |
+- ((struct sock_filter_int) { \ |
18002 |
+- .code = BPF_LDX | BPF_SIZE(SIZE) | BPF_MEM, \ |
18003 |
+- .dst_reg = DST, \ |
18004 |
+- .src_reg = SRC, \ |
18005 |
+- .off = OFF, \ |
18006 |
+- .imm = 0 }) |
18007 |
+- |
18008 |
+-/* Memory store, *(uint *) (dst_reg + off16) = src_reg */ |
18009 |
+- |
18010 |
+-#define BPF_STX_MEM(SIZE, DST, SRC, OFF) \ |
18011 |
+- ((struct sock_filter_int) { \ |
18012 |
+- .code = BPF_STX | BPF_SIZE(SIZE) | BPF_MEM, \ |
18013 |
+- .dst_reg = DST, \ |
18014 |
+- .src_reg = SRC, \ |
18015 |
+- .off = OFF, \ |
18016 |
+- .imm = 0 }) |
18017 |
+- |
18018 |
+-/* Memory store, *(uint *) (dst_reg + off16) = imm32 */ |
18019 |
+- |
18020 |
+-#define BPF_ST_MEM(SIZE, DST, OFF, IMM) \ |
18021 |
+- ((struct sock_filter_int) { \ |
18022 |
+- .code = BPF_ST | BPF_SIZE(SIZE) | BPF_MEM, \ |
18023 |
+- .dst_reg = DST, \ |
18024 |
+- .src_reg = 0, \ |
18025 |
+- .off = OFF, \ |
18026 |
+- .imm = IMM }) |
18027 |
+- |
18028 |
+-/* Conditional jumps against registers, if (dst_reg 'op' src_reg) goto pc + off16 */ |
18029 |
+- |
18030 |
+-#define BPF_JMP_REG(OP, DST, SRC, OFF) \ |
18031 |
+- ((struct sock_filter_int) { \ |
18032 |
+- .code = BPF_JMP | BPF_OP(OP) | BPF_X, \ |
18033 |
+- .dst_reg = DST, \ |
18034 |
+- .src_reg = SRC, \ |
18035 |
+- .off = OFF, \ |
18036 |
+- .imm = 0 }) |
18037 |
+- |
18038 |
+-/* Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + off16 */ |
18039 |
+- |
18040 |
+-#define BPF_JMP_IMM(OP, DST, IMM, OFF) \ |
18041 |
+- ((struct sock_filter_int) { \ |
18042 |
+- .code = BPF_JMP | BPF_OP(OP) | BPF_K, \ |
18043 |
+- .dst_reg = DST, \ |
18044 |
+- .src_reg = 0, \ |
18045 |
+- .off = OFF, \ |
18046 |
+- .imm = IMM }) |
18047 |
+- |
18048 |
+-/* Function call */ |
18049 |
+- |
18050 |
+-#define BPF_EMIT_CALL(FUNC) \ |
18051 |
+- ((struct sock_filter_int) { \ |
18052 |
+- .code = BPF_JMP | BPF_CALL, \ |
18053 |
+- .dst_reg = 0, \ |
18054 |
+- .src_reg = 0, \ |
18055 |
+- .off = 0, \ |
18056 |
+- .imm = ((FUNC) - __bpf_call_base) }) |
18057 |
+- |
18058 |
+-/* Raw code statement block */ |
18059 |
+- |
18060 |
+-#define BPF_RAW_INSN(CODE, DST, SRC, OFF, IMM) \ |
18061 |
+- ((struct sock_filter_int) { \ |
18062 |
+- .code = CODE, \ |
18063 |
+- .dst_reg = DST, \ |
18064 |
+- .src_reg = SRC, \ |
18065 |
+- .off = OFF, \ |
18066 |
+- .imm = IMM }) |
18067 |
+- |
18068 |
+-/* Program exit */ |
18069 |
+- |
18070 |
+-#define BPF_EXIT_INSN() \ |
18071 |
+- ((struct sock_filter_int) { \ |
18072 |
+- .code = BPF_JMP | BPF_EXIT, \ |
18073 |
+- .dst_reg = 0, \ |
18074 |
+- .src_reg = 0, \ |
18075 |
+- .off = 0, \ |
18076 |
+- .imm = 0 }) |
18077 |
+- |
18078 |
+-#define bytes_to_bpf_size(bytes) \ |
18079 |
+-({ \ |
18080 |
+- int bpf_size = -EINVAL; \ |
18081 |
+- \ |
18082 |
+- if (bytes == sizeof(u8)) \ |
18083 |
+- bpf_size = BPF_B; \ |
18084 |
+- else if (bytes == sizeof(u16)) \ |
18085 |
+- bpf_size = BPF_H; \ |
18086 |
+- else if (bytes == sizeof(u32)) \ |
18087 |
+- bpf_size = BPF_W; \ |
18088 |
+- else if (bytes == sizeof(u64)) \ |
18089 |
+- bpf_size = BPF_DW; \ |
18090 |
+- \ |
18091 |
+- bpf_size; \ |
18092 |
+-}) |
18093 |
+- |
18094 |
+-/* Macro to invoke filter function. */ |
18095 |
+-#define SK_RUN_FILTER(filter, ctx) (*filter->bpf_func)(ctx, filter->insnsi) |
18096 |
+- |
18097 |
+-struct sock_filter_int { |
18098 |
+- __u8 code; /* opcode */ |
18099 |
+- __u8 dst_reg:4; /* dest register */ |
18100 |
+- __u8 src_reg:4; /* source register */ |
18101 |
+- __s16 off; /* signed offset */ |
18102 |
+- __s32 imm; /* signed immediate constant */ |
18103 |
+-}; |
18104 |
+- |
18105 |
+ #ifdef CONFIG_COMPAT |
18106 |
+-/* A struct sock_filter is architecture independent. */ |
18107 |
++/* |
18108 |
++ * A struct sock_filter is architecture independent. |
18109 |
++ */ |
18110 |
+ struct compat_sock_fprog { |
18111 |
+ u16 len; |
18112 |
+- compat_uptr_t filter; /* struct sock_filter * */ |
18113 |
++ compat_uptr_t filter; /* struct sock_filter * */ |
18114 |
+ }; |
18115 |
+ #endif |
18116 |
+ |
18117 |
+-struct sock_fprog_kern { |
18118 |
+- u16 len; |
18119 |
+- struct sock_filter *filter; |
18120 |
+-}; |
18121 |
+- |
18122 |
+ struct sk_buff; |
18123 |
+ struct sock; |
18124 |
+-struct seccomp_data; |
18125 |
+ |
18126 |
+-struct sk_filter { |
18127 |
++struct sk_filter |
18128 |
++{ |
18129 |
+ atomic_t refcnt; |
18130 |
+- u32 jited:1, /* Is our filter JIT'ed? */ |
18131 |
+- len:31; /* Number of filter blocks */ |
18132 |
+- struct sock_fprog_kern *orig_prog; /* Original BPF program */ |
18133 |
++ unsigned int len; /* Number of filter blocks */ |
18134 |
+ struct rcu_head rcu; |
18135 |
+ unsigned int (*bpf_func)(const struct sk_buff *skb, |
18136 |
+- const struct sock_filter_int *filter); |
18137 |
++ const struct sock_filter *filter); |
18138 |
+ union { |
18139 |
+- struct sock_filter insns[0]; |
18140 |
+- struct sock_filter_int insnsi[0]; |
18141 |
++ struct sock_filter insns[0]; |
18142 |
+ struct work_struct work; |
18143 |
+ }; |
18144 |
+ }; |
18145 |
+@@ -343,76 +41,25 @@ static inline unsigned int sk_filter_size(unsigned int proglen) |
18146 |
+ offsetof(struct sk_filter, insns[proglen])); |
18147 |
+ } |
18148 |
+ |
18149 |
+-#define sk_filter_proglen(fprog) \ |
18150 |
+- (fprog->len * sizeof(fprog->filter[0])) |
18151 |
+- |
18152 |
+-int sk_filter(struct sock *sk, struct sk_buff *skb); |
18153 |
+- |
18154 |
+-void sk_filter_select_runtime(struct sk_filter *fp); |
18155 |
+-void sk_filter_free(struct sk_filter *fp); |
18156 |
+- |
18157 |
+-int sk_convert_filter(struct sock_filter *prog, int len, |
18158 |
+- struct sock_filter_int *new_prog, int *new_len); |
18159 |
+- |
18160 |
+-int sk_unattached_filter_create(struct sk_filter **pfp, |
18161 |
+- struct sock_fprog_kern *fprog); |
18162 |
+-void sk_unattached_filter_destroy(struct sk_filter *fp); |
18163 |
+- |
18164 |
+-int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); |
18165 |
+-int sk_detach_filter(struct sock *sk); |
18166 |
+- |
18167 |
+-int sk_chk_filter(struct sock_filter *filter, unsigned int flen); |
18168 |
+-int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, |
18169 |
+- unsigned int len); |
18170 |
+- |
18171 |
+-void sk_filter_charge(struct sock *sk, struct sk_filter *fp); |
18172 |
+-void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp); |
18173 |
+- |
18174 |
+-u64 __bpf_call_base(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5); |
18175 |
+-void bpf_int_jit_compile(struct sk_filter *fp); |
18176 |
+- |
18177 |
+-#define BPF_ANC BIT(15) |
18178 |
+- |
18179 |
+-static inline u16 bpf_anc_helper(const struct sock_filter *ftest) |
18180 |
+-{ |
18181 |
+- BUG_ON(ftest->code & BPF_ANC); |
18182 |
+- |
18183 |
+- switch (ftest->code) { |
18184 |
+- case BPF_LD | BPF_W | BPF_ABS: |
18185 |
+- case BPF_LD | BPF_H | BPF_ABS: |
18186 |
+- case BPF_LD | BPF_B | BPF_ABS: |
18187 |
+-#define BPF_ANCILLARY(CODE) case SKF_AD_OFF + SKF_AD_##CODE: \ |
18188 |
+- return BPF_ANC | SKF_AD_##CODE |
18189 |
+- switch (ftest->k) { |
18190 |
+- BPF_ANCILLARY(PROTOCOL); |
18191 |
+- BPF_ANCILLARY(PKTTYPE); |
18192 |
+- BPF_ANCILLARY(IFINDEX); |
18193 |
+- BPF_ANCILLARY(NLATTR); |
18194 |
+- BPF_ANCILLARY(NLATTR_NEST); |
18195 |
+- BPF_ANCILLARY(MARK); |
18196 |
+- BPF_ANCILLARY(QUEUE); |
18197 |
+- BPF_ANCILLARY(HATYPE); |
18198 |
+- BPF_ANCILLARY(RXHASH); |
18199 |
+- BPF_ANCILLARY(CPU); |
18200 |
+- BPF_ANCILLARY(ALU_XOR_X); |
18201 |
+- BPF_ANCILLARY(VLAN_TAG); |
18202 |
+- BPF_ANCILLARY(VLAN_TAG_PRESENT); |
18203 |
+- BPF_ANCILLARY(PAY_OFFSET); |
18204 |
+- BPF_ANCILLARY(RANDOM); |
18205 |
+- } |
18206 |
+- /* Fallthrough. */ |
18207 |
+- default: |
18208 |
+- return ftest->code; |
18209 |
+- } |
18210 |
+-} |
18211 |
++extern int sk_filter(struct sock *sk, struct sk_buff *skb); |
18212 |
++extern unsigned int sk_run_filter(const struct sk_buff *skb, |
18213 |
++ const struct sock_filter *filter); |
18214 |
++extern int sk_unattached_filter_create(struct sk_filter **pfp, |
18215 |
++ struct sock_fprog *fprog); |
18216 |
++extern void sk_unattached_filter_destroy(struct sk_filter *fp); |
18217 |
++extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk); |
18218 |
++extern int sk_detach_filter(struct sock *sk); |
18219 |
++extern int sk_chk_filter(struct sock_filter *filter, unsigned int flen); |
18220 |
++extern int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, unsigned len); |
18221 |
++extern void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to); |
18222 |
+ |
18223 |
+ #ifdef CONFIG_BPF_JIT |
18224 |
+ #include <stdarg.h> |
18225 |
+ #include <linux/linkage.h> |
18226 |
+ #include <linux/printk.h> |
18227 |
+ |
18228 |
+-void bpf_jit_compile(struct sk_filter *fp); |
18229 |
+-void bpf_jit_free(struct sk_filter *fp); |
18230 |
++extern void bpf_jit_compile(struct sk_filter *fp); |
18231 |
++extern void bpf_jit_free(struct sk_filter *fp); |
18232 |
+ |
18233 |
+ static inline void bpf_jit_dump(unsigned int flen, unsigned int proglen, |
18234 |
+ u32 pass, void *image) |
18235 |
+@@ -423,22 +70,90 @@ static inline void bpf_jit_dump(unsigned int flen, unsigned int proglen, |
18236 |
+ print_hex_dump(KERN_ERR, "JIT code: ", DUMP_PREFIX_OFFSET, |
18237 |
+ 16, 1, image, proglen, false); |
18238 |
+ } |
18239 |
++#define SK_RUN_FILTER(FILTER, SKB) (*FILTER->bpf_func)(SKB, FILTER->insns) |
18240 |
+ #else |
18241 |
+ #include <linux/slab.h> |
18242 |
+- |
18243 |
+ static inline void bpf_jit_compile(struct sk_filter *fp) |
18244 |
+ { |
18245 |
+ } |
18246 |
+- |
18247 |
+ static inline void bpf_jit_free(struct sk_filter *fp) |
18248 |
+ { |
18249 |
+ kfree(fp); |
18250 |
+ } |
18251 |
+-#endif /* CONFIG_BPF_JIT */ |
18252 |
++#define SK_RUN_FILTER(FILTER, SKB) sk_run_filter(SKB, FILTER->insns) |
18253 |
++#endif |
18254 |
+ |
18255 |
+ static inline int bpf_tell_extensions(void) |
18256 |
+ { |
18257 |
+ return SKF_AD_MAX; |
18258 |
+ } |
18259 |
+ |
18260 |
++enum { |
18261 |
++ BPF_S_RET_K = 1, |
18262 |
++ BPF_S_RET_A, |
18263 |
++ BPF_S_ALU_ADD_K, |
18264 |
++ BPF_S_ALU_ADD_X, |
18265 |
++ BPF_S_ALU_SUB_K, |
18266 |
++ BPF_S_ALU_SUB_X, |
18267 |
++ BPF_S_ALU_MUL_K, |
18268 |
++ BPF_S_ALU_MUL_X, |
18269 |
++ BPF_S_ALU_DIV_X, |
18270 |
++ BPF_S_ALU_MOD_K, |
18271 |
++ BPF_S_ALU_MOD_X, |
18272 |
++ BPF_S_ALU_AND_K, |
18273 |
++ BPF_S_ALU_AND_X, |
18274 |
++ BPF_S_ALU_OR_K, |
18275 |
++ BPF_S_ALU_OR_X, |
18276 |
++ BPF_S_ALU_XOR_K, |
18277 |
++ BPF_S_ALU_XOR_X, |
18278 |
++ BPF_S_ALU_LSH_K, |
18279 |
++ BPF_S_ALU_LSH_X, |
18280 |
++ BPF_S_ALU_RSH_K, |
18281 |
++ BPF_S_ALU_RSH_X, |
18282 |
++ BPF_S_ALU_NEG, |
18283 |
++ BPF_S_LD_W_ABS, |
18284 |
++ BPF_S_LD_H_ABS, |
18285 |
++ BPF_S_LD_B_ABS, |
18286 |
++ BPF_S_LD_W_LEN, |
18287 |
++ BPF_S_LD_W_IND, |
18288 |
++ BPF_S_LD_H_IND, |
18289 |
++ BPF_S_LD_B_IND, |
18290 |
++ BPF_S_LD_IMM, |
18291 |
++ BPF_S_LDX_W_LEN, |
18292 |
++ BPF_S_LDX_B_MSH, |
18293 |
++ BPF_S_LDX_IMM, |
18294 |
++ BPF_S_MISC_TAX, |
18295 |
++ BPF_S_MISC_TXA, |
18296 |
++ BPF_S_ALU_DIV_K, |
18297 |
++ BPF_S_LD_MEM, |
18298 |
++ BPF_S_LDX_MEM, |
18299 |
++ BPF_S_ST, |
18300 |
++ BPF_S_STX, |
18301 |
++ BPF_S_JMP_JA, |
18302 |
++ BPF_S_JMP_JEQ_K, |
18303 |
++ BPF_S_JMP_JEQ_X, |
18304 |
++ BPF_S_JMP_JGE_K, |
18305 |
++ BPF_S_JMP_JGE_X, |
18306 |
++ BPF_S_JMP_JGT_K, |
18307 |
++ BPF_S_JMP_JGT_X, |
18308 |
++ BPF_S_JMP_JSET_K, |
18309 |
++ BPF_S_JMP_JSET_X, |
18310 |
++ /* Ancillary data */ |
18311 |
++ BPF_S_ANC_PROTOCOL, |
18312 |
++ BPF_S_ANC_PKTTYPE, |
18313 |
++ BPF_S_ANC_IFINDEX, |
18314 |
++ BPF_S_ANC_NLATTR, |
18315 |
++ BPF_S_ANC_NLATTR_NEST, |
18316 |
++ BPF_S_ANC_MARK, |
18317 |
++ BPF_S_ANC_QUEUE, |
18318 |
++ BPF_S_ANC_HATYPE, |
18319 |
++ BPF_S_ANC_RXHASH, |
18320 |
++ BPF_S_ANC_CPU, |
18321 |
++ BPF_S_ANC_ALU_XOR_X, |
18322 |
++ BPF_S_ANC_SECCOMP_LD_W, |
18323 |
++ BPF_S_ANC_VLAN_TAG, |
18324 |
++ BPF_S_ANC_VLAN_TAG_PRESENT, |
18325 |
++ BPF_S_ANC_PAY_OFFSET, |
18326 |
++}; |
18327 |
++ |
18328 |
+ #endif /* __LINUX_FILTER_H__ */ |
18329 |
diff --git a/include/linux/frontswap.h b/include/linux/frontswap.h |
18330 |
index 8293262..2b3b8bd 100644 |
18331 |
--- a/include/linux/frontswap.h |
18332 |
@@ -78947,10 +82331,10 @@ index 8293262..2b3b8bd 100644 |
18333 |
extern bool frontswap_enabled; |
18334 |
extern struct frontswap_ops * |
18335 |
diff --git a/include/linux/fs.h b/include/linux/fs.h |
18336 |
-index 8780312..425cc22 100644 |
18337 |
+index e11d60c..901317a 100644 |
18338 |
--- a/include/linux/fs.h |
18339 |
+++ b/include/linux/fs.h |
18340 |
-@@ -398,7 +398,7 @@ struct address_space { |
18341 |
+@@ -401,7 +401,7 @@ struct address_space { |
18342 |
spinlock_t private_lock; /* for use by the address_space */ |
18343 |
struct list_head private_list; /* ditto */ |
18344 |
void *private_data; /* ditto */ |
18345 |
@@ -78959,7 +82343,7 @@ index 8780312..425cc22 100644 |
18346 |
/* |
18347 |
* On most architectures that alignment is already the case; but |
18348 |
* must be enforced here for CRIS, to let the least significant bit |
18349 |
-@@ -441,7 +441,7 @@ struct block_device { |
18350 |
+@@ -444,7 +444,7 @@ struct block_device { |
18351 |
int bd_fsfreeze_count; |
18352 |
/* Mutex for freeze */ |
18353 |
struct mutex bd_fsfreeze_mutex; |
18354 |
@@ -78968,7 +82352,7 @@ index 8780312..425cc22 100644 |
18355 |
|
18356 |
/* |
18357 |
* Radix-tree tags, for tagging dirty and writeback pages within the pagecache |
18358 |
-@@ -585,7 +585,7 @@ struct inode { |
18359 |
+@@ -588,7 +588,7 @@ struct inode { |
18360 |
#endif |
18361 |
|
18362 |
void *i_private; /* fs or device private pointer */ |
18363 |
@@ -78977,7 +82361,7 @@ index 8780312..425cc22 100644 |
18364 |
|
18365 |
static inline int inode_unhashed(struct inode *inode) |
18366 |
{ |
18367 |
-@@ -778,7 +778,7 @@ struct file { |
18368 |
+@@ -781,7 +781,7 @@ struct file { |
18369 |
struct list_head f_tfile_llink; |
18370 |
#endif /* #ifdef CONFIG_EPOLL */ |
18371 |
struct address_space *f_mapping; |
18372 |
@@ -78986,7 +82370,7 @@ index 8780312..425cc22 100644 |
18373 |
|
18374 |
struct file_handle { |
18375 |
__u32 handle_bytes; |
18376 |
-@@ -906,7 +906,7 @@ struct file_lock { |
18377 |
+@@ -909,7 +909,7 @@ struct file_lock { |
18378 |
int state; /* state of grant or error if -ve */ |
18379 |
} afs; |
18380 |
} fl_u; |
18381 |
@@ -78995,7 +82379,7 @@ index 8780312..425cc22 100644 |
18382 |
|
18383 |
/* The following constant reflects the upper bound of the file/locking space */ |
18384 |
#ifndef OFFSET_MAX |
18385 |
-@@ -1255,7 +1255,7 @@ struct super_block { |
18386 |
+@@ -1258,7 +1258,7 @@ struct super_block { |
18387 |
struct list_lru s_dentry_lru ____cacheline_aligned_in_smp; |
18388 |
struct list_lru s_inode_lru ____cacheline_aligned_in_smp; |
18389 |
struct rcu_head rcu; |
18390 |
@@ -79004,7 +82388,7 @@ index 8780312..425cc22 100644 |
18391 |
|
18392 |
extern struct timespec current_fs_time(struct super_block *sb); |
18393 |
|
18394 |
-@@ -1477,7 +1477,8 @@ struct file_operations { |
18395 |
+@@ -1484,7 +1484,8 @@ struct file_operations { |
18396 |
long (*fallocate)(struct file *file, int mode, loff_t offset, |
18397 |
loff_t len); |
18398 |
int (*show_fdinfo)(struct seq_file *m, struct file *f); |
18399 |
@@ -79014,7 +82398,7 @@ index 8780312..425cc22 100644 |
18400 |
|
18401 |
struct inode_operations { |
18402 |
struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int); |
18403 |
-@@ -2757,4 +2758,14 @@ static inline bool dir_relax(struct inode *inode) |
18404 |
+@@ -2769,4 +2770,14 @@ static inline bool dir_relax(struct inode *inode) |
18405 |
return !IS_DEADDIR(inode); |
18406 |
} |
18407 |
|
18408 |
@@ -79118,7 +82502,7 @@ index 1c804b0..1432c2b 100644 |
18409 |
|
18410 |
/* |
18411 |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h |
18412 |
-index 9f3c275..8bdff5d 100644 |
18413 |
+index ec274e0..e678159 100644 |
18414 |
--- a/include/linux/genhd.h |
18415 |
+++ b/include/linux/genhd.h |
18416 |
@@ -194,7 +194,7 @@ struct gendisk { |
18417 |
@@ -79153,10 +82537,10 @@ index c0894dd..2fbf10c 100644 |
18418 |
}; |
18419 |
|
18420 |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h |
18421 |
-index 39b81dc..819dc51 100644 |
18422 |
+index 6eb1fb3..30fe7e4 100644 |
18423 |
--- a/include/linux/gfp.h |
18424 |
+++ b/include/linux/gfp.h |
18425 |
-@@ -36,6 +36,13 @@ struct vm_area_struct; |
18426 |
+@@ -34,6 +34,13 @@ struct vm_area_struct; |
18427 |
#define ___GFP_NO_KSWAPD 0x400000u |
18428 |
#define ___GFP_OTHER_NODE 0x800000u |
18429 |
#define ___GFP_WRITE 0x1000000u |
18430 |
@@ -79170,15 +82554,15 @@ index 39b81dc..819dc51 100644 |
18431 |
/* If the above are modified, __GFP_BITS_SHIFT may need updating */ |
18432 |
|
18433 |
/* |
18434 |
-@@ -93,6 +100,7 @@ struct vm_area_struct; |
18435 |
+@@ -90,6 +97,7 @@ struct vm_area_struct; |
18436 |
+ #define __GFP_NO_KSWAPD ((__force gfp_t)___GFP_NO_KSWAPD) |
18437 |
#define __GFP_OTHER_NODE ((__force gfp_t)___GFP_OTHER_NODE) /* On behalf of other node */ |
18438 |
- #define __GFP_KMEMCG ((__force gfp_t)___GFP_KMEMCG) /* Allocation comes from a memcg-accounted resource */ |
18439 |
#define __GFP_WRITE ((__force gfp_t)___GFP_WRITE) /* Allocator intends to dirty page */ |
18440 |
+#define __GFP_USERCOPY ((__force gfp_t)___GFP_USERCOPY)/* Allocator intends to copy page to/from userland */ |
18441 |
|
18442 |
/* |
18443 |
* This may seem redundant, but it's a way of annotating false positives vs. |
18444 |
-@@ -100,7 +108,7 @@ struct vm_area_struct; |
18445 |
+@@ -97,7 +105,7 @@ struct vm_area_struct; |
18446 |
*/ |
18447 |
#define __GFP_NOTRACK_FALSE_POSITIVE (__GFP_NOTRACK) |
18448 |
|
18449 |
@@ -79187,7 +82571,7 @@ index 39b81dc..819dc51 100644 |
18450 |
#define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) |
18451 |
|
18452 |
/* This equals 0, but use constants in case they ever change */ |
18453 |
-@@ -158,6 +166,8 @@ struct vm_area_struct; |
18454 |
+@@ -155,6 +163,8 @@ struct vm_area_struct; |
18455 |
/* 4GB DMA on some platforms */ |
18456 |
#define GFP_DMA32 __GFP_DMA32 |
18457 |
|
18458 |
@@ -80225,10 +83609,10 @@ index 0000000..b02ba9d |
18459 |
+#define GR_MSRWRITE_MSG "denied write to CPU MSR by " |
18460 |
diff --git a/include/linux/grsecurity.h b/include/linux/grsecurity.h |
18461 |
new file mode 100644 |
18462 |
-index 0000000..e6d120f |
18463 |
+index 0000000..10b9635 |
18464 |
--- /dev/null |
18465 |
+++ b/include/linux/grsecurity.h |
18466 |
-@@ -0,0 +1,252 @@ |
18467 |
+@@ -0,0 +1,254 @@ |
18468 |
+#ifndef GR_SECURITY_H |
18469 |
+#define GR_SECURITY_H |
18470 |
+#include <linux/fs.h> |
18471 |
@@ -80268,6 +83652,8 @@ index 0000000..e6d120f |
18472 |
+int gr_check_user_change(kuid_t real, kuid_t effective, kuid_t fs); |
18473 |
+int gr_check_group_change(kgid_t real, kgid_t effective, kgid_t fs); |
18474 |
+ |
18475 |
++int gr_learn_cap(const struct task_struct *task, const struct cred *cred, const int cap); |
18476 |
++ |
18477 |
+void gr_del_task_from_ip_table(struct task_struct *p); |
18478 |
+ |
18479 |
+int gr_pid_is_chrooted(struct task_struct *p); |
18480 |
@@ -80605,7 +83991,7 @@ index aff7ad8..3942bbd 100644 |
18481 |
extern int register_pppox_proto(int proto_num, const struct pppox_proto *pp); |
18482 |
extern void unregister_pppox_proto(int proto_num); |
18483 |
diff --git a/include/linux/init.h b/include/linux/init.h |
18484 |
-index a3ba270..a1b6604 100644 |
18485 |
+index 2df8e8d..3e1280d 100644 |
18486 |
--- a/include/linux/init.h |
18487 |
+++ b/include/linux/init.h |
18488 |
@@ -37,9 +37,17 @@ |
18489 |
@@ -80662,10 +84048,10 @@ index 6df7f9f..d0bf699 100644 |
18490 |
.files = &init_files, \ |
18491 |
.signal = &init_signals, \ |
18492 |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h |
18493 |
-index 051c850..431f83a 100644 |
18494 |
+index 698ad05..8601bb7 100644 |
18495 |
--- a/include/linux/interrupt.h |
18496 |
+++ b/include/linux/interrupt.h |
18497 |
-@@ -412,8 +412,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS]; |
18498 |
+@@ -418,8 +418,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS]; |
18499 |
|
18500 |
struct softirq_action |
18501 |
{ |
18502 |
@@ -80676,7 +84062,7 @@ index 051c850..431f83a 100644 |
18503 |
|
18504 |
asmlinkage void do_softirq(void); |
18505 |
asmlinkage void __do_softirq(void); |
18506 |
-@@ -427,7 +427,7 @@ static inline void do_softirq_own_stack(void) |
18507 |
+@@ -433,7 +433,7 @@ static inline void do_softirq_own_stack(void) |
18508 |
} |
18509 |
#endif |
18510 |
|
18511 |
@@ -80725,7 +84111,7 @@ index 35e7eca..6afb7ad 100644 |
18512 |
extern struct ipc_namespace init_ipc_ns; |
18513 |
extern atomic_t nr_ipc_ns; |
18514 |
diff --git a/include/linux/irq.h b/include/linux/irq.h |
18515 |
-index 5c57efb..965a62b 100644 |
18516 |
+index 0d998d8..3a1c782 100644 |
18517 |
--- a/include/linux/irq.h |
18518 |
+++ b/include/linux/irq.h |
18519 |
@@ -344,7 +344,8 @@ struct irq_chip { |
18520 |
@@ -80739,10 +84125,10 @@ index 5c57efb..965a62b 100644 |
18521 |
/* |
18522 |
* irq_chip specific flags |
18523 |
diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h |
18524 |
-index 7ed92d0..589abf5 100644 |
18525 |
+index 45e2d8c..26d85da 100644 |
18526 |
--- a/include/linux/irqchip/arm-gic.h |
18527 |
+++ b/include/linux/irqchip/arm-gic.h |
18528 |
-@@ -73,9 +73,11 @@ |
18529 |
+@@ -75,9 +75,11 @@ |
18530 |
|
18531 |
#ifndef __ASSEMBLY__ |
18532 |
|
18533 |
@@ -80755,6 +84141,22 @@ index 7ed92d0..589abf5 100644 |
18534 |
|
18535 |
void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *, |
18536 |
u32 offset, struct device_node *); |
18537 |
+diff --git a/include/linux/isdn_ppp.h b/include/linux/isdn_ppp.h |
18538 |
+index 8e10f57..d5f62bc 100644 |
18539 |
+--- a/include/linux/isdn_ppp.h |
18540 |
++++ b/include/linux/isdn_ppp.h |
18541 |
+@@ -180,8 +180,9 @@ struct ippp_struct { |
18542 |
+ struct slcompress *slcomp; |
18543 |
+ #endif |
18544 |
+ #ifdef CONFIG_IPPP_FILTER |
18545 |
+- struct sk_filter *pass_filter; /* filter for packets to pass */ |
18546 |
+- struct sk_filter *active_filter; /* filter for pkts to reset idle */ |
18547 |
++ struct sock_filter *pass_filter; /* filter for packets to pass */ |
18548 |
++ struct sock_filter *active_filter; /* filter for pkts to reset idle */ |
18549 |
++ unsigned pass_len, active_len; |
18550 |
+ #endif |
18551 |
+ unsigned long debug; |
18552 |
+ struct isdn_ppp_compressor *compressor,*decompressor; |
18553 |
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h |
18554 |
index 1f44466..b481806 100644 |
18555 |
--- a/include/linux/jiffies.h |
18556 |
@@ -80891,10 +84293,10 @@ index 0555cc6..40116ce 100644 |
18557 |
char **envp; |
18558 |
int wait; |
18559 |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h |
18560 |
-index f896a33..f2eb10f 100644 |
18561 |
+index 2d61b90..a1d0a13 100644 |
18562 |
--- a/include/linux/kobject.h |
18563 |
+++ b/include/linux/kobject.h |
18564 |
-@@ -116,7 +116,7 @@ struct kobj_type { |
18565 |
+@@ -118,7 +118,7 @@ struct kobj_type { |
18566 |
struct attribute **default_attrs; |
18567 |
const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj); |
18568 |
const void *(*namespace)(struct kobject *kobj); |
18569 |
@@ -80903,7 +84305,7 @@ index f896a33..f2eb10f 100644 |
18570 |
|
18571 |
struct kobj_uevent_env { |
18572 |
char *argv[3]; |
18573 |
-@@ -140,6 +140,7 @@ struct kobj_attribute { |
18574 |
+@@ -142,6 +142,7 @@ struct kobj_attribute { |
18575 |
ssize_t (*store)(struct kobject *kobj, struct kobj_attribute *attr, |
18576 |
const char *buf, size_t count); |
18577 |
}; |
18578 |
@@ -80911,7 +84313,7 @@ index f896a33..f2eb10f 100644 |
18579 |
|
18580 |
extern const struct sysfs_ops kobj_sysfs_ops; |
18581 |
|
18582 |
-@@ -167,7 +168,7 @@ struct kset { |
18583 |
+@@ -169,7 +170,7 @@ struct kset { |
18584 |
spinlock_t list_lock; |
18585 |
struct kobject kobj; |
18586 |
const struct kset_uevent_ops *uevent_ops; |
18587 |
@@ -80947,10 +84349,10 @@ index 484604d..0f6c5b6 100644 |
18588 |
if (atomic_sub_and_test((int) count, &kref->refcount)) { |
18589 |
release(kref); |
18590 |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h |
18591 |
-index 7d21cf9..bc0c81f 100644 |
18592 |
+index ec4e3bd..14db03a 100644 |
18593 |
--- a/include/linux/kvm_host.h |
18594 |
+++ b/include/linux/kvm_host.h |
18595 |
-@@ -466,7 +466,7 @@ static inline void kvm_irqfd_exit(void) |
18596 |
+@@ -468,7 +468,7 @@ static inline void kvm_irqfd_exit(void) |
18597 |
{ |
18598 |
} |
18599 |
#endif |
18600 |
@@ -80959,7 +84361,7 @@ index 7d21cf9..bc0c81f 100644 |
18601 |
struct module *module); |
18602 |
void kvm_exit(void); |
18603 |
|
18604 |
-@@ -632,7 +632,7 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, |
18605 |
+@@ -634,7 +634,7 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu, |
18606 |
struct kvm_guest_debug *dbg); |
18607 |
int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run); |
18608 |
|
18609 |
@@ -81101,7 +84503,7 @@ index f230a97..714c006 100644 |
18610 |
static inline int |
18611 |
vma_dup_policy(struct vm_area_struct *src, struct vm_area_struct *dst) |
18612 |
diff --git a/include/linux/mm.h b/include/linux/mm.h |
18613 |
-index d677706..673408c 100644 |
18614 |
+index e03dd29..eaf923c 100644 |
18615 |
--- a/include/linux/mm.h |
18616 |
+++ b/include/linux/mm.h |
18617 |
@@ -127,6 +127,11 @@ extern unsigned int kobjsize(const void *objp); |
18618 |
@@ -81124,10 +84526,10 @@ index d677706..673408c 100644 |
18619 |
- void *buf, int len, int write); |
18620 |
+ ssize_t (*access)(struct vm_area_struct *vma, unsigned long addr, |
18621 |
+ void *buf, size_t len, int write); |
18622 |
- #ifdef CONFIG_NUMA |
18623 |
- /* |
18624 |
- * set_policy() op must add a reference to any non-NULL @new mempolicy |
18625 |
-@@ -268,6 +273,7 @@ struct vm_operations_struct { |
18626 |
+ |
18627 |
+ /* Called by the /proc/PID/maps code to ask the vma whether it |
18628 |
+ * has a special name. Returning non-NULL will also cause this |
18629 |
+@@ -274,6 +279,7 @@ struct vm_operations_struct { |
18630 |
int (*remap_pages)(struct vm_area_struct *vma, unsigned long addr, |
18631 |
unsigned long size, pgoff_t pgoff); |
18632 |
}; |
18633 |
@@ -81135,7 +84537,7 @@ index d677706..673408c 100644 |
18634 |
|
18635 |
struct mmu_gather; |
18636 |
struct inode; |
18637 |
-@@ -1133,8 +1139,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address, |
18638 |
+@@ -1144,8 +1150,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address, |
18639 |
unsigned long *pfn); |
18640 |
int follow_phys(struct vm_area_struct *vma, unsigned long address, |
18641 |
unsigned int flags, unsigned long *prot, resource_size_t *phys); |
18642 |
@@ -81146,7 +84548,7 @@ index d677706..673408c 100644 |
18643 |
|
18644 |
static inline void unmap_shared_mapping_range(struct address_space *mapping, |
18645 |
loff_t const holebegin, loff_t const holelen) |
18646 |
-@@ -1173,9 +1179,9 @@ static inline int fixup_user_fault(struct task_struct *tsk, |
18647 |
+@@ -1184,9 +1190,9 @@ static inline int fixup_user_fault(struct task_struct *tsk, |
18648 |
} |
18649 |
#endif |
18650 |
|
18651 |
@@ -81159,7 +84561,7 @@ index d677706..673408c 100644 |
18652 |
|
18653 |
long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, |
18654 |
unsigned long start, unsigned long nr_pages, |
18655 |
-@@ -1208,34 +1214,6 @@ int set_page_dirty_lock(struct page *page); |
18656 |
+@@ -1219,34 +1225,6 @@ int set_page_dirty_lock(struct page *page); |
18657 |
int clear_page_dirty_for_io(struct page *page); |
18658 |
int get_cmdline(struct task_struct *task, char *buffer, int buflen); |
18659 |
|
18660 |
@@ -81194,7 +84596,7 @@ index d677706..673408c 100644 |
18661 |
extern pid_t |
18662 |
vm_is_stack(struct task_struct *task, struct vm_area_struct *vma, int in_group); |
18663 |
|
18664 |
-@@ -1335,6 +1313,15 @@ static inline void sync_mm_rss(struct mm_struct *mm) |
18665 |
+@@ -1346,6 +1324,15 @@ static inline void sync_mm_rss(struct mm_struct *mm) |
18666 |
} |
18667 |
#endif |
18668 |
|
18669 |
@@ -81210,7 +84612,7 @@ index d677706..673408c 100644 |
18670 |
int vma_wants_writenotify(struct vm_area_struct *vma); |
18671 |
|
18672 |
extern pte_t *__get_locked_pte(struct mm_struct *mm, unsigned long addr, |
18673 |
-@@ -1353,8 +1340,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, |
18674 |
+@@ -1364,8 +1351,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, |
18675 |
{ |
18676 |
return 0; |
18677 |
} |
18678 |
@@ -81226,7 +84628,7 @@ index d677706..673408c 100644 |
18679 |
#endif |
18680 |
|
18681 |
#ifdef __PAGETABLE_PMD_FOLDED |
18682 |
-@@ -1363,8 +1357,15 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud, |
18683 |
+@@ -1374,8 +1368,15 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud, |
18684 |
{ |
18685 |
return 0; |
18686 |
} |
18687 |
@@ -81242,7 +84644,7 @@ index d677706..673408c 100644 |
18688 |
#endif |
18689 |
|
18690 |
int __pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma, |
18691 |
-@@ -1382,11 +1383,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a |
18692 |
+@@ -1393,11 +1394,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a |
18693 |
NULL: pud_offset(pgd, address); |
18694 |
} |
18695 |
|
18696 |
@@ -81266,7 +84668,7 @@ index d677706..673408c 100644 |
18697 |
#endif /* CONFIG_MMU && !__ARCH_HAS_4LEVEL_HACK */ |
18698 |
|
18699 |
#if USE_SPLIT_PTE_PTLOCKS |
18700 |
-@@ -1783,7 +1796,7 @@ extern int install_special_mapping(struct mm_struct *mm, |
18701 |
+@@ -1796,7 +1809,7 @@ extern int install_special_mapping(struct mm_struct *mm, |
18702 |
unsigned long addr, unsigned long len, |
18703 |
unsigned long flags, struct page **pages); |
18704 |
|
18705 |
@@ -81275,7 +84677,7 @@ index d677706..673408c 100644 |
18706 |
|
18707 |
extern unsigned long mmap_region(struct file *file, unsigned long addr, |
18708 |
unsigned long len, vm_flags_t vm_flags, unsigned long pgoff); |
18709 |
-@@ -1791,6 +1804,7 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
18710 |
+@@ -1804,6 +1817,7 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
18711 |
unsigned long len, unsigned long prot, unsigned long flags, |
18712 |
unsigned long pgoff, unsigned long *populate); |
18713 |
extern int do_munmap(struct mm_struct *, unsigned long, size_t); |
18714 |
@@ -81283,7 +84685,7 @@ index d677706..673408c 100644 |
18715 |
|
18716 |
#ifdef CONFIG_MMU |
18717 |
extern int __mm_populate(unsigned long addr, unsigned long len, |
18718 |
-@@ -1819,10 +1833,11 @@ struct vm_unmapped_area_info { |
18719 |
+@@ -1832,10 +1846,11 @@ struct vm_unmapped_area_info { |
18720 |
unsigned long high_limit; |
18721 |
unsigned long align_mask; |
18722 |
unsigned long align_offset; |
18723 |
@@ -81297,7 +84699,7 @@ index d677706..673408c 100644 |
18724 |
|
18725 |
/* |
18726 |
* Search for an unmapped address range. |
18727 |
-@@ -1834,7 +1849,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info); |
18728 |
+@@ -1847,7 +1862,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info); |
18729 |
* - satisfies (begin_addr & align_mask) == (align_offset & align_mask) |
18730 |
*/ |
18731 |
static inline unsigned long |
18732 |
@@ -81306,7 +84708,7 @@ index d677706..673408c 100644 |
18733 |
{ |
18734 |
if (!(info->flags & VM_UNMAPPED_AREA_TOPDOWN)) |
18735 |
return unmapped_area(info); |
18736 |
-@@ -1896,6 +1911,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add |
18737 |
+@@ -1909,6 +1924,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add |
18738 |
extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr, |
18739 |
struct vm_area_struct **pprev); |
18740 |
|
18741 |
@@ -81317,7 +84719,7 @@ index d677706..673408c 100644 |
18742 |
/* Look up the first VMA which intersects the interval start_addr..end_addr-1, |
18743 |
NULL if none. Assume start_addr < end_addr. */ |
18744 |
static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr) |
18745 |
-@@ -1924,15 +1943,6 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm, |
18746 |
+@@ -1937,15 +1956,6 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm, |
18747 |
return vma; |
18748 |
} |
18749 |
|
18750 |
@@ -81333,7 +84735,7 @@ index d677706..673408c 100644 |
18751 |
#ifdef CONFIG_NUMA_BALANCING |
18752 |
unsigned long change_prot_numa(struct vm_area_struct *vma, |
18753 |
unsigned long start, unsigned long end); |
18754 |
-@@ -1984,6 +1994,11 @@ void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long); |
18755 |
+@@ -1997,6 +2007,11 @@ void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long); |
18756 |
static inline void vm_stat_account(struct mm_struct *mm, |
18757 |
unsigned long flags, struct file *file, long pages) |
18758 |
{ |
18759 |
@@ -81345,7 +84747,7 @@ index d677706..673408c 100644 |
18760 |
mm->total_vm += pages; |
18761 |
} |
18762 |
#endif /* CONFIG_PROC_FS */ |
18763 |
-@@ -2065,7 +2080,7 @@ extern int unpoison_memory(unsigned long pfn); |
18764 |
+@@ -2078,7 +2093,7 @@ extern int unpoison_memory(unsigned long pfn); |
18765 |
extern int sysctl_memory_failure_early_kill; |
18766 |
extern int sysctl_memory_failure_recovery; |
18767 |
extern void shake_page(struct page *p, int access); |
18768 |
@@ -81354,7 +84756,7 @@ index d677706..673408c 100644 |
18769 |
extern int soft_offline_page(struct page *page, int flags); |
18770 |
|
18771 |
#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS) |
18772 |
-@@ -2100,5 +2115,11 @@ void __init setup_nr_node_ids(void); |
18773 |
+@@ -2113,5 +2128,11 @@ void __init setup_nr_node_ids(void); |
18774 |
static inline void setup_nr_node_ids(void) {} |
18775 |
#endif |
18776 |
|
18777 |
@@ -81367,7 +84769,7 @@ index d677706..673408c 100644 |
18778 |
#endif /* __KERNEL__ */ |
18779 |
#endif /* _LINUX_MM_H */ |
18780 |
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h |
18781 |
-index 8967e20..61f7900 100644 |
18782 |
+index 96c5750..15668ba 100644 |
18783 |
--- a/include/linux/mm_types.h |
18784 |
+++ b/include/linux/mm_types.h |
18785 |
@@ -308,7 +308,9 @@ struct vm_area_struct { |
18786 |
@@ -81431,10 +84833,10 @@ index c5d5278..f0b68c8 100644 |
18787 |
} |
18788 |
|
18789 |
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h |
18790 |
-index 835aa3d..676b387 100644 |
18791 |
+index 6cbd1b6..b1d2f99 100644 |
18792 |
--- a/include/linux/mmzone.h |
18793 |
+++ b/include/linux/mmzone.h |
18794 |
-@@ -406,7 +406,7 @@ struct zone { |
18795 |
+@@ -412,7 +412,7 @@ struct zone { |
18796 |
unsigned long flags; /* zone flags, see below */ |
18797 |
|
18798 |
/* Zone statistics */ |
18799 |
@@ -81656,7 +85058,7 @@ index 560ca53..ef621ef 100644 |
18800 |
} |
18801 |
#endif |
18802 |
diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h |
18803 |
-index 204a677..e9b486a 100644 |
18804 |
+index b1990c5..2a6e611 100644 |
18805 |
--- a/include/linux/moduleparam.h |
18806 |
+++ b/include/linux/moduleparam.h |
18807 |
@@ -293,7 +293,7 @@ static inline void __kernel_param_unlock(void) |
18808 |
@@ -81732,10 +85134,10 @@ index 17d8339..81656c0 100644 |
18809 |
struct iovec; |
18810 |
struct kvec; |
18811 |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h |
18812 |
-index b42d07b..7f45ae2 100644 |
18813 |
+index 66f9a04..056078d 100644 |
18814 |
--- a/include/linux/netdevice.h |
18815 |
+++ b/include/linux/netdevice.h |
18816 |
-@@ -1146,6 +1146,7 @@ struct net_device_ops { |
18817 |
+@@ -1145,6 +1145,7 @@ struct net_device_ops { |
18818 |
void *priv); |
18819 |
int (*ndo_get_lock_subclass)(struct net_device *dev); |
18820 |
}; |
18821 |
@@ -81743,7 +85145,7 @@ index b42d07b..7f45ae2 100644 |
18822 |
|
18823 |
/** |
18824 |
* enum net_device_priv_flags - &struct net_device priv_flags |
18825 |
-@@ -1313,11 +1314,11 @@ struct net_device { |
18826 |
+@@ -1312,11 +1313,11 @@ struct net_device { |
18827 |
struct net_device_stats stats; |
18828 |
|
18829 |
/* dropped packets by core network, Do not use this in drivers */ |
18830 |
@@ -81800,7 +85202,7 @@ index 0000000..33f4af8 |
18831 |
+ |
18832 |
+#endif |
18833 |
diff --git a/include/linux/nls.h b/include/linux/nls.h |
18834 |
-index 520681b..1d67ed2 100644 |
18835 |
+index 520681b..2b7fabb 100644 |
18836 |
--- a/include/linux/nls.h |
18837 |
+++ b/include/linux/nls.h |
18838 |
@@ -31,7 +31,7 @@ struct nls_table { |
18839 |
@@ -81812,6 +85214,15 @@ index 520681b..1d67ed2 100644 |
18840 |
|
18841 |
/* this value hold the maximum octet of charset */ |
18842 |
#define NLS_MAX_CHARSET_SIZE 6 /* for UTF-8 */ |
18843 |
+@@ -46,7 +46,7 @@ enum utf16_endian { |
18844 |
+ /* nls_base.c */ |
18845 |
+ extern int __register_nls(struct nls_table *, struct module *); |
18846 |
+ extern int unregister_nls(struct nls_table *); |
18847 |
+-extern struct nls_table *load_nls(char *); |
18848 |
++extern struct nls_table *load_nls(const char *); |
18849 |
+ extern void unload_nls(struct nls_table *); |
18850 |
+ extern struct nls_table *load_nls_default(void); |
18851 |
+ #define register_nls(nls) __register_nls((nls), THIS_MODULE) |
18852 |
diff --git a/include/linux/notifier.h b/include/linux/notifier.h |
18853 |
index d14a4c3..a078786 100644 |
18854 |
--- a/include/linux/notifier.h |
18855 |
@@ -81891,10 +85302,10 @@ index 5f2e559..7d59314 100644 |
18856 |
/** |
18857 |
* struct hotplug_slot_info - used to notify the hotplug pci core of the state of the slot |
18858 |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h |
18859 |
-index 3ef6ea1..ed1a248 100644 |
18860 |
+index 707617a..28a2e7e 100644 |
18861 |
--- a/include/linux/perf_event.h |
18862 |
+++ b/include/linux/perf_event.h |
18863 |
-@@ -328,8 +328,8 @@ struct perf_event { |
18864 |
+@@ -339,8 +339,8 @@ struct perf_event { |
18865 |
|
18866 |
enum perf_event_active_state state; |
18867 |
unsigned int attach_state; |
18868 |
@@ -81905,7 +85316,7 @@ index 3ef6ea1..ed1a248 100644 |
18869 |
|
18870 |
/* |
18871 |
* These are the total time in nanoseconds that the event |
18872 |
-@@ -380,8 +380,8 @@ struct perf_event { |
18873 |
+@@ -391,8 +391,8 @@ struct perf_event { |
18874 |
* These accumulate total time (in nanoseconds) that children |
18875 |
* events have been enabled and running, respectively. |
18876 |
*/ |
18877 |
@@ -81916,7 +85327,7 @@ index 3ef6ea1..ed1a248 100644 |
18878 |
|
18879 |
/* |
18880 |
* Protect attach/detach and child_list: |
18881 |
-@@ -710,7 +710,7 @@ static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64 |
18882 |
+@@ -722,7 +722,7 @@ static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64 |
18883 |
entry->ip[entry->nr++] = ip; |
18884 |
} |
18885 |
|
18886 |
@@ -81925,7 +85336,7 @@ index 3ef6ea1..ed1a248 100644 |
18887 |
extern int sysctl_perf_event_mlock; |
18888 |
extern int sysctl_perf_event_sample_rate; |
18889 |
extern int sysctl_perf_cpu_time_max_percent; |
18890 |
-@@ -725,19 +725,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write, |
18891 |
+@@ -737,19 +737,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write, |
18892 |
loff_t *ppos); |
18893 |
|
18894 |
|
18895 |
@@ -81953,7 +85364,7 @@ index 3ef6ea1..ed1a248 100644 |
18896 |
} |
18897 |
|
18898 |
extern void perf_event_init(void); |
18899 |
-@@ -867,7 +872,7 @@ struct perf_pmu_events_attr { |
18900 |
+@@ -880,7 +885,7 @@ struct perf_pmu_events_attr { |
18901 |
struct device_attribute attr; |
18902 |
u64 id; |
18903 |
const char *event_str; |
18904 |
@@ -81995,10 +85406,10 @@ index eb8b8ac..62649e1 100644 |
18905 |
unsigned int w_counter; |
18906 |
struct page *tmp_page; |
18907 |
diff --git a/include/linux/pm.h b/include/linux/pm.h |
18908 |
-index d915d03..0531037 100644 |
18909 |
+index 72c0fe0..26918ed 100644 |
18910 |
--- a/include/linux/pm.h |
18911 |
+++ b/include/linux/pm.h |
18912 |
-@@ -600,6 +600,7 @@ extern int dev_pm_put_subsys_data(struct device *dev); |
18913 |
+@@ -620,6 +620,7 @@ extern int dev_pm_put_subsys_data(struct device *dev); |
18914 |
struct dev_pm_domain { |
18915 |
struct dev_pm_ops ops; |
18916 |
}; |
18917 |
@@ -82025,10 +85436,10 @@ index 7c1d252..0e7061d 100644 |
18918 |
|
18919 |
struct generic_pm_domain { |
18920 |
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h |
18921 |
-index 2a5897a..4f9af63 100644 |
18922 |
+index 43fd671..08c96ee 100644 |
18923 |
--- a/include/linux/pm_runtime.h |
18924 |
+++ b/include/linux/pm_runtime.h |
18925 |
-@@ -113,7 +113,7 @@ static inline bool pm_runtime_callbacks_present(struct device *dev) |
18926 |
+@@ -118,7 +118,7 @@ static inline bool pm_runtime_callbacks_present(struct device *dev) |
18927 |
|
18928 |
static inline void pm_runtime_mark_last_busy(struct device *dev) |
18929 |
{ |
18930 |
@@ -82164,10 +85575,10 @@ index de83b4e..c4b997d 100644 |
18931 |
#define preempt_set_need_resched() \ |
18932 |
do { \ |
18933 |
diff --git a/include/linux/printk.h b/include/linux/printk.h |
18934 |
-index 7847301..29cd406 100644 |
18935 |
+index 319ff7e..608849a 100644 |
18936 |
--- a/include/linux/printk.h |
18937 |
+++ b/include/linux/printk.h |
18938 |
-@@ -110,6 +110,8 @@ static inline __printf(1, 2) __cold |
18939 |
+@@ -121,6 +121,8 @@ static inline __printf(1, 2) __cold |
18940 |
void early_printk(const char *s, ...) { } |
18941 |
#endif |
18942 |
|
18943 |
@@ -82176,7 +85587,7 @@ index 7847301..29cd406 100644 |
18944 |
#ifdef CONFIG_PRINTK |
18945 |
asmlinkage __printf(5, 0) |
18946 |
int vprintk_emit(int facility, int level, |
18947 |
-@@ -144,7 +146,6 @@ extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, |
18948 |
+@@ -155,7 +157,6 @@ extern bool printk_timed_ratelimit(unsigned long *caller_jiffies, |
18949 |
|
18950 |
extern int printk_delay_msec; |
18951 |
extern int dmesg_restrict; |
18952 |
@@ -82185,7 +85596,7 @@ index 7847301..29cd406 100644 |
18953 |
extern void wake_up_klogd(void); |
18954 |
|
18955 |
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h |
18956 |
-index 608e60a..79cfb18 100644 |
18957 |
+index 9d117f6..d832b31 100644 |
18958 |
--- a/include/linux/proc_fs.h |
18959 |
+++ b/include/linux/proc_fs.h |
18960 |
@@ -17,8 +17,11 @@ extern void proc_flush_task(struct task_struct *); |
18961 |
@@ -82220,7 +85631,7 @@ index 608e60a..79cfb18 100644 |
18962 |
extern void proc_set_size(struct proc_dir_entry *, loff_t); |
18963 |
extern void proc_set_user(struct proc_dir_entry *, kuid_t, kgid_t); |
18964 |
extern void *PDE_DATA(const struct inode *); |
18965 |
-@@ -52,8 +68,12 @@ static inline struct proc_dir_entry *proc_symlink(const char *name, |
18966 |
+@@ -56,8 +72,12 @@ static inline struct proc_dir_entry *proc_symlink(const char *name, |
18967 |
struct proc_dir_entry *parent,const char *dest) { return NULL;} |
18968 |
static inline struct proc_dir_entry *proc_mkdir(const char *name, |
18969 |
struct proc_dir_entry *parent) {return NULL;} |
18970 |
@@ -82233,7 +85644,7 @@ index 608e60a..79cfb18 100644 |
18971 |
static inline struct proc_dir_entry *proc_mkdir_mode(const char *name, |
18972 |
umode_t mode, struct proc_dir_entry *parent) { return NULL; } |
18973 |
#define proc_create(name, mode, parent, proc_fops) ({NULL;}) |
18974 |
-@@ -73,7 +93,7 @@ static inline int remove_proc_subtree(const char *name, struct proc_dir_entry *p |
18975 |
+@@ -77,7 +97,7 @@ static inline int remove_proc_subtree(const char *name, struct proc_dir_entry *p |
18976 |
static inline struct proc_dir_entry *proc_net_mkdir( |
18977 |
struct net *net, const char *name, struct proc_dir_entry *parent) |
18978 |
{ |
18979 |
@@ -82255,8 +85666,146 @@ index 34a1e10..70f6bde 100644 |
18980 |
|
18981 |
struct proc_ns { |
18982 |
void *ns; |
18983 |
+diff --git a/include/linux/ptp_classify.h b/include/linux/ptp_classify.h |
18984 |
+index 7dfed71..1dc420b 100644 |
18985 |
+--- a/include/linux/ptp_classify.h |
18986 |
++++ b/include/linux/ptp_classify.h |
18987 |
+@@ -23,8 +23,15 @@ |
18988 |
+ #ifndef _PTP_CLASSIFY_H_ |
18989 |
+ #define _PTP_CLASSIFY_H_ |
18990 |
+ |
18991 |
++#include <linux/if_ether.h> |
18992 |
++#include <linux/if_vlan.h> |
18993 |
+ #include <linux/ip.h> |
18994 |
+-#include <linux/skbuff.h> |
18995 |
++#include <linux/filter.h> |
18996 |
++#ifdef __KERNEL__ |
18997 |
++#include <linux/in.h> |
18998 |
++#else |
18999 |
++#include <netinet/in.h> |
19000 |
++#endif |
19001 |
+ |
19002 |
+ #define PTP_CLASS_NONE 0x00 /* not a PTP event message */ |
19003 |
+ #define PTP_CLASS_V1 0x01 /* protocol version 1 */ |
19004 |
+@@ -37,7 +44,7 @@ |
19005 |
+ #define PTP_CLASS_PMASK 0xf0 /* mask for the packet type field */ |
19006 |
+ |
19007 |
+ #define PTP_CLASS_V1_IPV4 (PTP_CLASS_V1 | PTP_CLASS_IPV4) |
19008 |
+-#define PTP_CLASS_V1_IPV6 (PTP_CLASS_V1 | PTP_CLASS_IPV6) /* probably DNE */ |
19009 |
++#define PTP_CLASS_V1_IPV6 (PTP_CLASS_V1 | PTP_CLASS_IPV6) /*probably DNE*/ |
19010 |
+ #define PTP_CLASS_V2_IPV4 (PTP_CLASS_V2 | PTP_CLASS_IPV4) |
19011 |
+ #define PTP_CLASS_V2_IPV6 (PTP_CLASS_V2 | PTP_CLASS_IPV6) |
19012 |
+ #define PTP_CLASS_V2_L2 (PTP_CLASS_V2 | PTP_CLASS_L2) |
19013 |
+@@ -46,34 +53,88 @@ |
19014 |
+ #define PTP_EV_PORT 319 |
19015 |
+ #define PTP_GEN_BIT 0x08 /* indicates general message, if set in message type */ |
19016 |
+ |
19017 |
++#define OFF_ETYPE 12 |
19018 |
++#define OFF_IHL 14 |
19019 |
++#define OFF_FRAG 20 |
19020 |
++#define OFF_PROTO4 23 |
19021 |
++#define OFF_NEXT 6 |
19022 |
++#define OFF_UDP_DST 2 |
19023 |
++ |
19024 |
+ #define OFF_PTP_SOURCE_UUID 22 /* PTPv1 only */ |
19025 |
+ #define OFF_PTP_SEQUENCE_ID 30 |
19026 |
+ #define OFF_PTP_CONTROL 32 /* PTPv1 only */ |
19027 |
+ |
19028 |
+-/* Below defines should actually be removed at some point in time. */ |
19029 |
++#define IPV4_HLEN(data) (((struct iphdr *)(data + OFF_IHL))->ihl << 2) |
19030 |
++ |
19031 |
+ #define IP6_HLEN 40 |
19032 |
+ #define UDP_HLEN 8 |
19033 |
+-#define OFF_IHL 14 |
19034 |
++ |
19035 |
++#define RELOFF_DST4 (ETH_HLEN + OFF_UDP_DST) |
19036 |
++#define OFF_DST6 (ETH_HLEN + IP6_HLEN + OFF_UDP_DST) |
19037 |
+ #define OFF_PTP6 (ETH_HLEN + IP6_HLEN + UDP_HLEN) |
19038 |
+-#define IPV4_HLEN(data) (((struct iphdr *)(data + OFF_IHL))->ihl << 2) |
19039 |
+ |
19040 |
+-#if defined(CONFIG_NET_PTP_CLASSIFY) |
19041 |
+-/** |
19042 |
+- * ptp_classify_raw - classify a PTP packet |
19043 |
+- * @skb: buffer |
19044 |
+- * |
19045 |
+- * Runs a minimal BPF dissector to classify a network packet to |
19046 |
+- * determine the PTP class. In case the skb does not contain any |
19047 |
+- * PTP protocol data, PTP_CLASS_NONE will be returned, otherwise |
19048 |
+- * PTP_CLASS_V1_IPV{4,6}, PTP_CLASS_V2_IPV{4,6} or |
19049 |
+- * PTP_CLASS_V2_{L2,VLAN}, depending on the packet content. |
19050 |
+- */ |
19051 |
+-unsigned int ptp_classify_raw(const struct sk_buff *skb); |
19052 |
++#define OP_AND (BPF_ALU | BPF_AND | BPF_K) |
19053 |
++#define OP_JEQ (BPF_JMP | BPF_JEQ | BPF_K) |
19054 |
++#define OP_JSET (BPF_JMP | BPF_JSET | BPF_K) |
19055 |
++#define OP_LDB (BPF_LD | BPF_B | BPF_ABS) |
19056 |
++#define OP_LDH (BPF_LD | BPF_H | BPF_ABS) |
19057 |
++#define OP_LDHI (BPF_LD | BPF_H | BPF_IND) |
19058 |
++#define OP_LDX (BPF_LDX | BPF_B | BPF_MSH) |
19059 |
++#define OP_OR (BPF_ALU | BPF_OR | BPF_K) |
19060 |
++#define OP_RETA (BPF_RET | BPF_A) |
19061 |
++#define OP_RETK (BPF_RET | BPF_K) |
19062 |
+ |
19063 |
+-void __init ptp_classifier_init(void); |
19064 |
+-#else |
19065 |
+-static inline void ptp_classifier_init(void) |
19066 |
++static inline int ptp_filter_init(struct sock_filter *f, int len) |
19067 |
+ { |
19068 |
++ if (OP_LDH == f[0].code) |
19069 |
++ return sk_chk_filter(f, len); |
19070 |
++ else |
19071 |
++ return 0; |
19072 |
+ } |
19073 |
++ |
19074 |
++#define PTP_FILTER \ |
19075 |
++ {OP_LDH, 0, 0, OFF_ETYPE }, /* */ \ |
19076 |
++ {OP_JEQ, 0, 12, ETH_P_IP }, /* f goto L20 */ \ |
19077 |
++ {OP_LDB, 0, 0, OFF_PROTO4 }, /* */ \ |
19078 |
++ {OP_JEQ, 0, 9, IPPROTO_UDP }, /* f goto L10 */ \ |
19079 |
++ {OP_LDH, 0, 0, OFF_FRAG }, /* */ \ |
19080 |
++ {OP_JSET, 7, 0, 0x1fff }, /* t goto L11 */ \ |
19081 |
++ {OP_LDX, 0, 0, OFF_IHL }, /* */ \ |
19082 |
++ {OP_LDHI, 0, 0, RELOFF_DST4 }, /* */ \ |
19083 |
++ {OP_JEQ, 0, 4, PTP_EV_PORT }, /* f goto L12 */ \ |
19084 |
++ {OP_LDHI, 0, 0, ETH_HLEN + UDP_HLEN }, /* */ \ |
19085 |
++ {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \ |
19086 |
++ {OP_OR, 0, 0, PTP_CLASS_IPV4 }, /* */ \ |
19087 |
++ {OP_RETA, 0, 0, 0 }, /* */ \ |
19088 |
++/*L1x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE }, /* */ \ |
19089 |
++/*L20*/ {OP_JEQ, 0, 9, ETH_P_IPV6 }, /* f goto L40 */ \ |
19090 |
++ {OP_LDB, 0, 0, ETH_HLEN + OFF_NEXT }, /* */ \ |
19091 |
++ {OP_JEQ, 0, 6, IPPROTO_UDP }, /* f goto L30 */ \ |
19092 |
++ {OP_LDH, 0, 0, OFF_DST6 }, /* */ \ |
19093 |
++ {OP_JEQ, 0, 4, PTP_EV_PORT }, /* f goto L31 */ \ |
19094 |
++ {OP_LDH, 0, 0, OFF_PTP6 }, /* */ \ |
19095 |
++ {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \ |
19096 |
++ {OP_OR, 0, 0, PTP_CLASS_IPV6 }, /* */ \ |
19097 |
++ {OP_RETA, 0, 0, 0 }, /* */ \ |
19098 |
++/*L3x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE }, /* */ \ |
19099 |
++/*L40*/ {OP_JEQ, 0, 9, ETH_P_8021Q }, /* f goto L50 */ \ |
19100 |
++ {OP_LDH, 0, 0, OFF_ETYPE + 4 }, /* */ \ |
19101 |
++ {OP_JEQ, 0, 15, ETH_P_1588 }, /* f goto L60 */ \ |
19102 |
++ {OP_LDB, 0, 0, ETH_HLEN + VLAN_HLEN }, /* */ \ |
19103 |
++ {OP_AND, 0, 0, PTP_GEN_BIT }, /* */ \ |
19104 |
++ {OP_JEQ, 0, 12, 0 }, /* f goto L6x */ \ |
19105 |
++ {OP_LDH, 0, 0, ETH_HLEN + VLAN_HLEN }, /* */ \ |
19106 |
++ {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \ |
19107 |
++ {OP_OR, 0, 0, PTP_CLASS_VLAN }, /* */ \ |
19108 |
++ {OP_RETA, 0, 0, 0 }, /* */ \ |
19109 |
++/*L50*/ {OP_JEQ, 0, 7, ETH_P_1588 }, /* f goto L61 */ \ |
19110 |
++ {OP_LDB, 0, 0, ETH_HLEN }, /* */ \ |
19111 |
++ {OP_AND, 0, 0, PTP_GEN_BIT }, /* */ \ |
19112 |
++ {OP_JEQ, 0, 4, 0 }, /* f goto L6x */ \ |
19113 |
++ {OP_LDH, 0, 0, ETH_HLEN }, /* */ \ |
19114 |
++ {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \ |
19115 |
++ {OP_OR, 0, 0, PTP_CLASS_L2 }, /* */ \ |
19116 |
++ {OP_RETA, 0, 0, 0 }, /* */ \ |
19117 |
++/*L6x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE }, |
19118 |
++ |
19119 |
+ #endif |
19120 |
+-#endif /* _PTP_CLASSIFY_H_ */ |
19121 |
diff --git a/include/linux/quota.h b/include/linux/quota.h |
19122 |
-index cc7494a..1e27036 100644 |
19123 |
+index 0f3c5d3..bc559e3 100644 |
19124 |
--- a/include/linux/quota.h |
19125 |
+++ b/include/linux/quota.h |
19126 |
@@ -70,7 +70,7 @@ struct kqid { /* Type in which we store the quota identifier */ |
19127 |
@@ -82482,10 +86031,10 @@ index 6bda06f..bf39a9b 100644 |
19128 |
#define RIO_RESOURCE_MEM 0x00000100 |
19129 |
#define RIO_RESOURCE_DOORBELL 0x00000200 |
19130 |
diff --git a/include/linux/rmap.h b/include/linux/rmap.h |
19131 |
-index b66c211..13d2915 100644 |
19132 |
+index be57450..31cf65e 100644 |
19133 |
--- a/include/linux/rmap.h |
19134 |
+++ b/include/linux/rmap.h |
19135 |
-@@ -145,8 +145,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma) |
19136 |
+@@ -144,8 +144,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma) |
19137 |
void anon_vma_init(void); /* create anon_vma_cachep */ |
19138 |
int anon_vma_prepare(struct vm_area_struct *); |
19139 |
void unlink_anon_vmas(struct vm_area_struct *); |
19140 |
@@ -82522,7 +86071,7 @@ index a964f72..b475afb 100644 |
19141 |
} |
19142 |
|
19143 |
diff --git a/include/linux/sched.h b/include/linux/sched.h |
19144 |
-index 221b2bd..e2e5f82 100644 |
19145 |
+index 0376b05..82054c2 100644 |
19146 |
--- a/include/linux/sched.h |
19147 |
+++ b/include/linux/sched.h |
19148 |
@@ -131,6 +131,7 @@ struct fs_struct; |
19149 |
@@ -82533,7 +86082,7 @@ index 221b2bd..e2e5f82 100644 |
19150 |
|
19151 |
#define VMACACHE_BITS 2 |
19152 |
#define VMACACHE_SIZE (1U << VMACACHE_BITS) |
19153 |
-@@ -380,7 +381,7 @@ extern char __sched_text_start[], __sched_text_end[]; |
19154 |
+@@ -374,7 +375,7 @@ extern char __sched_text_start[], __sched_text_end[]; |
19155 |
extern int in_sched_functions(unsigned long addr); |
19156 |
|
19157 |
#define MAX_SCHEDULE_TIMEOUT LONG_MAX |
19158 |
@@ -82542,7 +86091,7 @@ index 221b2bd..e2e5f82 100644 |
19159 |
extern signed long schedule_timeout_interruptible(signed long timeout); |
19160 |
extern signed long schedule_timeout_killable(signed long timeout); |
19161 |
extern signed long schedule_timeout_uninterruptible(signed long timeout); |
19162 |
-@@ -391,6 +392,19 @@ struct nsproxy; |
19163 |
+@@ -385,6 +386,19 @@ struct nsproxy; |
19164 |
struct user_namespace; |
19165 |
|
19166 |
#ifdef CONFIG_MMU |
19167 |
@@ -82562,7 +86111,7 @@ index 221b2bd..e2e5f82 100644 |
19168 |
extern void arch_pick_mmap_layout(struct mm_struct *mm); |
19169 |
extern unsigned long |
19170 |
arch_get_unmapped_area(struct file *, unsigned long, unsigned long, |
19171 |
-@@ -688,6 +702,17 @@ struct signal_struct { |
19172 |
+@@ -682,6 +696,17 @@ struct signal_struct { |
19173 |
#ifdef CONFIG_TASKSTATS |
19174 |
struct taskstats *stats; |
19175 |
#endif |
19176 |
@@ -82580,7 +86129,7 @@ index 221b2bd..e2e5f82 100644 |
19177 |
#ifdef CONFIG_AUDIT |
19178 |
unsigned audit_tty; |
19179 |
unsigned audit_tty_log_passwd; |
19180 |
-@@ -714,7 +739,7 @@ struct signal_struct { |
19181 |
+@@ -708,7 +733,7 @@ struct signal_struct { |
19182 |
struct mutex cred_guard_mutex; /* guard against foreign influences on |
19183 |
* credential calculations |
19184 |
* (notably. ptrace) */ |
19185 |
@@ -82589,7 +86138,7 @@ index 221b2bd..e2e5f82 100644 |
19186 |
|
19187 |
/* |
19188 |
* Bits in flags field of signal_struct. |
19189 |
-@@ -768,6 +793,14 @@ struct user_struct { |
19190 |
+@@ -761,6 +786,14 @@ struct user_struct { |
19191 |
struct key *session_keyring; /* UID's default session keyring */ |
19192 |
#endif |
19193 |
|
19194 |
@@ -82604,7 +86153,7 @@ index 221b2bd..e2e5f82 100644 |
19195 |
/* Hash table maintenance information */ |
19196 |
struct hlist_node uidhash_node; |
19197 |
kuid_t uid; |
19198 |
-@@ -775,7 +808,7 @@ struct user_struct { |
19199 |
+@@ -768,7 +801,7 @@ struct user_struct { |
19200 |
#ifdef CONFIG_PERF_EVENTS |
19201 |
atomic_long_t locked_vm; |
19202 |
#endif |
19203 |
@@ -82613,7 +86162,7 @@ index 221b2bd..e2e5f82 100644 |
19204 |
|
19205 |
extern int uids_sysfs_init(void); |
19206 |
|
19207 |
-@@ -1179,6 +1212,9 @@ enum perf_event_task_context { |
19208 |
+@@ -1224,6 +1257,9 @@ enum perf_event_task_context { |
19209 |
struct task_struct { |
19210 |
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ |
19211 |
void *stack; |
19212 |
@@ -82623,7 +86172,7 @@ index 221b2bd..e2e5f82 100644 |
19213 |
atomic_t usage; |
19214 |
unsigned int flags; /* per process flags, defined below */ |
19215 |
unsigned int ptrace; |
19216 |
-@@ -1304,8 +1340,8 @@ struct task_struct { |
19217 |
+@@ -1349,8 +1385,8 @@ struct task_struct { |
19218 |
struct list_head thread_node; |
19219 |
|
19220 |
struct completion *vfork_done; /* for vfork() */ |
19221 |
@@ -82634,7 +86183,7 @@ index 221b2bd..e2e5f82 100644 |
19222 |
|
19223 |
cputime_t utime, stime, utimescaled, stimescaled; |
19224 |
cputime_t gtime; |
19225 |
-@@ -1330,11 +1366,6 @@ struct task_struct { |
19226 |
+@@ -1375,11 +1411,6 @@ struct task_struct { |
19227 |
struct task_cputime cputime_expires; |
19228 |
struct list_head cpu_timers[3]; |
19229 |
|
19230 |
@@ -82646,7 +86195,7 @@ index 221b2bd..e2e5f82 100644 |
19231 |
char comm[TASK_COMM_LEN]; /* executable name excluding path |
19232 |
- access with [gs]et_task_comm (which lock |
19233 |
it with task_lock()) |
19234 |
-@@ -1351,6 +1382,10 @@ struct task_struct { |
19235 |
+@@ -1396,6 +1427,10 @@ struct task_struct { |
19236 |
#endif |
19237 |
/* CPU-specific state of this task */ |
19238 |
struct thread_struct thread; |
19239 |
@@ -82657,7 +86206,7 @@ index 221b2bd..e2e5f82 100644 |
19240 |
/* filesystem information */ |
19241 |
struct fs_struct *fs; |
19242 |
/* open file information */ |
19243 |
-@@ -1427,6 +1462,10 @@ struct task_struct { |
19244 |
+@@ -1472,6 +1507,10 @@ struct task_struct { |
19245 |
gfp_t lockdep_reclaim_gfp; |
19246 |
#endif |
19247 |
|
19248 |
@@ -82668,7 +86217,7 @@ index 221b2bd..e2e5f82 100644 |
19249 |
/* journalling filesystem info */ |
19250 |
void *journal_info; |
19251 |
|
19252 |
-@@ -1465,6 +1504,10 @@ struct task_struct { |
19253 |
+@@ -1510,6 +1549,10 @@ struct task_struct { |
19254 |
/* cg_list protected by css_set_lock and tsk->alloc_lock */ |
19255 |
struct list_head cg_list; |
19256 |
#endif |
19257 |
@@ -82679,7 +86228,7 @@ index 221b2bd..e2e5f82 100644 |
19258 |
#ifdef CONFIG_FUTEX |
19259 |
struct robust_list_head __user *robust_list; |
19260 |
#ifdef CONFIG_COMPAT |
19261 |
-@@ -1610,7 +1653,78 @@ struct task_struct { |
19262 |
+@@ -1655,7 +1698,78 @@ struct task_struct { |
19263 |
unsigned int sequential_io; |
19264 |
unsigned int sequential_io_avg; |
19265 |
#endif |
19266 |
@@ -82759,7 +86308,7 @@ index 221b2bd..e2e5f82 100644 |
19267 |
|
19268 |
/* Future-safe accessor for struct task_struct's cpus_allowed. */ |
19269 |
#define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed) |
19270 |
-@@ -1692,7 +1806,7 @@ struct pid_namespace; |
19271 |
+@@ -1737,7 +1851,7 @@ struct pid_namespace; |
19272 |
pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type, |
19273 |
struct pid_namespace *ns); |
19274 |
|
19275 |
@@ -82768,7 +86317,7 @@ index 221b2bd..e2e5f82 100644 |
19276 |
{ |
19277 |
return tsk->pid; |
19278 |
} |
19279 |
-@@ -2039,6 +2153,25 @@ extern u64 sched_clock_cpu(int cpu); |
19280 |
+@@ -2084,6 +2198,25 @@ extern u64 sched_clock_cpu(int cpu); |
19281 |
|
19282 |
extern void sched_clock_init(void); |
19283 |
|
19284 |
@@ -82794,7 +86343,7 @@ index 221b2bd..e2e5f82 100644 |
19285 |
#ifndef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK |
19286 |
static inline void sched_clock_tick(void) |
19287 |
{ |
19288 |
-@@ -2172,7 +2305,9 @@ void yield(void); |
19289 |
+@@ -2217,7 +2350,9 @@ void yield(void); |
19290 |
extern struct exec_domain default_exec_domain; |
19291 |
|
19292 |
union thread_union { |
19293 |
@@ -82804,7 +86353,7 @@ index 221b2bd..e2e5f82 100644 |
19294 |
unsigned long stack[THREAD_SIZE/sizeof(long)]; |
19295 |
}; |
19296 |
|
19297 |
-@@ -2205,6 +2340,7 @@ extern struct pid_namespace init_pid_ns; |
19298 |
+@@ -2250,6 +2385,7 @@ extern struct pid_namespace init_pid_ns; |
19299 |
*/ |
19300 |
|
19301 |
extern struct task_struct *find_task_by_vpid(pid_t nr); |
19302 |
@@ -82812,16 +86361,16 @@ index 221b2bd..e2e5f82 100644 |
19303 |
extern struct task_struct *find_task_by_pid_ns(pid_t nr, |
19304 |
struct pid_namespace *ns); |
19305 |
|
19306 |
-@@ -2367,7 +2503,7 @@ extern void __cleanup_sighand(struct sighand_struct *); |
19307 |
+@@ -2412,7 +2548,7 @@ extern void __cleanup_sighand(struct sighand_struct *); |
19308 |
extern void exit_itimers(struct signal_struct *); |
19309 |
extern void flush_itimer_signals(void); |
19310 |
|
19311 |
-extern void do_group_exit(int); |
19312 |
+extern __noreturn void do_group_exit(int); |
19313 |
|
19314 |
- extern int allow_signal(int); |
19315 |
- extern int disallow_signal(int); |
19316 |
-@@ -2568,9 +2704,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p) |
19317 |
+ extern int do_execve(struct filename *, |
19318 |
+ const char __user * const __user *, |
19319 |
+@@ -2614,9 +2750,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p) |
19320 |
|
19321 |
#endif |
19322 |
|
19323 |
@@ -82834,10 +86383,10 @@ index 221b2bd..e2e5f82 100644 |
19324 |
return (obj >= stack) && (obj < (stack + THREAD_SIZE)); |
19325 |
} |
19326 |
diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h |
19327 |
-index 8045a55..c959cd5 100644 |
19328 |
+index 596a0e0..bea77ec 100644 |
19329 |
--- a/include/linux/sched/sysctl.h |
19330 |
+++ b/include/linux/sched/sysctl.h |
19331 |
-@@ -30,6 +30,7 @@ enum { sysctl_hung_task_timeout_secs = 0 }; |
19332 |
+@@ -34,6 +34,7 @@ enum { sysctl_hung_task_timeout_secs = 0 }; |
19333 |
#define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN) |
19334 |
|
19335 |
extern int sysctl_max_map_count; |
19336 |
@@ -82845,8 +86394,20 @@ index 8045a55..c959cd5 100644 |
19337 |
|
19338 |
extern unsigned int sysctl_sched_latency; |
19339 |
extern unsigned int sysctl_sched_min_granularity; |
19340 |
+diff --git a/include/linux/seccomp.h b/include/linux/seccomp.h |
19341 |
+index 4054b09..6f19cfd 100644 |
19342 |
+--- a/include/linux/seccomp.h |
19343 |
++++ b/include/linux/seccomp.h |
19344 |
+@@ -76,6 +76,7 @@ static inline int seccomp_mode(struct seccomp *s) |
19345 |
+ #ifdef CONFIG_SECCOMP_FILTER |
19346 |
+ extern void put_seccomp_filter(struct task_struct *tsk); |
19347 |
+ extern void get_seccomp_filter(struct task_struct *tsk); |
19348 |
++extern u32 seccomp_bpf_load(int off); |
19349 |
+ #else /* CONFIG_SECCOMP_FILTER */ |
19350 |
+ static inline void put_seccomp_filter(struct task_struct *tsk) |
19351 |
+ { |
19352 |
diff --git a/include/linux/security.h b/include/linux/security.h |
19353 |
-index 6478ce3..5e6ad6e 100644 |
19354 |
+index 9c6b972..7e7c704 100644 |
19355 |
--- a/include/linux/security.h |
19356 |
+++ b/include/linux/security.h |
19357 |
@@ -27,6 +27,7 @@ |
19358 |
@@ -82927,10 +86488,10 @@ index 52e0097..383f21d 100644 |
19359 |
int single_release(struct inode *, struct file *); |
19360 |
void *__seq_open_private(struct file *, const struct seq_operations *, int); |
19361 |
diff --git a/include/linux/shm.h b/include/linux/shm.h |
19362 |
-index 1e2cd2e..0288750 100644 |
19363 |
+index 57d7770..0936af6 100644 |
19364 |
--- a/include/linux/shm.h |
19365 |
+++ b/include/linux/shm.h |
19366 |
-@@ -21,6 +21,10 @@ struct shmid_kernel /* private to the kernel */ |
19367 |
+@@ -20,6 +20,10 @@ struct shmid_kernel /* private to the kernel */ |
19368 |
|
19369 |
/* The task created the shm object. NULL if the task is dead. */ |
19370 |
struct task_struct *shm_creator; |
19371 |
@@ -82941,11 +86502,24 @@ index 1e2cd2e..0288750 100644 |
19372 |
}; |
19373 |
|
19374 |
/* shm_mode upper byte flags */ |
19375 |
+diff --git a/include/linux/signal.h b/include/linux/signal.h |
19376 |
+index c9e6536..923b302 100644 |
19377 |
+--- a/include/linux/signal.h |
19378 |
++++ b/include/linux/signal.h |
19379 |
+@@ -293,7 +293,7 @@ static inline void allow_signal(int sig) |
19380 |
+ * know it'll be handled, so that they don't get converted to |
19381 |
+ * SIGKILL or just silently dropped. |
19382 |
+ */ |
19383 |
+- kernel_sigaction(sig, (__force __sighandler_t)2); |
19384 |
++ kernel_sigaction(sig, (__force_user __sighandler_t)2); |
19385 |
+ } |
19386 |
+ |
19387 |
+ static inline void disallow_signal(int sig) |
19388 |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h |
19389 |
-index 08074a8..e2ae280 100644 |
19390 |
+index ec89301..4fd29a6 100644 |
19391 |
--- a/include/linux/skbuff.h |
19392 |
+++ b/include/linux/skbuff.h |
19393 |
-@@ -717,7 +717,7 @@ bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from, |
19394 |
+@@ -725,7 +725,7 @@ bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from, |
19395 |
struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags, |
19396 |
int node); |
19397 |
struct sk_buff *build_skb(void *data, unsigned int frag_size); |
19398 |
@@ -82954,7 +86528,7 @@ index 08074a8..e2ae280 100644 |
19399 |
gfp_t priority) |
19400 |
{ |
19401 |
return __alloc_skb(size, priority, 0, NUMA_NO_NODE); |
19402 |
-@@ -1825,7 +1825,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb) |
19403 |
+@@ -1839,7 +1839,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb) |
19404 |
return skb->inner_transport_header - skb->inner_network_header; |
19405 |
} |
19406 |
|
19407 |
@@ -82963,7 +86537,7 @@ index 08074a8..e2ae280 100644 |
19408 |
{ |
19409 |
return skb_network_header(skb) - skb->data; |
19410 |
} |
19411 |
-@@ -1885,7 +1885,7 @@ static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len) |
19412 |
+@@ -1911,7 +1911,7 @@ static inline void skb_pop_rcv_encapsulation(struct sk_buff *skb) |
19413 |
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8) |
19414 |
*/ |
19415 |
#ifndef NET_SKB_PAD |
19416 |
@@ -82972,7 +86546,7 @@ index 08074a8..e2ae280 100644 |
19417 |
#endif |
19418 |
|
19419 |
int ___pskb_trim(struct sk_buff *skb, unsigned int len); |
19420 |
-@@ -2484,7 +2484,7 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock, |
19421 |
+@@ -2518,7 +2518,7 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock, |
19422 |
int *err); |
19423 |
unsigned int datagram_poll(struct file *file, struct socket *sock, |
19424 |
struct poll_table_struct *wait); |
19425 |
@@ -82981,7 +86555,16 @@ index 08074a8..e2ae280 100644 |
19426 |
struct iovec *to, int size); |
19427 |
int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, int hlen, |
19428 |
struct iovec *iov); |
19429 |
-@@ -2776,6 +2776,9 @@ static inline void nf_reset(struct sk_buff *skb) |
19430 |
+@@ -2664,6 +2664,8 @@ static inline ktime_t net_invalid_timestamp(void) |
19431 |
+ return ktime_set(0, 0); |
19432 |
+ } |
19433 |
+ |
19434 |
++void skb_timestamping_init(void); |
19435 |
++ |
19436 |
+ #ifdef CONFIG_NETWORK_PHY_TIMESTAMPING |
19437 |
+ |
19438 |
+ void skb_clone_tx_timestamp(struct sk_buff *skb); |
19439 |
+@@ -2907,6 +2909,9 @@ static inline void nf_reset(struct sk_buff *skb) |
19440 |
nf_bridge_put(skb->nf_bridge); |
19441 |
skb->nf_bridge = NULL; |
19442 |
#endif |
19443 |
@@ -82992,7 +86575,7 @@ index 08074a8..e2ae280 100644 |
19444 |
|
19445 |
static inline void nf_reset_trace(struct sk_buff *skb) |
19446 |
diff --git a/include/linux/slab.h b/include/linux/slab.h |
19447 |
-index 307bfbe..a999cf3 100644 |
19448 |
+index 1d9abb7..b1e8b10 100644 |
19449 |
--- a/include/linux/slab.h |
19450 |
+++ b/include/linux/slab.h |
19451 |
@@ -14,15 +14,29 @@ |
19452 |
@@ -83043,7 +86626,7 @@ index 307bfbe..a999cf3 100644 |
19453 |
|
19454 |
#include <linux/kmemleak.h> |
19455 |
|
19456 |
-@@ -142,6 +159,8 @@ void * __must_check krealloc(const void *, size_t, gfp_t); |
19457 |
+@@ -144,6 +161,8 @@ void * __must_check krealloc(const void *, size_t, gfp_t); |
19458 |
void kfree(const void *); |
19459 |
void kzfree(const void *); |
19460 |
size_t ksize(const void *); |
19461 |
@@ -83052,7 +86635,7 @@ index 307bfbe..a999cf3 100644 |
19462 |
|
19463 |
/* |
19464 |
* Some archs want to perform DMA into kmalloc caches and need a guaranteed |
19465 |
-@@ -174,7 +193,7 @@ struct kmem_cache { |
19466 |
+@@ -176,7 +195,7 @@ struct kmem_cache { |
19467 |
unsigned int align; /* Alignment as calculated */ |
19468 |
unsigned long flags; /* Active flags on the slab */ |
19469 |
const char *name; /* Slab name for sysfs */ |
19470 |
@@ -83061,7 +86644,7 @@ index 307bfbe..a999cf3 100644 |
19471 |
void (*ctor)(void *); /* Called on object slot creation */ |
19472 |
struct list_head list; /* List of all slab caches on the system */ |
19473 |
}; |
19474 |
-@@ -259,6 +278,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; |
19475 |
+@@ -261,6 +280,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1]; |
19476 |
extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; |
19477 |
#endif |
19478 |
|
19479 |
@@ -83072,7 +86655,7 @@ index 307bfbe..a999cf3 100644 |
19480 |
/* |
19481 |
* Figure out which kmalloc slab an allocation of a certain size |
19482 |
* belongs to. |
19483 |
-@@ -267,7 +290,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; |
19484 |
+@@ -269,7 +292,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; |
19485 |
* 2 = 120 .. 192 bytes |
19486 |
* n = 2^(n-1) .. 2^n -1 |
19487 |
*/ |
19488 |
@@ -83081,7 +86664,7 @@ index 307bfbe..a999cf3 100644 |
19489 |
{ |
19490 |
if (!size) |
19491 |
return 0; |
19492 |
-@@ -310,11 +333,11 @@ static __always_inline int kmalloc_index(size_t size) |
19493 |
+@@ -312,11 +335,11 @@ static __always_inline int kmalloc_index(size_t size) |
19494 |
} |
19495 |
#endif /* !CONFIG_SLOB */ |
19496 |
|
19497 |
@@ -83141,10 +86724,10 @@ index d82abd4..408c3a0 100644 |
19498 |
int inuse; /* Offset to metadata */ |
19499 |
int align; /* Alignment */ |
19500 |
diff --git a/include/linux/smp.h b/include/linux/smp.h |
19501 |
-index 633f5ed..6c3dc3f 100644 |
19502 |
+index 34347f2..8739978 100644 |
19503 |
--- a/include/linux/smp.h |
19504 |
+++ b/include/linux/smp.h |
19505 |
-@@ -176,7 +176,9 @@ static inline void kick_all_cpus_sync(void) { } |
19506 |
+@@ -174,7 +174,9 @@ static inline void kick_all_cpus_sync(void) { } |
19507 |
#endif |
19508 |
|
19509 |
#define get_cpu() ({ preempt_disable(); smp_processor_id(); }) |
19510 |
@@ -83228,10 +86811,10 @@ index 70736b9..37f33db 100644 |
19511 |
#ifdef __KERNEL__ |
19512 |
|
19513 |
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h |
19514 |
-index 04e7632..2e2a8a3 100644 |
19515 |
+index 1bc7cd0..7912dc2 100644 |
19516 |
--- a/include/linux/sunrpc/svc.h |
19517 |
+++ b/include/linux/sunrpc/svc.h |
19518 |
-@@ -412,7 +412,7 @@ struct svc_procedure { |
19519 |
+@@ -417,7 +417,7 @@ struct svc_procedure { |
19520 |
unsigned int pc_count; /* call count */ |
19521 |
unsigned int pc_cachetype; /* cache info (NFS) */ |
19522 |
unsigned int pc_xdrressize; /* maximum size of XDR reply */ |
19523 |
@@ -83241,7 +86824,7 @@ index 04e7632..2e2a8a3 100644 |
19524 |
/* |
19525 |
* Function prototypes. |
19526 |
diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h |
19527 |
-index 0b8e3e6..33e0a01 100644 |
19528 |
+index 5cf99a0..c0a1b98 100644 |
19529 |
--- a/include/linux/sunrpc/svc_rdma.h |
19530 |
+++ b/include/linux/sunrpc/svc_rdma.h |
19531 |
@@ -53,15 +53,15 @@ extern unsigned int svcrdma_ord; |
19532 |
@@ -83283,7 +86866,7 @@ index 8d71d65..f79586e 100644 |
19533 |
#define SVC_GARBAGE 1 |
19534 |
#define SVC_SYSERR 2 |
19535 |
diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h |
19536 |
-index a5ffd32..0935dea 100644 |
19537 |
+index e7a018e..49f8b17 100644 |
19538 |
--- a/include/linux/swiotlb.h |
19539 |
+++ b/include/linux/swiotlb.h |
19540 |
@@ -60,7 +60,8 @@ extern void |
19541 |
@@ -83297,7 +86880,7 @@ index a5ffd32..0935dea 100644 |
19542 |
extern dma_addr_t swiotlb_map_page(struct device *dev, struct page *page, |
19543 |
unsigned long offset, size_t size, |
19544 |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h |
19545 |
-index a4a0588..752870e 100644 |
19546 |
+index b0881a0..559a440 100644 |
19547 |
--- a/include/linux/syscalls.h |
19548 |
+++ b/include/linux/syscalls.h |
19549 |
@@ -98,10 +98,16 @@ struct sigaltstack; |
19550 |
@@ -83388,7 +86971,7 @@ index 14a8ff2..fa95f3a 100644 |
19551 |
struct ctl_node { |
19552 |
struct rb_node node; |
19553 |
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h |
19554 |
-index 5ffaa34..fe3e31c 100644 |
19555 |
+index f97d0db..c1187dc 100644 |
19556 |
--- a/include/linux/sysfs.h |
19557 |
+++ b/include/linux/sysfs.h |
19558 |
@@ -34,7 +34,8 @@ struct attribute { |
19559 |
@@ -83443,10 +87026,10 @@ index 387fa7d..3fcde6b 100644 |
19560 |
#ifdef CONFIG_MAGIC_SYSRQ |
19561 |
|
19562 |
diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h |
19563 |
-index fddbe20..a0e76ab 100644 |
19564 |
+index ff307b5..f1a4468 100644 |
19565 |
--- a/include/linux/thread_info.h |
19566 |
+++ b/include/linux/thread_info.h |
19567 |
-@@ -161,6 +161,13 @@ static inline bool test_and_clear_restore_sigmask(void) |
19568 |
+@@ -145,6 +145,13 @@ static inline bool test_and_clear_restore_sigmask(void) |
19569 |
#error "no set_restore_sigmask() provided and default one won't work" |
19570 |
#endif |
19571 |
|
19572 |
@@ -83514,10 +87097,10 @@ index 756a609..89db85e 100644 |
19573 |
extern struct list_head tty_drivers; |
19574 |
|
19575 |
diff --git a/include/linux/tty_ldisc.h b/include/linux/tty_ldisc.h |
19576 |
-index add26da..22c00bef 100644 |
19577 |
+index 00c9d68..bc0188b 100644 |
19578 |
--- a/include/linux/tty_ldisc.h |
19579 |
+++ b/include/linux/tty_ldisc.h |
19580 |
-@@ -212,7 +212,7 @@ struct tty_ldisc_ops { |
19581 |
+@@ -215,7 +215,7 @@ struct tty_ldisc_ops { |
19582 |
|
19583 |
struct module *owner; |
19584 |
|
19585 |
@@ -83527,10 +87110,10 @@ index add26da..22c00bef 100644 |
19586 |
|
19587 |
struct tty_ldisc { |
19588 |
diff --git a/include/linux/types.h b/include/linux/types.h |
19589 |
-index 4d118ba..c3ee9bf 100644 |
19590 |
+index a0bb704..f511c77 100644 |
19591 |
--- a/include/linux/types.h |
19592 |
+++ b/include/linux/types.h |
19593 |
-@@ -176,10 +176,26 @@ typedef struct { |
19594 |
+@@ -177,10 +177,26 @@ typedef struct { |
19595 |
int counter; |
19596 |
} atomic_t; |
19597 |
|
19598 |
@@ -83642,10 +87225,10 @@ index 99c1b4d..562e6f3 100644 |
19599 |
|
19600 |
static inline void put_unaligned_le16(u16 val, void *p) |
19601 |
diff --git a/include/linux/usb.h b/include/linux/usb.h |
19602 |
-index 6b7ec37..4428419 100644 |
19603 |
+index d2465bc..5256de4 100644 |
19604 |
--- a/include/linux/usb.h |
19605 |
+++ b/include/linux/usb.h |
19606 |
-@@ -569,7 +569,7 @@ struct usb_device { |
19607 |
+@@ -571,7 +571,7 @@ struct usb_device { |
19608 |
int maxchild; |
19609 |
|
19610 |
u32 quirks; |
19611 |
@@ -83654,7 +87237,7 @@ index 6b7ec37..4428419 100644 |
19612 |
|
19613 |
unsigned long active_duration; |
19614 |
|
19615 |
-@@ -1653,7 +1653,7 @@ void usb_buffer_unmap_sg(const struct usb_device *dev, int is_in, |
19616 |
+@@ -1655,7 +1655,7 @@ void usb_buffer_unmap_sg(const struct usb_device *dev, int is_in, |
19617 |
|
19618 |
extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, |
19619 |
__u8 request, __u8 requesttype, __u16 value, __u16 index, |
19620 |
@@ -83813,10 +87396,10 @@ index 4b8a891..e9a2863 100644 |
19621 |
/* |
19622 |
* Internals. Dont't use.. |
19623 |
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h |
19624 |
-index 45c9cd1..20bd0bf 100644 |
19625 |
+index 82e7db7..f8ce3d0 100644 |
19626 |
--- a/include/linux/vmstat.h |
19627 |
+++ b/include/linux/vmstat.h |
19628 |
-@@ -102,18 +102,18 @@ static inline void vm_events_fold_cpu(int cpu) |
19629 |
+@@ -108,18 +108,18 @@ static inline void vm_events_fold_cpu(int cpu) |
19630 |
/* |
19631 |
* Zone based page accounting with per cpu differentials. |
19632 |
*/ |
19633 |
@@ -83840,7 +87423,7 @@ index 45c9cd1..20bd0bf 100644 |
19634 |
#ifdef CONFIG_SMP |
19635 |
if (x < 0) |
19636 |
x = 0; |
19637 |
-@@ -121,10 +121,10 @@ static inline unsigned long global_page_state(enum zone_stat_item item) |
19638 |
+@@ -127,10 +127,10 @@ static inline unsigned long global_page_state(enum zone_stat_item item) |
19639 |
return x; |
19640 |
} |
19641 |
|
19642 |
@@ -83853,7 +87436,7 @@ index 45c9cd1..20bd0bf 100644 |
19643 |
#ifdef CONFIG_SMP |
19644 |
if (x < 0) |
19645 |
x = 0; |
19646 |
-@@ -141,7 +141,7 @@ static inline unsigned long zone_page_state(struct zone *zone, |
19647 |
+@@ -147,7 +147,7 @@ static inline unsigned long zone_page_state(struct zone *zone, |
19648 |
static inline unsigned long zone_page_state_snapshot(struct zone *zone, |
19649 |
enum zone_stat_item item) |
19650 |
{ |
19651 |
@@ -83862,7 +87445,7 @@ index 45c9cd1..20bd0bf 100644 |
19652 |
|
19653 |
#ifdef CONFIG_SMP |
19654 |
int cpu; |
19655 |
-@@ -228,14 +228,14 @@ static inline void __mod_zone_page_state(struct zone *zone, |
19656 |
+@@ -234,14 +234,14 @@ static inline void __mod_zone_page_state(struct zone *zone, |
19657 |
|
19658 |
static inline void __inc_zone_state(struct zone *zone, enum zone_stat_item item) |
19659 |
{ |
19660 |
@@ -83939,7 +87522,7 @@ index eec6e46..82d5641 100644 |
19661 |
/* |
19662 |
* Newer version of video_device, handled by videodev2.c |
19663 |
diff --git a/include/media/v4l2-device.h b/include/media/v4l2-device.h |
19664 |
-index c9b1593..a572459 100644 |
19665 |
+index ffb69da..040393e 100644 |
19666 |
--- a/include/media/v4l2-device.h |
19667 |
+++ b/include/media/v4l2-device.h |
19668 |
@@ -95,7 +95,7 @@ int __must_check v4l2_device_register(struct device *dev, struct v4l2_device *v4 |
19669 |
@@ -84066,7 +87649,7 @@ index 7a43138..bc76865 100644 |
19670 |
/** inet_connection_sock - INET connection oriented sock |
19671 |
* |
19672 |
diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h |
19673 |
-index 823ec7b..1af4453 100644 |
19674 |
+index 01d590e..f69c61d 100644 |
19675 |
--- a/include/net/inetpeer.h |
19676 |
+++ b/include/net/inetpeer.h |
19677 |
@@ -47,7 +47,7 @@ struct inet_peer { |
19678 |
@@ -84074,24 +87657,15 @@ index 823ec7b..1af4453 100644 |
19679 |
union { |
19680 |
struct { |
19681 |
- atomic_t rid; /* Frag reception counter */ |
19682 |
-+ atomic_unchecked_t rid; /* Frag reception counter */ |
19683 |
++ atomic_unchecked_t rid; /* Frag reception counter */ |
19684 |
}; |
19685 |
struct rcu_head rcu; |
19686 |
struct inet_peer *gc_next; |
19687 |
diff --git a/include/net/ip.h b/include/net/ip.h |
19688 |
-index 54de029..6a28064 100644 |
19689 |
+index 7596eb2..f7f5fad 100644 |
19690 |
--- a/include/net/ip.h |
19691 |
+++ b/include/net/ip.h |
19692 |
-@@ -220,7 +220,7 @@ static inline void snmp_mib_free(void __percpu *ptr[SNMP_ARRAY_SZ]) |
19693 |
- |
19694 |
- void inet_get_local_port_range(struct net *net, int *low, int *high); |
19695 |
- |
19696 |
--extern unsigned long *sysctl_local_reserved_ports; |
19697 |
-+extern unsigned long sysctl_local_reserved_ports[65536 / 8 / sizeof(unsigned long)]; |
19698 |
- static inline int inet_is_reserved_local_port(int port) |
19699 |
- { |
19700 |
- return test_bit(port, sysctl_local_reserved_ports); |
19701 |
-@@ -310,7 +310,7 @@ static inline unsigned int ip_skb_dst_mtu(const struct sk_buff *skb) |
19702 |
+@@ -309,7 +309,7 @@ static inline unsigned int ip_skb_dst_mtu(const struct sk_buff *skb) |
19703 |
} |
19704 |
} |
19705 |
|
19706 |
@@ -84114,7 +87688,7 @@ index 9922093..a1755d6 100644 |
19707 |
fib_info_update_nh_saddr((net), &FIB_RES_NH(res))) |
19708 |
#define FIB_RES_GW(res) (FIB_RES_NH(res).nh_gw) |
19709 |
diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h |
19710 |
-index 5679d92..2e7a690 100644 |
19711 |
+index 624a8a5..b1e2a24 100644 |
19712 |
--- a/include/net/ip_vs.h |
19713 |
+++ b/include/net/ip_vs.h |
19714 |
@@ -558,7 +558,7 @@ struct ip_vs_conn { |
19715 |
@@ -84242,20 +87816,20 @@ index 567c681..cd73ac02 100644 |
19716 |
struct llc_sap_state { |
19717 |
u8 curr_state; |
19718 |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h |
19719 |
-index 8248e39..7610eec 100644 |
19720 |
+index 421b6ec..5a03729 100644 |
19721 |
--- a/include/net/mac80211.h |
19722 |
+++ b/include/net/mac80211.h |
19723 |
-@@ -4467,7 +4467,7 @@ struct rate_control_ops { |
19724 |
- void (*add_sta_debugfs)(void *priv, void *priv_sta, |
19725 |
- struct dentry *dir); |
19726 |
+@@ -4588,7 +4588,7 @@ struct rate_control_ops { |
19727 |
void (*remove_sta_debugfs)(void *priv, void *priv_sta); |
19728 |
+ |
19729 |
+ u32 (*get_expected_throughput)(void *priv_sta); |
19730 |
-}; |
19731 |
+} __do_const; |
19732 |
|
19733 |
static inline int rate_supported(struct ieee80211_sta *sta, |
19734 |
enum ieee80211_band band, |
19735 |
diff --git a/include/net/neighbour.h b/include/net/neighbour.h |
19736 |
-index 7277caf..fd095bc 100644 |
19737 |
+index 47f4254..fd095bc 100644 |
19738 |
--- a/include/net/neighbour.h |
19739 |
+++ b/include/net/neighbour.h |
19740 |
@@ -163,7 +163,7 @@ struct neigh_ops { |
19741 |
@@ -84267,15 +87841,7 @@ index 7277caf..fd095bc 100644 |
19742 |
|
19743 |
struct pneigh_entry { |
19744 |
struct pneigh_entry *next; |
19745 |
-@@ -203,7 +203,6 @@ struct neigh_table { |
19746 |
- void (*proxy_redo)(struct sk_buff *skb); |
19747 |
- char *id; |
19748 |
- struct neigh_parms parms; |
19749 |
-- /* HACK. gc_* should follow parms without a gap! */ |
19750 |
- int gc_interval; |
19751 |
- int gc_thresh1; |
19752 |
- int gc_thresh2; |
19753 |
-@@ -218,7 +217,7 @@ struct neigh_table { |
19754 |
+@@ -217,7 +217,7 @@ struct neigh_table { |
19755 |
struct neigh_statistics __percpu *stats; |
19756 |
struct neigh_hash_table __rcu *nht; |
19757 |
struct pneigh_entry **phash_buckets; |
19758 |
@@ -84285,7 +87851,7 @@ index 7277caf..fd095bc 100644 |
19759 |
static inline int neigh_parms_family(struct neigh_parms *p) |
19760 |
{ |
19761 |
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h |
19762 |
-index 5f9eb26..85699c4 100644 |
19763 |
+index 361d260..903d15f 100644 |
19764 |
--- a/include/net/net_namespace.h |
19765 |
+++ b/include/net/net_namespace.h |
19766 |
@@ -129,8 +129,8 @@ struct net { |
19767 |
@@ -84348,7 +87914,7 @@ index 5f9eb26..85699c4 100644 |
19768 |
} |
19769 |
#else |
19770 |
static inline int rt_genid_ipv6(struct net *net) |
19771 |
-@@ -382,12 +386,12 @@ static inline void rt_genid_bump_all(struct net *net) |
19772 |
+@@ -390,12 +394,12 @@ static inline void rt_genid_bump_all(struct net *net) |
19773 |
|
19774 |
static inline int fnhe_genid(struct net *net) |
19775 |
{ |
19776 |
@@ -84416,19 +87982,19 @@ index 773cce3..6a11852 100644 |
19777 |
}; |
19778 |
|
19779 |
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h |
19780 |
-index b2704fd0..421d717 100644 |
19781 |
+index aec5e12..807233f 100644 |
19782 |
--- a/include/net/netns/ipv4.h |
19783 |
+++ b/include/net/netns/ipv4.h |
19784 |
-@@ -79,7 +79,7 @@ struct netns_ipv4 { |
19785 |
+@@ -82,7 +82,7 @@ struct netns_ipv4 { |
19786 |
|
19787 |
struct ping_group_range ping_group_range; |
19788 |
|
19789 |
- atomic_t dev_addr_genid; |
19790 |
+ atomic_unchecked_t dev_addr_genid; |
19791 |
|
19792 |
- #ifdef CONFIG_IP_MROUTE |
19793 |
- #ifndef CONFIG_IP_MROUTE_MULTIPLE_TABLES |
19794 |
-@@ -89,6 +89,6 @@ struct netns_ipv4 { |
19795 |
+ #ifdef CONFIG_SYSCTL |
19796 |
+ unsigned long *sysctl_local_reserved_ports; |
19797 |
+@@ -96,6 +96,6 @@ struct netns_ipv4 { |
19798 |
struct fib_rules_ops *mr_rules_ops; |
19799 |
#endif |
19800 |
#endif |
19801 |
@@ -84437,10 +88003,10 @@ index b2704fd0..421d717 100644 |
19802 |
}; |
19803 |
#endif |
19804 |
diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h |
19805 |
-index 21edaf1..4c5faae 100644 |
19806 |
+index 19d3446..3c87195 100644 |
19807 |
--- a/include/net/netns/ipv6.h |
19808 |
+++ b/include/net/netns/ipv6.h |
19809 |
-@@ -73,8 +73,8 @@ struct netns_ipv6 { |
19810 |
+@@ -74,8 +74,8 @@ struct netns_ipv6 { |
19811 |
struct fib_rules_ops *mr6_rules_ops; |
19812 |
#endif |
19813 |
#endif |
19814 |
@@ -84478,7 +88044,7 @@ index 026479b..d9b2829 100644 |
19815 |
|
19816 |
struct pingfakehdr { |
19817 |
diff --git a/include/net/protocol.h b/include/net/protocol.h |
19818 |
-index a7e986b..dc67bce 100644 |
19819 |
+index d6fcc1f..ca277058 100644 |
19820 |
--- a/include/net/protocol.h |
19821 |
+++ b/include/net/protocol.h |
19822 |
@@ -49,7 +49,7 @@ struct net_protocol { |
19823 |
@@ -84550,7 +88116,7 @@ index 7f4eeb3..37e8fe1 100644 |
19824 |
|
19825 |
/* Get the size of a DATA chunk payload. */ |
19826 |
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h |
19827 |
-index 0dfcc92..7967849 100644 |
19828 |
+index f38588bf..94c1795 100644 |
19829 |
--- a/include/net/sctp/structs.h |
19830 |
+++ b/include/net/sctp/structs.h |
19831 |
@@ -507,7 +507,7 @@ struct sctp_pf { |
19832 |
@@ -84563,10 +88129,10 @@ index 0dfcc92..7967849 100644 |
19833 |
|
19834 |
/* Structure to track chunk fragments that have been acked, but peer |
19835 |
diff --git a/include/net/sock.h b/include/net/sock.h |
19836 |
-index f5a7e22..043b85f 100644 |
19837 |
+index 1563507..20d5d0e 100644 |
19838 |
--- a/include/net/sock.h |
19839 |
+++ b/include/net/sock.h |
19840 |
-@@ -348,7 +348,7 @@ struct sock { |
19841 |
+@@ -349,7 +349,7 @@ struct sock { |
19842 |
unsigned int sk_napi_id; |
19843 |
unsigned int sk_ll_usec; |
19844 |
#endif |
19845 |
@@ -84575,7 +88141,7 @@ index f5a7e22..043b85f 100644 |
19846 |
int sk_rcvbuf; |
19847 |
|
19848 |
struct sk_filter __rcu *sk_filter; |
19849 |
-@@ -1036,7 +1036,7 @@ struct proto { |
19850 |
+@@ -1038,7 +1038,7 @@ struct proto { |
19851 |
void (*destroy_cgroup)(struct mem_cgroup *memcg); |
19852 |
struct cg_proto *(*proto_cgroup)(struct mem_cgroup *memcg); |
19853 |
#endif |
19854 |
@@ -84584,7 +88150,7 @@ index f5a7e22..043b85f 100644 |
19855 |
|
19856 |
/* |
19857 |
* Bits in struct cg_proto.flags |
19858 |
-@@ -1223,7 +1223,7 @@ static inline u64 memcg_memory_allocated_read(struct cg_proto *prot) |
19859 |
+@@ -1225,7 +1225,7 @@ static inline u64 memcg_memory_allocated_read(struct cg_proto *prot) |
19860 |
return ret >> PAGE_SHIFT; |
19861 |
} |
19862 |
|
19863 |
@@ -84593,7 +88159,7 @@ index f5a7e22..043b85f 100644 |
19864 |
sk_memory_allocated(const struct sock *sk) |
19865 |
{ |
19866 |
struct proto *prot = sk->sk_prot; |
19867 |
-@@ -1368,7 +1368,7 @@ struct sock_iocb { |
19868 |
+@@ -1370,7 +1370,7 @@ struct sock_iocb { |
19869 |
struct scm_cookie *scm; |
19870 |
struct msghdr *msg, async_msg; |
19871 |
struct kiocb *kiocb; |
19872 |
@@ -84602,7 +88168,41 @@ index f5a7e22..043b85f 100644 |
19873 |
|
19874 |
static inline struct sock_iocb *kiocb_to_siocb(struct kiocb *iocb) |
19875 |
{ |
19876 |
-@@ -1803,7 +1803,7 @@ static inline void sk_nocaps_add(struct sock *sk, netdev_features_t flags) |
19877 |
+@@ -1623,6 +1623,33 @@ void sk_common_release(struct sock *sk); |
19878 |
+ /* Initialise core socket variables */ |
19879 |
+ void sock_init_data(struct socket *sock, struct sock *sk); |
19880 |
+ |
19881 |
++void sk_filter_release_rcu(struct rcu_head *rcu); |
19882 |
++ |
19883 |
++/** |
19884 |
++ * sk_filter_release - release a socket filter |
19885 |
++ * @fp: filter to remove |
19886 |
++ * |
19887 |
++ * Remove a filter from a socket and release its resources. |
19888 |
++ */ |
19889 |
++ |
19890 |
++static inline void sk_filter_release(struct sk_filter *fp) |
19891 |
++{ |
19892 |
++ if (atomic_dec_and_test(&fp->refcnt)) |
19893 |
++ call_rcu(&fp->rcu, sk_filter_release_rcu); |
19894 |
++} |
19895 |
++ |
19896 |
++static inline void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp) |
19897 |
++{ |
19898 |
++ atomic_sub(sk_filter_size(fp->len), &sk->sk_omem_alloc); |
19899 |
++ sk_filter_release(fp); |
19900 |
++} |
19901 |
++ |
19902 |
++static inline void sk_filter_charge(struct sock *sk, struct sk_filter *fp) |
19903 |
++{ |
19904 |
++ atomic_inc(&fp->refcnt); |
19905 |
++ atomic_add(sk_filter_size(fp->len), &sk->sk_omem_alloc); |
19906 |
++} |
19907 |
++ |
19908 |
+ /* |
19909 |
+ * Socket reference counting postulates. |
19910 |
+ * |
19911 |
+@@ -1805,7 +1832,7 @@ static inline void sk_nocaps_add(struct sock *sk, netdev_features_t flags) |
19912 |
} |
19913 |
|
19914 |
static inline int skb_do_copy_data_nocache(struct sock *sk, struct sk_buff *skb, |
19915 |
@@ -84611,7 +88211,7 @@ index f5a7e22..043b85f 100644 |
19916 |
int copy, int offset) |
19917 |
{ |
19918 |
if (skb->ip_summed == CHECKSUM_NONE) { |
19919 |
-@@ -2065,7 +2065,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk) |
19920 |
+@@ -2067,7 +2094,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk) |
19921 |
} |
19922 |
} |
19923 |
|
19924 |
@@ -84621,19 +88221,19 @@ index f5a7e22..043b85f 100644 |
19925 |
/** |
19926 |
* sk_page_frag - return an appropriate page_frag |
19927 |
diff --git a/include/net/tcp.h b/include/net/tcp.h |
19928 |
-index 87d8774..cf214f8 100644 |
19929 |
+index 7286db8..f1aa7dc 100644 |
19930 |
--- a/include/net/tcp.h |
19931 |
+++ b/include/net/tcp.h |
19932 |
-@@ -541,7 +541,7 @@ void tcp_retransmit_timer(struct sock *sk); |
19933 |
+@@ -535,7 +535,7 @@ void tcp_retransmit_timer(struct sock *sk); |
19934 |
void tcp_xmit_retransmit_queue(struct sock *); |
19935 |
void tcp_simple_retransmit(struct sock *); |
19936 |
int tcp_trim_head(struct sock *, struct sk_buff *, u32); |
19937 |
--int tcp_fragment(struct sock *, struct sk_buff *, u32, unsigned int); |
19938 |
-+int __intentional_overflow(3) tcp_fragment(struct sock *, struct sk_buff *, u32, unsigned int); |
19939 |
+-int tcp_fragment(struct sock *, struct sk_buff *, u32, unsigned int, gfp_t); |
19940 |
++int __intentional_overflow(3) tcp_fragment(struct sock *, struct sk_buff *, u32, unsigned int, gfp_t); |
19941 |
|
19942 |
void tcp_send_probe0(struct sock *); |
19943 |
void tcp_send_partial(struct sock *); |
19944 |
-@@ -715,8 +715,8 @@ struct tcp_skb_cb { |
19945 |
+@@ -708,8 +708,8 @@ struct tcp_skb_cb { |
19946 |
struct inet6_skb_parm h6; |
19947 |
#endif |
19948 |
} header; /* For incoming frames */ |
19949 |
@@ -84644,7 +88244,7 @@ index 87d8774..cf214f8 100644 |
19950 |
__u32 when; /* used to compute rtt's */ |
19951 |
__u8 tcp_flags; /* TCP header flags. (tcp[13]) */ |
19952 |
|
19953 |
-@@ -730,7 +730,7 @@ struct tcp_skb_cb { |
19954 |
+@@ -723,7 +723,7 @@ struct tcp_skb_cb { |
19955 |
|
19956 |
__u8 ip_dsfield; /* IPv4 tos or IPv6 dsfield */ |
19957 |
/* 1 byte hole */ |
19958 |
@@ -84654,7 +88254,7 @@ index 87d8774..cf214f8 100644 |
19959 |
|
19960 |
#define TCP_SKB_CB(__skb) ((struct tcp_skb_cb *)&((__skb)->cb[0])) |
19961 |
diff --git a/include/net/xfrm.h b/include/net/xfrm.h |
19962 |
-index 116e9c7..3070537 100644 |
19963 |
+index 721e9c3b..3c81bbf 100644 |
19964 |
--- a/include/net/xfrm.h |
19965 |
+++ b/include/net/xfrm.h |
19966 |
@@ -285,7 +285,6 @@ struct xfrm_dst; |
19967 |
@@ -84701,7 +88301,7 @@ index 116e9c7..3070537 100644 |
19968 |
u32 priority; |
19969 |
u32 index; |
19970 |
struct xfrm_mark mark; |
19971 |
-@@ -1180,6 +1179,7 @@ static inline void xfrm_sk_free_policy(struct sock *sk) |
19972 |
+@@ -1167,6 +1166,7 @@ static inline void xfrm_sk_free_policy(struct sock *sk) |
19973 |
} |
19974 |
|
19975 |
void xfrm_garbage_collect(struct net *net); |
19976 |
@@ -84709,7 +88309,7 @@ index 116e9c7..3070537 100644 |
19977 |
|
19978 |
#else |
19979 |
|
19980 |
-@@ -1218,6 +1218,9 @@ static inline int xfrm6_policy_check_reverse(struct sock *sk, int dir, |
19981 |
+@@ -1205,6 +1205,9 @@ static inline int xfrm6_policy_check_reverse(struct sock *sk, int dir, |
19982 |
static inline void xfrm_garbage_collect(struct net *net) |
19983 |
{ |
19984 |
} |
19985 |
@@ -84798,10 +88398,10 @@ index ae6c3b8..fd748ac 100644 |
19986 |
/** |
19987 |
* struct snd_compr: Compressed device |
19988 |
diff --git a/include/sound/soc.h b/include/sound/soc.h |
19989 |
-index 0b83168..d67280a 100644 |
19990 |
+index ed9e2d7..aad0887 100644 |
19991 |
--- a/include/sound/soc.h |
19992 |
+++ b/include/sound/soc.h |
19993 |
-@@ -782,7 +782,7 @@ struct snd_soc_codec_driver { |
19994 |
+@@ -798,7 +798,7 @@ struct snd_soc_codec_driver { |
19995 |
/* probe ordering - for components with runtime dependencies */ |
19996 |
int probe_order; |
19997 |
int remove_order; |
19998 |
@@ -84810,7 +88410,7 @@ index 0b83168..d67280a 100644 |
19999 |
|
20000 |
/* SoC platform interface */ |
20001 |
struct snd_soc_platform_driver { |
20002 |
-@@ -828,7 +828,7 @@ struct snd_soc_platform_driver { |
20003 |
+@@ -845,7 +845,7 @@ struct snd_soc_platform_driver { |
20004 |
unsigned int (*read)(struct snd_soc_platform *, unsigned int); |
20005 |
int (*write)(struct snd_soc_platform *, unsigned int, unsigned int); |
20006 |
int (*bespoke_trigger)(struct snd_pcm_substream *, int); |
20007 |
@@ -85156,10 +88756,10 @@ index 6d67213..552fdd9 100644 |
20008 |
enum |
20009 |
{ |
20010 |
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h |
20011 |
-index ea468ee..4d367a5 100644 |
20012 |
+index 168ff50..a921df2 100644 |
20013 |
--- a/include/uapi/linux/videodev2.h |
20014 |
+++ b/include/uapi/linux/videodev2.h |
20015 |
-@@ -1248,7 +1248,7 @@ struct v4l2_ext_control { |
20016 |
+@@ -1253,7 +1253,7 @@ struct v4l2_ext_control { |
20017 |
union { |
20018 |
__s32 value; |
20019 |
__s64 value64; |
20020 |
@@ -85214,10 +88814,10 @@ index 30f5362..8ed8ac9 100644 |
20021 |
void *pmi_pal; |
20022 |
u8 *vbe_state_orig; /* |
20023 |
diff --git a/init/Kconfig b/init/Kconfig |
20024 |
-index 9d3585b..ad45d34 100644 |
20025 |
+index 9d76b99..d378b1e 100644 |
20026 |
--- a/init/Kconfig |
20027 |
+++ b/init/Kconfig |
20028 |
-@@ -1093,6 +1093,7 @@ endif # CGROUPS |
20029 |
+@@ -1105,6 +1105,7 @@ endif # CGROUPS |
20030 |
|
20031 |
config CHECKPOINT_RESTORE |
20032 |
bool "Checkpoint/restore support" if EXPERT |
20033 |
@@ -85225,7 +88825,7 @@ index 9d3585b..ad45d34 100644 |
20034 |
default n |
20035 |
help |
20036 |
Enables additional kernel features in a sake of checkpoint/restore. |
20037 |
-@@ -1570,7 +1571,7 @@ config SLUB_DEBUG |
20038 |
+@@ -1589,7 +1590,7 @@ config SLUB_DEBUG |
20039 |
|
20040 |
config COMPAT_BRK |
20041 |
bool "Disable heap randomization" |
20042 |
@@ -85234,7 +88834,7 @@ index 9d3585b..ad45d34 100644 |
20043 |
help |
20044 |
Randomizing heap placement makes heap exploits harder, but it |
20045 |
also breaks ancient binaries (including anything libc5 based). |
20046 |
-@@ -1858,7 +1859,7 @@ config INIT_ALL_POSSIBLE |
20047 |
+@@ -1877,7 +1878,7 @@ config INIT_ALL_POSSIBLE |
20048 |
config STOP_MACHINE |
20049 |
bool |
20050 |
default y |
20051 |
@@ -85584,10 +89184,10 @@ index a8497fa..35b3c90 100644 |
20052 |
next_state = Reset; |
20053 |
return 0; |
20054 |
diff --git a/init/main.c b/init/main.c |
20055 |
-index eb0ea86..b91cd60 100644 |
20056 |
+index e8ae1fe..f60f98c 100644 |
20057 |
--- a/init/main.c |
20058 |
+++ b/init/main.c |
20059 |
-@@ -97,6 +97,8 @@ extern void radix_tree_init(void); |
20060 |
+@@ -98,6 +98,8 @@ extern void radix_tree_init(void); |
20061 |
static inline void mark_rodata_ro(void) { } |
20062 |
#endif |
20063 |
|
20064 |
@@ -85596,7 +89196,7 @@ index eb0ea86..b91cd60 100644 |
20065 |
/* |
20066 |
* Debug helper: via this flag we know that we are in 'early bootup code' |
20067 |
* where only the boot processor is running with IRQ disabled. This means |
20068 |
-@@ -158,6 +160,75 @@ static int __init set_reset_devices(char *str) |
20069 |
+@@ -159,6 +161,75 @@ static int __init set_reset_devices(char *str) |
20070 |
|
20071 |
__setup("reset_devices", set_reset_devices); |
20072 |
|
20073 |
@@ -85672,15 +89272,25 @@ index eb0ea86..b91cd60 100644 |
20074 |
static const char * argv_init[MAX_INIT_ARGS+2] = { "init", NULL, }; |
20075 |
const char * envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, }; |
20076 |
static const char *panic_later, *panic_param; |
20077 |
-@@ -692,25 +763,24 @@ int __init_or_module do_one_initcall(initcall_t fn) |
20078 |
+@@ -727,7 +798,7 @@ static bool __init_or_module initcall_blacklisted(initcall_t fn) |
20079 |
+ struct blacklist_entry *entry; |
20080 |
+ char *fn_name; |
20081 |
+ |
20082 |
+- fn_name = kasprintf(GFP_KERNEL, "%pf", fn); |
20083 |
++ fn_name = kasprintf(GFP_KERNEL, "%pX", fn); |
20084 |
+ if (!fn_name) |
20085 |
+ return false; |
20086 |
+ |
20087 |
+@@ -779,7 +850,7 @@ int __init_or_module do_one_initcall(initcall_t fn) |
20088 |
{ |
20089 |
int count = preempt_count(); |
20090 |
int ret; |
20091 |
- char msgbuf[64]; |
20092 |
+ const char *msg1 = "", *msg2 = ""; |
20093 |
|
20094 |
- if (initcall_debug) |
20095 |
- ret = do_one_initcall_debug(fn); |
20096 |
+ if (initcall_blacklisted(fn)) |
20097 |
+ return -EPERM; |
20098 |
+@@ -789,18 +860,17 @@ int __init_or_module do_one_initcall(initcall_t fn) |
20099 |
else |
20100 |
ret = fn(); |
20101 |
|
20102 |
@@ -85703,7 +89313,7 @@ index eb0ea86..b91cd60 100644 |
20103 |
return ret; |
20104 |
} |
20105 |
|
20106 |
-@@ -817,8 +887,8 @@ static int run_init_process(const char *init_filename) |
20107 |
+@@ -907,8 +977,8 @@ static int run_init_process(const char *init_filename) |
20108 |
{ |
20109 |
argv_init[0] = init_filename; |
20110 |
return do_execve(getname_kernel(init_filename), |
20111 |
@@ -85714,7 +89324,7 @@ index eb0ea86..b91cd60 100644 |
20112 |
} |
20113 |
|
20114 |
static int try_to_run_init_process(const char *init_filename) |
20115 |
-@@ -835,6 +905,10 @@ static int try_to_run_init_process(const char *init_filename) |
20116 |
+@@ -925,6 +995,10 @@ static int try_to_run_init_process(const char *init_filename) |
20117 |
return ret; |
20118 |
} |
20119 |
|
20120 |
@@ -85725,7 +89335,7 @@ index eb0ea86..b91cd60 100644 |
20121 |
static noinline void __init kernel_init_freeable(void); |
20122 |
|
20123 |
static int __ref kernel_init(void *unused) |
20124 |
-@@ -859,6 +933,11 @@ static int __ref kernel_init(void *unused) |
20125 |
+@@ -949,6 +1023,11 @@ static int __ref kernel_init(void *unused) |
20126 |
ramdisk_execute_command, ret); |
20127 |
} |
20128 |
|
20129 |
@@ -85737,7 +89347,7 @@ index eb0ea86..b91cd60 100644 |
20130 |
/* |
20131 |
* We try each of these until one succeeds. |
20132 |
* |
20133 |
-@@ -914,7 +993,7 @@ static noinline void __init kernel_init_freeable(void) |
20134 |
+@@ -1004,7 +1083,7 @@ static noinline void __init kernel_init_freeable(void) |
20135 |
do_basic_setup(); |
20136 |
|
20137 |
/* Open the /dev/console on the rootfs, this should never fail */ |
20138 |
@@ -85746,7 +89356,7 @@ index eb0ea86..b91cd60 100644 |
20139 |
pr_err("Warning: unable to open an initial console.\n"); |
20140 |
|
20141 |
(void) sys_dup(0); |
20142 |
-@@ -927,11 +1006,13 @@ static noinline void __init kernel_init_freeable(void) |
20143 |
+@@ -1017,11 +1096,13 @@ static noinline void __init kernel_init_freeable(void) |
20144 |
if (!ramdisk_execute_command) |
20145 |
ramdisk_execute_command = "/init"; |
20146 |
|
20147 |
@@ -85762,7 +89372,7 @@ index eb0ea86..b91cd60 100644 |
20148 |
* Ok, we have completed the initial bootup, and |
20149 |
* we're essentially up and running. Get rid of the |
20150 |
diff --git a/ipc/compat.c b/ipc/compat.c |
20151 |
-index 45d035d..e4a7f99 100644 |
20152 |
+index b5ef4f7..ff31d87 100644 |
20153 |
--- a/ipc/compat.c |
20154 |
+++ b/ipc/compat.c |
20155 |
@@ -396,7 +396,7 @@ COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second, |
20156 |
@@ -85775,11 +89385,11 @@ index 45d035d..e4a7f99 100644 |
20157 |
case SHMDT: |
20158 |
return sys_shmdt(compat_ptr(ptr)); |
20159 |
diff --git a/ipc/ipc_sysctl.c b/ipc/ipc_sysctl.c |
20160 |
-index 998d31b..30c24df 100644 |
20161 |
+index c3f0326..d4e0579 100644 |
20162 |
--- a/ipc/ipc_sysctl.c |
20163 |
+++ b/ipc/ipc_sysctl.c |
20164 |
-@@ -30,7 +30,7 @@ static void *get_ipc(ctl_table *table) |
20165 |
- static int proc_ipc_dointvec(ctl_table *table, int write, |
20166 |
+@@ -30,7 +30,7 @@ static void *get_ipc(struct ctl_table *table) |
20167 |
+ static int proc_ipc_dointvec(struct ctl_table *table, int write, |
20168 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
20169 |
{ |
20170 |
- struct ctl_table ipc_table; |
20171 |
@@ -85787,8 +89397,8 @@ index 998d31b..30c24df 100644 |
20172 |
|
20173 |
memcpy(&ipc_table, table, sizeof(ipc_table)); |
20174 |
ipc_table.data = get_ipc(table); |
20175 |
-@@ -41,7 +41,7 @@ static int proc_ipc_dointvec(ctl_table *table, int write, |
20176 |
- static int proc_ipc_dointvec_minmax(ctl_table *table, int write, |
20177 |
+@@ -41,7 +41,7 @@ static int proc_ipc_dointvec(struct ctl_table *table, int write, |
20178 |
+ static int proc_ipc_dointvec_minmax(struct ctl_table *table, int write, |
20179 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
20180 |
{ |
20181 |
- struct ctl_table ipc_table; |
20182 |
@@ -85796,8 +89406,8 @@ index 998d31b..30c24df 100644 |
20183 |
|
20184 |
memcpy(&ipc_table, table, sizeof(ipc_table)); |
20185 |
ipc_table.data = get_ipc(table); |
20186 |
-@@ -65,7 +65,7 @@ static int proc_ipc_dointvec_minmax_orphans(ctl_table *table, int write, |
20187 |
- static int proc_ipc_callback_dointvec_minmax(ctl_table *table, int write, |
20188 |
+@@ -65,7 +65,7 @@ static int proc_ipc_dointvec_minmax_orphans(struct ctl_table *table, int write, |
20189 |
+ static int proc_ipc_callback_dointvec_minmax(struct ctl_table *table, int write, |
20190 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
20191 |
{ |
20192 |
- struct ctl_table ipc_table; |
20193 |
@@ -85805,8 +89415,8 @@ index 998d31b..30c24df 100644 |
20194 |
size_t lenp_bef = *lenp; |
20195 |
int rc; |
20196 |
|
20197 |
-@@ -88,7 +88,7 @@ static int proc_ipc_callback_dointvec_minmax(ctl_table *table, int write, |
20198 |
- static int proc_ipc_doulongvec_minmax(ctl_table *table, int write, |
20199 |
+@@ -88,7 +88,7 @@ static int proc_ipc_callback_dointvec_minmax(struct ctl_table *table, int write, |
20200 |
+ static int proc_ipc_doulongvec_minmax(struct ctl_table *table, int write, |
20201 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
20202 |
{ |
20203 |
- struct ctl_table ipc_table; |
20204 |
@@ -85815,7 +89425,7 @@ index 998d31b..30c24df 100644 |
20205 |
ipc_table.data = get_ipc(table); |
20206 |
|
20207 |
@@ -122,7 +122,7 @@ static void ipc_auto_callback(int val) |
20208 |
- static int proc_ipcauto_dointvec_minmax(ctl_table *table, int write, |
20209 |
+ static int proc_ipcauto_dointvec_minmax(struct ctl_table *table, int write, |
20210 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
20211 |
{ |
20212 |
- struct ctl_table ipc_table; |
20213 |
@@ -85824,11 +89434,11 @@ index 998d31b..30c24df 100644 |
20214 |
int oldval; |
20215 |
int rc; |
20216 |
diff --git a/ipc/mq_sysctl.c b/ipc/mq_sysctl.c |
20217 |
-index 5bb8bfe..a38ec05 100644 |
20218 |
+index 68d4e95..1477ded 100644 |
20219 |
--- a/ipc/mq_sysctl.c |
20220 |
+++ b/ipc/mq_sysctl.c |
20221 |
-@@ -25,7 +25,7 @@ static void *get_mq(ctl_table *table) |
20222 |
- static int proc_mq_dointvec(ctl_table *table, int write, |
20223 |
+@@ -25,7 +25,7 @@ static void *get_mq(struct ctl_table *table) |
20224 |
+ static int proc_mq_dointvec(struct ctl_table *table, int write, |
20225 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
20226 |
{ |
20227 |
- struct ctl_table mq_table; |
20228 |
@@ -85836,8 +89446,8 @@ index 5bb8bfe..a38ec05 100644 |
20229 |
memcpy(&mq_table, table, sizeof(mq_table)); |
20230 |
mq_table.data = get_mq(table); |
20231 |
|
20232 |
-@@ -35,7 +35,7 @@ static int proc_mq_dointvec(ctl_table *table, int write, |
20233 |
- static int proc_mq_dointvec_minmax(ctl_table *table, int write, |
20234 |
+@@ -35,7 +35,7 @@ static int proc_mq_dointvec(struct ctl_table *table, int write, |
20235 |
+ static int proc_mq_dointvec_minmax(struct ctl_table *table, int write, |
20236 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
20237 |
{ |
20238 |
- struct ctl_table mq_table; |
20239 |
@@ -85857,69 +89467,8 @@ index 4fcf39a..d3cc2ec 100644 |
20240 |
spin_lock(&mq_lock); |
20241 |
if (u->mq_bytes + mq_bytes < u->mq_bytes || |
20242 |
u->mq_bytes + mq_bytes > rlimit(RLIMIT_MSGQUEUE)) { |
20243 |
-diff --git a/ipc/msg.c b/ipc/msg.c |
20244 |
-index 6498531..b0ff3c8 100644 |
20245 |
---- a/ipc/msg.c |
20246 |
-+++ b/ipc/msg.c |
20247 |
-@@ -303,18 +303,19 @@ static inline int msg_security(struct kern_ipc_perm *ipcp, int msgflg) |
20248 |
- return security_msg_queue_associate(msq, msgflg); |
20249 |
- } |
20250 |
- |
20251 |
-+static struct ipc_ops msg_ops = { |
20252 |
-+ .getnew = newque, |
20253 |
-+ .associate = msg_security, |
20254 |
-+ .more_checks = NULL |
20255 |
-+}; |
20256 |
-+ |
20257 |
- SYSCALL_DEFINE2(msgget, key_t, key, int, msgflg) |
20258 |
- { |
20259 |
- struct ipc_namespace *ns; |
20260 |
-- struct ipc_ops msg_ops; |
20261 |
- struct ipc_params msg_params; |
20262 |
- |
20263 |
- ns = current->nsproxy->ipc_ns; |
20264 |
- |
20265 |
-- msg_ops.getnew = newque; |
20266 |
-- msg_ops.associate = msg_security; |
20267 |
-- msg_ops.more_checks = NULL; |
20268 |
-- |
20269 |
- msg_params.key = key; |
20270 |
- msg_params.flg = msgflg; |
20271 |
- |
20272 |
-diff --git a/ipc/sem.c b/ipc/sem.c |
20273 |
-index bee5554..e9af81dd 100644 |
20274 |
---- a/ipc/sem.c |
20275 |
-+++ b/ipc/sem.c |
20276 |
-@@ -561,10 +561,15 @@ static inline int sem_more_checks(struct kern_ipc_perm *ipcp, |
20277 |
- return 0; |
20278 |
- } |
20279 |
- |
20280 |
-+static struct ipc_ops sem_ops = { |
20281 |
-+ .getnew = newary, |
20282 |
-+ .associate = sem_security, |
20283 |
-+ .more_checks = sem_more_checks |
20284 |
-+}; |
20285 |
-+ |
20286 |
- SYSCALL_DEFINE3(semget, key_t, key, int, nsems, int, semflg) |
20287 |
- { |
20288 |
- struct ipc_namespace *ns; |
20289 |
-- struct ipc_ops sem_ops; |
20290 |
- struct ipc_params sem_params; |
20291 |
- |
20292 |
- ns = current->nsproxy->ipc_ns; |
20293 |
-@@ -572,10 +577,6 @@ SYSCALL_DEFINE3(semget, key_t, key, int, nsems, int, semflg) |
20294 |
- if (nsems < 0 || nsems > ns->sc_semmsl) |
20295 |
- return -EINVAL; |
20296 |
- |
20297 |
-- sem_ops.getnew = newary; |
20298 |
-- sem_ops.associate = sem_security; |
20299 |
-- sem_ops.more_checks = sem_more_checks; |
20300 |
-- |
20301 |
- sem_params.key = key; |
20302 |
- sem_params.flg = semflg; |
20303 |
- sem_params.u.nsems = nsems; |
20304 |
diff --git a/ipc/shm.c b/ipc/shm.c |
20305 |
-index 7645961..afc7f02 100644 |
20306 |
+index 89fc354..cf56786 100644 |
20307 |
--- a/ipc/shm.c |
20308 |
+++ b/ipc/shm.c |
20309 |
@@ -72,6 +72,14 @@ static void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp); |
20310 |
@@ -85937,7 +89486,7 @@ index 7645961..afc7f02 100644 |
20311 |
void shm_init_ns(struct ipc_namespace *ns) |
20312 |
{ |
20313 |
ns->shm_ctlmax = SHMMAX; |
20314 |
-@@ -553,6 +561,14 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params) |
20315 |
+@@ -557,6 +565,14 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params) |
20316 |
shp->shm_lprid = 0; |
20317 |
shp->shm_atim = shp->shm_dtim = 0; |
20318 |
shp->shm_ctim = get_seconds(); |
20319 |
@@ -85952,32 +89501,7 @@ index 7645961..afc7f02 100644 |
20320 |
shp->shm_segsz = size; |
20321 |
shp->shm_nattch = 0; |
20322 |
shp->shm_file = file; |
20323 |
-@@ -606,18 +622,19 @@ static inline int shm_more_checks(struct kern_ipc_perm *ipcp, |
20324 |
- return 0; |
20325 |
- } |
20326 |
- |
20327 |
-+static struct ipc_ops shm_ops = { |
20328 |
-+ .getnew = newseg, |
20329 |
-+ .associate = shm_security, |
20330 |
-+ .more_checks = shm_more_checks |
20331 |
-+}; |
20332 |
-+ |
20333 |
- SYSCALL_DEFINE3(shmget, key_t, key, size_t, size, int, shmflg) |
20334 |
- { |
20335 |
- struct ipc_namespace *ns; |
20336 |
-- struct ipc_ops shm_ops; |
20337 |
- struct ipc_params shm_params; |
20338 |
- |
20339 |
- ns = current->nsproxy->ipc_ns; |
20340 |
- |
20341 |
-- shm_ops.getnew = newseg; |
20342 |
-- shm_ops.associate = shm_security; |
20343 |
-- shm_ops.more_checks = shm_more_checks; |
20344 |
-- |
20345 |
- shm_params.key = key; |
20346 |
- shm_params.flg = shmflg; |
20347 |
- shm_params.u.size = size; |
20348 |
-@@ -1088,6 +1105,12 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, |
20349 |
+@@ -1092,6 +1108,12 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, |
20350 |
f_mode = FMODE_READ | FMODE_WRITE; |
20351 |
} |
20352 |
if (shmflg & SHM_EXEC) { |
20353 |
@@ -85990,7 +89514,7 @@ index 7645961..afc7f02 100644 |
20354 |
prot |= PROT_EXEC; |
20355 |
acc_mode |= S_IXUGO; |
20356 |
} |
20357 |
-@@ -1112,6 +1135,15 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, |
20358 |
+@@ -1116,6 +1138,15 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, |
20359 |
if (err) |
20360 |
goto out_unlock; |
20361 |
|
20362 |
@@ -86006,7 +89530,7 @@ index 7645961..afc7f02 100644 |
20363 |
ipc_lock_object(&shp->shm_perm); |
20364 |
|
20365 |
/* check if shm_destroy() is tearing down shp */ |
20366 |
-@@ -1124,6 +1156,9 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, |
20367 |
+@@ -1128,6 +1159,9 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, |
20368 |
path = shp->shm_file->f_path; |
20369 |
path_get(&path); |
20370 |
shp->shm_nattch++; |
20371 |
@@ -86017,7 +89541,7 @@ index 7645961..afc7f02 100644 |
20372 |
ipc_unlock_object(&shp->shm_perm); |
20373 |
rcu_read_unlock(); |
20374 |
diff --git a/ipc/util.c b/ipc/util.c |
20375 |
-index 2eb0d1e..0308564 100644 |
20376 |
+index 27d74e6..8be0be2 100644 |
20377 |
--- a/ipc/util.c |
20378 |
+++ b/ipc/util.c |
20379 |
@@ -71,6 +71,8 @@ struct ipc_proc_iface { |
20380 |
@@ -86038,10 +89562,10 @@ index 2eb0d1e..0308564 100644 |
20381 |
+ return -1; |
20382 |
+ |
20383 |
/* is there some bit set in requested_mode but not in granted_mode? */ |
20384 |
- if ((requested_mode & ~granted_mode & 0007) && |
20385 |
+ if ((requested_mode & ~granted_mode & 0007) && |
20386 |
!ns_capable(ns->user_ns, CAP_IPC_OWNER)) |
20387 |
diff --git a/kernel/acct.c b/kernel/acct.c |
20388 |
-index 8d6e145..33e0b1e 100644 |
20389 |
+index 808a86f..da69695 100644 |
20390 |
--- a/kernel/acct.c |
20391 |
+++ b/kernel/acct.c |
20392 |
@@ -556,7 +556,7 @@ static void do_acct_process(struct bsd_acct_struct *acct, |
20393 |
@@ -86054,7 +89578,7 @@ index 8d6e145..33e0b1e 100644 |
20394 |
current->signal->rlim[RLIMIT_FSIZE].rlim_cur = flim; |
20395 |
set_fs(fs); |
20396 |
diff --git a/kernel/audit.c b/kernel/audit.c |
20397 |
-index 47845c5..bd9dd5b 100644 |
20398 |
+index 3ef2e0e..8873765 100644 |
20399 |
--- a/kernel/audit.c |
20400 |
+++ b/kernel/audit.c |
20401 |
@@ -122,7 +122,7 @@ u32 audit_sig_sid = 0; |
20402 |
@@ -86084,7 +89608,7 @@ index 47845c5..bd9dd5b 100644 |
20403 |
audit_rate_limit, |
20404 |
audit_backlog_limit); |
20405 |
audit_panic(message); |
20406 |
-@@ -808,7 +808,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) |
20407 |
+@@ -840,7 +840,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) |
20408 |
s.pid = audit_pid; |
20409 |
s.rate_limit = audit_rate_limit; |
20410 |
s.backlog_limit = audit_backlog_limit; |
20411 |
@@ -86116,10 +89640,10 @@ index 21eae3c..66db239 100644 |
20412 |
task->sessionid = sessionid; |
20413 |
task->loginuid = loginuid; |
20414 |
diff --git a/kernel/capability.c b/kernel/capability.c |
20415 |
-index 24663b3..b926ae1 100644 |
20416 |
+index a5cf13c..07a2647 100644 |
20417 |
--- a/kernel/capability.c |
20418 |
+++ b/kernel/capability.c |
20419 |
-@@ -193,6 +193,9 @@ SYSCALL_DEFINE2(capget, cap_user_header_t, header, cap_user_data_t, dataptr) |
20420 |
+@@ -192,6 +192,9 @@ SYSCALL_DEFINE2(capget, cap_user_header_t, header, cap_user_data_t, dataptr) |
20421 |
* before modification is attempted and the application |
20422 |
* fails. |
20423 |
*/ |
20424 |
@@ -86129,7 +89653,7 @@ index 24663b3..b926ae1 100644 |
20425 |
if (copy_to_user(dataptr, kdata, tocopy |
20426 |
* sizeof(struct __user_cap_data_struct))) { |
20427 |
return -EFAULT; |
20428 |
-@@ -294,10 +297,11 @@ bool has_ns_capability(struct task_struct *t, |
20429 |
+@@ -293,10 +296,11 @@ bool has_ns_capability(struct task_struct *t, |
20430 |
int ret; |
20431 |
|
20432 |
rcu_read_lock(); |
20433 |
@@ -86143,7 +89667,7 @@ index 24663b3..b926ae1 100644 |
20434 |
} |
20435 |
|
20436 |
/** |
20437 |
-@@ -334,10 +338,10 @@ bool has_ns_capability_noaudit(struct task_struct *t, |
20438 |
+@@ -333,10 +337,10 @@ bool has_ns_capability_noaudit(struct task_struct *t, |
20439 |
int ret; |
20440 |
|
20441 |
rcu_read_lock(); |
20442 |
@@ -86156,7 +89680,7 @@ index 24663b3..b926ae1 100644 |
20443 |
} |
20444 |
|
20445 |
/** |
20446 |
-@@ -375,7 +379,7 @@ bool ns_capable(struct user_namespace *ns, int cap) |
20447 |
+@@ -374,7 +378,7 @@ bool ns_capable(struct user_namespace *ns, int cap) |
20448 |
BUG(); |
20449 |
} |
20450 |
|
20451 |
@@ -86165,7 +89689,7 @@ index 24663b3..b926ae1 100644 |
20452 |
current->flags |= PF_SUPERPRIV; |
20453 |
return true; |
20454 |
} |
20455 |
-@@ -383,6 +387,21 @@ bool ns_capable(struct user_namespace *ns, int cap) |
20456 |
+@@ -382,6 +386,21 @@ bool ns_capable(struct user_namespace *ns, int cap) |
20457 |
} |
20458 |
EXPORT_SYMBOL(ns_capable); |
20459 |
|
20460 |
@@ -86214,10 +89738,25 @@ index 24663b3..b926ae1 100644 |
20461 |
+} |
20462 |
+EXPORT_SYMBOL(capable_wrt_inode_uidgid_nolog); |
20463 |
diff --git a/kernel/cgroup.c b/kernel/cgroup.c |
20464 |
-index 073226b..969c746 100644 |
20465 |
+index 70776ae..09c4988 100644 |
20466 |
--- a/kernel/cgroup.c |
20467 |
+++ b/kernel/cgroup.c |
20468 |
-@@ -4808,7 +4808,7 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v) |
20469 |
+@@ -5146,6 +5146,14 @@ static void cgroup_release_agent(struct work_struct *work) |
20470 |
+ release_list); |
20471 |
+ list_del_init(&cgrp->release_list); |
20472 |
+ raw_spin_unlock(&release_list_lock); |
20473 |
++ |
20474 |
++ /* |
20475 |
++ * don't bother calling call_usermodehelper if we haven't |
20476 |
++ * configured a binary to execute |
20477 |
++ */ |
20478 |
++ if (cgrp->root->release_agent_path[0] == '\0') |
20479 |
++ goto continue_free; |
20480 |
++ |
20481 |
+ pathbuf = kmalloc(PATH_MAX, GFP_KERNEL); |
20482 |
+ if (!pathbuf) |
20483 |
+ goto continue_free; |
20484 |
+@@ -5336,7 +5344,7 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v) |
20485 |
struct task_struct *task; |
20486 |
int count = 0; |
20487 |
|
20488 |
@@ -86227,7 +89766,7 @@ index 073226b..969c746 100644 |
20489 |
list_for_each_entry(task, &cset->tasks, cg_list) { |
20490 |
if (count++ > MAX_TASKS_SHOWN_PER_CSS) |
20491 |
diff --git a/kernel/compat.c b/kernel/compat.c |
20492 |
-index e40b043..3da8f51 100644 |
20493 |
+index 633394f..bdfa969 100644 |
20494 |
--- a/kernel/compat.c |
20495 |
+++ b/kernel/compat.c |
20496 |
@@ -13,6 +13,7 @@ |
20497 |
@@ -86551,7 +90090,7 @@ index e0573a4..26c0fd3 100644 |
20498 |
|
20499 |
/** |
20500 |
diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c |
20501 |
-index 2956c8d..cfe1e2e 100644 |
20502 |
+index 1adf62b..7736e06 100644 |
20503 |
--- a/kernel/debug/debug_core.c |
20504 |
+++ b/kernel/debug/debug_core.c |
20505 |
@@ -124,7 +124,7 @@ static DEFINE_RAW_SPINLOCK(dbg_slave_lock); |
20506 |
@@ -86615,7 +90154,7 @@ index 2956c8d..cfe1e2e 100644 |
20507 |
} |
20508 |
EXPORT_SYMBOL_GPL(kgdb_schedule_breakpoint); |
20509 |
diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c |
20510 |
-index 0b097c8..11dd5c5 100644 |
20511 |
+index 2f7c760..95b6a66 100644 |
20512 |
--- a/kernel/debug/kdb/kdb_main.c |
20513 |
+++ b/kernel/debug/kdb/kdb_main.c |
20514 |
@@ -1977,7 +1977,7 @@ static int kdb_lsmod(int argc, const char **argv) |
20515 |
@@ -86637,10 +90176,10 @@ index 0b097c8..11dd5c5 100644 |
20516 |
#ifdef CONFIG_MODULE_UNLOAD |
20517 |
{ |
20518 |
diff --git a/kernel/events/core.c b/kernel/events/core.c |
20519 |
-index 935271c..8888f93 100644 |
20520 |
+index 6b17ac1..00fd505 100644 |
20521 |
--- a/kernel/events/core.c |
20522 |
+++ b/kernel/events/core.c |
20523 |
-@@ -158,8 +158,15 @@ static struct srcu_struct pmus_srcu; |
20524 |
+@@ -160,8 +160,15 @@ static struct srcu_struct pmus_srcu; |
20525 |
* 0 - disallow raw tracepoint access for unpriv |
20526 |
* 1 - disallow cpu events for unpriv |
20527 |
* 2 - disallow kernel profiling for unpriv |
20528 |
@@ -86657,7 +90196,7 @@ index 935271c..8888f93 100644 |
20529 |
|
20530 |
/* Minimum for 512 kiB + 1 user control page */ |
20531 |
int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */ |
20532 |
-@@ -185,7 +192,7 @@ void update_perf_cpu_limits(void) |
20533 |
+@@ -187,7 +194,7 @@ void update_perf_cpu_limits(void) |
20534 |
|
20535 |
tmp *= sysctl_perf_cpu_time_max_percent; |
20536 |
do_div(tmp, 100); |
20537 |
@@ -86666,7 +90205,7 @@ index 935271c..8888f93 100644 |
20538 |
} |
20539 |
|
20540 |
static int perf_rotate_context(struct perf_cpu_context *cpuctx); |
20541 |
-@@ -291,7 +298,7 @@ void perf_sample_event_took(u64 sample_len_ns) |
20542 |
+@@ -293,7 +300,7 @@ void perf_sample_event_took(u64 sample_len_ns) |
20543 |
} |
20544 |
} |
20545 |
|
20546 |
@@ -86675,7 +90214,7 @@ index 935271c..8888f93 100644 |
20547 |
|
20548 |
static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx, |
20549 |
enum event_type_t event_type); |
20550 |
-@@ -3002,7 +3009,7 @@ static void __perf_event_read(void *info) |
20551 |
+@@ -3023,7 +3030,7 @@ static void __perf_event_read(void *info) |
20552 |
|
20553 |
static inline u64 perf_event_count(struct perf_event *event) |
20554 |
{ |
20555 |
@@ -86684,7 +90223,7 @@ index 935271c..8888f93 100644 |
20556 |
} |
20557 |
|
20558 |
static u64 perf_event_read(struct perf_event *event) |
20559 |
-@@ -3361,9 +3368,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running) |
20560 |
+@@ -3399,9 +3406,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running) |
20561 |
mutex_lock(&event->child_mutex); |
20562 |
total += perf_event_read(event); |
20563 |
*enabled += event->total_time_enabled + |
20564 |
@@ -86696,7 +90235,7 @@ index 935271c..8888f93 100644 |
20565 |
|
20566 |
list_for_each_entry(child, &event->child_list, child_list) { |
20567 |
total += perf_event_read(child); |
20568 |
-@@ -3792,10 +3799,10 @@ void perf_event_update_userpage(struct perf_event *event) |
20569 |
+@@ -3830,10 +3837,10 @@ void perf_event_update_userpage(struct perf_event *event) |
20570 |
userpg->offset -= local64_read(&event->hw.prev_count); |
20571 |
|
20572 |
userpg->time_enabled = enabled + |
20573 |
@@ -86709,7 +90248,7 @@ index 935271c..8888f93 100644 |
20574 |
|
20575 |
arch_perf_update_userpage(userpg, now); |
20576 |
|
20577 |
-@@ -4359,7 +4366,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size, |
20578 |
+@@ -4397,7 +4404,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size, |
20579 |
|
20580 |
/* Data. */ |
20581 |
sp = perf_user_stack_pointer(regs); |
20582 |
@@ -86718,7 +90257,7 @@ index 935271c..8888f93 100644 |
20583 |
dyn_size = dump_size - rem; |
20584 |
|
20585 |
perf_output_skip(handle, rem); |
20586 |
-@@ -4450,11 +4457,11 @@ static void perf_output_read_one(struct perf_output_handle *handle, |
20587 |
+@@ -4488,11 +4495,11 @@ static void perf_output_read_one(struct perf_output_handle *handle, |
20588 |
values[n++] = perf_event_count(event); |
20589 |
if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) { |
20590 |
values[n++] = enabled + |
20591 |
@@ -86732,7 +90271,7 @@ index 935271c..8888f93 100644 |
20592 |
} |
20593 |
if (read_format & PERF_FORMAT_ID) |
20594 |
values[n++] = primary_event_id(event); |
20595 |
-@@ -6733,7 +6740,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu, |
20596 |
+@@ -6801,7 +6808,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu, |
20597 |
event->parent = parent_event; |
20598 |
|
20599 |
event->ns = get_pid_ns(task_active_pid_ns(current)); |
20600 |
@@ -86741,7 +90280,7 @@ index 935271c..8888f93 100644 |
20601 |
|
20602 |
event->state = PERF_EVENT_STATE_INACTIVE; |
20603 |
|
20604 |
-@@ -7015,6 +7022,11 @@ SYSCALL_DEFINE5(perf_event_open, |
20605 |
+@@ -7080,6 +7087,11 @@ SYSCALL_DEFINE5(perf_event_open, |
20606 |
if (flags & ~PERF_FLAG_ALL) |
20607 |
return -EINVAL; |
20608 |
|
20609 |
@@ -86753,7 +90292,7 @@ index 935271c..8888f93 100644 |
20610 |
err = perf_copy_attr(attr_uptr, &attr); |
20611 |
if (err) |
20612 |
return err; |
20613 |
-@@ -7353,10 +7365,10 @@ static void sync_child_event(struct perf_event *child_event, |
20614 |
+@@ -7432,10 +7444,10 @@ static void sync_child_event(struct perf_event *child_event, |
20615 |
/* |
20616 |
* Add back the child's count to the parent's count: |
20617 |
*/ |
20618 |
@@ -86812,10 +90351,10 @@ index 569b2187..19940d9 100644 |
20619 |
/* Callchain handling */ |
20620 |
extern struct perf_callchain_entry * |
20621 |
diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c |
20622 |
-index 04709b6..d330828 100644 |
20623 |
+index 6f3254e..e4c1fe4 100644 |
20624 |
--- a/kernel/events/uprobes.c |
20625 |
+++ b/kernel/events/uprobes.c |
20626 |
-@@ -1666,7 +1666,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr) |
20627 |
+@@ -1670,7 +1670,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr) |
20628 |
{ |
20629 |
struct page *page; |
20630 |
uprobe_opcode_t opcode; |
20631 |
@@ -86825,7 +90364,7 @@ index 04709b6..d330828 100644 |
20632 |
pagefault_disable(); |
20633 |
result = __copy_from_user_inatomic(&opcode, (void __user*)vaddr, |
20634 |
diff --git a/kernel/exit.c b/kernel/exit.c |
20635 |
-index 6ed6a1d..edecb0e 100644 |
20636 |
+index e5c4668..592d2e5 100644 |
20637 |
--- a/kernel/exit.c |
20638 |
+++ b/kernel/exit.c |
20639 |
@@ -173,6 +173,10 @@ void release_task(struct task_struct * p) |
20640 |
@@ -86839,16 +90378,7 @@ index 6ed6a1d..edecb0e 100644 |
20641 |
/* don't need to get the RCU readlock here - the process is dead and |
20642 |
* can't be modifying its own credentials. But shut RCU-lockdep up */ |
20643 |
rcu_read_lock(); |
20644 |
-@@ -330,7 +334,7 @@ int allow_signal(int sig) |
20645 |
- * know it'll be handled, so that they don't get converted to |
20646 |
- * SIGKILL or just silently dropped. |
20647 |
- */ |
20648 |
-- current->sighand->action[(sig)-1].sa.sa_handler = (void __user *)2; |
20649 |
-+ current->sighand->action[(sig)-1].sa.sa_handler = (__force void __user *)2; |
20650 |
- recalc_sigpending(); |
20651 |
- spin_unlock_irq(¤t->sighand->siglock); |
20652 |
- return 0; |
20653 |
-@@ -699,6 +703,8 @@ void do_exit(long code) |
20654 |
+@@ -664,6 +668,8 @@ void do_exit(long code) |
20655 |
struct task_struct *tsk = current; |
20656 |
int group_dead; |
20657 |
|
20658 |
@@ -86857,7 +90387,7 @@ index 6ed6a1d..edecb0e 100644 |
20659 |
profile_task_exit(tsk); |
20660 |
|
20661 |
WARN_ON(blk_needs_flush_plug(tsk)); |
20662 |
-@@ -715,7 +721,6 @@ void do_exit(long code) |
20663 |
+@@ -680,7 +686,6 @@ void do_exit(long code) |
20664 |
* mm_release()->clear_child_tid() from writing to a user-controlled |
20665 |
* kernel address. |
20666 |
*/ |
20667 |
@@ -86865,7 +90395,7 @@ index 6ed6a1d..edecb0e 100644 |
20668 |
|
20669 |
ptrace_event(PTRACE_EVENT_EXIT, code); |
20670 |
|
20671 |
-@@ -774,6 +779,9 @@ void do_exit(long code) |
20672 |
+@@ -739,6 +744,9 @@ void do_exit(long code) |
20673 |
tsk->exit_code = code; |
20674 |
taskstats_exit(tsk, group_dead); |
20675 |
|
20676 |
@@ -86875,7 +90405,7 @@ index 6ed6a1d..edecb0e 100644 |
20677 |
exit_mm(tsk); |
20678 |
|
20679 |
if (group_dead) |
20680 |
-@@ -893,7 +901,7 @@ SYSCALL_DEFINE1(exit, int, error_code) |
20681 |
+@@ -858,7 +866,7 @@ SYSCALL_DEFINE1(exit, int, error_code) |
20682 |
* Take down every thread in the group. This is called by fatal signals |
20683 |
* as well as by sys_exit_group (below). |
20684 |
*/ |
20685 |
@@ -86885,7 +90415,7 @@ index 6ed6a1d..edecb0e 100644 |
20686 |
{ |
20687 |
struct signal_struct *sig = current->signal; |
20688 |
diff --git a/kernel/fork.c b/kernel/fork.c |
20689 |
-index 68b9226..0700bf6 100644 |
20690 |
+index 6a13c46..a623c8e 100644 |
20691 |
--- a/kernel/fork.c |
20692 |
+++ b/kernel/fork.c |
20693 |
@@ -183,6 +183,48 @@ void thread_info_cache_init(void) |
20694 |
@@ -87322,7 +90852,7 @@ index 68b9226..0700bf6 100644 |
20695 |
else |
20696 |
new_fs = fs; |
20697 |
diff --git a/kernel/futex.c b/kernel/futex.c |
20698 |
-index de938d2..c566038 100644 |
20699 |
+index b632b5f..ca00da9 100644 |
20700 |
--- a/kernel/futex.c |
20701 |
+++ b/kernel/futex.c |
20702 |
@@ -202,7 +202,7 @@ struct futex_pi_state { |
20703 |
@@ -87398,10 +90928,10 @@ index 55c8c93..9ba7ad6 100644 |
20704 |
{ |
20705 |
compat_uptr_t base = ptr_to_compat(entry); |
20706 |
diff --git a/kernel/gcov/base.c b/kernel/gcov/base.c |
20707 |
-index f45b75b..bfac6d5 100644 |
20708 |
+index b358a80..fc25240 100644 |
20709 |
--- a/kernel/gcov/base.c |
20710 |
+++ b/kernel/gcov/base.c |
20711 |
-@@ -108,11 +108,6 @@ void gcov_enable_events(void) |
20712 |
+@@ -114,11 +114,6 @@ void gcov_enable_events(void) |
20713 |
} |
20714 |
|
20715 |
#ifdef CONFIG_MODULES |
20716 |
@@ -87413,7 +90943,7 @@ index f45b75b..bfac6d5 100644 |
20717 |
/* Update list and generate events when modules are unloaded. */ |
20718 |
static int gcov_module_notifier(struct notifier_block *nb, unsigned long event, |
20719 |
void *data) |
20720 |
-@@ -127,7 +122,7 @@ static int gcov_module_notifier(struct notifier_block *nb, unsigned long event, |
20721 |
+@@ -133,7 +128,7 @@ static int gcov_module_notifier(struct notifier_block *nb, unsigned long event, |
20722 |
|
20723 |
/* Remove entries located in module from linked list. */ |
20724 |
while ((info = gcov_info_next(info))) { |
20725 |
@@ -87423,10 +90953,10 @@ index f45b75b..bfac6d5 100644 |
20726 |
if (gcov_events_enabled) |
20727 |
gcov_event(GCOV_REMOVE, info); |
20728 |
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c |
20729 |
-index e0501fe..312edd6 100644 |
20730 |
+index 3ab2899..c6ad010 100644 |
20731 |
--- a/kernel/hrtimer.c |
20732 |
+++ b/kernel/hrtimer.c |
20733 |
-@@ -1448,7 +1448,7 @@ void hrtimer_peek_ahead_timers(void) |
20734 |
+@@ -1449,7 +1449,7 @@ void hrtimer_peek_ahead_timers(void) |
20735 |
local_irq_restore(flags); |
20736 |
} |
20737 |
|
20738 |
@@ -87621,10 +91151,10 @@ index e30ac0f..3528cac 100644 |
20739 |
|
20740 |
/* |
20741 |
diff --git a/kernel/kexec.c b/kernel/kexec.c |
20742 |
-index 28c5706..bfc8388 100644 |
20743 |
+index 4b8f0c9..fffd0df 100644 |
20744 |
--- a/kernel/kexec.c |
20745 |
+++ b/kernel/kexec.c |
20746 |
-@@ -1046,7 +1046,8 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry, |
20747 |
+@@ -1045,7 +1045,8 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry, |
20748 |
compat_ulong_t, flags) |
20749 |
{ |
20750 |
struct compat_kexec_segment in; |
20751 |
@@ -87635,7 +91165,7 @@ index 28c5706..bfc8388 100644 |
20752 |
|
20753 |
/* Don't allow clients that don't understand the native |
20754 |
diff --git a/kernel/kmod.c b/kernel/kmod.c |
20755 |
-index 6b375af..eaff670 100644 |
20756 |
+index 8637e04..8b1d0d8 100644 |
20757 |
--- a/kernel/kmod.c |
20758 |
+++ b/kernel/kmod.c |
20759 |
@@ -75,7 +75,7 @@ static void free_modprobe_argv(struct subprocess_info *info) |
20760 |
@@ -87806,7 +91336,7 @@ index 6b375af..eaff670 100644 |
20761 |
if (info->cleanup) |
20762 |
(*info->cleanup)(info); |
20763 |
kfree(info); |
20764 |
-@@ -303,7 +374,7 @@ static int wait_for_helper(void *data) |
20765 |
+@@ -300,7 +371,7 @@ static int wait_for_helper(void *data) |
20766 |
* |
20767 |
* Thus the __user pointer cast is valid here. |
20768 |
*/ |
20769 |
@@ -87815,7 +91345,7 @@ index 6b375af..eaff670 100644 |
20770 |
|
20771 |
/* |
20772 |
* If ret is 0, either ____call_usermodehelper failed and the |
20773 |
-@@ -542,7 +613,12 @@ struct subprocess_info *call_usermodehelper_setup(char *path, char **argv, |
20774 |
+@@ -539,7 +610,12 @@ struct subprocess_info *call_usermodehelper_setup(char *path, char **argv, |
20775 |
goto out; |
20776 |
|
20777 |
INIT_WORK(&sub_info->work, __call_usermodehelper); |
20778 |
@@ -87828,7 +91358,7 @@ index 6b375af..eaff670 100644 |
20779 |
sub_info->argv = argv; |
20780 |
sub_info->envp = envp; |
20781 |
|
20782 |
-@@ -650,7 +726,7 @@ EXPORT_SYMBOL(call_usermodehelper); |
20783 |
+@@ -647,7 +723,7 @@ EXPORT_SYMBOL(call_usermodehelper); |
20784 |
static int proc_cap_handler(struct ctl_table *table, int write, |
20785 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
20786 |
{ |
20787 |
@@ -87838,7 +91368,7 @@ index 6b375af..eaff670 100644 |
20788 |
kernel_cap_t new_cap; |
20789 |
int err, i; |
20790 |
diff --git a/kernel/kprobes.c b/kernel/kprobes.c |
20791 |
-index ceeadfc..11c18b6 100644 |
20792 |
+index 734e9a7..0a313b8 100644 |
20793 |
--- a/kernel/kprobes.c |
20794 |
+++ b/kernel/kprobes.c |
20795 |
@@ -31,6 +31,9 @@ |
20796 |
@@ -87851,7 +91381,7 @@ index ceeadfc..11c18b6 100644 |
20797 |
#include <linux/kprobes.h> |
20798 |
#include <linux/hash.h> |
20799 |
#include <linux/init.h> |
20800 |
-@@ -135,12 +138,12 @@ enum kprobe_slot_state { |
20801 |
+@@ -122,12 +125,12 @@ enum kprobe_slot_state { |
20802 |
|
20803 |
static void *alloc_insn_page(void) |
20804 |
{ |
20805 |
@@ -87866,7 +91396,7 @@ index ceeadfc..11c18b6 100644 |
20806 |
} |
20807 |
|
20808 |
struct kprobe_insn_cache kprobe_insn_slots = { |
20809 |
-@@ -2151,11 +2154,11 @@ static void __kprobes report_probe(struct seq_file *pi, struct kprobe *p, |
20810 |
+@@ -2176,11 +2179,11 @@ static void report_probe(struct seq_file *pi, struct kprobe *p, |
20811 |
kprobe_type = "k"; |
20812 |
|
20813 |
if (sym) |
20814 |
@@ -87881,10 +91411,10 @@ index ceeadfc..11c18b6 100644 |
20815 |
|
20816 |
if (!pp) |
20817 |
diff --git a/kernel/ksysfs.c b/kernel/ksysfs.c |
20818 |
-index 2495a9b..071b906 100644 |
20819 |
+index 6683cce..daf8999 100644 |
20820 |
--- a/kernel/ksysfs.c |
20821 |
+++ b/kernel/ksysfs.c |
20822 |
-@@ -49,6 +49,8 @@ static ssize_t uevent_helper_store(struct kobject *kobj, |
20823 |
+@@ -50,6 +50,8 @@ static ssize_t uevent_helper_store(struct kobject *kobj, |
20824 |
{ |
20825 |
if (count+1 > UEVENT_HELPER_PATH_LEN) |
20826 |
return -ENOENT; |
20827 |
@@ -87893,7 +91423,7 @@ index 2495a9b..071b906 100644 |
20828 |
memcpy(uevent_helper, buf, count); |
20829 |
uevent_helper[count] = '\0'; |
20830 |
if (count && uevent_helper[count-1] == '\n') |
20831 |
-@@ -175,7 +177,7 @@ static ssize_t notes_read(struct file *filp, struct kobject *kobj, |
20832 |
+@@ -176,7 +178,7 @@ static ssize_t notes_read(struct file *filp, struct kobject *kobj, |
20833 |
return count; |
20834 |
} |
20835 |
|
20836 |
@@ -87984,19 +91514,19 @@ index ef43ac4..2720dfa 100644 |
20837 |
seq_printf(m, "%40s %14lu %29s %pS\n", |
20838 |
name, stats->contending_point[i], |
20839 |
diff --git a/kernel/locking/mcs_spinlock.c b/kernel/locking/mcs_spinlock.c |
20840 |
-index 838dc9e..760e158 100644 |
20841 |
+index be9ee15..39d6233 100644 |
20842 |
--- a/kernel/locking/mcs_spinlock.c |
20843 |
+++ b/kernel/locking/mcs_spinlock.c |
20844 |
-@@ -71,7 +71,7 @@ bool osq_lock(struct optimistic_spin_queue **lock) |
20845 |
- if (likely(prev == NULL)) |
20846 |
- return true; |
20847 |
+@@ -102,7 +102,7 @@ bool osq_lock(struct optimistic_spin_queue *lock) |
20848 |
|
20849 |
+ prev = decode_cpu(old); |
20850 |
+ node->prev = prev; |
20851 |
- ACCESS_ONCE(prev->next) = node; |
20852 |
+ ACCESS_ONCE_RW(prev->next) = node; |
20853 |
|
20854 |
/* |
20855 |
* Normally @prev is untouchable after the above store; because at that |
20856 |
-@@ -143,8 +143,8 @@ unqueue: |
20857 |
+@@ -174,8 +174,8 @@ unqueue: |
20858 |
* it will wait in Step-A. |
20859 |
*/ |
20860 |
|
20861 |
@@ -88007,8 +91537,8 @@ index 838dc9e..760e158 100644 |
20862 |
|
20863 |
return false; |
20864 |
} |
20865 |
-@@ -165,13 +165,13 @@ void osq_unlock(struct optimistic_spin_queue **lock) |
20866 |
- */ |
20867 |
+@@ -197,13 +197,13 @@ void osq_unlock(struct optimistic_spin_queue *lock) |
20868 |
+ node = this_cpu_ptr(&osq_node); |
20869 |
next = xchg(&node->next, NULL); |
20870 |
if (next) { |
20871 |
- ACCESS_ONCE(next->locked) = 1; |
20872 |
@@ -88024,7 +91554,7 @@ index 838dc9e..760e158 100644 |
20873 |
|
20874 |
#endif |
20875 |
diff --git a/kernel/locking/mcs_spinlock.h b/kernel/locking/mcs_spinlock.h |
20876 |
-index a2dbac4..e02a34a 100644 |
20877 |
+index 74356dc..48dd5e1 100644 |
20878 |
--- a/kernel/locking/mcs_spinlock.h |
20879 |
+++ b/kernel/locking/mcs_spinlock.h |
20880 |
@@ -81,7 +81,7 @@ void mcs_spin_lock(struct mcs_spinlock **lock, struct mcs_spinlock *node) |
20881 |
@@ -88085,7 +91615,7 @@ index 0799fd3..d06ae3b 100644 |
20882 |
extern void debug_mutex_init(struct mutex *lock, const char *name, |
20883 |
struct lock_class_key *key); |
20884 |
diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c |
20885 |
-index bc73d33..6f308aa 100644 |
20886 |
+index acca2c1..ddeaea8 100644 |
20887 |
--- a/kernel/locking/mutex.c |
20888 |
+++ b/kernel/locking/mutex.c |
20889 |
@@ -490,7 +490,7 @@ slowpath: |
20890 |
@@ -88210,7 +91740,7 @@ index 1d96dd0..994ff19 100644 |
20891 |
|
20892 |
default: |
20893 |
diff --git a/kernel/module.c b/kernel/module.c |
20894 |
-index 079c461..741f79c 100644 |
20895 |
+index 81e727c..a8ea6f9 100644 |
20896 |
--- a/kernel/module.c |
20897 |
+++ b/kernel/module.c |
20898 |
@@ -61,6 +61,7 @@ |
20899 |
@@ -88849,8 +92379,26 @@ index 079c461..741f79c 100644 |
20900 |
|
20901 |
/* Copy relocated percpu area over. */ |
20902 |
percpu_modcopy(mod, (void *)info->sechdrs[info->index.pcpu].sh_addr, |
20903 |
-@@ -3024,16 +3158,16 @@ static int do_init_module(struct module *mod) |
20904 |
- MODULE_STATE_COMING, mod); |
20905 |
+@@ -3079,11 +3213,12 @@ static int do_init_module(struct module *mod) |
20906 |
+ mod->strtab = mod->core_strtab; |
20907 |
+ #endif |
20908 |
+ unset_module_init_ro_nx(mod); |
20909 |
+- module_free(mod, mod->module_init); |
20910 |
+- mod->module_init = NULL; |
20911 |
+- mod->init_size = 0; |
20912 |
+- mod->init_ro_size = 0; |
20913 |
+- mod->init_text_size = 0; |
20914 |
++ module_free(mod, mod->module_init_rw); |
20915 |
++ module_free_exec(mod, mod->module_init_rx); |
20916 |
++ mod->module_init_rw = NULL; |
20917 |
++ mod->module_init_rx = NULL; |
20918 |
++ mod->init_size_rw = 0; |
20919 |
++ mod->init_size_rx = 0; |
20920 |
+ mutex_unlock(&module_mutex); |
20921 |
+ wake_up_all(&module_wq); |
20922 |
+ |
20923 |
+@@ -3151,16 +3286,16 @@ static int complete_formation(struct module *mod, struct load_info *info) |
20924 |
+ module_bug_finalize(info->hdr, info->sechdrs, mod); |
20925 |
|
20926 |
/* Set RO and NX regions for core */ |
20927 |
- set_section_ro_nx(mod->module_core, |
20928 |
@@ -88872,27 +92420,9 @@ index 079c461..741f79c 100644 |
20929 |
+ mod->init_size_rx, |
20930 |
+ mod->init_size_rx); |
20931 |
|
20932 |
- do_mod_ctors(mod); |
20933 |
- /* Start the module */ |
20934 |
-@@ -3094,11 +3228,12 @@ static int do_init_module(struct module *mod) |
20935 |
- mod->strtab = mod->core_strtab; |
20936 |
- #endif |
20937 |
- unset_module_init_ro_nx(mod); |
20938 |
-- module_free(mod, mod->module_init); |
20939 |
-- mod->module_init = NULL; |
20940 |
-- mod->init_size = 0; |
20941 |
-- mod->init_ro_size = 0; |
20942 |
-- mod->init_text_size = 0; |
20943 |
-+ module_free(mod, mod->module_init_rw); |
20944 |
-+ module_free_exec(mod, mod->module_init_rx); |
20945 |
-+ mod->module_init_rw = NULL; |
20946 |
-+ mod->module_init_rx = NULL; |
20947 |
-+ mod->init_size_rw = 0; |
20948 |
-+ mod->init_size_rx = 0; |
20949 |
- mutex_unlock(&module_mutex); |
20950 |
- wake_up_all(&module_wq); |
20951 |
- |
20952 |
-@@ -3241,9 +3376,38 @@ static int load_module(struct load_info *info, const char __user *uargs, |
20953 |
+ /* Mark state as coming so strong_try_module_get() ignores us, |
20954 |
+ * but kallsyms etc. can see us. */ |
20955 |
+@@ -3244,9 +3379,38 @@ static int load_module(struct load_info *info, const char __user *uargs, |
20956 |
if (err) |
20957 |
goto free_unload; |
20958 |
|
20959 |
@@ -88931,7 +92461,7 @@ index 079c461..741f79c 100644 |
20960 |
/* Fix up syms, so that st_value is a pointer to location. */ |
20961 |
err = simplify_symbols(mod, info); |
20962 |
if (err < 0) |
20963 |
-@@ -3259,13 +3423,6 @@ static int load_module(struct load_info *info, const char __user *uargs, |
20964 |
+@@ -3262,13 +3426,6 @@ static int load_module(struct load_info *info, const char __user *uargs, |
20965 |
|
20966 |
flush_module_icache(mod); |
20967 |
|
20968 |
@@ -88945,7 +92475,7 @@ index 079c461..741f79c 100644 |
20969 |
dynamic_debug_setup(info->debug, info->num_debug); |
20970 |
|
20971 |
/* Ftrace init must be called in the MODULE_STATE_UNFORMED state */ |
20972 |
-@@ -3303,11 +3460,10 @@ static int load_module(struct load_info *info, const char __user *uargs, |
20973 |
+@@ -3311,11 +3468,10 @@ static int load_module(struct load_info *info, const char __user *uargs, |
20974 |
ddebug_cleanup: |
20975 |
dynamic_debug_remove(info->debug); |
20976 |
synchronize_sched(); |
20977 |
@@ -88958,7 +92488,7 @@ index 079c461..741f79c 100644 |
20978 |
free_unload: |
20979 |
module_unload_free(mod); |
20980 |
unlink_mod: |
20981 |
-@@ -3390,10 +3546,16 @@ static const char *get_ksymbol(struct module *mod, |
20982 |
+@@ -3398,10 +3554,16 @@ static const char *get_ksymbol(struct module *mod, |
20983 |
unsigned long nextval; |
20984 |
|
20985 |
/* At worse, next value is at end of module */ |
20986 |
@@ -88978,7 +92508,7 @@ index 079c461..741f79c 100644 |
20987 |
|
20988 |
/* Scan for closest preceding symbol, and next symbol. (ELF |
20989 |
starts real symbols at 1). */ |
20990 |
-@@ -3644,7 +3806,7 @@ static int m_show(struct seq_file *m, void *p) |
20991 |
+@@ -3652,7 +3814,7 @@ static int m_show(struct seq_file *m, void *p) |
20992 |
return 0; |
20993 |
|
20994 |
seq_printf(m, "%s %u", |
20995 |
@@ -88987,7 +92517,7 @@ index 079c461..741f79c 100644 |
20996 |
print_unload_info(m, mod); |
20997 |
|
20998 |
/* Informative for users. */ |
20999 |
-@@ -3653,7 +3815,7 @@ static int m_show(struct seq_file *m, void *p) |
21000 |
+@@ -3661,7 +3823,7 @@ static int m_show(struct seq_file *m, void *p) |
21001 |
mod->state == MODULE_STATE_COMING ? "Loading": |
21002 |
"Live"); |
21003 |
/* Used by oprofile and other similar tools. */ |
21004 |
@@ -88996,7 +92526,7 @@ index 079c461..741f79c 100644 |
21005 |
|
21006 |
/* Taints info */ |
21007 |
if (mod->taints) |
21008 |
-@@ -3689,7 +3851,17 @@ static const struct file_operations proc_modules_operations = { |
21009 |
+@@ -3697,7 +3859,17 @@ static const struct file_operations proc_modules_operations = { |
21010 |
|
21011 |
static int __init proc_modules_init(void) |
21012 |
{ |
21013 |
@@ -89014,7 +92544,7 @@ index 079c461..741f79c 100644 |
21014 |
return 0; |
21015 |
} |
21016 |
module_init(proc_modules_init); |
21017 |
-@@ -3750,14 +3922,14 @@ struct module *__module_address(unsigned long addr) |
21018 |
+@@ -3758,14 +3930,14 @@ struct module *__module_address(unsigned long addr) |
21019 |
{ |
21020 |
struct module *mod; |
21021 |
|
21022 |
@@ -89032,7 +92562,7 @@ index 079c461..741f79c 100644 |
21023 |
return mod; |
21024 |
} |
21025 |
return NULL; |
21026 |
-@@ -3792,11 +3964,20 @@ bool is_module_text_address(unsigned long addr) |
21027 |
+@@ -3800,11 +3972,20 @@ bool is_module_text_address(unsigned long addr) |
21028 |
*/ |
21029 |
struct module *__module_text_address(unsigned long addr) |
21030 |
{ |
21031 |
@@ -89057,7 +92587,7 @@ index 079c461..741f79c 100644 |
21032 |
} |
21033 |
return mod; |
21034 |
diff --git a/kernel/notifier.c b/kernel/notifier.c |
21035 |
-index db4c8b0..ad011c5 100644 |
21036 |
+index 4803da6..1c5eea6 100644 |
21037 |
--- a/kernel/notifier.c |
21038 |
+++ b/kernel/notifier.c |
21039 |
@@ -5,6 +5,7 @@ |
21040 |
@@ -89135,10 +92665,10 @@ index 161402f..598814c 100644 |
21041 |
atomic_set(&pd->refcnt, 0); |
21042 |
pd->pinst = pinst; |
21043 |
diff --git a/kernel/panic.c b/kernel/panic.c |
21044 |
-index d02fa9f..9faec0a 100644 |
21045 |
+index 62e16ce..9db5047b 100644 |
21046 |
--- a/kernel/panic.c |
21047 |
+++ b/kernel/panic.c |
21048 |
-@@ -52,7 +52,7 @@ EXPORT_SYMBOL(panic_blink); |
21049 |
+@@ -53,7 +53,7 @@ EXPORT_SYMBOL(panic_blink); |
21050 |
/* |
21051 |
* Stop ourself in panic -- architecture code may override this |
21052 |
*/ |
21053 |
@@ -89147,7 +92677,7 @@ index d02fa9f..9faec0a 100644 |
21054 |
{ |
21055 |
while (1) |
21056 |
cpu_relax(); |
21057 |
-@@ -408,7 +408,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller, |
21058 |
+@@ -420,7 +420,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller, |
21059 |
disable_trace_on_warning(); |
21060 |
|
21061 |
pr_warn("------------[ cut here ]------------\n"); |
21062 |
@@ -89156,7 +92686,7 @@ index d02fa9f..9faec0a 100644 |
21063 |
raw_smp_processor_id(), current->pid, file, line, caller); |
21064 |
|
21065 |
if (args) |
21066 |
-@@ -462,7 +462,8 @@ EXPORT_SYMBOL(warn_slowpath_null); |
21067 |
+@@ -474,7 +474,8 @@ EXPORT_SYMBOL(warn_slowpath_null); |
21068 |
*/ |
21069 |
__visible void __stack_chk_fail(void) |
21070 |
{ |
21071 |
@@ -89373,7 +92903,7 @@ index 424c2d4..679242f 100644 |
21072 |
} |
21073 |
|
21074 |
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig |
21075 |
-index 2fac9cc..56fef29 100644 |
21076 |
+index 9a83d78..128bfc0 100644 |
21077 |
--- a/kernel/power/Kconfig |
21078 |
+++ b/kernel/power/Kconfig |
21079 |
@@ -24,6 +24,8 @@ config HIBERNATE_CALLBACKS |
21080 |
@@ -89386,10 +92916,10 @@ index 2fac9cc..56fef29 100644 |
21081 |
select LZO_COMPRESS |
21082 |
select LZO_DECOMPRESS |
21083 |
diff --git a/kernel/power/process.c b/kernel/power/process.c |
21084 |
-index 14f9a8d..98ee610 100644 |
21085 |
+index 4ee194e..925778f 100644 |
21086 |
--- a/kernel/power/process.c |
21087 |
+++ b/kernel/power/process.c |
21088 |
-@@ -34,6 +34,7 @@ static int try_to_freeze_tasks(bool user_only) |
21089 |
+@@ -35,6 +35,7 @@ static int try_to_freeze_tasks(bool user_only) |
21090 |
unsigned int elapsed_msecs; |
21091 |
bool wakeup = false; |
21092 |
int sleep_usecs = USEC_PER_MSEC; |
21093 |
@@ -89397,7 +92927,7 @@ index 14f9a8d..98ee610 100644 |
21094 |
|
21095 |
do_gettimeofday(&start); |
21096 |
|
21097 |
-@@ -44,13 +45,20 @@ static int try_to_freeze_tasks(bool user_only) |
21098 |
+@@ -45,13 +46,20 @@ static int try_to_freeze_tasks(bool user_only) |
21099 |
|
21100 |
while (true) { |
21101 |
todo = 0; |
21102 |
@@ -89419,7 +92949,7 @@ index 14f9a8d..98ee610 100644 |
21103 |
} while_each_thread(g, p); |
21104 |
read_unlock(&tasklist_lock); |
21105 |
|
21106 |
-@@ -59,7 +67,7 @@ static int try_to_freeze_tasks(bool user_only) |
21107 |
+@@ -60,7 +68,7 @@ static int try_to_freeze_tasks(bool user_only) |
21108 |
todo += wq_busy; |
21109 |
} |
21110 |
|
21111 |
@@ -89429,10 +92959,10 @@ index 14f9a8d..98ee610 100644 |
21112 |
|
21113 |
if (pm_wakeup_pending()) { |
21114 |
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c |
21115 |
-index 63594be..8444e0f 100644 |
21116 |
+index 13e839d..8a71f12 100644 |
21117 |
--- a/kernel/printk/printk.c |
21118 |
+++ b/kernel/printk/printk.c |
21119 |
-@@ -385,6 +385,11 @@ static int check_syslog_permissions(int type, bool from_file) |
21120 |
+@@ -480,6 +480,11 @@ static int check_syslog_permissions(int type, bool from_file) |
21121 |
if (from_file && type != SYSLOG_ACTION_OPEN) |
21122 |
return 0; |
21123 |
|
21124 |
@@ -89445,7 +92975,7 @@ index 63594be..8444e0f 100644 |
21125 |
if (capable(CAP_SYSLOG)) |
21126 |
return 0; |
21127 |
diff --git a/kernel/profile.c b/kernel/profile.c |
21128 |
-index cb980f0..ccd8782 100644 |
21129 |
+index 54bf5ba..df6e0a2 100644 |
21130 |
--- a/kernel/profile.c |
21131 |
+++ b/kernel/profile.c |
21132 |
@@ -37,7 +37,7 @@ struct profile_hit { |
21133 |
@@ -89457,7 +92987,7 @@ index cb980f0..ccd8782 100644 |
21134 |
static unsigned long prof_len, prof_shift; |
21135 |
|
21136 |
int prof_on __read_mostly; |
21137 |
-@@ -260,7 +260,7 @@ static void profile_flip_buffers(void) |
21138 |
+@@ -256,7 +256,7 @@ static void profile_flip_buffers(void) |
21139 |
hits[i].pc = 0; |
21140 |
continue; |
21141 |
} |
21142 |
@@ -89466,7 +92996,7 @@ index cb980f0..ccd8782 100644 |
21143 |
hits[i].hits = hits[i].pc = 0; |
21144 |
} |
21145 |
} |
21146 |
-@@ -321,9 +321,9 @@ static void do_profile_hits(int type, void *__pc, unsigned int nr_hits) |
21147 |
+@@ -317,9 +317,9 @@ static void do_profile_hits(int type, void *__pc, unsigned int nr_hits) |
21148 |
* Add the current hit(s) and flush the write-queue out |
21149 |
* to the global buffer: |
21150 |
*/ |
21151 |
@@ -89478,7 +93008,7 @@ index cb980f0..ccd8782 100644 |
21152 |
hits[i].pc = hits[i].hits = 0; |
21153 |
} |
21154 |
out: |
21155 |
-@@ -398,7 +398,7 @@ static void do_profile_hits(int type, void *__pc, unsigned int nr_hits) |
21156 |
+@@ -394,7 +394,7 @@ static void do_profile_hits(int type, void *__pc, unsigned int nr_hits) |
21157 |
{ |
21158 |
unsigned long pc; |
21159 |
pc = ((unsigned long)__pc - (unsigned long)_stext) >> prof_shift; |
21160 |
@@ -89487,7 +93017,7 @@ index cb980f0..ccd8782 100644 |
21161 |
} |
21162 |
#endif /* !CONFIG_SMP */ |
21163 |
|
21164 |
-@@ -494,7 +494,7 @@ read_profile(struct file *file, char __user *buf, size_t count, loff_t *ppos) |
21165 |
+@@ -490,7 +490,7 @@ read_profile(struct file *file, char __user *buf, size_t count, loff_t *ppos) |
21166 |
return -EFAULT; |
21167 |
buf++; p++; count--; read++; |
21168 |
} |
21169 |
@@ -89496,7 +93026,7 @@ index cb980f0..ccd8782 100644 |
21170 |
if (copy_to_user(buf, (void *)pnt, count)) |
21171 |
return -EFAULT; |
21172 |
read += count; |
21173 |
-@@ -525,7 +525,7 @@ static ssize_t write_profile(struct file *file, const char __user *buf, |
21174 |
+@@ -521,7 +521,7 @@ static ssize_t write_profile(struct file *file, const char __user *buf, |
21175 |
} |
21176 |
#endif |
21177 |
profile_discard_flip_buffers(); |
21178 |
@@ -89601,10 +93131,10 @@ index adf9862..9d86345 100644 |
21179 |
} |
21180 |
|
21181 |
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c |
21182 |
-index bd30bc6..dce23da 100644 |
21183 |
+index 948a769..5ca842b 100644 |
21184 |
--- a/kernel/rcu/rcutorture.c |
21185 |
+++ b/kernel/rcu/rcutorture.c |
21186 |
-@@ -122,12 +122,12 @@ static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], |
21187 |
+@@ -124,12 +124,12 @@ static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], |
21188 |
rcu_torture_count) = { 0 }; |
21189 |
static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1], |
21190 |
rcu_torture_batch) = { 0 }; |
21191 |
@@ -89623,7 +93153,7 @@ index bd30bc6..dce23da 100644 |
21192 |
static long n_rcu_torture_barrier_error; |
21193 |
static long n_rcu_torture_boost_ktrerror; |
21194 |
static long n_rcu_torture_boost_rterror; |
21195 |
-@@ -186,11 +186,11 @@ rcu_torture_alloc(void) |
21196 |
+@@ -200,11 +200,11 @@ rcu_torture_alloc(void) |
21197 |
|
21198 |
spin_lock_bh(&rcu_torture_lock); |
21199 |
if (list_empty(&rcu_torture_freelist)) { |
21200 |
@@ -89637,7 +93167,7 @@ index bd30bc6..dce23da 100644 |
21201 |
p = rcu_torture_freelist.next; |
21202 |
list_del_init(p); |
21203 |
spin_unlock_bh(&rcu_torture_lock); |
21204 |
-@@ -203,7 +203,7 @@ rcu_torture_alloc(void) |
21205 |
+@@ -217,7 +217,7 @@ rcu_torture_alloc(void) |
21206 |
static void |
21207 |
rcu_torture_free(struct rcu_torture *p) |
21208 |
{ |
21209 |
@@ -89646,7 +93176,7 @@ index bd30bc6..dce23da 100644 |
21210 |
spin_lock_bh(&rcu_torture_lock); |
21211 |
list_add_tail(&p->rtort_free, &rcu_torture_freelist); |
21212 |
spin_unlock_bh(&rcu_torture_lock); |
21213 |
-@@ -287,7 +287,7 @@ rcu_torture_cb(struct rcu_head *p) |
21214 |
+@@ -301,7 +301,7 @@ rcu_torture_pipe_update_one(struct rcu_torture *rp) |
21215 |
i = rp->rtort_pipe_count; |
21216 |
if (i > RCU_TORTURE_PIPE_LEN) |
21217 |
i = RCU_TORTURE_PIPE_LEN; |
21218 |
@@ -89654,26 +93184,17 @@ index bd30bc6..dce23da 100644 |
21219 |
+ atomic_inc_unchecked(&rcu_torture_wcount[i]); |
21220 |
if (++rp->rtort_pipe_count >= RCU_TORTURE_PIPE_LEN) { |
21221 |
rp->rtort_mbtest = 0; |
21222 |
- rcu_torture_free(rp); |
21223 |
-@@ -714,7 +714,7 @@ rcu_torture_writer(void *arg) |
21224 |
+ return true; |
21225 |
+@@ -808,7 +808,7 @@ rcu_torture_writer(void *arg) |
21226 |
i = old_rp->rtort_pipe_count; |
21227 |
if (i > RCU_TORTURE_PIPE_LEN) |
21228 |
i = RCU_TORTURE_PIPE_LEN; |
21229 |
- atomic_inc(&rcu_torture_wcount[i]); |
21230 |
+ atomic_inc_unchecked(&rcu_torture_wcount[i]); |
21231 |
old_rp->rtort_pipe_count++; |
21232 |
- if (gp_normal == gp_exp) |
21233 |
- exp = !!(torture_random(&rand) & 0x80); |
21234 |
-@@ -732,7 +732,7 @@ rcu_torture_writer(void *arg) |
21235 |
- i = rp->rtort_pipe_count; |
21236 |
- if (i > RCU_TORTURE_PIPE_LEN) |
21237 |
- i = RCU_TORTURE_PIPE_LEN; |
21238 |
-- atomic_inc(&rcu_torture_wcount[i]); |
21239 |
-+ atomic_inc_unchecked(&rcu_torture_wcount[i]); |
21240 |
- if (++rp->rtort_pipe_count >= |
21241 |
- RCU_TORTURE_PIPE_LEN) { |
21242 |
- rp->rtort_mbtest = 0; |
21243 |
-@@ -825,7 +825,7 @@ static void rcu_torture_timer(unsigned long unused) |
21244 |
+ switch (synctype[torture_random(&rand) % nsynctypes]) { |
21245 |
+ case RTWS_DEF_FREE: |
21246 |
+@@ -926,7 +926,7 @@ static void rcu_torture_timer(unsigned long unused) |
21247 |
return; |
21248 |
} |
21249 |
if (p->rtort_mbtest == 0) |
21250 |
@@ -89682,7 +93203,7 @@ index bd30bc6..dce23da 100644 |
21251 |
spin_lock(&rand_lock); |
21252 |
cur_ops->read_delay(&rand); |
21253 |
n_rcu_torture_timers++; |
21254 |
-@@ -895,7 +895,7 @@ rcu_torture_reader(void *arg) |
21255 |
+@@ -996,7 +996,7 @@ rcu_torture_reader(void *arg) |
21256 |
continue; |
21257 |
} |
21258 |
if (p->rtort_mbtest == 0) |
21259 |
@@ -89691,7 +93212,7 @@ index bd30bc6..dce23da 100644 |
21260 |
cur_ops->read_delay(&rand); |
21261 |
preempt_disable(); |
21262 |
pipe_count = p->rtort_pipe_count; |
21263 |
-@@ -950,15 +950,15 @@ rcu_torture_printk(char *page) |
21264 |
+@@ -1054,15 +1054,15 @@ rcu_torture_printk(char *page) |
21265 |
} |
21266 |
page += sprintf(page, "%s%s ", torture_type, TORTURE_FLAG); |
21267 |
page += sprintf(page, |
21268 |
@@ -89712,7 +93233,7 @@ index bd30bc6..dce23da 100644 |
21269 |
n_rcu_torture_boost_ktrerror, |
21270 |
n_rcu_torture_boost_rterror); |
21271 |
page += sprintf(page, "rtbf: %ld rtb: %ld nt: %ld ", |
21272 |
-@@ -971,14 +971,14 @@ rcu_torture_printk(char *page) |
21273 |
+@@ -1075,14 +1075,14 @@ rcu_torture_printk(char *page) |
21274 |
n_barrier_attempts, |
21275 |
n_rcu_torture_barrier_error); |
21276 |
page += sprintf(page, "\n%s%s ", torture_type, TORTURE_FLAG); |
21277 |
@@ -89729,7 +93250,7 @@ index bd30bc6..dce23da 100644 |
21278 |
WARN_ON_ONCE(1); |
21279 |
} |
21280 |
page += sprintf(page, "Reader Pipe: "); |
21281 |
-@@ -992,7 +992,7 @@ rcu_torture_printk(char *page) |
21282 |
+@@ -1096,7 +1096,7 @@ rcu_torture_printk(char *page) |
21283 |
page += sprintf(page, "Free-Block Circulation: "); |
21284 |
for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) { |
21285 |
page += sprintf(page, " %d", |
21286 |
@@ -89738,7 +93259,7 @@ index bd30bc6..dce23da 100644 |
21287 |
} |
21288 |
page += sprintf(page, "\n"); |
21289 |
if (cur_ops->stats) |
21290 |
-@@ -1341,7 +1341,7 @@ rcu_torture_cleanup(void) |
21291 |
+@@ -1461,7 +1461,7 @@ rcu_torture_cleanup(void) |
21292 |
|
21293 |
rcu_torture_stats_print(); /* -After- the stats thread is stopped! */ |
21294 |
|
21295 |
@@ -89747,7 +93268,7 @@ index bd30bc6..dce23da 100644 |
21296 |
rcu_torture_print_module_parms(cur_ops, "End of test: FAILURE"); |
21297 |
else if (torture_onoff_failures()) |
21298 |
rcu_torture_print_module_parms(cur_ops, |
21299 |
-@@ -1460,18 +1460,18 @@ rcu_torture_init(void) |
21300 |
+@@ -1584,18 +1584,18 @@ rcu_torture_init(void) |
21301 |
|
21302 |
rcu_torture_current = NULL; |
21303 |
rcu_torture_current_version = 0; |
21304 |
@@ -89810,36 +93331,70 @@ index d9efcc1..ea543e9 100644 |
21305 |
{ |
21306 |
__rcu_process_callbacks(&rcu_sched_ctrlblk); |
21307 |
__rcu_process_callbacks(&rcu_bh_ctrlblk); |
21308 |
+diff --git a/kernel/rcu/tiny_plugin.h b/kernel/rcu/tiny_plugin.h |
21309 |
+index 858c565..7efd915 100644 |
21310 |
+--- a/kernel/rcu/tiny_plugin.h |
21311 |
++++ b/kernel/rcu/tiny_plugin.h |
21312 |
+@@ -152,17 +152,17 @@ static void check_cpu_stall(struct rcu_ctrlblk *rcp) |
21313 |
+ dump_stack(); |
21314 |
+ } |
21315 |
+ if (*rcp->curtail && ULONG_CMP_GE(j, js)) |
21316 |
+- ACCESS_ONCE(rcp->jiffies_stall) = jiffies + |
21317 |
++ ACCESS_ONCE_RW(rcp->jiffies_stall) = jiffies + |
21318 |
+ 3 * rcu_jiffies_till_stall_check() + 3; |
21319 |
+ else if (ULONG_CMP_GE(j, js)) |
21320 |
+- ACCESS_ONCE(rcp->jiffies_stall) = jiffies + rcu_jiffies_till_stall_check(); |
21321 |
++ ACCESS_ONCE_RW(rcp->jiffies_stall) = jiffies + rcu_jiffies_till_stall_check(); |
21322 |
+ } |
21323 |
+ |
21324 |
+ static void reset_cpu_stall_ticks(struct rcu_ctrlblk *rcp) |
21325 |
+ { |
21326 |
+ rcp->ticks_this_gp = 0; |
21327 |
+ rcp->gp_start = jiffies; |
21328 |
+- ACCESS_ONCE(rcp->jiffies_stall) = jiffies + rcu_jiffies_till_stall_check(); |
21329 |
++ ACCESS_ONCE_RW(rcp->jiffies_stall) = jiffies + rcu_jiffies_till_stall_check(); |
21330 |
+ } |
21331 |
+ |
21332 |
+ static void check_cpu_stalls(void) |
21333 |
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c |
21334 |
-index 0c47e30..a084591 100644 |
21335 |
+index 625d0b0..0bce4d6 100644 |
21336 |
--- a/kernel/rcu/tree.c |
21337 |
+++ b/kernel/rcu/tree.c |
21338 |
-@@ -388,9 +388,9 @@ static void rcu_eqs_enter_common(struct rcu_dynticks *rdtp, long long oldval, |
21339 |
+@@ -263,7 +263,7 @@ static void rcu_momentary_dyntick_idle(void) |
21340 |
+ */ |
21341 |
+ rdtp = this_cpu_ptr(&rcu_dynticks); |
21342 |
+ smp_mb__before_atomic(); /* Earlier stuff before QS. */ |
21343 |
+- atomic_add(2, &rdtp->dynticks); /* QS. */ |
21344 |
++ atomic_add_unchecked(2, &rdtp->dynticks); /* QS. */ |
21345 |
+ smp_mb__after_atomic(); /* Later stuff after QS. */ |
21346 |
+ break; |
21347 |
+ } |
21348 |
+@@ -523,9 +523,9 @@ static void rcu_eqs_enter_common(struct rcu_dynticks *rdtp, long long oldval, |
21349 |
rcu_prepare_for_idle(smp_processor_id()); |
21350 |
/* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */ |
21351 |
- smp_mb__before_atomic_inc(); /* See above. */ |
21352 |
+ smp_mb__before_atomic(); /* See above. */ |
21353 |
- atomic_inc(&rdtp->dynticks); |
21354 |
+ atomic_inc_unchecked(&rdtp->dynticks); |
21355 |
- smp_mb__after_atomic_inc(); /* Force ordering with next sojourn. */ |
21356 |
+ smp_mb__after_atomic(); /* Force ordering with next sojourn. */ |
21357 |
- WARN_ON_ONCE(atomic_read(&rdtp->dynticks) & 0x1); |
21358 |
+ WARN_ON_ONCE(atomic_read_unchecked(&rdtp->dynticks) & 0x1); |
21359 |
|
21360 |
/* |
21361 |
* It is illegal to enter an extended quiescent state while |
21362 |
-@@ -508,10 +508,10 @@ static void rcu_eqs_exit_common(struct rcu_dynticks *rdtp, long long oldval, |
21363 |
+@@ -643,10 +643,10 @@ static void rcu_eqs_exit_common(struct rcu_dynticks *rdtp, long long oldval, |
21364 |
int user) |
21365 |
{ |
21366 |
- smp_mb__before_atomic_inc(); /* Force ordering w/previous sojourn. */ |
21367 |
+ smp_mb__before_atomic(); /* Force ordering w/previous sojourn. */ |
21368 |
- atomic_inc(&rdtp->dynticks); |
21369 |
+ atomic_inc_unchecked(&rdtp->dynticks); |
21370 |
/* CPUs seeing atomic_inc() must see later RCU read-side crit sects */ |
21371 |
- smp_mb__after_atomic_inc(); /* See above. */ |
21372 |
+ smp_mb__after_atomic(); /* See above. */ |
21373 |
- WARN_ON_ONCE(!(atomic_read(&rdtp->dynticks) & 0x1)); |
21374 |
+ WARN_ON_ONCE(!(atomic_read_unchecked(&rdtp->dynticks) & 0x1)); |
21375 |
rcu_cleanup_after_idle(smp_processor_id()); |
21376 |
trace_rcu_dyntick(TPS("End"), oldval, rdtp->dynticks_nesting); |
21377 |
if (!user && !is_idle_task(current)) { |
21378 |
-@@ -632,14 +632,14 @@ void rcu_nmi_enter(void) |
21379 |
+@@ -767,14 +767,14 @@ void rcu_nmi_enter(void) |
21380 |
struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks); |
21381 |
|
21382 |
if (rdtp->dynticks_nmi_nesting == 0 && |
21383 |
@@ -89847,29 +93402,29 @@ index 0c47e30..a084591 100644 |
21384 |
+ (atomic_read_unchecked(&rdtp->dynticks) & 0x1)) |
21385 |
return; |
21386 |
rdtp->dynticks_nmi_nesting++; |
21387 |
- smp_mb__before_atomic_inc(); /* Force delay from prior write. */ |
21388 |
+ smp_mb__before_atomic(); /* Force delay from prior write. */ |
21389 |
- atomic_inc(&rdtp->dynticks); |
21390 |
+ atomic_inc_unchecked(&rdtp->dynticks); |
21391 |
/* CPUs seeing atomic_inc() must see later RCU read-side crit sects */ |
21392 |
- smp_mb__after_atomic_inc(); /* See above. */ |
21393 |
+ smp_mb__after_atomic(); /* See above. */ |
21394 |
- WARN_ON_ONCE(!(atomic_read(&rdtp->dynticks) & 0x1)); |
21395 |
+ WARN_ON_ONCE(!(atomic_read_unchecked(&rdtp->dynticks) & 0x1)); |
21396 |
} |
21397 |
|
21398 |
/** |
21399 |
-@@ -658,9 +658,9 @@ void rcu_nmi_exit(void) |
21400 |
+@@ -793,9 +793,9 @@ void rcu_nmi_exit(void) |
21401 |
return; |
21402 |
/* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */ |
21403 |
- smp_mb__before_atomic_inc(); /* See above. */ |
21404 |
+ smp_mb__before_atomic(); /* See above. */ |
21405 |
- atomic_inc(&rdtp->dynticks); |
21406 |
+ atomic_inc_unchecked(&rdtp->dynticks); |
21407 |
- smp_mb__after_atomic_inc(); /* Force delay to next write. */ |
21408 |
+ smp_mb__after_atomic(); /* Force delay to next write. */ |
21409 |
- WARN_ON_ONCE(atomic_read(&rdtp->dynticks) & 0x1); |
21410 |
+ WARN_ON_ONCE(atomic_read_unchecked(&rdtp->dynticks) & 0x1); |
21411 |
} |
21412 |
|
21413 |
/** |
21414 |
-@@ -673,7 +673,7 @@ void rcu_nmi_exit(void) |
21415 |
+@@ -808,7 +808,7 @@ void rcu_nmi_exit(void) |
21416 |
*/ |
21417 |
bool notrace __rcu_is_watching(void) |
21418 |
{ |
21419 |
@@ -89878,17 +93433,17 @@ index 0c47e30..a084591 100644 |
21420 |
} |
21421 |
|
21422 |
/** |
21423 |
-@@ -756,7 +756,7 @@ static int rcu_is_cpu_rrupt_from_idle(void) |
21424 |
+@@ -891,7 +891,7 @@ static int rcu_is_cpu_rrupt_from_idle(void) |
21425 |
static int dyntick_save_progress_counter(struct rcu_data *rdp, |
21426 |
bool *isidle, unsigned long *maxj) |
21427 |
{ |
21428 |
- rdp->dynticks_snap = atomic_add_return(0, &rdp->dynticks->dynticks); |
21429 |
+ rdp->dynticks_snap = atomic_add_return_unchecked(0, &rdp->dynticks->dynticks); |
21430 |
rcu_sysidle_check_cpu(rdp, isidle, maxj); |
21431 |
- return (rdp->dynticks_snap & 0x1) == 0; |
21432 |
- } |
21433 |
-@@ -779,7 +779,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp, |
21434 |
- unsigned int curr; |
21435 |
+ if ((rdp->dynticks_snap & 0x1) == 0) { |
21436 |
+ trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, TPS("dti")); |
21437 |
+@@ -920,7 +920,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp, |
21438 |
+ int *rcrmp; |
21439 |
unsigned int snap; |
21440 |
|
21441 |
- curr = (unsigned int)atomic_add_return(0, &rdp->dynticks->dynticks); |
21442 |
@@ -89896,7 +93451,65 @@ index 0c47e30..a084591 100644 |
21443 |
snap = (unsigned int)rdp->dynticks_snap; |
21444 |
|
21445 |
/* |
21446 |
-@@ -1449,9 +1449,9 @@ static int rcu_gp_init(struct rcu_state *rsp) |
21447 |
+@@ -983,10 +983,10 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp, |
21448 |
+ rdp->rsp->gp_start + jiffies_till_sched_qs) || |
21449 |
+ ULONG_CMP_GE(jiffies, rdp->rsp->jiffies_resched)) { |
21450 |
+ if (!(ACCESS_ONCE(*rcrmp) & rdp->rsp->flavor_mask)) { |
21451 |
+- ACCESS_ONCE(rdp->cond_resched_completed) = |
21452 |
++ ACCESS_ONCE_RW(rdp->cond_resched_completed) = |
21453 |
+ ACCESS_ONCE(rdp->mynode->completed); |
21454 |
+ smp_mb(); /* ->cond_resched_completed before *rcrmp. */ |
21455 |
+- ACCESS_ONCE(*rcrmp) = |
21456 |
++ ACCESS_ONCE_RW(*rcrmp) = |
21457 |
+ ACCESS_ONCE(*rcrmp) + rdp->rsp->flavor_mask; |
21458 |
+ resched_cpu(rdp->cpu); /* Force CPU into scheduler. */ |
21459 |
+ rdp->rsp->jiffies_resched += 5; /* Enable beating. */ |
21460 |
+@@ -1008,7 +1008,7 @@ static void record_gp_stall_check_time(struct rcu_state *rsp) |
21461 |
+ rsp->gp_start = j; |
21462 |
+ smp_wmb(); /* Record start time before stall time. */ |
21463 |
+ j1 = rcu_jiffies_till_stall_check(); |
21464 |
+- ACCESS_ONCE(rsp->jiffies_stall) = j + j1; |
21465 |
++ ACCESS_ONCE_RW(rsp->jiffies_stall) = j + j1; |
21466 |
+ rsp->jiffies_resched = j + j1 / 2; |
21467 |
+ } |
21468 |
+ |
21469 |
+@@ -1052,7 +1052,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp) |
21470 |
+ raw_spin_unlock_irqrestore(&rnp->lock, flags); |
21471 |
+ return; |
21472 |
+ } |
21473 |
+- ACCESS_ONCE(rsp->jiffies_stall) = jiffies + 3 * rcu_jiffies_till_stall_check() + 3; |
21474 |
++ ACCESS_ONCE_RW(rsp->jiffies_stall) = jiffies + 3 * rcu_jiffies_till_stall_check() + 3; |
21475 |
+ raw_spin_unlock_irqrestore(&rnp->lock, flags); |
21476 |
+ |
21477 |
+ /* |
21478 |
+@@ -1130,7 +1130,7 @@ static void print_cpu_stall(struct rcu_state *rsp) |
21479 |
+ |
21480 |
+ raw_spin_lock_irqsave(&rnp->lock, flags); |
21481 |
+ if (ULONG_CMP_GE(jiffies, ACCESS_ONCE(rsp->jiffies_stall))) |
21482 |
+- ACCESS_ONCE(rsp->jiffies_stall) = jiffies + |
21483 |
++ ACCESS_ONCE_RW(rsp->jiffies_stall) = jiffies + |
21484 |
+ 3 * rcu_jiffies_till_stall_check() + 3; |
21485 |
+ raw_spin_unlock_irqrestore(&rnp->lock, flags); |
21486 |
+ |
21487 |
+@@ -1214,7 +1214,7 @@ void rcu_cpu_stall_reset(void) |
21488 |
+ struct rcu_state *rsp; |
21489 |
+ |
21490 |
+ for_each_rcu_flavor(rsp) |
21491 |
+- ACCESS_ONCE(rsp->jiffies_stall) = jiffies + ULONG_MAX / 2; |
21492 |
++ ACCESS_ONCE_RW(rsp->jiffies_stall) = jiffies + ULONG_MAX / 2; |
21493 |
+ } |
21494 |
+ |
21495 |
+ /* |
21496 |
+@@ -1594,7 +1594,7 @@ static int rcu_gp_init(struct rcu_state *rsp) |
21497 |
+ raw_spin_unlock_irq(&rnp->lock); |
21498 |
+ return 0; |
21499 |
+ } |
21500 |
+- ACCESS_ONCE(rsp->gp_flags) = 0; /* Clear all flags: New grace period. */ |
21501 |
++ ACCESS_ONCE_RW(rsp->gp_flags) = 0; /* Clear all flags: New grace period. */ |
21502 |
+ |
21503 |
+ if (WARN_ON_ONCE(rcu_gp_in_progress(rsp))) { |
21504 |
+ /* |
21505 |
+@@ -1635,9 +1635,9 @@ static int rcu_gp_init(struct rcu_state *rsp) |
21506 |
rdp = this_cpu_ptr(rsp->rda); |
21507 |
rcu_preempt_check_blocked_tasks(rnp); |
21508 |
rnp->qsmask = rnp->qsmaskinit; |
21509 |
@@ -89906,9 +93519,18 @@ index 0c47e30..a084591 100644 |
21510 |
- ACCESS_ONCE(rnp->completed) = rsp->completed; |
21511 |
+ ACCESS_ONCE_RW(rnp->completed) = rsp->completed; |
21512 |
if (rnp == rdp->mynode) |
21513 |
- __note_gp_changes(rsp, rnp, rdp); |
21514 |
+ (void)__note_gp_changes(rsp, rnp, rdp); |
21515 |
rcu_preempt_boost_start_gp(rnp); |
21516 |
-@@ -1545,7 +1545,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) |
21517 |
+@@ -1687,7 +1687,7 @@ static int rcu_gp_fqs(struct rcu_state *rsp, int fqs_state_in) |
21518 |
+ if (ACCESS_ONCE(rsp->gp_flags) & RCU_GP_FLAG_FQS) { |
21519 |
+ raw_spin_lock_irq(&rnp->lock); |
21520 |
+ smp_mb__after_unlock_lock(); |
21521 |
+- ACCESS_ONCE(rsp->gp_flags) &= ~RCU_GP_FLAG_FQS; |
21522 |
++ ACCESS_ONCE_RW(rsp->gp_flags) &= ~RCU_GP_FLAG_FQS; |
21523 |
+ raw_spin_unlock_irq(&rnp->lock); |
21524 |
+ } |
21525 |
+ return fqs_state; |
21526 |
+@@ -1732,7 +1732,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) |
21527 |
rcu_for_each_node_breadth_first(rsp, rnp) { |
21528 |
raw_spin_lock_irq(&rnp->lock); |
21529 |
smp_mb__after_unlock_lock(); |
21530 |
@@ -89916,8 +93538,8 @@ index 0c47e30..a084591 100644 |
21531 |
+ ACCESS_ONCE_RW(rnp->completed) = rsp->gpnum; |
21532 |
rdp = this_cpu_ptr(rsp->rda); |
21533 |
if (rnp == rdp->mynode) |
21534 |
- __note_gp_changes(rsp, rnp, rdp); |
21535 |
-@@ -1560,7 +1560,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) |
21536 |
+ needgp = __note_gp_changes(rsp, rnp, rdp) || needgp; |
21537 |
+@@ -1747,14 +1747,14 @@ static void rcu_gp_cleanup(struct rcu_state *rsp) |
21538 |
rcu_nocb_gp_set(rnp, nocb); |
21539 |
|
21540 |
/* Declare grace period done. */ |
21541 |
@@ -89926,7 +93548,24 @@ index 0c47e30..a084591 100644 |
21542 |
trace_rcu_grace_period(rsp->name, rsp->completed, TPS("end")); |
21543 |
rsp->fqs_state = RCU_GP_IDLE; |
21544 |
rdp = this_cpu_ptr(rsp->rda); |
21545 |
-@@ -1912,7 +1912,7 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp, |
21546 |
+ /* Advance CBs to reduce false positives below. */ |
21547 |
+ needgp = rcu_advance_cbs(rsp, rnp, rdp) || needgp; |
21548 |
+ if (needgp || cpu_needs_another_gp(rsp, rdp)) { |
21549 |
+- ACCESS_ONCE(rsp->gp_flags) = RCU_GP_FLAG_INIT; |
21550 |
++ ACCESS_ONCE_RW(rsp->gp_flags) = RCU_GP_FLAG_INIT; |
21551 |
+ trace_rcu_grace_period(rsp->name, |
21552 |
+ ACCESS_ONCE(rsp->gpnum), |
21553 |
+ TPS("newreq")); |
21554 |
+@@ -1879,7 +1879,7 @@ rcu_start_gp_advanced(struct rcu_state *rsp, struct rcu_node *rnp, |
21555 |
+ */ |
21556 |
+ return false; |
21557 |
+ } |
21558 |
+- ACCESS_ONCE(rsp->gp_flags) = RCU_GP_FLAG_INIT; |
21559 |
++ ACCESS_ONCE_RW(rsp->gp_flags) = RCU_GP_FLAG_INIT; |
21560 |
+ trace_rcu_grace_period(rsp->name, ACCESS_ONCE(rsp->gpnum), |
21561 |
+ TPS("newreq")); |
21562 |
+ |
21563 |
+@@ -2100,7 +2100,7 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp, |
21564 |
rsp->qlen += rdp->qlen; |
21565 |
rdp->n_cbs_orphaned += rdp->qlen; |
21566 |
rdp->qlen_lazy = 0; |
21567 |
@@ -89935,7 +93574,7 @@ index 0c47e30..a084591 100644 |
21568 |
} |
21569 |
|
21570 |
/* |
21571 |
-@@ -2159,7 +2159,7 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp) |
21572 |
+@@ -2347,7 +2347,7 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp) |
21573 |
} |
21574 |
smp_mb(); /* List handling before counting for rcu_barrier(). */ |
21575 |
rdp->qlen_lazy -= count_lazy; |
21576 |
@@ -89944,7 +93583,7 @@ index 0c47e30..a084591 100644 |
21577 |
rdp->n_cbs_invoked += count; |
21578 |
|
21579 |
/* Reinstate batch limit if we have worked down the excess. */ |
21580 |
-@@ -2304,7 +2304,7 @@ static void force_quiescent_state(struct rcu_state *rsp) |
21581 |
+@@ -2492,7 +2492,7 @@ static void force_quiescent_state(struct rcu_state *rsp) |
21582 |
if (rnp_old != NULL) |
21583 |
raw_spin_unlock(&rnp_old->fqslock); |
21584 |
if (ret) { |
21585 |
@@ -89953,7 +93592,7 @@ index 0c47e30..a084591 100644 |
21586 |
return; |
21587 |
} |
21588 |
rnp_old = rnp; |
21589 |
-@@ -2316,7 +2316,7 @@ static void force_quiescent_state(struct rcu_state *rsp) |
21590 |
+@@ -2504,11 +2504,11 @@ static void force_quiescent_state(struct rcu_state *rsp) |
21591 |
smp_mb__after_unlock_lock(); |
21592 |
raw_spin_unlock(&rnp_old->fqslock); |
21593 |
if (ACCESS_ONCE(rsp->gp_flags) & RCU_GP_FLAG_FQS) { |
21594 |
@@ -89962,7 +93601,12 @@ index 0c47e30..a084591 100644 |
21595 |
raw_spin_unlock_irqrestore(&rnp_old->lock, flags); |
21596 |
return; /* Someone beat us to it. */ |
21597 |
} |
21598 |
-@@ -2362,7 +2362,7 @@ __rcu_process_callbacks(struct rcu_state *rsp) |
21599 |
+- ACCESS_ONCE(rsp->gp_flags) |= RCU_GP_FLAG_FQS; |
21600 |
++ ACCESS_ONCE_RW(rsp->gp_flags) |= RCU_GP_FLAG_FQS; |
21601 |
+ raw_spin_unlock_irqrestore(&rnp_old->lock, flags); |
21602 |
+ wake_up(&rsp->gp_wq); /* Memory barrier implied by wake_up() path. */ |
21603 |
+ } |
21604 |
+@@ -2553,7 +2553,7 @@ __rcu_process_callbacks(struct rcu_state *rsp) |
21605 |
/* |
21606 |
* Do RCU core processing for the current CPU. |
21607 |
*/ |
21608 |
@@ -89971,7 +93615,7 @@ index 0c47e30..a084591 100644 |
21609 |
{ |
21610 |
struct rcu_state *rsp; |
21611 |
|
21612 |
-@@ -2470,7 +2470,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), |
21613 |
+@@ -2665,7 +2665,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), |
21614 |
WARN_ON_ONCE((unsigned long)head & 0x3); /* Misaligned rcu_head! */ |
21615 |
if (debug_rcu_head_queue(head)) { |
21616 |
/* Probable double call_rcu(), so leak the callback. */ |
21617 |
@@ -89980,7 +93624,7 @@ index 0c47e30..a084591 100644 |
21618 |
WARN_ONCE(1, "__call_rcu(): Leaked duplicate callback\n"); |
21619 |
return; |
21620 |
} |
21621 |
-@@ -2498,7 +2498,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), |
21622 |
+@@ -2693,7 +2693,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu), |
21623 |
local_irq_restore(flags); |
21624 |
return; |
21625 |
} |
21626 |
@@ -89989,7 +93633,7 @@ index 0c47e30..a084591 100644 |
21627 |
if (lazy) |
21628 |
rdp->qlen_lazy++; |
21629 |
else |
21630 |
-@@ -2759,11 +2759,11 @@ void synchronize_sched_expedited(void) |
21631 |
+@@ -2968,11 +2968,11 @@ void synchronize_sched_expedited(void) |
21632 |
* counter wrap on a 32-bit system. Quite a few more CPUs would of |
21633 |
* course be required on a 64-bit system. |
21634 |
*/ |
21635 |
@@ -90003,7 +93647,7 @@ index 0c47e30..a084591 100644 |
21636 |
return; |
21637 |
} |
21638 |
|
21639 |
-@@ -2771,7 +2771,7 @@ void synchronize_sched_expedited(void) |
21640 |
+@@ -2980,7 +2980,7 @@ void synchronize_sched_expedited(void) |
21641 |
* Take a ticket. Note that atomic_inc_return() implies a |
21642 |
* full memory barrier. |
21643 |
*/ |
21644 |
@@ -90012,7 +93656,7 @@ index 0c47e30..a084591 100644 |
21645 |
firstsnap = snap; |
21646 |
get_online_cpus(); |
21647 |
WARN_ON_ONCE(cpu_is_offline(raw_smp_processor_id())); |
21648 |
-@@ -2784,14 +2784,14 @@ void synchronize_sched_expedited(void) |
21649 |
+@@ -2993,14 +2993,14 @@ void synchronize_sched_expedited(void) |
21650 |
synchronize_sched_expedited_cpu_stop, |
21651 |
NULL) == -EAGAIN) { |
21652 |
put_online_cpus(); |
21653 |
@@ -90023,13 +93667,13 @@ index 0c47e30..a084591 100644 |
21654 |
s = atomic_long_read(&rsp->expedited_done); |
21655 |
if (ULONG_CMP_GE((ulong)s, (ulong)firstsnap)) { |
21656 |
/* ensure test happens before caller kfree */ |
21657 |
- smp_mb__before_atomic_inc(); /* ^^^ */ |
21658 |
+ smp_mb__before_atomic(); /* ^^^ */ |
21659 |
- atomic_long_inc(&rsp->expedited_workdone1); |
21660 |
+ atomic_long_inc_unchecked(&rsp->expedited_workdone1); |
21661 |
return; |
21662 |
} |
21663 |
|
21664 |
-@@ -2800,7 +2800,7 @@ void synchronize_sched_expedited(void) |
21665 |
+@@ -3009,7 +3009,7 @@ void synchronize_sched_expedited(void) |
21666 |
udelay(trycount * num_online_cpus()); |
21667 |
} else { |
21668 |
wait_rcu_gp(call_rcu_sched); |
21669 |
@@ -90038,16 +93682,16 @@ index 0c47e30..a084591 100644 |
21670 |
return; |
21671 |
} |
21672 |
|
21673 |
-@@ -2809,7 +2809,7 @@ void synchronize_sched_expedited(void) |
21674 |
+@@ -3018,7 +3018,7 @@ void synchronize_sched_expedited(void) |
21675 |
if (ULONG_CMP_GE((ulong)s, (ulong)firstsnap)) { |
21676 |
/* ensure test happens before caller kfree */ |
21677 |
- smp_mb__before_atomic_inc(); /* ^^^ */ |
21678 |
+ smp_mb__before_atomic(); /* ^^^ */ |
21679 |
- atomic_long_inc(&rsp->expedited_workdone2); |
21680 |
+ atomic_long_inc_unchecked(&rsp->expedited_workdone2); |
21681 |
return; |
21682 |
} |
21683 |
|
21684 |
-@@ -2821,10 +2821,10 @@ void synchronize_sched_expedited(void) |
21685 |
+@@ -3030,10 +3030,10 @@ void synchronize_sched_expedited(void) |
21686 |
* period works for us. |
21687 |
*/ |
21688 |
get_online_cpus(); |
21689 |
@@ -90060,7 +93704,7 @@ index 0c47e30..a084591 100644 |
21690 |
|
21691 |
/* |
21692 |
* Everyone up to our most recent fetch is covered by our grace |
21693 |
-@@ -2833,16 +2833,16 @@ void synchronize_sched_expedited(void) |
21694 |
+@@ -3042,16 +3042,16 @@ void synchronize_sched_expedited(void) |
21695 |
* than we did already did their update. |
21696 |
*/ |
21697 |
do { |
21698 |
@@ -90069,7 +93713,7 @@ index 0c47e30..a084591 100644 |
21699 |
s = atomic_long_read(&rsp->expedited_done); |
21700 |
if (ULONG_CMP_GE((ulong)s, (ulong)snap)) { |
21701 |
/* ensure test happens before caller kfree */ |
21702 |
- smp_mb__before_atomic_inc(); /* ^^^ */ |
21703 |
+ smp_mb__before_atomic(); /* ^^^ */ |
21704 |
- atomic_long_inc(&rsp->expedited_done_lost); |
21705 |
+ atomic_long_inc_unchecked(&rsp->expedited_done_lost); |
21706 |
break; |
21707 |
@@ -90080,7 +93724,7 @@ index 0c47e30..a084591 100644 |
21708 |
|
21709 |
put_online_cpus(); |
21710 |
} |
21711 |
-@@ -3048,7 +3048,7 @@ static void _rcu_barrier(struct rcu_state *rsp) |
21712 |
+@@ -3257,7 +3257,7 @@ static void _rcu_barrier(struct rcu_state *rsp) |
21713 |
* ACCESS_ONCE() to prevent the compiler from speculating |
21714 |
* the increment to precede the early-exit check. |
21715 |
*/ |
21716 |
@@ -90089,7 +93733,7 @@ index 0c47e30..a084591 100644 |
21717 |
WARN_ON_ONCE((rsp->n_barrier_done & 0x1) != 1); |
21718 |
_rcu_barrier_trace(rsp, "Inc1", -1, rsp->n_barrier_done); |
21719 |
smp_mb(); /* Order ->n_barrier_done increment with below mechanism. */ |
21720 |
-@@ -3098,7 +3098,7 @@ static void _rcu_barrier(struct rcu_state *rsp) |
21721 |
+@@ -3307,7 +3307,7 @@ static void _rcu_barrier(struct rcu_state *rsp) |
21722 |
|
21723 |
/* Increment ->n_barrier_done to prevent duplicate work. */ |
21724 |
smp_mb(); /* Keep increment after above mechanism. */ |
21725 |
@@ -90098,7 +93742,7 @@ index 0c47e30..a084591 100644 |
21726 |
WARN_ON_ONCE((rsp->n_barrier_done & 0x1) != 0); |
21727 |
_rcu_barrier_trace(rsp, "Inc2", -1, rsp->n_barrier_done); |
21728 |
smp_mb(); /* Keep increment before caller's subsequent code. */ |
21729 |
-@@ -3143,10 +3143,10 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp) |
21730 |
+@@ -3352,10 +3352,10 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp) |
21731 |
rdp->grpmask = 1UL << (cpu - rdp->mynode->grplo); |
21732 |
init_callback_list(rdp); |
21733 |
rdp->qlen_lazy = 0; |
21734 |
@@ -90111,7 +93755,7 @@ index 0c47e30..a084591 100644 |
21735 |
rdp->cpu = cpu; |
21736 |
rdp->rsp = rsp; |
21737 |
rcu_boot_init_nocb_percpu_data(rdp); |
21738 |
-@@ -3180,8 +3180,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp, int preemptible) |
21739 |
+@@ -3388,8 +3388,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp) |
21740 |
init_callback_list(rdp); /* Re-enable callbacks on this CPU. */ |
21741 |
rdp->dynticks->dynticks_nesting = DYNTICK_TASK_EXIT_IDLE; |
21742 |
rcu_sysidle_init_percpu_data(rdp->dynticks); |
21743 |
@@ -90123,7 +93767,7 @@ index 0c47e30..a084591 100644 |
21744 |
|
21745 |
/* Add CPU to rcu_node bitmasks. */ |
21746 |
diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h |
21747 |
-index 75dc3c3..b95d624 100644 |
21748 |
+index 0f69a79..c85c2dc 100644 |
21749 |
--- a/kernel/rcu/tree.h |
21750 |
+++ b/kernel/rcu/tree.h |
21751 |
@@ -87,11 +87,11 @@ struct rcu_dynticks { |
21752 |
@@ -90140,7 +93784,7 @@ index 75dc3c3..b95d624 100644 |
21753 |
/* "Idle" excludes userspace execution. */ |
21754 |
unsigned long dynticks_idle_jiffies; |
21755 |
/* End of last non-NMI non-idle period. */ |
21756 |
-@@ -431,17 +431,17 @@ struct rcu_state { |
21757 |
+@@ -435,17 +435,17 @@ struct rcu_state { |
21758 |
/* _rcu_barrier(). */ |
21759 |
/* End of fields guarded by barrier_mutex. */ |
21760 |
|
21761 |
@@ -90170,10 +93814,10 @@ index 75dc3c3..b95d624 100644 |
21762 |
unsigned long jiffies_force_qs; /* Time at which to invoke */ |
21763 |
/* force_quiescent_state(). */ |
21764 |
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h |
21765 |
-index 962d1d5..c6c62d12d 100644 |
21766 |
+index 02ac0fb..4aa4a36 100644 |
21767 |
--- a/kernel/rcu/tree_plugin.h |
21768 |
+++ b/kernel/rcu/tree_plugin.h |
21769 |
-@@ -758,7 +758,7 @@ static int rcu_preempted_readers_exp(struct rcu_node *rnp) |
21770 |
+@@ -735,7 +735,7 @@ static int rcu_preempted_readers_exp(struct rcu_node *rnp) |
21771 |
static int sync_rcu_preempt_exp_done(struct rcu_node *rnp) |
21772 |
{ |
21773 |
return !rcu_preempted_readers_exp(rnp) && |
21774 |
@@ -90182,7 +93826,7 @@ index 962d1d5..c6c62d12d 100644 |
21775 |
} |
21776 |
|
21777 |
/* |
21778 |
-@@ -920,7 +920,7 @@ void synchronize_rcu_expedited(void) |
21779 |
+@@ -897,7 +897,7 @@ void synchronize_rcu_expedited(void) |
21780 |
|
21781 |
/* Clean up and exit. */ |
21782 |
smp_mb(); /* ensure expedited GP seen before counter increment. */ |
21783 |
@@ -90191,7 +93835,7 @@ index 962d1d5..c6c62d12d 100644 |
21784 |
unlock_mb_ret: |
21785 |
mutex_unlock(&sync_rcu_preempt_exp_mutex); |
21786 |
mb_ret: |
21787 |
-@@ -1496,7 +1496,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu) |
21788 |
+@@ -1447,7 +1447,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu) |
21789 |
free_cpumask_var(cm); |
21790 |
} |
21791 |
|
21792 |
@@ -90200,7 +93844,7 @@ index 962d1d5..c6c62d12d 100644 |
21793 |
.store = &rcu_cpu_kthread_task, |
21794 |
.thread_should_run = rcu_cpu_kthread_should_run, |
21795 |
.thread_fn = rcu_cpu_kthread, |
21796 |
-@@ -1972,7 +1972,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu) |
21797 |
+@@ -1926,7 +1926,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu) |
21798 |
print_cpu_stall_fast_no_hz(fast_no_hz, cpu); |
21799 |
pr_err("\t%d: (%lu %s) idle=%03x/%llx/%d softirq=%u/%u %s\n", |
21800 |
cpu, ticks_value, ticks_title, |
21801 |
@@ -90209,7 +93853,7 @@ index 962d1d5..c6c62d12d 100644 |
21802 |
rdtp->dynticks_nesting, rdtp->dynticks_nmi_nesting, |
21803 |
rdp->softirq_snap, kstat_softirqs_cpu(RCU_SOFTIRQ, cpu), |
21804 |
fast_no_hz); |
21805 |
-@@ -2138,7 +2138,7 @@ static void __call_rcu_nocb_enqueue(struct rcu_data *rdp, |
21806 |
+@@ -2079,7 +2079,7 @@ static void __call_rcu_nocb_enqueue(struct rcu_data *rdp, |
21807 |
|
21808 |
/* Enqueue the callback on the nocb list and update counts. */ |
21809 |
old_rhpp = xchg(&rdp->nocb_tail, rhtp); |
21810 |
@@ -90218,7 +93862,7 @@ index 962d1d5..c6c62d12d 100644 |
21811 |
atomic_long_add(rhcount, &rdp->nocb_q_count); |
21812 |
atomic_long_add(rhcount_lazy, &rdp->nocb_q_count_lazy); |
21813 |
|
21814 |
-@@ -2311,12 +2311,12 @@ static int rcu_nocb_kthread(void *arg) |
21815 |
+@@ -2255,12 +2255,12 @@ static int rcu_nocb_kthread(void *arg) |
21816 |
* Extract queued callbacks, update counts, and wait |
21817 |
* for a grace period to elapse. |
21818 |
*/ |
21819 |
@@ -90234,7 +93878,7 @@ index 962d1d5..c6c62d12d 100644 |
21820 |
rcu_nocb_wait_gp(rdp); |
21821 |
|
21822 |
/* Each pass through the following loop invokes a callback. */ |
21823 |
-@@ -2342,8 +2342,8 @@ static int rcu_nocb_kthread(void *arg) |
21824 |
+@@ -2286,8 +2286,8 @@ static int rcu_nocb_kthread(void *arg) |
21825 |
list = next; |
21826 |
} |
21827 |
trace_rcu_batch_end(rdp->rsp->name, c, !!list, 0, 0, 1); |
21828 |
@@ -90245,7 +93889,7 @@ index 962d1d5..c6c62d12d 100644 |
21829 |
rdp->n_nocbs_invoked += c; |
21830 |
} |
21831 |
return 0; |
21832 |
-@@ -2360,7 +2360,7 @@ static void do_nocb_deferred_wakeup(struct rcu_data *rdp) |
21833 |
+@@ -2304,7 +2304,7 @@ static void do_nocb_deferred_wakeup(struct rcu_data *rdp) |
21834 |
{ |
21835 |
if (!rcu_nocb_need_deferred_wakeup(rdp)) |
21836 |
return; |
21837 |
@@ -90254,7 +93898,7 @@ index 962d1d5..c6c62d12d 100644 |
21838 |
wake_up(&rdp->nocb_wq); |
21839 |
trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, TPS("DeferredWakeEmpty")); |
21840 |
} |
21841 |
-@@ -2386,7 +2386,7 @@ static void __init rcu_spawn_nocb_kthreads(struct rcu_state *rsp) |
21842 |
+@@ -2330,7 +2330,7 @@ static void __init rcu_spawn_nocb_kthreads(struct rcu_state *rsp) |
21843 |
t = kthread_run(rcu_nocb_kthread, rdp, |
21844 |
"rcuo%c/%d", rsp->abbr, cpu); |
21845 |
BUG_ON(IS_ERR(t)); |
21846 |
@@ -90263,34 +93907,34 @@ index 962d1d5..c6c62d12d 100644 |
21847 |
} |
21848 |
} |
21849 |
|
21850 |
-@@ -2522,11 +2522,11 @@ static void rcu_sysidle_enter(struct rcu_dynticks *rdtp, int irq) |
21851 |
+@@ -2461,11 +2461,11 @@ static void rcu_sysidle_enter(struct rcu_dynticks *rdtp, int irq) |
21852 |
|
21853 |
/* Record start of fully idle period. */ |
21854 |
j = jiffies; |
21855 |
- ACCESS_ONCE(rdtp->dynticks_idle_jiffies) = j; |
21856 |
+ ACCESS_ONCE_RW(rdtp->dynticks_idle_jiffies) = j; |
21857 |
- smp_mb__before_atomic_inc(); |
21858 |
+ smp_mb__before_atomic(); |
21859 |
- atomic_inc(&rdtp->dynticks_idle); |
21860 |
+ atomic_inc_unchecked(&rdtp->dynticks_idle); |
21861 |
- smp_mb__after_atomic_inc(); |
21862 |
+ smp_mb__after_atomic(); |
21863 |
- WARN_ON_ONCE(atomic_read(&rdtp->dynticks_idle) & 0x1); |
21864 |
+ WARN_ON_ONCE(atomic_read_unchecked(&rdtp->dynticks_idle) & 0x1); |
21865 |
} |
21866 |
|
21867 |
/* |
21868 |
-@@ -2591,9 +2591,9 @@ static void rcu_sysidle_exit(struct rcu_dynticks *rdtp, int irq) |
21869 |
+@@ -2530,9 +2530,9 @@ static void rcu_sysidle_exit(struct rcu_dynticks *rdtp, int irq) |
21870 |
|
21871 |
/* Record end of idle period. */ |
21872 |
- smp_mb__before_atomic_inc(); |
21873 |
+ smp_mb__before_atomic(); |
21874 |
- atomic_inc(&rdtp->dynticks_idle); |
21875 |
+ atomic_inc_unchecked(&rdtp->dynticks_idle); |
21876 |
- smp_mb__after_atomic_inc(); |
21877 |
+ smp_mb__after_atomic(); |
21878 |
- WARN_ON_ONCE(!(atomic_read(&rdtp->dynticks_idle) & 0x1)); |
21879 |
+ WARN_ON_ONCE(!(atomic_read_unchecked(&rdtp->dynticks_idle) & 0x1)); |
21880 |
|
21881 |
/* |
21882 |
* If we are the timekeeping CPU, we are permitted to be non-idle |
21883 |
-@@ -2634,7 +2634,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle, |
21884 |
+@@ -2573,7 +2573,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle, |
21885 |
WARN_ON_ONCE(smp_processor_id() != tick_do_timer_cpu); |
21886 |
|
21887 |
/* Pick up current idle and NMI-nesting counter and check. */ |
21888 |
@@ -90299,7 +93943,7 @@ index 962d1d5..c6c62d12d 100644 |
21889 |
if (cur & 0x1) { |
21890 |
*isidle = false; /* We are not idle! */ |
21891 |
return; |
21892 |
-@@ -2697,7 +2697,7 @@ static void rcu_sysidle(unsigned long j) |
21893 |
+@@ -2622,7 +2622,7 @@ static void rcu_sysidle(unsigned long j) |
21894 |
case RCU_SYSIDLE_NOT: |
21895 |
|
21896 |
/* First time all are idle, so note a short idle period. */ |
21897 |
@@ -90308,16 +93952,16 @@ index 962d1d5..c6c62d12d 100644 |
21898 |
break; |
21899 |
|
21900 |
case RCU_SYSIDLE_SHORT: |
21901 |
-@@ -2734,7 +2734,7 @@ static void rcu_sysidle(unsigned long j) |
21902 |
- static void rcu_sysidle_cancel(void) |
21903 |
+@@ -2660,7 +2660,7 @@ static void rcu_sysidle_cancel(void) |
21904 |
{ |
21905 |
smp_mb(); |
21906 |
-- ACCESS_ONCE(full_sysidle_state) = RCU_SYSIDLE_NOT; |
21907 |
-+ ACCESS_ONCE_RW(full_sysidle_state) = RCU_SYSIDLE_NOT; |
21908 |
+ if (full_sysidle_state > RCU_SYSIDLE_SHORT) |
21909 |
+- ACCESS_ONCE(full_sysidle_state) = RCU_SYSIDLE_NOT; |
21910 |
++ ACCESS_ONCE_RW(full_sysidle_state) = RCU_SYSIDLE_NOT; |
21911 |
} |
21912 |
|
21913 |
/* |
21914 |
-@@ -2782,7 +2782,7 @@ static void rcu_sysidle_cb(struct rcu_head *rhp) |
21915 |
+@@ -2708,7 +2708,7 @@ static void rcu_sysidle_cb(struct rcu_head *rhp) |
21916 |
smp_mb(); /* grace period precedes setting inuse. */ |
21917 |
|
21918 |
rshp = container_of(rhp, struct rcu_sysidle_head, rh); |
21919 |
@@ -90368,7 +94012,7 @@ index 5cdc62e..cc52e88 100644 |
21920 |
} |
21921 |
|
21922 |
diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c |
21923 |
-index 4c0a9b0..7e81362 100644 |
21924 |
+index bc78835..7691a45 100644 |
21925 |
--- a/kernel/rcu/update.c |
21926 |
+++ b/kernel/rcu/update.c |
21927 |
@@ -311,10 +311,10 @@ int rcu_jiffies_till_stall_check(void) |
21928 |
@@ -90385,7 +94029,7 @@ index 4c0a9b0..7e81362 100644 |
21929 |
} |
21930 |
return till_stall_check * HZ + RCU_STALL_DELAY_DELTA; |
21931 |
diff --git a/kernel/resource.c b/kernel/resource.c |
21932 |
-index 8957d68..770cbe4 100644 |
21933 |
+index 3c2237a..4568d96 100644 |
21934 |
--- a/kernel/resource.c |
21935 |
+++ b/kernel/resource.c |
21936 |
@@ -152,8 +152,18 @@ static const struct file_operations proc_iomem_operations = { |
21937 |
@@ -90461,10 +94105,10 @@ index a63f4dc..349bbb0 100644 |
21938 |
unsigned long timeout) |
21939 |
{ |
21940 |
diff --git a/kernel/sched/core.c b/kernel/sched/core.c |
21941 |
-index 8da7e49..ef10a02 100644 |
21942 |
+index bc1638b..a7638fc 100644 |
21943 |
--- a/kernel/sched/core.c |
21944 |
+++ b/kernel/sched/core.c |
21945 |
-@@ -1775,7 +1775,7 @@ void set_numabalancing_state(bool enabled) |
21946 |
+@@ -1849,7 +1849,7 @@ void set_numabalancing_state(bool enabled) |
21947 |
int sysctl_numa_balancing(struct ctl_table *table, int write, |
21948 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
21949 |
{ |
21950 |
@@ -90473,7 +94117,7 @@ index 8da7e49..ef10a02 100644 |
21951 |
int err; |
21952 |
int state = numabalancing_enabled; |
21953 |
|
21954 |
-@@ -2238,8 +2238,10 @@ context_switch(struct rq *rq, struct task_struct *prev, |
21955 |
+@@ -2312,8 +2312,10 @@ context_switch(struct rq *rq, struct task_struct *prev, |
21956 |
next->active_mm = oldmm; |
21957 |
atomic_inc(&oldmm->mm_count); |
21958 |
enter_lazy_tlb(oldmm, next); |
21959 |
@@ -90485,26 +94129,26 @@ index 8da7e49..ef10a02 100644 |
21960 |
|
21961 |
if (!prev->mm) { |
21962 |
prev->active_mm = NULL; |
21963 |
-@@ -3004,6 +3006,8 @@ int can_nice(const struct task_struct *p, const int nice) |
21964 |
+@@ -3081,6 +3083,8 @@ int can_nice(const struct task_struct *p, const int nice) |
21965 |
/* convert nice value [19,-20] to rlimit style value [1,40] */ |
21966 |
- int nice_rlim = 20 - nice; |
21967 |
+ int nice_rlim = nice_to_rlimit(nice); |
21968 |
|
21969 |
+ gr_learn_resource(p, RLIMIT_NICE, nice_rlim, 1); |
21970 |
+ |
21971 |
return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) || |
21972 |
capable(CAP_SYS_NICE)); |
21973 |
} |
21974 |
-@@ -3037,7 +3041,8 @@ SYSCALL_DEFINE1(nice, int, increment) |
21975 |
- if (nice > MAX_NICE) |
21976 |
- nice = MAX_NICE; |
21977 |
+@@ -3107,7 +3111,8 @@ SYSCALL_DEFINE1(nice, int, increment) |
21978 |
+ nice = task_nice(current) + increment; |
21979 |
|
21980 |
+ nice = clamp_val(nice, MIN_NICE, MAX_NICE); |
21981 |
- if (increment < 0 && !can_nice(current, nice)) |
21982 |
+ if (increment < 0 && (!can_nice(current, nice) || |
21983 |
+ gr_handle_chroot_nice())) |
21984 |
return -EPERM; |
21985 |
|
21986 |
retval = security_task_setnice(current, nice); |
21987 |
-@@ -3310,6 +3315,7 @@ recheck: |
21988 |
+@@ -3380,6 +3385,7 @@ recheck: |
21989 |
if (policy != p->policy && !rlim_rtprio) |
21990 |
return -EPERM; |
21991 |
|
21992 |
@@ -90512,7 +94156,7 @@ index 8da7e49..ef10a02 100644 |
21993 |
/* can't increase priority */ |
21994 |
if (attr->sched_priority > p->rt_priority && |
21995 |
attr->sched_priority > rlim_rtprio) |
21996 |
-@@ -4708,6 +4714,7 @@ void idle_task_exit(void) |
21997 |
+@@ -4771,6 +4777,7 @@ void idle_task_exit(void) |
21998 |
|
21999 |
if (mm != &init_mm) { |
22000 |
switch_mm(mm, &init_mm, current); |
22001 |
@@ -90520,7 +94164,7 @@ index 8da7e49..ef10a02 100644 |
22002 |
finish_arch_post_lock_switch(); |
22003 |
} |
22004 |
mmdrop(mm); |
22005 |
-@@ -4803,7 +4810,7 @@ static void migrate_tasks(unsigned int dead_cpu) |
22006 |
+@@ -4866,7 +4873,7 @@ static void migrate_tasks(unsigned int dead_cpu) |
22007 |
|
22008 |
#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SYSCTL) |
22009 |
|
22010 |
@@ -90529,7 +94173,7 @@ index 8da7e49..ef10a02 100644 |
22011 |
{ |
22012 |
.procname = "sched_domain", |
22013 |
.mode = 0555, |
22014 |
-@@ -4820,17 +4827,17 @@ static struct ctl_table sd_ctl_root[] = { |
22015 |
+@@ -4883,17 +4890,17 @@ static struct ctl_table sd_ctl_root[] = { |
22016 |
{} |
22017 |
}; |
22018 |
|
22019 |
@@ -90551,7 +94195,7 @@ index 8da7e49..ef10a02 100644 |
22020 |
|
22021 |
/* |
22022 |
* In the intermediate directories, both the child directory and |
22023 |
-@@ -4838,22 +4845,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep) |
22024 |
+@@ -4901,22 +4908,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep) |
22025 |
* will always be set. In the lowest directory the names are |
22026 |
* static strings and all have proc handlers. |
22027 |
*/ |
22028 |
@@ -90583,7 +94227,7 @@ index 8da7e49..ef10a02 100644 |
22029 |
const char *procname, void *data, int maxlen, |
22030 |
umode_t mode, proc_handler *proc_handler, |
22031 |
bool load_idx) |
22032 |
-@@ -4873,7 +4883,7 @@ set_table_entry(struct ctl_table *entry, |
22033 |
+@@ -4936,7 +4946,7 @@ set_table_entry(struct ctl_table *entry, |
22034 |
static struct ctl_table * |
22035 |
sd_alloc_ctl_domain_table(struct sched_domain *sd) |
22036 |
{ |
22037 |
@@ -90592,7 +94236,7 @@ index 8da7e49..ef10a02 100644 |
22038 |
|
22039 |
if (table == NULL) |
22040 |
return NULL; |
22041 |
-@@ -4911,9 +4921,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd) |
22042 |
+@@ -4974,9 +4984,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd) |
22043 |
return table; |
22044 |
} |
22045 |
|
22046 |
@@ -90604,7 +94248,7 @@ index 8da7e49..ef10a02 100644 |
22047 |
struct sched_domain *sd; |
22048 |
int domain_num = 0, i; |
22049 |
char buf[32]; |
22050 |
-@@ -4940,11 +4950,13 @@ static struct ctl_table_header *sd_sysctl_header; |
22051 |
+@@ -5003,11 +5013,13 @@ static struct ctl_table_header *sd_sysctl_header; |
22052 |
static void register_sched_domain_sysctl(void) |
22053 |
{ |
22054 |
int i, cpu_num = num_possible_cpus(); |
22055 |
@@ -90619,7 +94263,7 @@ index 8da7e49..ef10a02 100644 |
22056 |
|
22057 |
if (entry == NULL) |
22058 |
return; |
22059 |
-@@ -4967,8 +4979,12 @@ static void unregister_sched_domain_sysctl(void) |
22060 |
+@@ -5030,8 +5042,12 @@ static void unregister_sched_domain_sysctl(void) |
22061 |
if (sd_sysctl_header) |
22062 |
unregister_sysctl_table(sd_sysctl_header); |
22063 |
sd_sysctl_header = NULL; |
22064 |
@@ -90635,10 +94279,10 @@ index 8da7e49..ef10a02 100644 |
22065 |
#else |
22066 |
static void register_sched_domain_sysctl(void) |
22067 |
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c |
22068 |
-index 8cbe2d2..61f20a1 100644 |
22069 |
+index fea7d33..84faa94 100644 |
22070 |
--- a/kernel/sched/fair.c |
22071 |
+++ b/kernel/sched/fair.c |
22072 |
-@@ -1806,7 +1806,7 @@ void task_numa_fault(int last_cpupid, int mem_node, int pages, int flags) |
22073 |
+@@ -1857,7 +1857,7 @@ void task_numa_fault(int last_cpupid, int mem_node, int pages, int flags) |
22074 |
|
22075 |
static void reset_ptenuma_scan(struct task_struct *p) |
22076 |
{ |
22077 |
@@ -90647,7 +94291,7 @@ index 8cbe2d2..61f20a1 100644 |
22078 |
p->mm->numa_scan_offset = 0; |
22079 |
} |
22080 |
|
22081 |
-@@ -7181,7 +7181,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { } |
22082 |
+@@ -7289,7 +7289,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { } |
22083 |
* run_rebalance_domains is triggered when needed from the scheduler tick. |
22084 |
* Also triggered for nohz idle balancing (with nohz_balancing_kick set). |
22085 |
*/ |
22086 |
@@ -90657,10 +94301,10 @@ index 8cbe2d2..61f20a1 100644 |
22087 |
struct rq *this_rq = this_rq(); |
22088 |
enum cpu_idle_type idle = this_rq->idle_balance ? |
22089 |
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h |
22090 |
-index 369b4d6..fa4eb3b 100644 |
22091 |
+index 31cc02e..734fb85 100644 |
22092 |
--- a/kernel/sched/sched.h |
22093 |
+++ b/kernel/sched/sched.h |
22094 |
-@@ -1157,7 +1157,7 @@ struct sched_class { |
22095 |
+@@ -1153,7 +1153,7 @@ struct sched_class { |
22096 |
#ifdef CONFIG_FAIR_GROUP_SCHED |
22097 |
void (*task_move_group) (struct task_struct *p, int on_rq); |
22098 |
#endif |
22099 |
@@ -90669,8 +94313,351 @@ index 369b4d6..fa4eb3b 100644 |
22100 |
|
22101 |
static inline void put_prev_task(struct rq *rq, struct task_struct *prev) |
22102 |
{ |
22103 |
+diff --git a/kernel/seccomp.c b/kernel/seccomp.c |
22104 |
+index 301bbc2..eda2da3 100644 |
22105 |
+--- a/kernel/seccomp.c |
22106 |
++++ b/kernel/seccomp.c |
22107 |
+@@ -39,7 +39,7 @@ |
22108 |
+ * is only needed for handling filters shared across tasks. |
22109 |
+ * @prev: points to a previously installed, or inherited, filter |
22110 |
+ * @len: the number of instructions in the program |
22111 |
+- * @insnsi: the BPF program instructions to evaluate |
22112 |
++ * @insns: the BPF program instructions to evaluate |
22113 |
+ * |
22114 |
+ * seccomp_filter objects are organized in a tree linked via the @prev |
22115 |
+ * pointer. For any task, it appears to be a singly-linked list starting |
22116 |
+@@ -54,32 +54,61 @@ |
22117 |
+ struct seccomp_filter { |
22118 |
+ atomic_t usage; |
22119 |
+ struct seccomp_filter *prev; |
22120 |
+- struct sk_filter *prog; |
22121 |
++ unsigned short len; /* Instruction count */ |
22122 |
++ struct sock_filter insns[]; |
22123 |
+ }; |
22124 |
+ |
22125 |
+ /* Limit any path through the tree to 256KB worth of instructions. */ |
22126 |
+ #define MAX_INSNS_PER_PATH ((1 << 18) / sizeof(struct sock_filter)) |
22127 |
+ |
22128 |
+-/* |
22129 |
++/** |
22130 |
++ * get_u32 - returns a u32 offset into data |
22131 |
++ * @data: a unsigned 64 bit value |
22132 |
++ * @index: 0 or 1 to return the first or second 32-bits |
22133 |
++ * |
22134 |
++ * This inline exists to hide the length of unsigned long. If a 32-bit |
22135 |
++ * unsigned long is passed in, it will be extended and the top 32-bits will be |
22136 |
++ * 0. If it is a 64-bit unsigned long, then whatever data is resident will be |
22137 |
++ * properly returned. |
22138 |
++ * |
22139 |
+ * Endianness is explicitly ignored and left for BPF program authors to manage |
22140 |
+ * as per the specific architecture. |
22141 |
+ */ |
22142 |
+-static void populate_seccomp_data(struct seccomp_data *sd) |
22143 |
++static inline u32 get_u32(u64 data, int index) |
22144 |
+ { |
22145 |
+- struct task_struct *task = current; |
22146 |
+- struct pt_regs *regs = task_pt_regs(task); |
22147 |
+- unsigned long args[6]; |
22148 |
++ return ((u32 *)&data)[index]; |
22149 |
++} |
22150 |
+ |
22151 |
+- sd->nr = syscall_get_nr(task, regs); |
22152 |
+- sd->arch = syscall_get_arch(); |
22153 |
+- syscall_get_arguments(task, regs, 0, 6, args); |
22154 |
+- sd->args[0] = args[0]; |
22155 |
+- sd->args[1] = args[1]; |
22156 |
+- sd->args[2] = args[2]; |
22157 |
+- sd->args[3] = args[3]; |
22158 |
+- sd->args[4] = args[4]; |
22159 |
+- sd->args[5] = args[5]; |
22160 |
+- sd->instruction_pointer = KSTK_EIP(task); |
22161 |
++/* Helper for bpf_load below. */ |
22162 |
++#define BPF_DATA(_name) offsetof(struct seccomp_data, _name) |
22163 |
++/** |
22164 |
++ * bpf_load: checks and returns a pointer to the requested offset |
22165 |
++ * @off: offset into struct seccomp_data to load from |
22166 |
++ * |
22167 |
++ * Returns the requested 32-bits of data. |
22168 |
++ * seccomp_check_filter() should assure that @off is 32-bit aligned |
22169 |
++ * and not out of bounds. Failure to do so is a BUG. |
22170 |
++ */ |
22171 |
++u32 seccomp_bpf_load(int off) |
22172 |
++{ |
22173 |
++ struct pt_regs *regs = task_pt_regs(current); |
22174 |
++ if (off == BPF_DATA(nr)) |
22175 |
++ return syscall_get_nr(current, regs); |
22176 |
++ if (off == BPF_DATA(arch)) |
22177 |
++ return syscall_get_arch(); |
22178 |
++ if (off >= BPF_DATA(args[0]) && off < BPF_DATA(args[6])) { |
22179 |
++ unsigned long value; |
22180 |
++ int arg = (off - BPF_DATA(args[0])) / sizeof(u64); |
22181 |
++ int index = !!(off % sizeof(u64)); |
22182 |
++ syscall_get_arguments(current, regs, arg, 1, &value); |
22183 |
++ return get_u32(value, index); |
22184 |
++ } |
22185 |
++ if (off == BPF_DATA(instruction_pointer)) |
22186 |
++ return get_u32(KSTK_EIP(current), 0); |
22187 |
++ if (off == BPF_DATA(instruction_pointer) + sizeof(u32)) |
22188 |
++ return get_u32(KSTK_EIP(current), 1); |
22189 |
++ /* seccomp_check_filter should make this impossible. */ |
22190 |
++ BUG(); |
22191 |
+ } |
22192 |
+ |
22193 |
+ /** |
22194 |
+@@ -103,59 +132,59 @@ static int seccomp_check_filter(struct sock_filter *filter, unsigned int flen) |
22195 |
+ u32 k = ftest->k; |
22196 |
+ |
22197 |
+ switch (code) { |
22198 |
+- case BPF_LD | BPF_W | BPF_ABS: |
22199 |
+- ftest->code = BPF_LDX | BPF_W | BPF_ABS; |
22200 |
++ case BPF_S_LD_W_ABS: |
22201 |
++ ftest->code = BPF_S_ANC_SECCOMP_LD_W; |
22202 |
+ /* 32-bit aligned and not out of bounds. */ |
22203 |
+ if (k >= sizeof(struct seccomp_data) || k & 3) |
22204 |
+ return -EINVAL; |
22205 |
+ continue; |
22206 |
+- case BPF_LD | BPF_W | BPF_LEN: |
22207 |
+- ftest->code = BPF_LD | BPF_IMM; |
22208 |
++ case BPF_S_LD_W_LEN: |
22209 |
++ ftest->code = BPF_S_LD_IMM; |
22210 |
+ ftest->k = sizeof(struct seccomp_data); |
22211 |
+ continue; |
22212 |
+- case BPF_LDX | BPF_W | BPF_LEN: |
22213 |
+- ftest->code = BPF_LDX | BPF_IMM; |
22214 |
++ case BPF_S_LDX_W_LEN: |
22215 |
++ ftest->code = BPF_S_LDX_IMM; |
22216 |
+ ftest->k = sizeof(struct seccomp_data); |
22217 |
+ continue; |
22218 |
+ /* Explicitly include allowed calls. */ |
22219 |
+- case BPF_RET | BPF_K: |
22220 |
+- case BPF_RET | BPF_A: |
22221 |
+- case BPF_ALU | BPF_ADD | BPF_K: |
22222 |
+- case BPF_ALU | BPF_ADD | BPF_X: |
22223 |
+- case BPF_ALU | BPF_SUB | BPF_K: |
22224 |
+- case BPF_ALU | BPF_SUB | BPF_X: |
22225 |
+- case BPF_ALU | BPF_MUL | BPF_K: |
22226 |
+- case BPF_ALU | BPF_MUL | BPF_X: |
22227 |
+- case BPF_ALU | BPF_DIV | BPF_K: |
22228 |
+- case BPF_ALU | BPF_DIV | BPF_X: |
22229 |
+- case BPF_ALU | BPF_AND | BPF_K: |
22230 |
+- case BPF_ALU | BPF_AND | BPF_X: |
22231 |
+- case BPF_ALU | BPF_OR | BPF_K: |
22232 |
+- case BPF_ALU | BPF_OR | BPF_X: |
22233 |
+- case BPF_ALU | BPF_XOR | BPF_K: |
22234 |
+- case BPF_ALU | BPF_XOR | BPF_X: |
22235 |
+- case BPF_ALU | BPF_LSH | BPF_K: |
22236 |
+- case BPF_ALU | BPF_LSH | BPF_X: |
22237 |
+- case BPF_ALU | BPF_RSH | BPF_K: |
22238 |
+- case BPF_ALU | BPF_RSH | BPF_X: |
22239 |
+- case BPF_ALU | BPF_NEG: |
22240 |
+- case BPF_LD | BPF_IMM: |
22241 |
+- case BPF_LDX | BPF_IMM: |
22242 |
+- case BPF_MISC | BPF_TAX: |
22243 |
+- case BPF_MISC | BPF_TXA: |
22244 |
+- case BPF_LD | BPF_MEM: |
22245 |
+- case BPF_LDX | BPF_MEM: |
22246 |
+- case BPF_ST: |
22247 |
+- case BPF_STX: |
22248 |
+- case BPF_JMP | BPF_JA: |
22249 |
+- case BPF_JMP | BPF_JEQ | BPF_K: |
22250 |
+- case BPF_JMP | BPF_JEQ | BPF_X: |
22251 |
+- case BPF_JMP | BPF_JGE | BPF_K: |
22252 |
+- case BPF_JMP | BPF_JGE | BPF_X: |
22253 |
+- case BPF_JMP | BPF_JGT | BPF_K: |
22254 |
+- case BPF_JMP | BPF_JGT | BPF_X: |
22255 |
+- case BPF_JMP | BPF_JSET | BPF_K: |
22256 |
+- case BPF_JMP | BPF_JSET | BPF_X: |
22257 |
++ case BPF_S_RET_K: |
22258 |
++ case BPF_S_RET_A: |
22259 |
++ case BPF_S_ALU_ADD_K: |
22260 |
++ case BPF_S_ALU_ADD_X: |
22261 |
++ case BPF_S_ALU_SUB_K: |
22262 |
++ case BPF_S_ALU_SUB_X: |
22263 |
++ case BPF_S_ALU_MUL_K: |
22264 |
++ case BPF_S_ALU_MUL_X: |
22265 |
++ case BPF_S_ALU_DIV_X: |
22266 |
++ case BPF_S_ALU_AND_K: |
22267 |
++ case BPF_S_ALU_AND_X: |
22268 |
++ case BPF_S_ALU_OR_K: |
22269 |
++ case BPF_S_ALU_OR_X: |
22270 |
++ case BPF_S_ALU_XOR_K: |
22271 |
++ case BPF_S_ALU_XOR_X: |
22272 |
++ case BPF_S_ALU_LSH_K: |
22273 |
++ case BPF_S_ALU_LSH_X: |
22274 |
++ case BPF_S_ALU_RSH_K: |
22275 |
++ case BPF_S_ALU_RSH_X: |
22276 |
++ case BPF_S_ALU_NEG: |
22277 |
++ case BPF_S_LD_IMM: |
22278 |
++ case BPF_S_LDX_IMM: |
22279 |
++ case BPF_S_MISC_TAX: |
22280 |
++ case BPF_S_MISC_TXA: |
22281 |
++ case BPF_S_ALU_DIV_K: |
22282 |
++ case BPF_S_LD_MEM: |
22283 |
++ case BPF_S_LDX_MEM: |
22284 |
++ case BPF_S_ST: |
22285 |
++ case BPF_S_STX: |
22286 |
++ case BPF_S_JMP_JA: |
22287 |
++ case BPF_S_JMP_JEQ_K: |
22288 |
++ case BPF_S_JMP_JEQ_X: |
22289 |
++ case BPF_S_JMP_JGE_K: |
22290 |
++ case BPF_S_JMP_JGE_X: |
22291 |
++ case BPF_S_JMP_JGT_K: |
22292 |
++ case BPF_S_JMP_JGT_X: |
22293 |
++ case BPF_S_JMP_JSET_K: |
22294 |
++ case BPF_S_JMP_JSET_X: |
22295 |
+ continue; |
22296 |
+ default: |
22297 |
+ return -EINVAL; |
22298 |
+@@ -173,22 +202,18 @@ static int seccomp_check_filter(struct sock_filter *filter, unsigned int flen) |
22299 |
+ static u32 seccomp_run_filters(int syscall) |
22300 |
+ { |
22301 |
+ struct seccomp_filter *f; |
22302 |
+- struct seccomp_data sd; |
22303 |
+ u32 ret = SECCOMP_RET_ALLOW; |
22304 |
+ |
22305 |
+ /* Ensure unexpected behavior doesn't result in failing open. */ |
22306 |
+ if (WARN_ON(current->seccomp.filter == NULL)) |
22307 |
+ return SECCOMP_RET_KILL; |
22308 |
+ |
22309 |
+- populate_seccomp_data(&sd); |
22310 |
+- |
22311 |
+ /* |
22312 |
+ * All filters in the list are evaluated and the lowest BPF return |
22313 |
+ * value always takes priority (ignoring the DATA). |
22314 |
+ */ |
22315 |
+ for (f = current->seccomp.filter; f; f = f->prev) { |
22316 |
+- u32 cur_ret = SK_RUN_FILTER(f->prog, (void *)&sd); |
22317 |
+- |
22318 |
++ u32 cur_ret = sk_run_filter(NULL, f->insns); |
22319 |
+ if ((cur_ret & SECCOMP_RET_ACTION) < (ret & SECCOMP_RET_ACTION)) |
22320 |
+ ret = cur_ret; |
22321 |
+ } |
22322 |
+@@ -206,20 +231,18 @@ static long seccomp_attach_filter(struct sock_fprog *fprog) |
22323 |
+ struct seccomp_filter *filter; |
22324 |
+ unsigned long fp_size = fprog->len * sizeof(struct sock_filter); |
22325 |
+ unsigned long total_insns = fprog->len; |
22326 |
+- struct sock_filter *fp; |
22327 |
+- int new_len; |
22328 |
+ long ret; |
22329 |
+ |
22330 |
+ if (fprog->len == 0 || fprog->len > BPF_MAXINSNS) |
22331 |
+ return -EINVAL; |
22332 |
+ |
22333 |
+ for (filter = current->seccomp.filter; filter; filter = filter->prev) |
22334 |
+- total_insns += filter->prog->len + 4; /* include a 4 instr penalty */ |
22335 |
++ total_insns += filter->len + 4; /* include a 4 instr penalty */ |
22336 |
+ if (total_insns > MAX_INSNS_PER_PATH) |
22337 |
+ return -ENOMEM; |
22338 |
+ |
22339 |
+ /* |
22340 |
+- * Installing a seccomp filter requires that the task has |
22341 |
++ * Installing a seccomp filter requires that the task have |
22342 |
+ * CAP_SYS_ADMIN in its namespace or be running with no_new_privs. |
22343 |
+ * This avoids scenarios where unprivileged tasks can affect the |
22344 |
+ * behavior of privileged children. |
22345 |
+@@ -229,51 +252,28 @@ static long seccomp_attach_filter(struct sock_fprog *fprog) |
22346 |
+ CAP_SYS_ADMIN) != 0) |
22347 |
+ return -EACCES; |
22348 |
+ |
22349 |
+- fp = kzalloc(fp_size, GFP_KERNEL|__GFP_NOWARN); |
22350 |
+- if (!fp) |
22351 |
+- return -ENOMEM; |
22352 |
+- |
22353 |
+- /* Copy the instructions from fprog. */ |
22354 |
+- ret = -EFAULT; |
22355 |
+- if (copy_from_user(fp, fprog->filter, fp_size)) |
22356 |
+- goto free_prog; |
22357 |
+- |
22358 |
+- /* Check and rewrite the fprog via the skb checker */ |
22359 |
+- ret = sk_chk_filter(fp, fprog->len); |
22360 |
+- if (ret) |
22361 |
+- goto free_prog; |
22362 |
+- |
22363 |
+- /* Check and rewrite the fprog for seccomp use */ |
22364 |
+- ret = seccomp_check_filter(fp, fprog->len); |
22365 |
+- if (ret) |
22366 |
+- goto free_prog; |
22367 |
+- |
22368 |
+- /* Convert 'sock_filter' insns to 'sock_filter_int' insns */ |
22369 |
+- ret = sk_convert_filter(fp, fprog->len, NULL, &new_len); |
22370 |
+- if (ret) |
22371 |
+- goto free_prog; |
22372 |
+- |
22373 |
+ /* Allocate a new seccomp_filter */ |
22374 |
+- ret = -ENOMEM; |
22375 |
+- filter = kzalloc(sizeof(struct seccomp_filter), |
22376 |
++ filter = kzalloc(sizeof(struct seccomp_filter) + fp_size, |
22377 |
+ GFP_KERNEL|__GFP_NOWARN); |
22378 |
+ if (!filter) |
22379 |
+- goto free_prog; |
22380 |
+- |
22381 |
+- filter->prog = kzalloc(sk_filter_size(new_len), |
22382 |
+- GFP_KERNEL|__GFP_NOWARN); |
22383 |
+- if (!filter->prog) |
22384 |
+- goto free_filter; |
22385 |
+- |
22386 |
+- ret = sk_convert_filter(fp, fprog->len, filter->prog->insnsi, &new_len); |
22387 |
+- if (ret) |
22388 |
+- goto free_filter_prog; |
22389 |
+- kfree(fp); |
22390 |
+- |
22391 |
++ return -ENOMEM; |
22392 |
+ atomic_set(&filter->usage, 1); |
22393 |
+- filter->prog->len = new_len; |
22394 |
++ filter->len = fprog->len; |
22395 |
+ |
22396 |
+- sk_filter_select_runtime(filter->prog); |
22397 |
++ /* Copy the instructions from fprog. */ |
22398 |
++ ret = -EFAULT; |
22399 |
++ if (copy_from_user(filter->insns, fprog->filter, fp_size)) |
22400 |
++ goto fail; |
22401 |
++ |
22402 |
++ /* Check and rewrite the fprog via the skb checker */ |
22403 |
++ ret = sk_chk_filter(filter->insns, filter->len); |
22404 |
++ if (ret) |
22405 |
++ goto fail; |
22406 |
++ |
22407 |
++ /* Check and rewrite the fprog for seccomp use */ |
22408 |
++ ret = seccomp_check_filter(filter->insns, filter->len); |
22409 |
++ if (ret) |
22410 |
++ goto fail; |
22411 |
+ |
22412 |
+ /* |
22413 |
+ * If there is an existing filter, make it the prev and don't drop its |
22414 |
+@@ -282,13 +282,8 @@ static long seccomp_attach_filter(struct sock_fprog *fprog) |
22415 |
+ filter->prev = current->seccomp.filter; |
22416 |
+ current->seccomp.filter = filter; |
22417 |
+ return 0; |
22418 |
+- |
22419 |
+-free_filter_prog: |
22420 |
+- kfree(filter->prog); |
22421 |
+-free_filter: |
22422 |
++fail: |
22423 |
+ kfree(filter); |
22424 |
+-free_prog: |
22425 |
+- kfree(fp); |
22426 |
+ return ret; |
22427 |
+ } |
22428 |
+ |
22429 |
+@@ -298,7 +293,7 @@ free_prog: |
22430 |
+ * |
22431 |
+ * Returns 0 on success and non-zero otherwise. |
22432 |
+ */ |
22433 |
+-static long seccomp_attach_user_filter(char __user *user_filter) |
22434 |
++long seccomp_attach_user_filter(char __user *user_filter) |
22435 |
+ { |
22436 |
+ struct sock_fprog fprog; |
22437 |
+ long ret = -EFAULT; |
22438 |
+@@ -337,7 +332,6 @@ void put_seccomp_filter(struct task_struct *tsk) |
22439 |
+ while (orig && atomic_dec_and_test(&orig->usage)) { |
22440 |
+ struct seccomp_filter *freeme = orig; |
22441 |
+ orig = orig->prev; |
22442 |
+- sk_filter_free(freeme->prog); |
22443 |
+ kfree(freeme); |
22444 |
+ } |
22445 |
+ } |
22446 |
diff --git a/kernel/signal.c b/kernel/signal.c |
22447 |
-index 6ea13c0..31e3b25 100644 |
22448 |
+index a4077e9..f0d4e5c 100644 |
22449 |
--- a/kernel/signal.c |
22450 |
+++ b/kernel/signal.c |
22451 |
@@ -53,12 +53,12 @@ static struct kmem_cache *sigqueue_cachep; |
22452 |
@@ -90697,7 +94684,7 @@ index 6ea13c0..31e3b25 100644 |
22453 |
|
22454 |
handler = sig_handler(t, sig); |
22455 |
|
22456 |
-@@ -371,6 +371,9 @@ __sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, int override_rlimi |
22457 |
+@@ -372,6 +372,9 @@ __sigqueue_alloc(int sig, struct task_struct *t, gfp_t flags, int override_rlimi |
22458 |
atomic_inc(&user->sigpending); |
22459 |
rcu_read_unlock(); |
22460 |
|
22461 |
@@ -90707,7 +94694,7 @@ index 6ea13c0..31e3b25 100644 |
22462 |
if (override_rlimit || |
22463 |
atomic_read(&user->sigpending) <= |
22464 |
task_rlimit(t, RLIMIT_SIGPENDING)) { |
22465 |
-@@ -498,7 +501,7 @@ flush_signal_handlers(struct task_struct *t, int force_default) |
22466 |
+@@ -499,7 +502,7 @@ flush_signal_handlers(struct task_struct *t, int force_default) |
22467 |
|
22468 |
int unhandled_signal(struct task_struct *tsk, int sig) |
22469 |
{ |
22470 |
@@ -90716,7 +94703,7 @@ index 6ea13c0..31e3b25 100644 |
22471 |
if (is_global_init(tsk)) |
22472 |
return 1; |
22473 |
if (handler != SIG_IGN && handler != SIG_DFL) |
22474 |
-@@ -818,6 +821,13 @@ static int check_kill_permission(int sig, struct siginfo *info, |
22475 |
+@@ -793,6 +796,13 @@ static int check_kill_permission(int sig, struct siginfo *info, |
22476 |
} |
22477 |
} |
22478 |
|
22479 |
@@ -90730,7 +94717,7 @@ index 6ea13c0..31e3b25 100644 |
22480 |
return security_task_kill(t, info, sig, 0); |
22481 |
} |
22482 |
|
22483 |
-@@ -1201,7 +1211,7 @@ __group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p) |
22484 |
+@@ -1176,7 +1186,7 @@ __group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p) |
22485 |
return send_signal(sig, info, p, 1); |
22486 |
} |
22487 |
|
22488 |
@@ -90739,7 +94726,7 @@ index 6ea13c0..31e3b25 100644 |
22489 |
specific_send_sig_info(int sig, struct siginfo *info, struct task_struct *t) |
22490 |
{ |
22491 |
return send_signal(sig, info, t, 0); |
22492 |
-@@ -1238,6 +1248,7 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t) |
22493 |
+@@ -1213,6 +1223,7 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t) |
22494 |
unsigned long int flags; |
22495 |
int ret, blocked, ignored; |
22496 |
struct k_sigaction *action; |
22497 |
@@ -90747,7 +94734,7 @@ index 6ea13c0..31e3b25 100644 |
22498 |
|
22499 |
spin_lock_irqsave(&t->sighand->siglock, flags); |
22500 |
action = &t->sighand->action[sig-1]; |
22501 |
-@@ -1252,9 +1263,18 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t) |
22502 |
+@@ -1227,9 +1238,18 @@ force_sig_info(int sig, struct siginfo *info, struct task_struct *t) |
22503 |
} |
22504 |
if (action->sa.sa_handler == SIG_DFL) |
22505 |
t->signal->flags &= ~SIGNAL_UNKILLABLE; |
22506 |
@@ -90766,7 +94753,7 @@ index 6ea13c0..31e3b25 100644 |
22507 |
return ret; |
22508 |
} |
22509 |
|
22510 |
-@@ -1321,8 +1341,11 @@ int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p) |
22511 |
+@@ -1296,8 +1316,11 @@ int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p) |
22512 |
ret = check_kill_permission(sig, info, p); |
22513 |
rcu_read_unlock(); |
22514 |
|
22515 |
@@ -90779,7 +94766,7 @@ index 6ea13c0..31e3b25 100644 |
22516 |
|
22517 |
return ret; |
22518 |
} |
22519 |
-@@ -2928,7 +2951,15 @@ do_send_specific(pid_t tgid, pid_t pid, int sig, struct siginfo *info) |
22520 |
+@@ -2903,7 +2926,15 @@ do_send_specific(pid_t tgid, pid_t pid, int sig, struct siginfo *info) |
22521 |
int error = -ESRCH; |
22522 |
|
22523 |
rcu_read_lock(); |
22524 |
@@ -90796,7 +94783,7 @@ index 6ea13c0..31e3b25 100644 |
22525 |
if (p && (tgid <= 0 || task_tgid_vnr(p) == tgid)) { |
22526 |
error = check_kill_permission(sig, info, p); |
22527 |
/* |
22528 |
-@@ -3241,8 +3272,8 @@ COMPAT_SYSCALL_DEFINE2(sigaltstack, |
22529 |
+@@ -3236,8 +3267,8 @@ COMPAT_SYSCALL_DEFINE2(sigaltstack, |
22530 |
} |
22531 |
seg = get_fs(); |
22532 |
set_fs(KERNEL_DS); |
22533 |
@@ -90830,7 +94817,7 @@ index eb89e18..a4e6792 100644 |
22534 |
mutex_unlock(&smpboot_threads_lock); |
22535 |
put_online_cpus(); |
22536 |
diff --git a/kernel/softirq.c b/kernel/softirq.c |
22537 |
-index 92f24f5..db41501 100644 |
22538 |
+index 5918d22..e95d1926 100644 |
22539 |
--- a/kernel/softirq.c |
22540 |
+++ b/kernel/softirq.c |
22541 |
@@ -53,7 +53,7 @@ irq_cpustat_t irq_stat[NR_CPUS] ____cacheline_aligned; |
22542 |
@@ -90842,7 +94829,7 @@ index 92f24f5..db41501 100644 |
22543 |
|
22544 |
DEFINE_PER_CPU(struct task_struct *, ksoftirqd); |
22545 |
|
22546 |
-@@ -268,7 +268,7 @@ restart: |
22547 |
+@@ -266,7 +266,7 @@ restart: |
22548 |
kstat_incr_softirqs_this_cpu(vec_nr); |
22549 |
|
22550 |
trace_softirq_entry(vec_nr); |
22551 |
@@ -90851,7 +94838,7 @@ index 92f24f5..db41501 100644 |
22552 |
trace_softirq_exit(vec_nr); |
22553 |
if (unlikely(prev_count != preempt_count())) { |
22554 |
pr_err("huh, entered softirq %u %s %p with preempt_count %08x, exited with %08x?\n", |
22555 |
-@@ -428,7 +428,7 @@ void __raise_softirq_irqoff(unsigned int nr) |
22556 |
+@@ -426,7 +426,7 @@ void __raise_softirq_irqoff(unsigned int nr) |
22557 |
or_softirq_pending(1UL << nr); |
22558 |
} |
22559 |
|
22560 |
@@ -90860,7 +94847,7 @@ index 92f24f5..db41501 100644 |
22561 |
{ |
22562 |
softirq_vec[nr].action = action; |
22563 |
} |
22564 |
-@@ -480,7 +480,7 @@ void __tasklet_hi_schedule_first(struct tasklet_struct *t) |
22565 |
+@@ -478,7 +478,7 @@ void __tasklet_hi_schedule_first(struct tasklet_struct *t) |
22566 |
} |
22567 |
EXPORT_SYMBOL(__tasklet_hi_schedule_first); |
22568 |
|
22569 |
@@ -90869,7 +94856,7 @@ index 92f24f5..db41501 100644 |
22570 |
{ |
22571 |
struct tasklet_struct *list; |
22572 |
|
22573 |
-@@ -516,7 +516,7 @@ static void tasklet_action(struct softirq_action *a) |
22574 |
+@@ -514,7 +514,7 @@ static void tasklet_action(struct softirq_action *a) |
22575 |
} |
22576 |
} |
22577 |
|
22578 |
@@ -90878,7 +94865,7 @@ index 92f24f5..db41501 100644 |
22579 |
{ |
22580 |
struct tasklet_struct *list; |
22581 |
|
22582 |
-@@ -743,7 +743,7 @@ static struct notifier_block cpu_nfb = { |
22583 |
+@@ -741,7 +741,7 @@ static struct notifier_block cpu_nfb = { |
22584 |
.notifier_call = cpu_callback |
22585 |
}; |
22586 |
|
22587 |
@@ -90888,7 +94875,7 @@ index 92f24f5..db41501 100644 |
22588 |
.thread_should_run = ksoftirqd_should_run, |
22589 |
.thread_fn = run_ksoftirqd, |
22590 |
diff --git a/kernel/sys.c b/kernel/sys.c |
22591 |
-index fba0f29..84400e2 100644 |
22592 |
+index 66a751e..a42497e 100644 |
22593 |
--- a/kernel/sys.c |
22594 |
+++ b/kernel/sys.c |
22595 |
@@ -148,6 +148,12 @@ static int set_one_prio(struct task_struct *p, int niceval, int error) |
22596 |
@@ -90904,17 +94891,28 @@ index fba0f29..84400e2 100644 |
22597 |
no_nice = security_task_setnice(p, niceval); |
22598 |
if (no_nice) { |
22599 |
error = no_nice; |
22600 |
-@@ -351,6 +357,9 @@ SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid) |
22601 |
+@@ -351,6 +357,20 @@ SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid) |
22602 |
goto error; |
22603 |
} |
22604 |
|
22605 |
+ if (gr_check_group_change(new->gid, new->egid, INVALID_GID)) |
22606 |
+ goto error; |
22607 |
+ |
22608 |
++ if (!gid_eq(new->gid, old->gid)) { |
22609 |
++ /* make sure we generate a learn log for what will |
22610 |
++ end up being a role transition after a full-learning |
22611 |
++ policy is generated |
22612 |
++ CAP_SETGID is required to perform a transition |
22613 |
++ we may not log a CAP_SETGID check above, e.g. |
22614 |
++ in the case where new rgid = old egid |
22615 |
++ */ |
22616 |
++ gr_learn_cap(current, new, CAP_SETGID); |
22617 |
++ } |
22618 |
++ |
22619 |
if (rgid != (gid_t) -1 || |
22620 |
(egid != (gid_t) -1 && !gid_eq(kegid, old->gid))) |
22621 |
new->sgid = new->egid; |
22622 |
-@@ -386,6 +395,10 @@ SYSCALL_DEFINE1(setgid, gid_t, gid) |
22623 |
+@@ -386,6 +406,10 @@ SYSCALL_DEFINE1(setgid, gid_t, gid) |
22624 |
old = current_cred(); |
22625 |
|
22626 |
retval = -EPERM; |
22627 |
@@ -90925,7 +94923,7 @@ index fba0f29..84400e2 100644 |
22628 |
if (ns_capable(old->user_ns, CAP_SETGID)) |
22629 |
new->gid = new->egid = new->sgid = new->fsgid = kgid; |
22630 |
else if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->sgid)) |
22631 |
-@@ -403,7 +416,7 @@ error: |
22632 |
+@@ -403,7 +427,7 @@ error: |
22633 |
/* |
22634 |
* change the user struct in a credentials set to match the new UID |
22635 |
*/ |
22636 |
@@ -90934,7 +94932,7 @@ index fba0f29..84400e2 100644 |
22637 |
{ |
22638 |
struct user_struct *new_user; |
22639 |
|
22640 |
-@@ -483,6 +496,9 @@ SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid) |
22641 |
+@@ -483,7 +507,18 @@ SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid) |
22642 |
goto error; |
22643 |
} |
22644 |
|
22645 |
@@ -90942,9 +94940,18 @@ index fba0f29..84400e2 100644 |
22646 |
+ goto error; |
22647 |
+ |
22648 |
if (!uid_eq(new->uid, old->uid)) { |
22649 |
++ /* make sure we generate a learn log for what will |
22650 |
++ end up being a role transition after a full-learning |
22651 |
++ policy is generated |
22652 |
++ CAP_SETUID is required to perform a transition |
22653 |
++ we may not log a CAP_SETUID check above, e.g. |
22654 |
++ in the case where new ruid = old euid |
22655 |
++ */ |
22656 |
++ gr_learn_cap(current, new, CAP_SETUID); |
22657 |
retval = set_user(new); |
22658 |
if (retval < 0) |
22659 |
-@@ -533,6 +549,12 @@ SYSCALL_DEFINE1(setuid, uid_t, uid) |
22660 |
+ goto error; |
22661 |
+@@ -533,6 +568,12 @@ SYSCALL_DEFINE1(setuid, uid_t, uid) |
22662 |
old = current_cred(); |
22663 |
|
22664 |
retval = -EPERM; |
22665 |
@@ -90957,7 +94964,7 @@ index fba0f29..84400e2 100644 |
22666 |
if (ns_capable(old->user_ns, CAP_SETUID)) { |
22667 |
new->suid = new->uid = kuid; |
22668 |
if (!uid_eq(kuid, old->uid)) { |
22669 |
-@@ -602,6 +624,9 @@ SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid) |
22670 |
+@@ -602,6 +643,9 @@ SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid) |
22671 |
goto error; |
22672 |
} |
22673 |
|
22674 |
@@ -90967,7 +94974,7 @@ index fba0f29..84400e2 100644 |
22675 |
if (ruid != (uid_t) -1) { |
22676 |
new->uid = kruid; |
22677 |
if (!uid_eq(kruid, old->uid)) { |
22678 |
-@@ -684,6 +709,9 @@ SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid) |
22679 |
+@@ -684,6 +728,9 @@ SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid) |
22680 |
goto error; |
22681 |
} |
22682 |
|
22683 |
@@ -90977,7 +94984,7 @@ index fba0f29..84400e2 100644 |
22684 |
if (rgid != (gid_t) -1) |
22685 |
new->gid = krgid; |
22686 |
if (egid != (gid_t) -1) |
22687 |
-@@ -745,12 +773,16 @@ SYSCALL_DEFINE1(setfsuid, uid_t, uid) |
22688 |
+@@ -745,12 +792,16 @@ SYSCALL_DEFINE1(setfsuid, uid_t, uid) |
22689 |
uid_eq(kuid, old->suid) || uid_eq(kuid, old->fsuid) || |
22690 |
ns_capable(old->user_ns, CAP_SETUID)) { |
22691 |
if (!uid_eq(kuid, old->fsuid)) { |
22692 |
@@ -90994,7 +95001,7 @@ index fba0f29..84400e2 100644 |
22693 |
abort_creds(new); |
22694 |
return old_fsuid; |
22695 |
|
22696 |
-@@ -783,12 +815,16 @@ SYSCALL_DEFINE1(setfsgid, gid_t, gid) |
22697 |
+@@ -783,12 +834,16 @@ SYSCALL_DEFINE1(setfsgid, gid_t, gid) |
22698 |
if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->egid) || |
22699 |
gid_eq(kgid, old->sgid) || gid_eq(kgid, old->fsgid) || |
22700 |
ns_capable(old->user_ns, CAP_SETGID)) { |
22701 |
@@ -91011,7 +95018,7 @@ index fba0f29..84400e2 100644 |
22702 |
abort_creds(new); |
22703 |
return old_fsgid; |
22704 |
|
22705 |
-@@ -1167,19 +1203,19 @@ SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name) |
22706 |
+@@ -1167,19 +1222,19 @@ SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name) |
22707 |
return -EFAULT; |
22708 |
|
22709 |
down_read(&uts_sem); |
22710 |
@@ -91036,7 +95043,7 @@ index fba0f29..84400e2 100644 |
22711 |
__OLD_UTS_LEN); |
22712 |
error |= __put_user(0, name->machine + __OLD_UTS_LEN); |
22713 |
up_read(&uts_sem); |
22714 |
-@@ -1381,6 +1417,13 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource, |
22715 |
+@@ -1381,6 +1436,13 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource, |
22716 |
*/ |
22717 |
new_rlim->rlim_cur = 1; |
22718 |
} |
22719 |
@@ -91051,7 +95058,7 @@ index fba0f29..84400e2 100644 |
22720 |
if (!retval) { |
22721 |
if (old_rlim) |
22722 |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c |
22723 |
-index 0e0373f..69f5181 100644 |
22724 |
+index 75b22e2..65c0ac8 100644 |
22725 |
--- a/kernel/sysctl.c |
22726 |
+++ b/kernel/sysctl.c |
22727 |
@@ -94,7 +94,6 @@ |
22728 |
@@ -91092,7 +95099,7 @@ index 0e0373f..69f5181 100644 |
22729 |
#endif |
22730 |
|
22731 |
/* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */ |
22732 |
-@@ -178,10 +178,8 @@ static int proc_taint(struct ctl_table *table, int write, |
22733 |
+@@ -181,10 +181,8 @@ static int proc_taint(struct ctl_table *table, int write, |
22734 |
void __user *buffer, size_t *lenp, loff_t *ppos); |
22735 |
#endif |
22736 |
|
22737 |
@@ -91103,7 +95110,7 @@ index 0e0373f..69f5181 100644 |
22738 |
|
22739 |
static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write, |
22740 |
void __user *buffer, size_t *lenp, loff_t *ppos); |
22741 |
-@@ -212,6 +210,8 @@ static int sysrq_sysctl_handler(ctl_table *table, int write, |
22742 |
+@@ -215,6 +213,8 @@ static int sysrq_sysctl_handler(struct ctl_table *table, int write, |
22743 |
|
22744 |
#endif |
22745 |
|
22746 |
@@ -91112,7 +95119,7 @@ index 0e0373f..69f5181 100644 |
22747 |
static struct ctl_table kern_table[]; |
22748 |
static struct ctl_table vm_table[]; |
22749 |
static struct ctl_table fs_table[]; |
22750 |
-@@ -226,6 +226,20 @@ extern struct ctl_table epoll_table[]; |
22751 |
+@@ -229,6 +229,20 @@ extern struct ctl_table epoll_table[]; |
22752 |
int sysctl_legacy_va_layout; |
22753 |
#endif |
22754 |
|
22755 |
@@ -91133,7 +95140,7 @@ index 0e0373f..69f5181 100644 |
22756 |
/* The default sysctl tables: */ |
22757 |
|
22758 |
static struct ctl_table sysctl_base_table[] = { |
22759 |
-@@ -274,6 +288,22 @@ static int max_extfrag_threshold = 1000; |
22760 |
+@@ -277,6 +291,22 @@ static int max_extfrag_threshold = 1000; |
22761 |
#endif |
22762 |
|
22763 |
static struct ctl_table kern_table[] = { |
22764 |
@@ -91156,7 +95163,7 @@ index 0e0373f..69f5181 100644 |
22765 |
{ |
22766 |
.procname = "sched_child_runs_first", |
22767 |
.data = &sysctl_sched_child_runs_first, |
22768 |
-@@ -629,7 +659,7 @@ static struct ctl_table kern_table[] = { |
22769 |
+@@ -641,7 +671,7 @@ static struct ctl_table kern_table[] = { |
22770 |
.data = &modprobe_path, |
22771 |
.maxlen = KMOD_PATH_LEN, |
22772 |
.mode = 0644, |
22773 |
@@ -91165,7 +95172,7 @@ index 0e0373f..69f5181 100644 |
22774 |
}, |
22775 |
{ |
22776 |
.procname = "modules_disabled", |
22777 |
-@@ -796,16 +826,20 @@ static struct ctl_table kern_table[] = { |
22778 |
+@@ -808,16 +838,20 @@ static struct ctl_table kern_table[] = { |
22779 |
.extra1 = &zero, |
22780 |
.extra2 = &one, |
22781 |
}, |
22782 |
@@ -91187,7 +95194,7 @@ index 0e0373f..69f5181 100644 |
22783 |
{ |
22784 |
.procname = "ngroups_max", |
22785 |
.data = &ngroups_max, |
22786 |
-@@ -1050,10 +1084,17 @@ static struct ctl_table kern_table[] = { |
22787 |
+@@ -1073,10 +1107,17 @@ static struct ctl_table kern_table[] = { |
22788 |
*/ |
22789 |
{ |
22790 |
.procname = "perf_event_paranoid", |
22791 |
@@ -91208,7 +95215,7 @@ index 0e0373f..69f5181 100644 |
22792 |
}, |
22793 |
{ |
22794 |
.procname = "perf_event_mlock_kb", |
22795 |
-@@ -1315,6 +1356,13 @@ static struct ctl_table vm_table[] = { |
22796 |
+@@ -1338,6 +1379,13 @@ static struct ctl_table vm_table[] = { |
22797 |
.proc_handler = proc_dointvec_minmax, |
22798 |
.extra1 = &zero, |
22799 |
}, |
22800 |
@@ -91222,8 +95229,8 @@ index 0e0373f..69f5181 100644 |
22801 |
#else |
22802 |
{ |
22803 |
.procname = "nr_trim_pages", |
22804 |
-@@ -1779,6 +1827,16 @@ int proc_dostring(struct ctl_table *table, int write, |
22805 |
- buffer, lenp, ppos); |
22806 |
+@@ -1827,6 +1875,16 @@ int proc_dostring(struct ctl_table *table, int write, |
22807 |
+ (char __user *)buffer, lenp, ppos); |
22808 |
} |
22809 |
|
22810 |
+int proc_dostring_modpriv(struct ctl_table *table, int write, |
22811 |
@@ -91239,7 +95246,7 @@ index 0e0373f..69f5181 100644 |
22812 |
static size_t proc_skip_spaces(char **buf) |
22813 |
{ |
22814 |
size_t ret; |
22815 |
-@@ -1884,6 +1942,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val, |
22816 |
+@@ -1932,6 +1990,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val, |
22817 |
len = strlen(tmp); |
22818 |
if (len > *size) |
22819 |
len = *size; |
22820 |
@@ -91248,7 +95255,7 @@ index 0e0373f..69f5181 100644 |
22821 |
if (copy_to_user(*buf, tmp, len)) |
22822 |
return -EFAULT; |
22823 |
*size -= len; |
22824 |
-@@ -2048,7 +2108,7 @@ int proc_dointvec(struct ctl_table *table, int write, |
22825 |
+@@ -2109,7 +2169,7 @@ int proc_dointvec(struct ctl_table *table, int write, |
22826 |
static int proc_taint(struct ctl_table *table, int write, |
22827 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
22828 |
{ |
22829 |
@@ -91257,7 +95264,7 @@ index 0e0373f..69f5181 100644 |
22830 |
unsigned long tmptaint = get_taint(); |
22831 |
int err; |
22832 |
|
22833 |
-@@ -2076,7 +2136,6 @@ static int proc_taint(struct ctl_table *table, int write, |
22834 |
+@@ -2137,7 +2197,6 @@ static int proc_taint(struct ctl_table *table, int write, |
22835 |
return err; |
22836 |
} |
22837 |
|
22838 |
@@ -91265,7 +95272,7 @@ index 0e0373f..69f5181 100644 |
22839 |
static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, |
22840 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
22841 |
{ |
22842 |
-@@ -2085,7 +2144,6 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, |
22843 |
+@@ -2146,7 +2205,6 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write, |
22844 |
|
22845 |
return proc_dointvec_minmax(table, write, buffer, lenp, ppos); |
22846 |
} |
22847 |
@@ -91273,7 +95280,7 @@ index 0e0373f..69f5181 100644 |
22848 |
|
22849 |
struct do_proc_dointvec_minmax_conv_param { |
22850 |
int *min; |
22851 |
-@@ -2632,6 +2690,12 @@ int proc_dostring(struct ctl_table *table, int write, |
22852 |
+@@ -2706,6 +2764,12 @@ int proc_dostring(struct ctl_table *table, int write, |
22853 |
return -ENOSYS; |
22854 |
} |
22855 |
|
22856 |
@@ -91286,7 +95293,7 @@ index 0e0373f..69f5181 100644 |
22857 |
int proc_dointvec(struct ctl_table *table, int write, |
22858 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
22859 |
{ |
22860 |
-@@ -2688,5 +2752,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax); |
22861 |
+@@ -2762,5 +2826,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax); |
22862 |
EXPORT_SYMBOL(proc_dointvec_userhz_jiffies); |
22863 |
EXPORT_SYMBOL(proc_dointvec_ms_jiffies); |
22864 |
EXPORT_SYMBOL(proc_dostring); |
22865 |
@@ -91350,7 +95357,7 @@ index fe75444..190c528 100644 |
22866 |
.clock_get = alarm_clock_get, |
22867 |
.timer_create = alarm_timer_create, |
22868 |
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c |
22869 |
-index f7df8ea..0810193 100644 |
22870 |
+index 32d8d6a..11486af 100644 |
22871 |
--- a/kernel/time/timekeeping.c |
22872 |
+++ b/kernel/time/timekeeping.c |
22873 |
@@ -15,6 +15,7 @@ |
22874 |
@@ -91510,10 +95517,10 @@ index 3bb01a3..0e7760e 100644 |
22875 |
struct timer_list timer; |
22876 |
unsigned long expire; |
22877 |
diff --git a/kernel/torture.c b/kernel/torture.c |
22878 |
-index acc9afc..4f9eb49 100644 |
22879 |
+index 40bb511..91190b9 100644 |
22880 |
--- a/kernel/torture.c |
22881 |
+++ b/kernel/torture.c |
22882 |
-@@ -489,7 +489,7 @@ static int torture_shutdown_notify(struct notifier_block *unused1, |
22883 |
+@@ -484,7 +484,7 @@ static int torture_shutdown_notify(struct notifier_block *unused1, |
22884 |
mutex_lock(&fullstop_mutex); |
22885 |
if (ACCESS_ONCE(fullstop) == FULLSTOP_DONTSTOP) { |
22886 |
VERBOSE_TOROUT_STRING("Unscheduled system shutdown detected"); |
22887 |
@@ -91522,10 +95529,14 @@ index acc9afc..4f9eb49 100644 |
22888 |
} else { |
22889 |
pr_warn("Concurrent rmmod and shutdown illegal!\n"); |
22890 |
} |
22891 |
-@@ -551,11 +551,11 @@ static int torture_stutter(void *arg) |
22892 |
- do { |
22893 |
+@@ -551,14 +551,14 @@ static int torture_stutter(void *arg) |
22894 |
if (!torture_must_stop()) { |
22895 |
- schedule_timeout_interruptible(stutter); |
22896 |
+ if (stutter > 1) { |
22897 |
+ schedule_timeout_interruptible(stutter - 1); |
22898 |
+- ACCESS_ONCE(stutter_pause_test) = 2; |
22899 |
++ ACCESS_ONCE_RW(stutter_pause_test) = 2; |
22900 |
+ } |
22901 |
+ schedule_timeout_interruptible(1); |
22902 |
- ACCESS_ONCE(stutter_pause_test) = 1; |
22903 |
+ ACCESS_ONCE_RW(stutter_pause_test) = 1; |
22904 |
} |
22905 |
@@ -91536,7 +95547,7 @@ index acc9afc..4f9eb49 100644 |
22906 |
torture_shutdown_absorb("torture_stutter"); |
22907 |
} while (!torture_must_stop()); |
22908 |
torture_kthread_stopping("torture_stutter"); |
22909 |
-@@ -636,7 +636,7 @@ bool torture_cleanup(void) |
22910 |
+@@ -645,7 +645,7 @@ bool torture_cleanup(void) |
22911 |
schedule_timeout_uninterruptible(10); |
22912 |
return true; |
22913 |
} |
22914 |
@@ -91577,10 +95588,10 @@ index c1bd4ad..4b861dc 100644 |
22915 |
|
22916 |
ret = -EIO; |
22917 |
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c |
22918 |
-index 5aeac53..863ed29 100644 |
22919 |
+index ac9d1da..ce98b35 100644 |
22920 |
--- a/kernel/trace/ftrace.c |
22921 |
+++ b/kernel/trace/ftrace.c |
22922 |
-@@ -1960,12 +1960,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) |
22923 |
+@@ -1920,12 +1920,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) |
22924 |
if (unlikely(ftrace_disabled)) |
22925 |
return 0; |
22926 |
|
22927 |
@@ -91600,7 +95611,7 @@ index 5aeac53..863ed29 100644 |
22928 |
} |
22929 |
|
22930 |
/* |
22931 |
-@@ -4195,8 +4200,10 @@ static int ftrace_process_locs(struct module *mod, |
22932 |
+@@ -4126,8 +4131,10 @@ static int ftrace_process_locs(struct module *mod, |
22933 |
if (!count) |
22934 |
return 0; |
22935 |
|
22936 |
@@ -91611,36 +95622,8 @@ index 5aeac53..863ed29 100644 |
22937 |
|
22938 |
start_pg = ftrace_allocate_pages(count); |
22939 |
if (!start_pg) |
22940 |
-@@ -4908,8 +4915,6 @@ ftrace_enable_sysctl(struct ctl_table *table, int write, |
22941 |
- #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
22942 |
- |
22943 |
- static int ftrace_graph_active; |
22944 |
--static struct notifier_block ftrace_suspend_notifier; |
22945 |
-- |
22946 |
- int ftrace_graph_entry_stub(struct ftrace_graph_ent *trace) |
22947 |
- { |
22948 |
- return 0; |
22949 |
-@@ -5085,6 +5090,10 @@ static void update_function_graph_func(void) |
22950 |
- ftrace_graph_entry = ftrace_graph_entry_test; |
22951 |
- } |
22952 |
- |
22953 |
-+static struct notifier_block ftrace_suspend_notifier = { |
22954 |
-+ .notifier_call = ftrace_suspend_notifier_call |
22955 |
-+}; |
22956 |
-+ |
22957 |
- int register_ftrace_graph(trace_func_graph_ret_t retfunc, |
22958 |
- trace_func_graph_ent_t entryfunc) |
22959 |
- { |
22960 |
-@@ -5098,7 +5107,6 @@ int register_ftrace_graph(trace_func_graph_ret_t retfunc, |
22961 |
- goto out; |
22962 |
- } |
22963 |
- |
22964 |
-- ftrace_suspend_notifier.notifier_call = ftrace_suspend_notifier_call; |
22965 |
- register_pm_notifier(&ftrace_suspend_notifier); |
22966 |
- |
22967 |
- ftrace_graph_active++; |
22968 |
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c |
22969 |
-index ff70271..e1e8cf1 100644 |
22970 |
+index ff70271..4242e69 100644 |
22971 |
--- a/kernel/trace/ring_buffer.c |
22972 |
+++ b/kernel/trace/ring_buffer.c |
22973 |
@@ -352,9 +352,9 @@ struct buffer_data_page { |
22974 |
@@ -91666,7 +95649,31 @@ index ff70271..e1e8cf1 100644 |
22975 |
local_t dropped_events; |
22976 |
local_t committing; |
22977 |
local_t commits; |
22978 |
-@@ -991,8 +991,8 @@ static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer, |
22979 |
+@@ -626,8 +626,22 @@ int ring_buffer_poll_wait(struct ring_buffer *buffer, int cpu, |
22980 |
+ work = &cpu_buffer->irq_work; |
22981 |
+ } |
22982 |
+ |
22983 |
+- work->waiters_pending = true; |
22984 |
+ poll_wait(filp, &work->waiters, poll_table); |
22985 |
++ work->waiters_pending = true; |
22986 |
++ /* |
22987 |
++ * There's a tight race between setting the waiters_pending and |
22988 |
++ * checking if the ring buffer is empty. Once the waiters_pending bit |
22989 |
++ * is set, the next event will wake the task up, but we can get stuck |
22990 |
++ * if there's only a single event in. |
22991 |
++ * |
22992 |
++ * FIXME: Ideally, we need a memory barrier on the writer side as well, |
22993 |
++ * but adding a memory barrier to all events will cause too much of a |
22994 |
++ * performance hit in the fast path. We only need a memory barrier when |
22995 |
++ * the buffer goes from empty to having content. But as this race is |
22996 |
++ * extremely small, and it's not a problem if another event comes in, we |
22997 |
++ * will fix it later. |
22998 |
++ */ |
22999 |
++ smp_mb(); |
23000 |
+ |
23001 |
+ if ((cpu == RING_BUFFER_ALL_CPUS && !ring_buffer_empty(buffer)) || |
23002 |
+ (cpu != RING_BUFFER_ALL_CPUS && !ring_buffer_empty_cpu(buffer, cpu))) |
23003 |
+@@ -991,8 +1005,8 @@ static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer, |
23004 |
* |
23005 |
* We add a counter to the write field to denote this. |
23006 |
*/ |
23007 |
@@ -91677,7 +95684,7 @@ index ff70271..e1e8cf1 100644 |
23008 |
|
23009 |
/* |
23010 |
* Just make sure we have seen our old_write and synchronize |
23011 |
-@@ -1020,8 +1020,8 @@ static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer, |
23012 |
+@@ -1020,8 +1034,8 @@ static int rb_tail_page_update(struct ring_buffer_per_cpu *cpu_buffer, |
23013 |
* cmpxchg to only update if an interrupt did not already |
23014 |
* do it for us. If the cmpxchg fails, we don't care. |
23015 |
*/ |
23016 |
@@ -91688,7 +95695,7 @@ index ff70271..e1e8cf1 100644 |
23017 |
|
23018 |
/* |
23019 |
* No need to worry about races with clearing out the commit. |
23020 |
-@@ -1388,12 +1388,12 @@ static void rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer); |
23021 |
+@@ -1388,12 +1402,12 @@ static void rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer); |
23022 |
|
23023 |
static inline unsigned long rb_page_entries(struct buffer_page *bpage) |
23024 |
{ |
23025 |
@@ -91703,7 +95710,7 @@ index ff70271..e1e8cf1 100644 |
23026 |
} |
23027 |
|
23028 |
static int |
23029 |
-@@ -1488,7 +1488,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned int nr_pages) |
23030 |
+@@ -1488,7 +1502,7 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned int nr_pages) |
23031 |
* bytes consumed in ring buffer from here. |
23032 |
* Increment overrun to account for the lost events. |
23033 |
*/ |
23034 |
@@ -91712,7 +95719,7 @@ index ff70271..e1e8cf1 100644 |
23035 |
local_sub(BUF_PAGE_SIZE, &cpu_buffer->entries_bytes); |
23036 |
} |
23037 |
|
23038 |
-@@ -2066,7 +2066,7 @@ rb_handle_head_page(struct ring_buffer_per_cpu *cpu_buffer, |
23039 |
+@@ -2066,7 +2080,7 @@ rb_handle_head_page(struct ring_buffer_per_cpu *cpu_buffer, |
23040 |
* it is our responsibility to update |
23041 |
* the counters. |
23042 |
*/ |
23043 |
@@ -91721,7 +95728,7 @@ index ff70271..e1e8cf1 100644 |
23044 |
local_sub(BUF_PAGE_SIZE, &cpu_buffer->entries_bytes); |
23045 |
|
23046 |
/* |
23047 |
-@@ -2216,7 +2216,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
23048 |
+@@ -2216,7 +2230,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
23049 |
if (tail == BUF_PAGE_SIZE) |
23050 |
tail_page->real_end = 0; |
23051 |
|
23052 |
@@ -91730,7 +95737,7 @@ index ff70271..e1e8cf1 100644 |
23053 |
return; |
23054 |
} |
23055 |
|
23056 |
-@@ -2251,7 +2251,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
23057 |
+@@ -2251,7 +2265,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
23058 |
rb_event_set_padding(event); |
23059 |
|
23060 |
/* Set the write back to the previous setting */ |
23061 |
@@ -91739,7 +95746,7 @@ index ff70271..e1e8cf1 100644 |
23062 |
return; |
23063 |
} |
23064 |
|
23065 |
-@@ -2263,7 +2263,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
23066 |
+@@ -2263,7 +2277,7 @@ rb_reset_tail(struct ring_buffer_per_cpu *cpu_buffer, |
23067 |
|
23068 |
/* Set write to end of buffer */ |
23069 |
length = (tail + length) - BUF_PAGE_SIZE; |
23070 |
@@ -91748,7 +95755,7 @@ index ff70271..e1e8cf1 100644 |
23071 |
} |
23072 |
|
23073 |
/* |
23074 |
-@@ -2289,7 +2289,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer, |
23075 |
+@@ -2289,7 +2303,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer, |
23076 |
* about it. |
23077 |
*/ |
23078 |
if (unlikely(next_page == commit_page)) { |
23079 |
@@ -91757,7 +95764,7 @@ index ff70271..e1e8cf1 100644 |
23080 |
goto out_reset; |
23081 |
} |
23082 |
|
23083 |
-@@ -2345,7 +2345,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer, |
23084 |
+@@ -2345,7 +2359,7 @@ rb_move_tail(struct ring_buffer_per_cpu *cpu_buffer, |
23085 |
cpu_buffer->tail_page) && |
23086 |
(cpu_buffer->commit_page == |
23087 |
cpu_buffer->reader_page))) { |
23088 |
@@ -91766,7 +95773,7 @@ index ff70271..e1e8cf1 100644 |
23089 |
goto out_reset; |
23090 |
} |
23091 |
} |
23092 |
-@@ -2393,7 +2393,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer, |
23093 |
+@@ -2393,7 +2407,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer, |
23094 |
length += RB_LEN_TIME_EXTEND; |
23095 |
|
23096 |
tail_page = cpu_buffer->tail_page; |
23097 |
@@ -91775,7 +95782,7 @@ index ff70271..e1e8cf1 100644 |
23098 |
|
23099 |
/* set write to only the index of the write */ |
23100 |
write &= RB_WRITE_MASK; |
23101 |
-@@ -2417,7 +2417,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer, |
23102 |
+@@ -2417,7 +2431,7 @@ __rb_reserve_next(struct ring_buffer_per_cpu *cpu_buffer, |
23103 |
kmemcheck_annotate_bitfield(event, bitfield); |
23104 |
rb_update_event(cpu_buffer, event, length, add_timestamp, delta); |
23105 |
|
23106 |
@@ -91784,7 +95791,7 @@ index ff70271..e1e8cf1 100644 |
23107 |
|
23108 |
/* |
23109 |
* If this is the first commit on the page, then update |
23110 |
-@@ -2450,7 +2450,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer, |
23111 |
+@@ -2450,7 +2464,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer, |
23112 |
|
23113 |
if (bpage->page == (void *)addr && rb_page_write(bpage) == old_index) { |
23114 |
unsigned long write_mask = |
23115 |
@@ -91793,7 +95800,7 @@ index ff70271..e1e8cf1 100644 |
23116 |
unsigned long event_length = rb_event_length(event); |
23117 |
/* |
23118 |
* This is on the tail page. It is possible that |
23119 |
-@@ -2460,7 +2460,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer, |
23120 |
+@@ -2460,7 +2474,7 @@ rb_try_to_discard(struct ring_buffer_per_cpu *cpu_buffer, |
23121 |
*/ |
23122 |
old_index += write_mask; |
23123 |
new_index += write_mask; |
23124 |
@@ -91802,7 +95809,7 @@ index ff70271..e1e8cf1 100644 |
23125 |
if (index == old_index) { |
23126 |
/* update counters */ |
23127 |
local_sub(event_length, &cpu_buffer->entries_bytes); |
23128 |
-@@ -2852,7 +2852,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer, |
23129 |
+@@ -2852,7 +2866,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer, |
23130 |
|
23131 |
/* Do the likely case first */ |
23132 |
if (likely(bpage->page == (void *)addr)) { |
23133 |
@@ -91811,7 +95818,7 @@ index ff70271..e1e8cf1 100644 |
23134 |
return; |
23135 |
} |
23136 |
|
23137 |
-@@ -2864,7 +2864,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer, |
23138 |
+@@ -2864,7 +2878,7 @@ rb_decrement_entry(struct ring_buffer_per_cpu *cpu_buffer, |
23139 |
start = bpage; |
23140 |
do { |
23141 |
if (bpage->page == (void *)addr) { |
23142 |
@@ -91820,7 +95827,7 @@ index ff70271..e1e8cf1 100644 |
23143 |
return; |
23144 |
} |
23145 |
rb_inc_page(cpu_buffer, &bpage); |
23146 |
-@@ -3148,7 +3148,7 @@ static inline unsigned long |
23147 |
+@@ -3148,7 +3162,7 @@ static inline unsigned long |
23148 |
rb_num_of_entries(struct ring_buffer_per_cpu *cpu_buffer) |
23149 |
{ |
23150 |
return local_read(&cpu_buffer->entries) - |
23151 |
@@ -91829,7 +95836,7 @@ index ff70271..e1e8cf1 100644 |
23152 |
} |
23153 |
|
23154 |
/** |
23155 |
-@@ -3237,7 +3237,7 @@ unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu) |
23156 |
+@@ -3237,7 +3251,7 @@ unsigned long ring_buffer_overrun_cpu(struct ring_buffer *buffer, int cpu) |
23157 |
return 0; |
23158 |
|
23159 |
cpu_buffer = buffer->buffers[cpu]; |
23160 |
@@ -91838,7 +95845,7 @@ index ff70271..e1e8cf1 100644 |
23161 |
|
23162 |
return ret; |
23163 |
} |
23164 |
-@@ -3260,7 +3260,7 @@ ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu) |
23165 |
+@@ -3260,7 +3274,7 @@ ring_buffer_commit_overrun_cpu(struct ring_buffer *buffer, int cpu) |
23166 |
return 0; |
23167 |
|
23168 |
cpu_buffer = buffer->buffers[cpu]; |
23169 |
@@ -91847,7 +95854,7 @@ index ff70271..e1e8cf1 100644 |
23170 |
|
23171 |
return ret; |
23172 |
} |
23173 |
-@@ -3345,7 +3345,7 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer) |
23174 |
+@@ -3345,7 +3359,7 @@ unsigned long ring_buffer_overruns(struct ring_buffer *buffer) |
23175 |
/* if you care about this being correct, lock the buffer */ |
23176 |
for_each_buffer_cpu(buffer, cpu) { |
23177 |
cpu_buffer = buffer->buffers[cpu]; |
23178 |
@@ -91856,7 +95863,7 @@ index ff70271..e1e8cf1 100644 |
23179 |
} |
23180 |
|
23181 |
return overruns; |
23182 |
-@@ -3521,8 +3521,8 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) |
23183 |
+@@ -3521,8 +3535,8 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) |
23184 |
/* |
23185 |
* Reset the reader page to size zero. |
23186 |
*/ |
23187 |
@@ -91867,7 +95874,7 @@ index ff70271..e1e8cf1 100644 |
23188 |
local_set(&cpu_buffer->reader_page->page->commit, 0); |
23189 |
cpu_buffer->reader_page->real_end = 0; |
23190 |
|
23191 |
-@@ -3556,7 +3556,7 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) |
23192 |
+@@ -3556,7 +3570,7 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer) |
23193 |
* want to compare with the last_overrun. |
23194 |
*/ |
23195 |
smp_mb(); |
23196 |
@@ -91876,7 +95883,7 @@ index ff70271..e1e8cf1 100644 |
23197 |
|
23198 |
/* |
23199 |
* Here's the tricky part. |
23200 |
-@@ -4126,8 +4126,8 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) |
23201 |
+@@ -4126,8 +4140,8 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) |
23202 |
|
23203 |
cpu_buffer->head_page |
23204 |
= list_entry(cpu_buffer->pages, struct buffer_page, list); |
23205 |
@@ -91887,7 +95894,7 @@ index ff70271..e1e8cf1 100644 |
23206 |
local_set(&cpu_buffer->head_page->page->commit, 0); |
23207 |
|
23208 |
cpu_buffer->head_page->read = 0; |
23209 |
-@@ -4137,14 +4137,14 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) |
23210 |
+@@ -4137,14 +4151,14 @@ rb_reset_cpu(struct ring_buffer_per_cpu *cpu_buffer) |
23211 |
|
23212 |
INIT_LIST_HEAD(&cpu_buffer->reader_page->list); |
23213 |
INIT_LIST_HEAD(&cpu_buffer->new_pages); |
23214 |
@@ -91906,7 +95913,7 @@ index ff70271..e1e8cf1 100644 |
23215 |
local_set(&cpu_buffer->dropped_events, 0); |
23216 |
local_set(&cpu_buffer->entries, 0); |
23217 |
local_set(&cpu_buffer->committing, 0); |
23218 |
-@@ -4549,8 +4549,8 @@ int ring_buffer_read_page(struct ring_buffer *buffer, |
23219 |
+@@ -4549,8 +4563,8 @@ int ring_buffer_read_page(struct ring_buffer *buffer, |
23220 |
rb_init_page(bpage); |
23221 |
bpage = reader->page; |
23222 |
reader->page = *data_page; |
23223 |
@@ -91918,10 +95925,10 @@ index ff70271..e1e8cf1 100644 |
23224 |
*data_page = bpage; |
23225 |
|
23226 |
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c |
23227 |
-index e1baa92f..7b2e345 100644 |
23228 |
+index 291397e..db3836d 100644 |
23229 |
--- a/kernel/trace/trace.c |
23230 |
+++ b/kernel/trace/trace.c |
23231 |
-@@ -3461,7 +3461,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set) |
23232 |
+@@ -3510,7 +3510,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set) |
23233 |
return 0; |
23234 |
} |
23235 |
|
23236 |
@@ -91931,10 +95938,10 @@ index e1baa92f..7b2e345 100644 |
23237 |
/* do nothing if flag is already set */ |
23238 |
if (!!(trace_flags & mask) == !!enabled) |
23239 |
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h |
23240 |
-index 99676cd..670b9e8 100644 |
23241 |
+index 9258f5a..9b1e41e 100644 |
23242 |
--- a/kernel/trace/trace.h |
23243 |
+++ b/kernel/trace/trace.h |
23244 |
-@@ -1264,7 +1264,7 @@ extern const char *__stop___tracepoint_str[]; |
23245 |
+@@ -1278,7 +1278,7 @@ extern const char *__stop___tracepoint_str[]; |
23246 |
void trace_printk_init_buffers(void); |
23247 |
void trace_printk_start_comm(void); |
23248 |
int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set); |
23249 |
@@ -91964,10 +95971,10 @@ index 57b67b1..66082a9 100644 |
23250 |
+ return atomic64_inc_return_unchecked(&trace_counter); |
23251 |
} |
23252 |
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c |
23253 |
-index aec1dac..6ca72ee 100644 |
23254 |
+index 2de5362..c4c7003 100644 |
23255 |
--- a/kernel/trace/trace_events.c |
23256 |
+++ b/kernel/trace/trace_events.c |
23257 |
-@@ -1719,7 +1719,6 @@ __trace_early_add_new_event(struct ftrace_event_call *call, |
23258 |
+@@ -1722,7 +1722,6 @@ __trace_early_add_new_event(struct ftrace_event_call *call, |
23259 |
return 0; |
23260 |
} |
23261 |
|
23262 |
@@ -92016,10 +96023,10 @@ index 0abd9b8..6a663a2 100644 |
23263 |
} |
23264 |
entry = ring_buffer_event_data(event); |
23265 |
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c |
23266 |
-index a436de1..f64dde2 100644 |
23267 |
+index f3dad80..d291d61 100644 |
23268 |
--- a/kernel/trace/trace_output.c |
23269 |
+++ b/kernel/trace/trace_output.c |
23270 |
-@@ -294,7 +294,7 @@ int trace_seq_path(struct trace_seq *s, const struct path *path) |
23271 |
+@@ -322,7 +322,7 @@ int trace_seq_path(struct trace_seq *s, const struct path *path) |
23272 |
|
23273 |
p = d_path(path, s->buffer + s->len, PAGE_SIZE - s->len); |
23274 |
if (!IS_ERR(p)) { |
23275 |
@@ -92028,7 +96035,7 @@ index a436de1..f64dde2 100644 |
23276 |
if (p) { |
23277 |
s->len = p - s->buffer; |
23278 |
return 1; |
23279 |
-@@ -939,14 +939,16 @@ int register_ftrace_event(struct trace_event *event) |
23280 |
+@@ -980,14 +980,16 @@ int register_ftrace_event(struct trace_event *event) |
23281 |
goto out; |
23282 |
} |
23283 |
|
23284 |
@@ -92050,10 +96057,10 @@ index a436de1..f64dde2 100644 |
23285 |
key = event->type & (EVENT_HASHSIZE - 1); |
23286 |
|
23287 |
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c |
23288 |
-index 21b320e..40607bc 100644 |
23289 |
+index 8a4e5cb..64f270d 100644 |
23290 |
--- a/kernel/trace/trace_stack.c |
23291 |
+++ b/kernel/trace/trace_stack.c |
23292 |
-@@ -69,7 +69,7 @@ check_stack(unsigned long ip, unsigned long *stack) |
23293 |
+@@ -91,7 +91,7 @@ check_stack(unsigned long ip, unsigned long *stack) |
23294 |
return; |
23295 |
|
23296 |
/* we do not handle interrupt stacks yet */ |
23297 |
@@ -92063,7 +96070,7 @@ index 21b320e..40607bc 100644 |
23298 |
|
23299 |
local_irq_save(flags); |
23300 |
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c |
23301 |
-index bf71b4b..04dee68 100644 |
23302 |
+index fcc0256..aee880f 100644 |
23303 |
--- a/kernel/user_namespace.c |
23304 |
+++ b/kernel/user_namespace.c |
23305 |
@@ -82,6 +82,21 @@ int create_user_ns(struct cred *new) |
23306 |
@@ -92088,7 +96095,7 @@ index bf71b4b..04dee68 100644 |
23307 |
ns = kmem_cache_zalloc(user_ns_cachep, GFP_KERNEL); |
23308 |
if (!ns) |
23309 |
return -ENOMEM; |
23310 |
-@@ -865,7 +880,7 @@ static int userns_install(struct nsproxy *nsproxy, void *ns) |
23311 |
+@@ -872,7 +887,7 @@ static int userns_install(struct nsproxy *nsproxy, void *ns) |
23312 |
if (atomic_read(¤t->mm->mm_users) > 1) |
23313 |
return -EINVAL; |
23314 |
|
23315 |
@@ -92098,11 +96105,11 @@ index bf71b4b..04dee68 100644 |
23316 |
|
23317 |
if (!ns_capable(user_ns, CAP_SYS_ADMIN)) |
23318 |
diff --git a/kernel/utsname_sysctl.c b/kernel/utsname_sysctl.c |
23319 |
-index 4f69f9a..7c6f8f8 100644 |
23320 |
+index c8eac43..4b5f08f 100644 |
23321 |
--- a/kernel/utsname_sysctl.c |
23322 |
+++ b/kernel/utsname_sysctl.c |
23323 |
-@@ -47,7 +47,7 @@ static void put_uts(ctl_table *table, int write, void *which) |
23324 |
- static int proc_do_uts_string(ctl_table *table, int write, |
23325 |
+@@ -47,7 +47,7 @@ static void put_uts(struct ctl_table *table, int write, void *which) |
23326 |
+ static int proc_do_uts_string(struct ctl_table *table, int write, |
23327 |
void __user *buffer, size_t *lenp, loff_t *ppos) |
23328 |
{ |
23329 |
- struct ctl_table uts_table; |
23330 |
@@ -92111,10 +96118,10 @@ index 4f69f9a..7c6f8f8 100644 |
23331 |
memcpy(&uts_table, table, sizeof(uts_table)); |
23332 |
uts_table.data = get_uts(table, write); |
23333 |
diff --git a/kernel/watchdog.c b/kernel/watchdog.c |
23334 |
-index 30e4822..dd2b854 100644 |
23335 |
+index c3319bd..67efc3c 100644 |
23336 |
--- a/kernel/watchdog.c |
23337 |
+++ b/kernel/watchdog.c |
23338 |
-@@ -479,7 +479,7 @@ static int watchdog_nmi_enable(unsigned int cpu) { return 0; } |
23339 |
+@@ -518,7 +518,7 @@ static int watchdog_nmi_enable(unsigned int cpu) { return 0; } |
23340 |
static void watchdog_nmi_disable(unsigned int cpu) { return; } |
23341 |
#endif /* CONFIG_HARDLOCKUP_DETECTOR */ |
23342 |
|
23343 |
@@ -92124,10 +96131,10 @@ index 30e4822..dd2b854 100644 |
23344 |
.thread_should_run = watchdog_should_run, |
23345 |
.thread_fn = watchdog, |
23346 |
diff --git a/kernel/workqueue.c b/kernel/workqueue.c |
23347 |
-index 7ba5897..c8ed1f2 100644 |
23348 |
+index 35974ac..43c9e87 100644 |
23349 |
--- a/kernel/workqueue.c |
23350 |
+++ b/kernel/workqueue.c |
23351 |
-@@ -4710,7 +4710,7 @@ static void rebind_workers(struct worker_pool *pool) |
23352 |
+@@ -4576,7 +4576,7 @@ static void rebind_workers(struct worker_pool *pool) |
23353 |
WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND)); |
23354 |
worker_flags |= WORKER_REBOUND; |
23355 |
worker_flags &= ~WORKER_UNBOUND; |
23356 |
@@ -92137,10 +96144,10 @@ index 7ba5897..c8ed1f2 100644 |
23357 |
|
23358 |
spin_unlock_irq(&pool->lock); |
23359 |
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug |
23360 |
-index 819ac51..1c8a65e 100644 |
23361 |
+index 7a638aa..20db901 100644 |
23362 |
--- a/lib/Kconfig.debug |
23363 |
+++ b/lib/Kconfig.debug |
23364 |
-@@ -853,7 +853,7 @@ config DEBUG_MUTEXES |
23365 |
+@@ -858,7 +858,7 @@ config DEBUG_MUTEXES |
23366 |
|
23367 |
config DEBUG_WW_MUTEX_SLOWPATH |
23368 |
bool "Wait/wound mutex debugging: Slowpath testing" |
23369 |
@@ -92149,7 +96156,7 @@ index 819ac51..1c8a65e 100644 |
23370 |
select DEBUG_LOCK_ALLOC |
23371 |
select DEBUG_SPINLOCK |
23372 |
select DEBUG_MUTEXES |
23373 |
-@@ -866,7 +866,7 @@ config DEBUG_WW_MUTEX_SLOWPATH |
23374 |
+@@ -871,7 +871,7 @@ config DEBUG_WW_MUTEX_SLOWPATH |
23375 |
|
23376 |
config DEBUG_LOCK_ALLOC |
23377 |
bool "Lock debugging: detect incorrect freeing of live locks" |
23378 |
@@ -92158,7 +96165,7 @@ index 819ac51..1c8a65e 100644 |
23379 |
select DEBUG_SPINLOCK |
23380 |
select DEBUG_MUTEXES |
23381 |
select LOCKDEP |
23382 |
-@@ -880,7 +880,7 @@ config DEBUG_LOCK_ALLOC |
23383 |
+@@ -885,7 +885,7 @@ config DEBUG_LOCK_ALLOC |
23384 |
|
23385 |
config PROVE_LOCKING |
23386 |
bool "Lock debugging: prove locking correctness" |
23387 |
@@ -92167,7 +96174,7 @@ index 819ac51..1c8a65e 100644 |
23388 |
select LOCKDEP |
23389 |
select DEBUG_SPINLOCK |
23390 |
select DEBUG_MUTEXES |
23391 |
-@@ -931,7 +931,7 @@ config LOCKDEP |
23392 |
+@@ -936,7 +936,7 @@ config LOCKDEP |
23393 |
|
23394 |
config LOCK_STAT |
23395 |
bool "Lock usage statistics" |
23396 |
@@ -92176,7 +96183,7 @@ index 819ac51..1c8a65e 100644 |
23397 |
select LOCKDEP |
23398 |
select DEBUG_SPINLOCK |
23399 |
select DEBUG_MUTEXES |
23400 |
-@@ -1403,6 +1403,7 @@ config LATENCYTOP |
23401 |
+@@ -1418,6 +1418,7 @@ config LATENCYTOP |
23402 |
depends on DEBUG_KERNEL |
23403 |
depends on STACKTRACE_SUPPORT |
23404 |
depends on PROC_FS |
23405 |
@@ -92184,7 +96191,7 @@ index 819ac51..1c8a65e 100644 |
23406 |
select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC |
23407 |
select KALLSYMS |
23408 |
select KALLSYMS_ALL |
23409 |
-@@ -1419,7 +1420,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS |
23410 |
+@@ -1434,7 +1435,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS |
23411 |
config DEBUG_STRICT_USER_COPY_CHECKS |
23412 |
bool "Strict user copy size checks" |
23413 |
depends on ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS |
23414 |
@@ -92193,7 +96200,7 @@ index 819ac51..1c8a65e 100644 |
23415 |
help |
23416 |
Enabling this option turns a certain set of sanity checks for user |
23417 |
copy operations into compile time failures. |
23418 |
-@@ -1538,7 +1539,7 @@ endmenu # runtime tests |
23419 |
+@@ -1554,7 +1555,7 @@ endmenu # runtime tests |
23420 |
|
23421 |
config PROVIDE_OHCI1394_DMA_INIT |
23422 |
bool "Remote debugging over FireWire early on boot" |
23423 |
@@ -92203,11 +96210,19 @@ index 819ac51..1c8a65e 100644 |
23424 |
If you want to debug problems which hang or crash the kernel early |
23425 |
on boot and the crashing machine has a FireWire port, you can use |
23426 |
diff --git a/lib/Makefile b/lib/Makefile |
23427 |
-index 0cd7b68..e149e37 100644 |
23428 |
+index ba967a1..2cc869a 100644 |
23429 |
--- a/lib/Makefile |
23430 |
+++ b/lib/Makefile |
23431 |
-@@ -52,7 +52,7 @@ obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o |
23432 |
- obj-$(CONFIG_BTREE) += btree.o |
23433 |
+@@ -33,7 +33,6 @@ obj-y += kstrtox.o |
23434 |
+ obj-$(CONFIG_TEST_KSTRTOX) += test-kstrtox.o |
23435 |
+ obj-$(CONFIG_TEST_MODULE) += test_module.o |
23436 |
+ obj-$(CONFIG_TEST_USER_COPY) += test_user_copy.o |
23437 |
+-obj-$(CONFIG_TEST_BPF) += test_bpf.o |
23438 |
+ |
23439 |
+ ifeq ($(CONFIG_DEBUG_KOBJECT),y) |
23440 |
+ CFLAGS_kobject.o += -DDEBUG |
23441 |
+@@ -54,7 +53,7 @@ obj-$(CONFIG_BTREE) += btree.o |
23442 |
+ obj-$(CONFIG_INTERVAL_TREE) += interval_tree.o |
23443 |
obj-$(CONFIG_ASSOCIATIVE_ARRAY) += assoc_array.o |
23444 |
obj-$(CONFIG_DEBUG_PREEMPT) += smp_processor_id.o |
23445 |
-obj-$(CONFIG_DEBUG_LIST) += list_debug.o |
23446 |
@@ -92269,10 +96284,10 @@ index 06f7e4f..f3cf2b0 100644 |
23447 |
} |
23448 |
EXPORT_SYMBOL(bitmap_parselist_user); |
23449 |
diff --git a/lib/bug.c b/lib/bug.c |
23450 |
-index 1686034..a9c00c8 100644 |
23451 |
+index d1d7c78..b354235 100644 |
23452 |
--- a/lib/bug.c |
23453 |
+++ b/lib/bug.c |
23454 |
-@@ -134,6 +134,8 @@ enum bug_trap_type report_bug(unsigned long bugaddr, struct pt_regs *regs) |
23455 |
+@@ -137,6 +137,8 @@ enum bug_trap_type report_bug(unsigned long bugaddr, struct pt_regs *regs) |
23456 |
return BUG_TRAP_TYPE_NONE; |
23457 |
|
23458 |
bug = find_bug(bugaddr); |
23459 |
@@ -92282,10 +96297,10 @@ index 1686034..a9c00c8 100644 |
23460 |
file = NULL; |
23461 |
line = 0; |
23462 |
diff --git a/lib/debugobjects.c b/lib/debugobjects.c |
23463 |
-index e0731c3..ad66444 100644 |
23464 |
+index 547f7f9..a6d4ba0 100644 |
23465 |
--- a/lib/debugobjects.c |
23466 |
+++ b/lib/debugobjects.c |
23467 |
-@@ -286,7 +286,7 @@ static void debug_object_is_on_stack(void *addr, int onstack) |
23468 |
+@@ -289,7 +289,7 @@ static void debug_object_is_on_stack(void *addr, int onstack) |
23469 |
if (limit > 4) |
23470 |
return; |
23471 |
|
23472 |
@@ -92651,10 +96666,10 @@ index 963b703..438bc51 100644 |
23473 |
/** |
23474 |
* percpu_ref_init - initialize a percpu refcount |
23475 |
diff --git a/lib/radix-tree.c b/lib/radix-tree.c |
23476 |
-index 9599aa7..9cf6c72 100644 |
23477 |
+index 3291a8e..346a91e 100644 |
23478 |
--- a/lib/radix-tree.c |
23479 |
+++ b/lib/radix-tree.c |
23480 |
-@@ -66,7 +66,7 @@ struct radix_tree_preload { |
23481 |
+@@ -67,7 +67,7 @@ struct radix_tree_preload { |
23482 |
int nr; |
23483 |
struct radix_tree_node *nodes[RADIX_TREE_PRELOAD_SIZE]; |
23484 |
}; |
23485 |
@@ -92730,10 +96745,10 @@ index a28df52..3d55877 100644 |
23486 |
unsigned long c; |
23487 |
|
23488 |
diff --git a/lib/swiotlb.c b/lib/swiotlb.c |
23489 |
-index b604b83..c0547f6 100644 |
23490 |
+index 4abda07..b9d3765 100644 |
23491 |
--- a/lib/swiotlb.c |
23492 |
+++ b/lib/swiotlb.c |
23493 |
-@@ -674,7 +674,7 @@ EXPORT_SYMBOL(swiotlb_alloc_coherent); |
23494 |
+@@ -682,7 +682,7 @@ EXPORT_SYMBOL(swiotlb_alloc_coherent); |
23495 |
|
23496 |
void |
23497 |
swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr, |
23498 |
@@ -92742,6 +96757,1941 @@ index b604b83..c0547f6 100644 |
23499 |
{ |
23500 |
phys_addr_t paddr = dma_to_phys(hwdev, dev_addr); |
23501 |
|
23502 |
+diff --git a/lib/test_bpf.c b/lib/test_bpf.c |
23503 |
+deleted file mode 100644 |
23504 |
+index c579e0f..0000000 |
23505 |
+--- a/lib/test_bpf.c |
23506 |
++++ /dev/null |
23507 |
+@@ -1,1929 +0,0 @@ |
23508 |
+-/* |
23509 |
+- * Testsuite for BPF interpreter and BPF JIT compiler |
23510 |
+- * |
23511 |
+- * Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com |
23512 |
+- * |
23513 |
+- * This program is free software; you can redistribute it and/or |
23514 |
+- * modify it under the terms of version 2 of the GNU General Public |
23515 |
+- * License as published by the Free Software Foundation. |
23516 |
+- * |
23517 |
+- * This program is distributed in the hope that it will be useful, but |
23518 |
+- * WITHOUT ANY WARRANTY; without even the implied warranty of |
23519 |
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
23520 |
+- * General Public License for more details. |
23521 |
+- */ |
23522 |
+- |
23523 |
+-#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
23524 |
+- |
23525 |
+-#include <linux/init.h> |
23526 |
+-#include <linux/module.h> |
23527 |
+-#include <linux/filter.h> |
23528 |
+-#include <linux/skbuff.h> |
23529 |
+-#include <linux/netdevice.h> |
23530 |
+-#include <linux/if_vlan.h> |
23531 |
+- |
23532 |
+-/* General test specific settings */ |
23533 |
+-#define MAX_SUBTESTS 3 |
23534 |
+-#define MAX_TESTRUNS 10000 |
23535 |
+-#define MAX_DATA 128 |
23536 |
+-#define MAX_INSNS 512 |
23537 |
+-#define MAX_K 0xffffFFFF |
23538 |
+- |
23539 |
+-/* Few constants used to init test 'skb' */ |
23540 |
+-#define SKB_TYPE 3 |
23541 |
+-#define SKB_MARK 0x1234aaaa |
23542 |
+-#define SKB_HASH 0x1234aaab |
23543 |
+-#define SKB_QUEUE_MAP 123 |
23544 |
+-#define SKB_VLAN_TCI 0xffff |
23545 |
+-#define SKB_DEV_IFINDEX 577 |
23546 |
+-#define SKB_DEV_TYPE 588 |
23547 |
+- |
23548 |
+-/* Redefine REGs to make tests less verbose */ |
23549 |
+-#define R0 BPF_REG_0 |
23550 |
+-#define R1 BPF_REG_1 |
23551 |
+-#define R2 BPF_REG_2 |
23552 |
+-#define R3 BPF_REG_3 |
23553 |
+-#define R4 BPF_REG_4 |
23554 |
+-#define R5 BPF_REG_5 |
23555 |
+-#define R6 BPF_REG_6 |
23556 |
+-#define R7 BPF_REG_7 |
23557 |
+-#define R8 BPF_REG_8 |
23558 |
+-#define R9 BPF_REG_9 |
23559 |
+-#define R10 BPF_REG_10 |
23560 |
+- |
23561 |
+-/* Flags that can be passed to test cases */ |
23562 |
+-#define FLAG_NO_DATA BIT(0) |
23563 |
+-#define FLAG_EXPECTED_FAIL BIT(1) |
23564 |
+- |
23565 |
+-enum { |
23566 |
+- CLASSIC = BIT(6), /* Old BPF instructions only. */ |
23567 |
+- INTERNAL = BIT(7), /* Extended instruction set. */ |
23568 |
+-}; |
23569 |
+- |
23570 |
+-#define TEST_TYPE_MASK (CLASSIC | INTERNAL) |
23571 |
+- |
23572 |
+-struct bpf_test { |
23573 |
+- const char *descr; |
23574 |
+- union { |
23575 |
+- struct sock_filter insns[MAX_INSNS]; |
23576 |
+- struct sock_filter_int insns_int[MAX_INSNS]; |
23577 |
+- } u; |
23578 |
+- __u8 aux; |
23579 |
+- __u8 data[MAX_DATA]; |
23580 |
+- struct { |
23581 |
+- int data_size; |
23582 |
+- __u32 result; |
23583 |
+- } test[MAX_SUBTESTS]; |
23584 |
+-}; |
23585 |
+- |
23586 |
+-static struct bpf_test tests[] = { |
23587 |
+- { |
23588 |
+- "TAX", |
23589 |
+- .u.insns = { |
23590 |
+- BPF_STMT(BPF_LD | BPF_IMM, 1), |
23591 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
23592 |
+- BPF_STMT(BPF_LD | BPF_IMM, 2), |
23593 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
23594 |
+- BPF_STMT(BPF_ALU | BPF_NEG, 0), /* A == -3 */ |
23595 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
23596 |
+- BPF_STMT(BPF_LD | BPF_LEN, 0), |
23597 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
23598 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), /* X == len - 3 */ |
23599 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_IND, 1), |
23600 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23601 |
+- }, |
23602 |
+- CLASSIC, |
23603 |
+- { 10, 20, 30, 40, 50 }, |
23604 |
+- { { 2, 10 }, { 3, 20 }, { 4, 30 } }, |
23605 |
+- }, |
23606 |
+- { |
23607 |
+- "TXA", |
23608 |
+- .u.insns = { |
23609 |
+- BPF_STMT(BPF_LDX | BPF_LEN, 0), |
23610 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
23611 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
23612 |
+- BPF_STMT(BPF_RET | BPF_A, 0) /* A == len * 2 */ |
23613 |
+- }, |
23614 |
+- CLASSIC, |
23615 |
+- { 10, 20, 30, 40, 50 }, |
23616 |
+- { { 1, 2 }, { 3, 6 }, { 4, 8 } }, |
23617 |
+- }, |
23618 |
+- { |
23619 |
+- "ADD_SUB_MUL_K", |
23620 |
+- .u.insns = { |
23621 |
+- BPF_STMT(BPF_LD | BPF_IMM, 1), |
23622 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 2), |
23623 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 3), |
23624 |
+- BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0), |
23625 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 0xffffffff), |
23626 |
+- BPF_STMT(BPF_ALU | BPF_MUL | BPF_K, 3), |
23627 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23628 |
+- }, |
23629 |
+- CLASSIC | FLAG_NO_DATA, |
23630 |
+- { }, |
23631 |
+- { { 0, 0xfffffffd } } |
23632 |
+- }, |
23633 |
+- { |
23634 |
+- "DIV_KX", |
23635 |
+- .u.insns = { |
23636 |
+- BPF_STMT(BPF_LD | BPF_IMM, 8), |
23637 |
+- BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 2), |
23638 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
23639 |
+- BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff), |
23640 |
+- BPF_STMT(BPF_ALU | BPF_DIV | BPF_X, 0), |
23641 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
23642 |
+- BPF_STMT(BPF_LD | BPF_IMM, 0xffffffff), |
23643 |
+- BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 0x70000000), |
23644 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
23645 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23646 |
+- }, |
23647 |
+- CLASSIC | FLAG_NO_DATA, |
23648 |
+- { }, |
23649 |
+- { { 0, 0x40000001 } } |
23650 |
+- }, |
23651 |
+- { |
23652 |
+- "AND_OR_LSH_K", |
23653 |
+- .u.insns = { |
23654 |
+- BPF_STMT(BPF_LD | BPF_IMM, 0xff), |
23655 |
+- BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf0), |
23656 |
+- BPF_STMT(BPF_ALU | BPF_LSH | BPF_K, 27), |
23657 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
23658 |
+- BPF_STMT(BPF_LD | BPF_IMM, 0xf), |
23659 |
+- BPF_STMT(BPF_ALU | BPF_OR | BPF_K, 0xf0), |
23660 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
23661 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23662 |
+- }, |
23663 |
+- CLASSIC | FLAG_NO_DATA, |
23664 |
+- { }, |
23665 |
+- { { 0, 0x800000ff }, { 1, 0x800000ff } }, |
23666 |
+- }, |
23667 |
+- { |
23668 |
+- "LD_IMM_0", |
23669 |
+- .u.insns = { |
23670 |
+- BPF_STMT(BPF_LD | BPF_IMM, 0), /* ld #0 */ |
23671 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0, 1, 0), |
23672 |
+- BPF_STMT(BPF_RET | BPF_K, 0), |
23673 |
+- BPF_STMT(BPF_RET | BPF_K, 1), |
23674 |
+- }, |
23675 |
+- CLASSIC, |
23676 |
+- { }, |
23677 |
+- { { 1, 1 } }, |
23678 |
+- }, |
23679 |
+- { |
23680 |
+- "LD_IND", |
23681 |
+- .u.insns = { |
23682 |
+- BPF_STMT(BPF_LDX | BPF_LEN, 0), |
23683 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_IND, MAX_K), |
23684 |
+- BPF_STMT(BPF_RET | BPF_K, 1) |
23685 |
+- }, |
23686 |
+- CLASSIC, |
23687 |
+- { }, |
23688 |
+- { { 1, 0 }, { 10, 0 }, { 60, 0 } }, |
23689 |
+- }, |
23690 |
+- { |
23691 |
+- "LD_ABS", |
23692 |
+- .u.insns = { |
23693 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, 1000), |
23694 |
+- BPF_STMT(BPF_RET | BPF_K, 1) |
23695 |
+- }, |
23696 |
+- CLASSIC, |
23697 |
+- { }, |
23698 |
+- { { 1, 0 }, { 10, 0 }, { 60, 0 } }, |
23699 |
+- }, |
23700 |
+- { |
23701 |
+- "LD_ABS_LL", |
23702 |
+- .u.insns = { |
23703 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_LL_OFF), |
23704 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
23705 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_LL_OFF + 1), |
23706 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
23707 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23708 |
+- }, |
23709 |
+- CLASSIC, |
23710 |
+- { 1, 2, 3 }, |
23711 |
+- { { 1, 0 }, { 2, 3 } }, |
23712 |
+- }, |
23713 |
+- { |
23714 |
+- "LD_IND_LL", |
23715 |
+- .u.insns = { |
23716 |
+- BPF_STMT(BPF_LD | BPF_IMM, SKF_LL_OFF - 1), |
23717 |
+- BPF_STMT(BPF_LDX | BPF_LEN, 0), |
23718 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
23719 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
23720 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_IND, 0), |
23721 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23722 |
+- }, |
23723 |
+- CLASSIC, |
23724 |
+- { 1, 2, 3, 0xff }, |
23725 |
+- { { 1, 1 }, { 3, 3 }, { 4, 0xff } }, |
23726 |
+- }, |
23727 |
+- { |
23728 |
+- "LD_ABS_NET", |
23729 |
+- .u.insns = { |
23730 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_NET_OFF), |
23731 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
23732 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, SKF_NET_OFF + 1), |
23733 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
23734 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23735 |
+- }, |
23736 |
+- CLASSIC, |
23737 |
+- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3 }, |
23738 |
+- { { 15, 0 }, { 16, 3 } }, |
23739 |
+- }, |
23740 |
+- { |
23741 |
+- "LD_IND_NET", |
23742 |
+- .u.insns = { |
23743 |
+- BPF_STMT(BPF_LD | BPF_IMM, SKF_NET_OFF - 15), |
23744 |
+- BPF_STMT(BPF_LDX | BPF_LEN, 0), |
23745 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
23746 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
23747 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_IND, 0), |
23748 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23749 |
+- }, |
23750 |
+- CLASSIC, |
23751 |
+- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3 }, |
23752 |
+- { { 14, 0 }, { 15, 1 }, { 17, 3 } }, |
23753 |
+- }, |
23754 |
+- { |
23755 |
+- "LD_PKTTYPE", |
23756 |
+- .u.insns = { |
23757 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23758 |
+- SKF_AD_OFF + SKF_AD_PKTTYPE), |
23759 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0), |
23760 |
+- BPF_STMT(BPF_RET | BPF_K, 1), |
23761 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23762 |
+- SKF_AD_OFF + SKF_AD_PKTTYPE), |
23763 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0), |
23764 |
+- BPF_STMT(BPF_RET | BPF_K, 1), |
23765 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23766 |
+- SKF_AD_OFF + SKF_AD_PKTTYPE), |
23767 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, SKB_TYPE, 1, 0), |
23768 |
+- BPF_STMT(BPF_RET | BPF_K, 1), |
23769 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23770 |
+- }, |
23771 |
+- CLASSIC, |
23772 |
+- { }, |
23773 |
+- { { 1, 3 }, { 10, 3 } }, |
23774 |
+- }, |
23775 |
+- { |
23776 |
+- "LD_MARK", |
23777 |
+- .u.insns = { |
23778 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23779 |
+- SKF_AD_OFF + SKF_AD_MARK), |
23780 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23781 |
+- }, |
23782 |
+- CLASSIC, |
23783 |
+- { }, |
23784 |
+- { { 1, SKB_MARK}, { 10, SKB_MARK} }, |
23785 |
+- }, |
23786 |
+- { |
23787 |
+- "LD_RXHASH", |
23788 |
+- .u.insns = { |
23789 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23790 |
+- SKF_AD_OFF + SKF_AD_RXHASH), |
23791 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23792 |
+- }, |
23793 |
+- CLASSIC, |
23794 |
+- { }, |
23795 |
+- { { 1, SKB_HASH}, { 10, SKB_HASH} }, |
23796 |
+- }, |
23797 |
+- { |
23798 |
+- "LD_QUEUE", |
23799 |
+- .u.insns = { |
23800 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23801 |
+- SKF_AD_OFF + SKF_AD_QUEUE), |
23802 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23803 |
+- }, |
23804 |
+- CLASSIC, |
23805 |
+- { }, |
23806 |
+- { { 1, SKB_QUEUE_MAP }, { 10, SKB_QUEUE_MAP } }, |
23807 |
+- }, |
23808 |
+- { |
23809 |
+- "LD_PROTOCOL", |
23810 |
+- .u.insns = { |
23811 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 1), |
23812 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 20, 1, 0), |
23813 |
+- BPF_STMT(BPF_RET | BPF_K, 0), |
23814 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23815 |
+- SKF_AD_OFF + SKF_AD_PROTOCOL), |
23816 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
23817 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2), |
23818 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 30, 1, 0), |
23819 |
+- BPF_STMT(BPF_RET | BPF_K, 0), |
23820 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
23821 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23822 |
+- }, |
23823 |
+- CLASSIC, |
23824 |
+- { 10, 20, 30 }, |
23825 |
+- { { 10, ETH_P_IP }, { 100, ETH_P_IP } }, |
23826 |
+- }, |
23827 |
+- { |
23828 |
+- "LD_VLAN_TAG", |
23829 |
+- .u.insns = { |
23830 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23831 |
+- SKF_AD_OFF + SKF_AD_VLAN_TAG), |
23832 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23833 |
+- }, |
23834 |
+- CLASSIC, |
23835 |
+- { }, |
23836 |
+- { |
23837 |
+- { 1, SKB_VLAN_TCI & ~VLAN_TAG_PRESENT }, |
23838 |
+- { 10, SKB_VLAN_TCI & ~VLAN_TAG_PRESENT } |
23839 |
+- }, |
23840 |
+- }, |
23841 |
+- { |
23842 |
+- "LD_VLAN_TAG_PRESENT", |
23843 |
+- .u.insns = { |
23844 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23845 |
+- SKF_AD_OFF + SKF_AD_VLAN_TAG_PRESENT), |
23846 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23847 |
+- }, |
23848 |
+- CLASSIC, |
23849 |
+- { }, |
23850 |
+- { |
23851 |
+- { 1, !!(SKB_VLAN_TCI & VLAN_TAG_PRESENT) }, |
23852 |
+- { 10, !!(SKB_VLAN_TCI & VLAN_TAG_PRESENT) } |
23853 |
+- }, |
23854 |
+- }, |
23855 |
+- { |
23856 |
+- "LD_IFINDEX", |
23857 |
+- .u.insns = { |
23858 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23859 |
+- SKF_AD_OFF + SKF_AD_IFINDEX), |
23860 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23861 |
+- }, |
23862 |
+- CLASSIC, |
23863 |
+- { }, |
23864 |
+- { { 1, SKB_DEV_IFINDEX }, { 10, SKB_DEV_IFINDEX } }, |
23865 |
+- }, |
23866 |
+- { |
23867 |
+- "LD_HATYPE", |
23868 |
+- .u.insns = { |
23869 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23870 |
+- SKF_AD_OFF + SKF_AD_HATYPE), |
23871 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23872 |
+- }, |
23873 |
+- CLASSIC, |
23874 |
+- { }, |
23875 |
+- { { 1, SKB_DEV_TYPE }, { 10, SKB_DEV_TYPE } }, |
23876 |
+- }, |
23877 |
+- { |
23878 |
+- "LD_CPU", |
23879 |
+- .u.insns = { |
23880 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23881 |
+- SKF_AD_OFF + SKF_AD_CPU), |
23882 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
23883 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23884 |
+- SKF_AD_OFF + SKF_AD_CPU), |
23885 |
+- BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0), |
23886 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23887 |
+- }, |
23888 |
+- CLASSIC, |
23889 |
+- { }, |
23890 |
+- { { 1, 0 }, { 10, 0 } }, |
23891 |
+- }, |
23892 |
+- { |
23893 |
+- "LD_NLATTR", |
23894 |
+- .u.insns = { |
23895 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 2), |
23896 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
23897 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 3), |
23898 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23899 |
+- SKF_AD_OFF + SKF_AD_NLATTR), |
23900 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23901 |
+- }, |
23902 |
+- CLASSIC, |
23903 |
+-#ifdef __BIG_ENDIAN |
23904 |
+- { 0xff, 0xff, 0, 4, 0, 2, 0, 4, 0, 3 }, |
23905 |
+-#else |
23906 |
+- { 0xff, 0xff, 4, 0, 2, 0, 4, 0, 3, 0 }, |
23907 |
+-#endif |
23908 |
+- { { 4, 0 }, { 20, 6 } }, |
23909 |
+- }, |
23910 |
+- { |
23911 |
+- "LD_NLATTR_NEST", |
23912 |
+- .u.insns = { |
23913 |
+- BPF_STMT(BPF_LD | BPF_IMM, 2), |
23914 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 3), |
23915 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23916 |
+- SKF_AD_OFF + SKF_AD_NLATTR_NEST), |
23917 |
+- BPF_STMT(BPF_LD | BPF_IMM, 2), |
23918 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23919 |
+- SKF_AD_OFF + SKF_AD_NLATTR_NEST), |
23920 |
+- BPF_STMT(BPF_LD | BPF_IMM, 2), |
23921 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23922 |
+- SKF_AD_OFF + SKF_AD_NLATTR_NEST), |
23923 |
+- BPF_STMT(BPF_LD | BPF_IMM, 2), |
23924 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23925 |
+- SKF_AD_OFF + SKF_AD_NLATTR_NEST), |
23926 |
+- BPF_STMT(BPF_LD | BPF_IMM, 2), |
23927 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23928 |
+- SKF_AD_OFF + SKF_AD_NLATTR_NEST), |
23929 |
+- BPF_STMT(BPF_LD | BPF_IMM, 2), |
23930 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23931 |
+- SKF_AD_OFF + SKF_AD_NLATTR_NEST), |
23932 |
+- BPF_STMT(BPF_LD | BPF_IMM, 2), |
23933 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23934 |
+- SKF_AD_OFF + SKF_AD_NLATTR_NEST), |
23935 |
+- BPF_STMT(BPF_LD | BPF_IMM, 2), |
23936 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23937 |
+- SKF_AD_OFF + SKF_AD_NLATTR_NEST), |
23938 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23939 |
+- }, |
23940 |
+- CLASSIC, |
23941 |
+-#ifdef __BIG_ENDIAN |
23942 |
+- { 0xff, 0xff, 0, 12, 0, 1, 0, 4, 0, 2, 0, 4, 0, 3 }, |
23943 |
+-#else |
23944 |
+- { 0xff, 0xff, 12, 0, 1, 0, 4, 0, 2, 0, 4, 0, 3, 0 }, |
23945 |
+-#endif |
23946 |
+- { { 4, 0 }, { 20, 10 } }, |
23947 |
+- }, |
23948 |
+- { |
23949 |
+- "LD_PAYLOAD_OFF", |
23950 |
+- .u.insns = { |
23951 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23952 |
+- SKF_AD_OFF + SKF_AD_PAY_OFFSET), |
23953 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23954 |
+- SKF_AD_OFF + SKF_AD_PAY_OFFSET), |
23955 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23956 |
+- SKF_AD_OFF + SKF_AD_PAY_OFFSET), |
23957 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23958 |
+- SKF_AD_OFF + SKF_AD_PAY_OFFSET), |
23959 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23960 |
+- SKF_AD_OFF + SKF_AD_PAY_OFFSET), |
23961 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23962 |
+- }, |
23963 |
+- CLASSIC, |
23964 |
+- /* 00:00:00:00:00:00 > 00:00:00:00:00:00, ethtype IPv4 (0x0800), |
23965 |
+- * length 98: 127.0.0.1 > 127.0.0.1: ICMP echo request, |
23966 |
+- * id 9737, seq 1, length 64 |
23967 |
+- */ |
23968 |
+- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
23969 |
+- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
23970 |
+- 0x08, 0x00, |
23971 |
+- 0x45, 0x00, 0x00, 0x54, 0xac, 0x8b, 0x40, 0x00, 0x40, |
23972 |
+- 0x01, 0x90, 0x1b, 0x7f, 0x00, 0x00, 0x01 }, |
23973 |
+- { { 30, 0 }, { 100, 42 } }, |
23974 |
+- }, |
23975 |
+- { |
23976 |
+- "LD_ANC_XOR", |
23977 |
+- .u.insns = { |
23978 |
+- BPF_STMT(BPF_LD | BPF_IMM, 10), |
23979 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 300), |
23980 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
23981 |
+- SKF_AD_OFF + SKF_AD_ALU_XOR_X), |
23982 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
23983 |
+- }, |
23984 |
+- CLASSIC, |
23985 |
+- { }, |
23986 |
+- { { 4, 10 ^ 300 }, { 20, 10 ^ 300 } }, |
23987 |
+- }, |
23988 |
+- { |
23989 |
+- "SPILL_FILL", |
23990 |
+- .u.insns = { |
23991 |
+- BPF_STMT(BPF_LDX | BPF_LEN, 0), |
23992 |
+- BPF_STMT(BPF_LD | BPF_IMM, 2), |
23993 |
+- BPF_STMT(BPF_ALU | BPF_RSH, 1), |
23994 |
+- BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0), |
23995 |
+- BPF_STMT(BPF_ST, 1), /* M1 = 1 ^ len */ |
23996 |
+- BPF_STMT(BPF_ALU | BPF_XOR | BPF_K, 0x80000000), |
23997 |
+- BPF_STMT(BPF_ST, 2), /* M2 = 1 ^ len ^ 0x80000000 */ |
23998 |
+- BPF_STMT(BPF_STX, 15), /* M3 = len */ |
23999 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 1), |
24000 |
+- BPF_STMT(BPF_LD | BPF_MEM, 2), |
24001 |
+- BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0), |
24002 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 15), |
24003 |
+- BPF_STMT(BPF_ALU | BPF_XOR | BPF_X, 0), |
24004 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
24005 |
+- }, |
24006 |
+- CLASSIC, |
24007 |
+- { }, |
24008 |
+- { { 1, 0x80000001 }, { 2, 0x80000002 }, { 60, 0x80000000 ^ 60 } } |
24009 |
+- }, |
24010 |
+- { |
24011 |
+- "JEQ", |
24012 |
+- .u.insns = { |
24013 |
+- BPF_STMT(BPF_LDX | BPF_LEN, 0), |
24014 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2), |
24015 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_X, 0, 0, 1), |
24016 |
+- BPF_STMT(BPF_RET | BPF_K, 1), |
24017 |
+- BPF_STMT(BPF_RET | BPF_K, MAX_K) |
24018 |
+- }, |
24019 |
+- CLASSIC, |
24020 |
+- { 3, 3, 3, 3, 3 }, |
24021 |
+- { { 1, 0 }, { 3, 1 }, { 4, MAX_K } }, |
24022 |
+- }, |
24023 |
+- { |
24024 |
+- "JGT", |
24025 |
+- .u.insns = { |
24026 |
+- BPF_STMT(BPF_LDX | BPF_LEN, 0), |
24027 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2), |
24028 |
+- BPF_JUMP(BPF_JMP | BPF_JGT | BPF_X, 0, 0, 1), |
24029 |
+- BPF_STMT(BPF_RET | BPF_K, 1), |
24030 |
+- BPF_STMT(BPF_RET | BPF_K, MAX_K) |
24031 |
+- }, |
24032 |
+- CLASSIC, |
24033 |
+- { 4, 4, 4, 3, 3 }, |
24034 |
+- { { 2, 0 }, { 3, 1 }, { 4, MAX_K } }, |
24035 |
+- }, |
24036 |
+- { |
24037 |
+- "JGE", |
24038 |
+- .u.insns = { |
24039 |
+- BPF_STMT(BPF_LDX | BPF_LEN, 0), |
24040 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_IND, MAX_K), |
24041 |
+- BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 1, 1, 0), |
24042 |
+- BPF_STMT(BPF_RET | BPF_K, 10), |
24043 |
+- BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 2, 1, 0), |
24044 |
+- BPF_STMT(BPF_RET | BPF_K, 20), |
24045 |
+- BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 3, 1, 0), |
24046 |
+- BPF_STMT(BPF_RET | BPF_K, 30), |
24047 |
+- BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 4, 1, 0), |
24048 |
+- BPF_STMT(BPF_RET | BPF_K, 40), |
24049 |
+- BPF_STMT(BPF_RET | BPF_K, MAX_K) |
24050 |
+- }, |
24051 |
+- CLASSIC, |
24052 |
+- { 1, 2, 3, 4, 5 }, |
24053 |
+- { { 1, 20 }, { 3, 40 }, { 5, MAX_K } }, |
24054 |
+- }, |
24055 |
+- { |
24056 |
+- "JSET", |
24057 |
+- .u.insns = { |
24058 |
+- BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0), |
24059 |
+- BPF_JUMP(BPF_JMP | BPF_JA, 1, 1, 1), |
24060 |
+- BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0), |
24061 |
+- BPF_JUMP(BPF_JMP | BPF_JA, 0, 0, 0), |
24062 |
+- BPF_STMT(BPF_LDX | BPF_LEN, 0), |
24063 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
24064 |
+- BPF_STMT(BPF_ALU | BPF_SUB | BPF_K, 4), |
24065 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
24066 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_IND, 0), |
24067 |
+- BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 1, 0, 1), |
24068 |
+- BPF_STMT(BPF_RET | BPF_K, 10), |
24069 |
+- BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x80000000, 0, 1), |
24070 |
+- BPF_STMT(BPF_RET | BPF_K, 20), |
24071 |
+- BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0), |
24072 |
+- BPF_STMT(BPF_RET | BPF_K, 30), |
24073 |
+- BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0), |
24074 |
+- BPF_STMT(BPF_RET | BPF_K, 30), |
24075 |
+- BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0), |
24076 |
+- BPF_STMT(BPF_RET | BPF_K, 30), |
24077 |
+- BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0), |
24078 |
+- BPF_STMT(BPF_RET | BPF_K, 30), |
24079 |
+- BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0xffffff, 1, 0), |
24080 |
+- BPF_STMT(BPF_RET | BPF_K, 30), |
24081 |
+- BPF_STMT(BPF_RET | BPF_K, MAX_K) |
24082 |
+- }, |
24083 |
+- CLASSIC, |
24084 |
+- { 0, 0xAA, 0x55, 1 }, |
24085 |
+- { { 4, 10 }, { 5, 20 }, { 6, MAX_K } }, |
24086 |
+- }, |
24087 |
+- { |
24088 |
+- "tcpdump port 22", |
24089 |
+- .u.insns = { |
24090 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 12), |
24091 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x86dd, 0, 8), /* IPv6 */ |
24092 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 20), |
24093 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x84, 2, 0), |
24094 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 1, 0), |
24095 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x11, 0, 17), |
24096 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 54), |
24097 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 14, 0), |
24098 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 56), |
24099 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 12, 13), |
24100 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x0800, 0, 12), /* IPv4 */ |
24101 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 23), |
24102 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x84, 2, 0), |
24103 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 1, 0), |
24104 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x11, 0, 8), |
24105 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 20), |
24106 |
+- BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x1fff, 6, 0), |
24107 |
+- BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14), |
24108 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_IND, 14), |
24109 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 2, 0), |
24110 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_IND, 16), |
24111 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 0, 1), |
24112 |
+- BPF_STMT(BPF_RET | BPF_K, 0xffff), |
24113 |
+- BPF_STMT(BPF_RET | BPF_K, 0), |
24114 |
+- }, |
24115 |
+- CLASSIC, |
24116 |
+- /* 3c:07:54:43:e5:76 > 10:bf:48:d6:43:d6, ethertype IPv4(0x0800) |
24117 |
+- * length 114: 10.1.1.149.49700 > 10.1.2.10.22: Flags [P.], |
24118 |
+- * seq 1305692979:1305693027, ack 3650467037, win 65535, |
24119 |
+- * options [nop,nop,TS val 2502645400 ecr 3971138], length 48 |
24120 |
+- */ |
24121 |
+- { 0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6, |
24122 |
+- 0x3c, 0x07, 0x54, 0x43, 0xe5, 0x76, |
24123 |
+- 0x08, 0x00, |
24124 |
+- 0x45, 0x10, 0x00, 0x64, 0x75, 0xb5, |
24125 |
+- 0x40, 0x00, 0x40, 0x06, 0xad, 0x2e, /* IP header */ |
24126 |
+- 0x0a, 0x01, 0x01, 0x95, /* ip src */ |
24127 |
+- 0x0a, 0x01, 0x02, 0x0a, /* ip dst */ |
24128 |
+- 0xc2, 0x24, |
24129 |
+- 0x00, 0x16 /* dst port */ }, |
24130 |
+- { { 10, 0 }, { 30, 0 }, { 100, 65535 } }, |
24131 |
+- }, |
24132 |
+- { |
24133 |
+- "tcpdump complex", |
24134 |
+- .u.insns = { |
24135 |
+- /* tcpdump -nei eth0 'tcp port 22 and (((ip[2:2] - |
24136 |
+- * ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) and |
24137 |
+- * (len > 115 or len < 30000000000)' -d |
24138 |
+- */ |
24139 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 12), |
24140 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x86dd, 30, 0), |
24141 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x800, 0, 29), |
24142 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 23), |
24143 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 0x6, 0, 27), |
24144 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 20), |
24145 |
+- BPF_JUMP(BPF_JMP | BPF_JSET | BPF_K, 0x1fff, 25, 0), |
24146 |
+- BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14), |
24147 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_IND, 14), |
24148 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 2, 0), |
24149 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_IND, 16), |
24150 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K, 22, 0, 20), |
24151 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 16), |
24152 |
+- BPF_STMT(BPF_ST, 1), |
24153 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 14), |
24154 |
+- BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf), |
24155 |
+- BPF_STMT(BPF_ALU | BPF_LSH | BPF_K, 2), |
24156 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0x5), /* libpcap emits K on TAX */ |
24157 |
+- BPF_STMT(BPF_LD | BPF_MEM, 1), |
24158 |
+- BPF_STMT(BPF_ALU | BPF_SUB | BPF_X, 0), |
24159 |
+- BPF_STMT(BPF_ST, 5), |
24160 |
+- BPF_STMT(BPF_LDX | BPF_B | BPF_MSH, 14), |
24161 |
+- BPF_STMT(BPF_LD | BPF_B | BPF_IND, 26), |
24162 |
+- BPF_STMT(BPF_ALU | BPF_AND | BPF_K, 0xf0), |
24163 |
+- BPF_STMT(BPF_ALU | BPF_RSH | BPF_K, 2), |
24164 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0x9), /* libpcap emits K on TAX */ |
24165 |
+- BPF_STMT(BPF_LD | BPF_MEM, 5), |
24166 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_X, 0, 4, 0), |
24167 |
+- BPF_STMT(BPF_LD | BPF_LEN, 0), |
24168 |
+- BPF_JUMP(BPF_JMP | BPF_JGT | BPF_K, 0x73, 1, 0), |
24169 |
+- BPF_JUMP(BPF_JMP | BPF_JGE | BPF_K, 0xfc23ac00, 1, 0), |
24170 |
+- BPF_STMT(BPF_RET | BPF_K, 0xffff), |
24171 |
+- BPF_STMT(BPF_RET | BPF_K, 0), |
24172 |
+- }, |
24173 |
+- CLASSIC, |
24174 |
+- { 0x10, 0xbf, 0x48, 0xd6, 0x43, 0xd6, |
24175 |
+- 0x3c, 0x07, 0x54, 0x43, 0xe5, 0x76, |
24176 |
+- 0x08, 0x00, |
24177 |
+- 0x45, 0x10, 0x00, 0x64, 0x75, 0xb5, |
24178 |
+- 0x40, 0x00, 0x40, 0x06, 0xad, 0x2e, /* IP header */ |
24179 |
+- 0x0a, 0x01, 0x01, 0x95, /* ip src */ |
24180 |
+- 0x0a, 0x01, 0x02, 0x0a, /* ip dst */ |
24181 |
+- 0xc2, 0x24, |
24182 |
+- 0x00, 0x16 /* dst port */ }, |
24183 |
+- { { 10, 0 }, { 30, 0 }, { 100, 65535 } }, |
24184 |
+- }, |
24185 |
+- { |
24186 |
+- "RET_A", |
24187 |
+- .u.insns = { |
24188 |
+- /* check that unitialized X and A contain zeros */ |
24189 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
24190 |
+- BPF_STMT(BPF_RET | BPF_A, 0) |
24191 |
+- }, |
24192 |
+- CLASSIC, |
24193 |
+- { }, |
24194 |
+- { {1, 0}, {2, 0} }, |
24195 |
+- }, |
24196 |
+- { |
24197 |
+- "INT: ADD trivial", |
24198 |
+- .u.insns_int = { |
24199 |
+- BPF_ALU64_IMM(BPF_MOV, R1, 1), |
24200 |
+- BPF_ALU64_IMM(BPF_ADD, R1, 2), |
24201 |
+- BPF_ALU64_IMM(BPF_MOV, R2, 3), |
24202 |
+- BPF_ALU64_REG(BPF_SUB, R1, R2), |
24203 |
+- BPF_ALU64_IMM(BPF_ADD, R1, -1), |
24204 |
+- BPF_ALU64_IMM(BPF_MUL, R1, 3), |
24205 |
+- BPF_ALU64_REG(BPF_MOV, R0, R1), |
24206 |
+- BPF_EXIT_INSN(), |
24207 |
+- }, |
24208 |
+- INTERNAL, |
24209 |
+- { }, |
24210 |
+- { { 0, 0xfffffffd } } |
24211 |
+- }, |
24212 |
+- { |
24213 |
+- "INT: MUL_X", |
24214 |
+- .u.insns_int = { |
24215 |
+- BPF_ALU64_IMM(BPF_MOV, R0, -1), |
24216 |
+- BPF_ALU64_IMM(BPF_MOV, R1, -1), |
24217 |
+- BPF_ALU64_IMM(BPF_MOV, R2, 3), |
24218 |
+- BPF_ALU64_REG(BPF_MUL, R1, R2), |
24219 |
+- BPF_JMP_IMM(BPF_JEQ, R1, 0xfffffffd, 1), |
24220 |
+- BPF_EXIT_INSN(), |
24221 |
+- BPF_ALU64_IMM(BPF_MOV, R0, 1), |
24222 |
+- BPF_EXIT_INSN(), |
24223 |
+- }, |
24224 |
+- INTERNAL, |
24225 |
+- { }, |
24226 |
+- { { 0, 1 } } |
24227 |
+- }, |
24228 |
+- { |
24229 |
+- "INT: MUL_X2", |
24230 |
+- .u.insns_int = { |
24231 |
+- BPF_ALU32_IMM(BPF_MOV, R0, -1), |
24232 |
+- BPF_ALU32_IMM(BPF_MOV, R1, -1), |
24233 |
+- BPF_ALU32_IMM(BPF_MOV, R2, 3), |
24234 |
+- BPF_ALU64_REG(BPF_MUL, R1, R2), |
24235 |
+- BPF_ALU64_IMM(BPF_RSH, R1, 8), |
24236 |
+- BPF_JMP_IMM(BPF_JEQ, R1, 0x2ffffff, 1), |
24237 |
+- BPF_EXIT_INSN(), |
24238 |
+- BPF_ALU32_IMM(BPF_MOV, R0, 1), |
24239 |
+- BPF_EXIT_INSN(), |
24240 |
+- }, |
24241 |
+- INTERNAL, |
24242 |
+- { }, |
24243 |
+- { { 0, 1 } } |
24244 |
+- }, |
24245 |
+- { |
24246 |
+- "INT: MUL32_X", |
24247 |
+- .u.insns_int = { |
24248 |
+- BPF_ALU32_IMM(BPF_MOV, R0, -1), |
24249 |
+- BPF_ALU64_IMM(BPF_MOV, R1, -1), |
24250 |
+- BPF_ALU32_IMM(BPF_MOV, R2, 3), |
24251 |
+- BPF_ALU32_REG(BPF_MUL, R1, R2), |
24252 |
+- BPF_ALU64_IMM(BPF_RSH, R1, 8), |
24253 |
+- BPF_JMP_IMM(BPF_JEQ, R1, 0xffffff, 1), |
24254 |
+- BPF_EXIT_INSN(), |
24255 |
+- BPF_ALU32_IMM(BPF_MOV, R0, 1), |
24256 |
+- BPF_EXIT_INSN(), |
24257 |
+- }, |
24258 |
+- INTERNAL, |
24259 |
+- { }, |
24260 |
+- { { 0, 1 } } |
24261 |
+- }, |
24262 |
+- { |
24263 |
+- /* Have to test all register combinations, since |
24264 |
+- * JITing of different registers will produce |
24265 |
+- * different asm code. |
24266 |
+- */ |
24267 |
+- "INT: ADD 64-bit", |
24268 |
+- .u.insns_int = { |
24269 |
+- BPF_ALU64_IMM(BPF_MOV, R0, 0), |
24270 |
+- BPF_ALU64_IMM(BPF_MOV, R1, 1), |
24271 |
+- BPF_ALU64_IMM(BPF_MOV, R2, 2), |
24272 |
+- BPF_ALU64_IMM(BPF_MOV, R3, 3), |
24273 |
+- BPF_ALU64_IMM(BPF_MOV, R4, 4), |
24274 |
+- BPF_ALU64_IMM(BPF_MOV, R5, 5), |
24275 |
+- BPF_ALU64_IMM(BPF_MOV, R6, 6), |
24276 |
+- BPF_ALU64_IMM(BPF_MOV, R7, 7), |
24277 |
+- BPF_ALU64_IMM(BPF_MOV, R8, 8), |
24278 |
+- BPF_ALU64_IMM(BPF_MOV, R9, 9), |
24279 |
+- BPF_ALU64_IMM(BPF_ADD, R0, 20), |
24280 |
+- BPF_ALU64_IMM(BPF_ADD, R1, 20), |
24281 |
+- BPF_ALU64_IMM(BPF_ADD, R2, 20), |
24282 |
+- BPF_ALU64_IMM(BPF_ADD, R3, 20), |
24283 |
+- BPF_ALU64_IMM(BPF_ADD, R4, 20), |
24284 |
+- BPF_ALU64_IMM(BPF_ADD, R5, 20), |
24285 |
+- BPF_ALU64_IMM(BPF_ADD, R6, 20), |
24286 |
+- BPF_ALU64_IMM(BPF_ADD, R7, 20), |
24287 |
+- BPF_ALU64_IMM(BPF_ADD, R8, 20), |
24288 |
+- BPF_ALU64_IMM(BPF_ADD, R9, 20), |
24289 |
+- BPF_ALU64_IMM(BPF_SUB, R0, 10), |
24290 |
+- BPF_ALU64_IMM(BPF_SUB, R1, 10), |
24291 |
+- BPF_ALU64_IMM(BPF_SUB, R2, 10), |
24292 |
+- BPF_ALU64_IMM(BPF_SUB, R3, 10), |
24293 |
+- BPF_ALU64_IMM(BPF_SUB, R4, 10), |
24294 |
+- BPF_ALU64_IMM(BPF_SUB, R5, 10), |
24295 |
+- BPF_ALU64_IMM(BPF_SUB, R6, 10), |
24296 |
+- BPF_ALU64_IMM(BPF_SUB, R7, 10), |
24297 |
+- BPF_ALU64_IMM(BPF_SUB, R8, 10), |
24298 |
+- BPF_ALU64_IMM(BPF_SUB, R9, 10), |
24299 |
+- BPF_ALU64_REG(BPF_ADD, R0, R0), |
24300 |
+- BPF_ALU64_REG(BPF_ADD, R0, R1), |
24301 |
+- BPF_ALU64_REG(BPF_ADD, R0, R2), |
24302 |
+- BPF_ALU64_REG(BPF_ADD, R0, R3), |
24303 |
+- BPF_ALU64_REG(BPF_ADD, R0, R4), |
24304 |
+- BPF_ALU64_REG(BPF_ADD, R0, R5), |
24305 |
+- BPF_ALU64_REG(BPF_ADD, R0, R6), |
24306 |
+- BPF_ALU64_REG(BPF_ADD, R0, R7), |
24307 |
+- BPF_ALU64_REG(BPF_ADD, R0, R8), |
24308 |
+- BPF_ALU64_REG(BPF_ADD, R0, R9), /* R0 == 155 */ |
24309 |
+- BPF_JMP_IMM(BPF_JEQ, R0, 155, 1), |
24310 |
+- BPF_EXIT_INSN(), |
24311 |
+- BPF_ALU64_REG(BPF_ADD, R1, R0), |
24312 |
+- BPF_ALU64_REG(BPF_ADD, R1, R1), |
24313 |
+- BPF_ALU64_REG(BPF_ADD, R1, R2), |
24314 |
+- BPF_ALU64_REG(BPF_ADD, R1, R3), |
24315 |
+- BPF_ALU64_REG(BPF_ADD, R1, R4), |
24316 |
+- BPF_ALU64_REG(BPF_ADD, R1, R5), |
24317 |
+- BPF_ALU64_REG(BPF_ADD, R1, R6), |
24318 |
+- BPF_ALU64_REG(BPF_ADD, R1, R7), |
24319 |
+- BPF_ALU64_REG(BPF_ADD, R1, R8), |
24320 |
+- BPF_ALU64_REG(BPF_ADD, R1, R9), /* R1 == 456 */ |
24321 |
+- BPF_JMP_IMM(BPF_JEQ, R1, 456, 1), |
24322 |
+- BPF_EXIT_INSN(), |
24323 |
+- BPF_ALU64_REG(BPF_ADD, R2, R0), |
24324 |
+- BPF_ALU64_REG(BPF_ADD, R2, R1), |
24325 |
+- BPF_ALU64_REG(BPF_ADD, R2, R2), |
24326 |
+- BPF_ALU64_REG(BPF_ADD, R2, R3), |
24327 |
+- BPF_ALU64_REG(BPF_ADD, R2, R4), |
24328 |
+- BPF_ALU64_REG(BPF_ADD, R2, R5), |
24329 |
+- BPF_ALU64_REG(BPF_ADD, R2, R6), |
24330 |
+- BPF_ALU64_REG(BPF_ADD, R2, R7), |
24331 |
+- BPF_ALU64_REG(BPF_ADD, R2, R8), |
24332 |
+- BPF_ALU64_REG(BPF_ADD, R2, R9), /* R2 == 1358 */ |
24333 |
+- BPF_JMP_IMM(BPF_JEQ, R2, 1358, 1), |
24334 |
+- BPF_EXIT_INSN(), |
24335 |
+- BPF_ALU64_REG(BPF_ADD, R3, R0), |
24336 |
+- BPF_ALU64_REG(BPF_ADD, R3, R1), |
24337 |
+- BPF_ALU64_REG(BPF_ADD, R3, R2), |
24338 |
+- BPF_ALU64_REG(BPF_ADD, R3, R3), |
24339 |
+- BPF_ALU64_REG(BPF_ADD, R3, R4), |
24340 |
+- BPF_ALU64_REG(BPF_ADD, R3, R5), |
24341 |
+- BPF_ALU64_REG(BPF_ADD, R3, R6), |
24342 |
+- BPF_ALU64_REG(BPF_ADD, R3, R7), |
24343 |
+- BPF_ALU64_REG(BPF_ADD, R3, R8), |
24344 |
+- BPF_ALU64_REG(BPF_ADD, R3, R9), /* R3 == 4063 */ |
24345 |
+- BPF_JMP_IMM(BPF_JEQ, R3, 4063, 1), |
24346 |
+- BPF_EXIT_INSN(), |
24347 |
+- BPF_ALU64_REG(BPF_ADD, R4, R0), |
24348 |
+- BPF_ALU64_REG(BPF_ADD, R4, R1), |
24349 |
+- BPF_ALU64_REG(BPF_ADD, R4, R2), |
24350 |
+- BPF_ALU64_REG(BPF_ADD, R4, R3), |
24351 |
+- BPF_ALU64_REG(BPF_ADD, R4, R4), |
24352 |
+- BPF_ALU64_REG(BPF_ADD, R4, R5), |
24353 |
+- BPF_ALU64_REG(BPF_ADD, R4, R6), |
24354 |
+- BPF_ALU64_REG(BPF_ADD, R4, R7), |
24355 |
+- BPF_ALU64_REG(BPF_ADD, R4, R8), |
24356 |
+- BPF_ALU64_REG(BPF_ADD, R4, R9), /* R4 == 12177 */ |
24357 |
+- BPF_JMP_IMM(BPF_JEQ, R4, 12177, 1), |
24358 |
+- BPF_EXIT_INSN(), |
24359 |
+- BPF_ALU64_REG(BPF_ADD, R5, R0), |
24360 |
+- BPF_ALU64_REG(BPF_ADD, R5, R1), |
24361 |
+- BPF_ALU64_REG(BPF_ADD, R5, R2), |
24362 |
+- BPF_ALU64_REG(BPF_ADD, R5, R3), |
24363 |
+- BPF_ALU64_REG(BPF_ADD, R5, R4), |
24364 |
+- BPF_ALU64_REG(BPF_ADD, R5, R5), |
24365 |
+- BPF_ALU64_REG(BPF_ADD, R5, R6), |
24366 |
+- BPF_ALU64_REG(BPF_ADD, R5, R7), |
24367 |
+- BPF_ALU64_REG(BPF_ADD, R5, R8), |
24368 |
+- BPF_ALU64_REG(BPF_ADD, R5, R9), /* R5 == 36518 */ |
24369 |
+- BPF_JMP_IMM(BPF_JEQ, R5, 36518, 1), |
24370 |
+- BPF_EXIT_INSN(), |
24371 |
+- BPF_ALU64_REG(BPF_ADD, R6, R0), |
24372 |
+- BPF_ALU64_REG(BPF_ADD, R6, R1), |
24373 |
+- BPF_ALU64_REG(BPF_ADD, R6, R2), |
24374 |
+- BPF_ALU64_REG(BPF_ADD, R6, R3), |
24375 |
+- BPF_ALU64_REG(BPF_ADD, R6, R4), |
24376 |
+- BPF_ALU64_REG(BPF_ADD, R6, R5), |
24377 |
+- BPF_ALU64_REG(BPF_ADD, R6, R6), |
24378 |
+- BPF_ALU64_REG(BPF_ADD, R6, R7), |
24379 |
+- BPF_ALU64_REG(BPF_ADD, R6, R8), |
24380 |
+- BPF_ALU64_REG(BPF_ADD, R6, R9), /* R6 == 109540 */ |
24381 |
+- BPF_JMP_IMM(BPF_JEQ, R6, 109540, 1), |
24382 |
+- BPF_EXIT_INSN(), |
24383 |
+- BPF_ALU64_REG(BPF_ADD, R7, R0), |
24384 |
+- BPF_ALU64_REG(BPF_ADD, R7, R1), |
24385 |
+- BPF_ALU64_REG(BPF_ADD, R7, R2), |
24386 |
+- BPF_ALU64_REG(BPF_ADD, R7, R3), |
24387 |
+- BPF_ALU64_REG(BPF_ADD, R7, R4), |
24388 |
+- BPF_ALU64_REG(BPF_ADD, R7, R5), |
24389 |
+- BPF_ALU64_REG(BPF_ADD, R7, R6), |
24390 |
+- BPF_ALU64_REG(BPF_ADD, R7, R7), |
24391 |
+- BPF_ALU64_REG(BPF_ADD, R7, R8), |
24392 |
+- BPF_ALU64_REG(BPF_ADD, R7, R9), /* R7 == 328605 */ |
24393 |
+- BPF_JMP_IMM(BPF_JEQ, R7, 328605, 1), |
24394 |
+- BPF_EXIT_INSN(), |
24395 |
+- BPF_ALU64_REG(BPF_ADD, R8, R0), |
24396 |
+- BPF_ALU64_REG(BPF_ADD, R8, R1), |
24397 |
+- BPF_ALU64_REG(BPF_ADD, R8, R2), |
24398 |
+- BPF_ALU64_REG(BPF_ADD, R8, R3), |
24399 |
+- BPF_ALU64_REG(BPF_ADD, R8, R4), |
24400 |
+- BPF_ALU64_REG(BPF_ADD, R8, R5), |
24401 |
+- BPF_ALU64_REG(BPF_ADD, R8, R6), |
24402 |
+- BPF_ALU64_REG(BPF_ADD, R8, R7), |
24403 |
+- BPF_ALU64_REG(BPF_ADD, R8, R8), |
24404 |
+- BPF_ALU64_REG(BPF_ADD, R8, R9), /* R8 == 985799 */ |
24405 |
+- BPF_JMP_IMM(BPF_JEQ, R8, 985799, 1), |
24406 |
+- BPF_EXIT_INSN(), |
24407 |
+- BPF_ALU64_REG(BPF_ADD, R9, R0), |
24408 |
+- BPF_ALU64_REG(BPF_ADD, R9, R1), |
24409 |
+- BPF_ALU64_REG(BPF_ADD, R9, R2), |
24410 |
+- BPF_ALU64_REG(BPF_ADD, R9, R3), |
24411 |
+- BPF_ALU64_REG(BPF_ADD, R9, R4), |
24412 |
+- BPF_ALU64_REG(BPF_ADD, R9, R5), |
24413 |
+- BPF_ALU64_REG(BPF_ADD, R9, R6), |
24414 |
+- BPF_ALU64_REG(BPF_ADD, R9, R7), |
24415 |
+- BPF_ALU64_REG(BPF_ADD, R9, R8), |
24416 |
+- BPF_ALU64_REG(BPF_ADD, R9, R9), /* R9 == 2957380 */ |
24417 |
+- BPF_ALU64_REG(BPF_MOV, R0, R9), |
24418 |
+- BPF_EXIT_INSN(), |
24419 |
+- }, |
24420 |
+- INTERNAL, |
24421 |
+- { }, |
24422 |
+- { { 0, 2957380 } } |
24423 |
+- }, |
24424 |
+- { |
24425 |
+- "INT: ADD 32-bit", |
24426 |
+- .u.insns_int = { |
24427 |
+- BPF_ALU32_IMM(BPF_MOV, R0, 20), |
24428 |
+- BPF_ALU32_IMM(BPF_MOV, R1, 1), |
24429 |
+- BPF_ALU32_IMM(BPF_MOV, R2, 2), |
24430 |
+- BPF_ALU32_IMM(BPF_MOV, R3, 3), |
24431 |
+- BPF_ALU32_IMM(BPF_MOV, R4, 4), |
24432 |
+- BPF_ALU32_IMM(BPF_MOV, R5, 5), |
24433 |
+- BPF_ALU32_IMM(BPF_MOV, R6, 6), |
24434 |
+- BPF_ALU32_IMM(BPF_MOV, R7, 7), |
24435 |
+- BPF_ALU32_IMM(BPF_MOV, R8, 8), |
24436 |
+- BPF_ALU32_IMM(BPF_MOV, R9, 9), |
24437 |
+- BPF_ALU64_IMM(BPF_ADD, R1, 10), |
24438 |
+- BPF_ALU64_IMM(BPF_ADD, R2, 10), |
24439 |
+- BPF_ALU64_IMM(BPF_ADD, R3, 10), |
24440 |
+- BPF_ALU64_IMM(BPF_ADD, R4, 10), |
24441 |
+- BPF_ALU64_IMM(BPF_ADD, R5, 10), |
24442 |
+- BPF_ALU64_IMM(BPF_ADD, R6, 10), |
24443 |
+- BPF_ALU64_IMM(BPF_ADD, R7, 10), |
24444 |
+- BPF_ALU64_IMM(BPF_ADD, R8, 10), |
24445 |
+- BPF_ALU64_IMM(BPF_ADD, R9, 10), |
24446 |
+- BPF_ALU32_REG(BPF_ADD, R0, R1), |
24447 |
+- BPF_ALU32_REG(BPF_ADD, R0, R2), |
24448 |
+- BPF_ALU32_REG(BPF_ADD, R0, R3), |
24449 |
+- BPF_ALU32_REG(BPF_ADD, R0, R4), |
24450 |
+- BPF_ALU32_REG(BPF_ADD, R0, R5), |
24451 |
+- BPF_ALU32_REG(BPF_ADD, R0, R6), |
24452 |
+- BPF_ALU32_REG(BPF_ADD, R0, R7), |
24453 |
+- BPF_ALU32_REG(BPF_ADD, R0, R8), |
24454 |
+- BPF_ALU32_REG(BPF_ADD, R0, R9), /* R0 == 155 */ |
24455 |
+- BPF_JMP_IMM(BPF_JEQ, R0, 155, 1), |
24456 |
+- BPF_EXIT_INSN(), |
24457 |
+- BPF_ALU32_REG(BPF_ADD, R1, R0), |
24458 |
+- BPF_ALU32_REG(BPF_ADD, R1, R1), |
24459 |
+- BPF_ALU32_REG(BPF_ADD, R1, R2), |
24460 |
+- BPF_ALU32_REG(BPF_ADD, R1, R3), |
24461 |
+- BPF_ALU32_REG(BPF_ADD, R1, R4), |
24462 |
+- BPF_ALU32_REG(BPF_ADD, R1, R5), |
24463 |
+- BPF_ALU32_REG(BPF_ADD, R1, R6), |
24464 |
+- BPF_ALU32_REG(BPF_ADD, R1, R7), |
24465 |
+- BPF_ALU32_REG(BPF_ADD, R1, R8), |
24466 |
+- BPF_ALU32_REG(BPF_ADD, R1, R9), /* R1 == 456 */ |
24467 |
+- BPF_JMP_IMM(BPF_JEQ, R1, 456, 1), |
24468 |
+- BPF_EXIT_INSN(), |
24469 |
+- BPF_ALU32_REG(BPF_ADD, R2, R0), |
24470 |
+- BPF_ALU32_REG(BPF_ADD, R2, R1), |
24471 |
+- BPF_ALU32_REG(BPF_ADD, R2, R2), |
24472 |
+- BPF_ALU32_REG(BPF_ADD, R2, R3), |
24473 |
+- BPF_ALU32_REG(BPF_ADD, R2, R4), |
24474 |
+- BPF_ALU32_REG(BPF_ADD, R2, R5), |
24475 |
+- BPF_ALU32_REG(BPF_ADD, R2, R6), |
24476 |
+- BPF_ALU32_REG(BPF_ADD, R2, R7), |
24477 |
+- BPF_ALU32_REG(BPF_ADD, R2, R8), |
24478 |
+- BPF_ALU32_REG(BPF_ADD, R2, R9), /* R2 == 1358 */ |
24479 |
+- BPF_JMP_IMM(BPF_JEQ, R2, 1358, 1), |
24480 |
+- BPF_EXIT_INSN(), |
24481 |
+- BPF_ALU32_REG(BPF_ADD, R3, R0), |
24482 |
+- BPF_ALU32_REG(BPF_ADD, R3, R1), |
24483 |
+- BPF_ALU32_REG(BPF_ADD, R3, R2), |
24484 |
+- BPF_ALU32_REG(BPF_ADD, R3, R3), |
24485 |
+- BPF_ALU32_REG(BPF_ADD, R3, R4), |
24486 |
+- BPF_ALU32_REG(BPF_ADD, R3, R5), |
24487 |
+- BPF_ALU32_REG(BPF_ADD, R3, R6), |
24488 |
+- BPF_ALU32_REG(BPF_ADD, R3, R7), |
24489 |
+- BPF_ALU32_REG(BPF_ADD, R3, R8), |
24490 |
+- BPF_ALU32_REG(BPF_ADD, R3, R9), /* R3 == 4063 */ |
24491 |
+- BPF_JMP_IMM(BPF_JEQ, R3, 4063, 1), |
24492 |
+- BPF_EXIT_INSN(), |
24493 |
+- BPF_ALU32_REG(BPF_ADD, R4, R0), |
24494 |
+- BPF_ALU32_REG(BPF_ADD, R4, R1), |
24495 |
+- BPF_ALU32_REG(BPF_ADD, R4, R2), |
24496 |
+- BPF_ALU32_REG(BPF_ADD, R4, R3), |
24497 |
+- BPF_ALU32_REG(BPF_ADD, R4, R4), |
24498 |
+- BPF_ALU32_REG(BPF_ADD, R4, R5), |
24499 |
+- BPF_ALU32_REG(BPF_ADD, R4, R6), |
24500 |
+- BPF_ALU32_REG(BPF_ADD, R4, R7), |
24501 |
+- BPF_ALU32_REG(BPF_ADD, R4, R8), |
24502 |
+- BPF_ALU32_REG(BPF_ADD, R4, R9), /* R4 == 12177 */ |
24503 |
+- BPF_JMP_IMM(BPF_JEQ, R4, 12177, 1), |
24504 |
+- BPF_EXIT_INSN(), |
24505 |
+- BPF_ALU32_REG(BPF_ADD, R5, R0), |
24506 |
+- BPF_ALU32_REG(BPF_ADD, R5, R1), |
24507 |
+- BPF_ALU32_REG(BPF_ADD, R5, R2), |
24508 |
+- BPF_ALU32_REG(BPF_ADD, R5, R3), |
24509 |
+- BPF_ALU32_REG(BPF_ADD, R5, R4), |
24510 |
+- BPF_ALU32_REG(BPF_ADD, R5, R5), |
24511 |
+- BPF_ALU32_REG(BPF_ADD, R5, R6), |
24512 |
+- BPF_ALU32_REG(BPF_ADD, R5, R7), |
24513 |
+- BPF_ALU32_REG(BPF_ADD, R5, R8), |
24514 |
+- BPF_ALU32_REG(BPF_ADD, R5, R9), /* R5 == 36518 */ |
24515 |
+- BPF_JMP_IMM(BPF_JEQ, R5, 36518, 1), |
24516 |
+- BPF_EXIT_INSN(), |
24517 |
+- BPF_ALU32_REG(BPF_ADD, R6, R0), |
24518 |
+- BPF_ALU32_REG(BPF_ADD, R6, R1), |
24519 |
+- BPF_ALU32_REG(BPF_ADD, R6, R2), |
24520 |
+- BPF_ALU32_REG(BPF_ADD, R6, R3), |
24521 |
+- BPF_ALU32_REG(BPF_ADD, R6, R4), |
24522 |
+- BPF_ALU32_REG(BPF_ADD, R6, R5), |
24523 |
+- BPF_ALU32_REG(BPF_ADD, R6, R6), |
24524 |
+- BPF_ALU32_REG(BPF_ADD, R6, R7), |
24525 |
+- BPF_ALU32_REG(BPF_ADD, R6, R8), |
24526 |
+- BPF_ALU32_REG(BPF_ADD, R6, R9), /* R6 == 109540 */ |
24527 |
+- BPF_JMP_IMM(BPF_JEQ, R6, 109540, 1), |
24528 |
+- BPF_EXIT_INSN(), |
24529 |
+- BPF_ALU32_REG(BPF_ADD, R7, R0), |
24530 |
+- BPF_ALU32_REG(BPF_ADD, R7, R1), |
24531 |
+- BPF_ALU32_REG(BPF_ADD, R7, R2), |
24532 |
+- BPF_ALU32_REG(BPF_ADD, R7, R3), |
24533 |
+- BPF_ALU32_REG(BPF_ADD, R7, R4), |
24534 |
+- BPF_ALU32_REG(BPF_ADD, R7, R5), |
24535 |
+- BPF_ALU32_REG(BPF_ADD, R7, R6), |
24536 |
+- BPF_ALU32_REG(BPF_ADD, R7, R7), |
24537 |
+- BPF_ALU32_REG(BPF_ADD, R7, R8), |
24538 |
+- BPF_ALU32_REG(BPF_ADD, R7, R9), /* R7 == 328605 */ |
24539 |
+- BPF_JMP_IMM(BPF_JEQ, R7, 328605, 1), |
24540 |
+- BPF_EXIT_INSN(), |
24541 |
+- BPF_ALU32_REG(BPF_ADD, R8, R0), |
24542 |
+- BPF_ALU32_REG(BPF_ADD, R8, R1), |
24543 |
+- BPF_ALU32_REG(BPF_ADD, R8, R2), |
24544 |
+- BPF_ALU32_REG(BPF_ADD, R8, R3), |
24545 |
+- BPF_ALU32_REG(BPF_ADD, R8, R4), |
24546 |
+- BPF_ALU32_REG(BPF_ADD, R8, R5), |
24547 |
+- BPF_ALU32_REG(BPF_ADD, R8, R6), |
24548 |
+- BPF_ALU32_REG(BPF_ADD, R8, R7), |
24549 |
+- BPF_ALU32_REG(BPF_ADD, R8, R8), |
24550 |
+- BPF_ALU32_REG(BPF_ADD, R8, R9), /* R8 == 985799 */ |
24551 |
+- BPF_JMP_IMM(BPF_JEQ, R8, 985799, 1), |
24552 |
+- BPF_EXIT_INSN(), |
24553 |
+- BPF_ALU32_REG(BPF_ADD, R9, R0), |
24554 |
+- BPF_ALU32_REG(BPF_ADD, R9, R1), |
24555 |
+- BPF_ALU32_REG(BPF_ADD, R9, R2), |
24556 |
+- BPF_ALU32_REG(BPF_ADD, R9, R3), |
24557 |
+- BPF_ALU32_REG(BPF_ADD, R9, R4), |
24558 |
+- BPF_ALU32_REG(BPF_ADD, R9, R5), |
24559 |
+- BPF_ALU32_REG(BPF_ADD, R9, R6), |
24560 |
+- BPF_ALU32_REG(BPF_ADD, R9, R7), |
24561 |
+- BPF_ALU32_REG(BPF_ADD, R9, R8), |
24562 |
+- BPF_ALU32_REG(BPF_ADD, R9, R9), /* R9 == 2957380 */ |
24563 |
+- BPF_ALU32_REG(BPF_MOV, R0, R9), |
24564 |
+- BPF_EXIT_INSN(), |
24565 |
+- }, |
24566 |
+- INTERNAL, |
24567 |
+- { }, |
24568 |
+- { { 0, 2957380 } } |
24569 |
+- }, |
24570 |
+- { /* Mainly checking JIT here. */ |
24571 |
+- "INT: SUB", |
24572 |
+- .u.insns_int = { |
24573 |
+- BPF_ALU64_IMM(BPF_MOV, R0, 0), |
24574 |
+- BPF_ALU64_IMM(BPF_MOV, R1, 1), |
24575 |
+- BPF_ALU64_IMM(BPF_MOV, R2, 2), |
24576 |
+- BPF_ALU64_IMM(BPF_MOV, R3, 3), |
24577 |
+- BPF_ALU64_IMM(BPF_MOV, R4, 4), |
24578 |
+- BPF_ALU64_IMM(BPF_MOV, R5, 5), |
24579 |
+- BPF_ALU64_IMM(BPF_MOV, R6, 6), |
24580 |
+- BPF_ALU64_IMM(BPF_MOV, R7, 7), |
24581 |
+- BPF_ALU64_IMM(BPF_MOV, R8, 8), |
24582 |
+- BPF_ALU64_IMM(BPF_MOV, R9, 9), |
24583 |
+- BPF_ALU64_REG(BPF_SUB, R0, R0), |
24584 |
+- BPF_ALU64_REG(BPF_SUB, R0, R1), |
24585 |
+- BPF_ALU64_REG(BPF_SUB, R0, R2), |
24586 |
+- BPF_ALU64_REG(BPF_SUB, R0, R3), |
24587 |
+- BPF_ALU64_REG(BPF_SUB, R0, R4), |
24588 |
+- BPF_ALU64_REG(BPF_SUB, R0, R5), |
24589 |
+- BPF_ALU64_REG(BPF_SUB, R0, R6), |
24590 |
+- BPF_ALU64_REG(BPF_SUB, R0, R7), |
24591 |
+- BPF_ALU64_REG(BPF_SUB, R0, R8), |
24592 |
+- BPF_ALU64_REG(BPF_SUB, R0, R9), |
24593 |
+- BPF_ALU64_IMM(BPF_SUB, R0, 10), |
24594 |
+- BPF_JMP_IMM(BPF_JEQ, R0, -55, 1), |
24595 |
+- BPF_EXIT_INSN(), |
24596 |
+- BPF_ALU64_REG(BPF_SUB, R1, R0), |
24597 |
+- BPF_ALU64_REG(BPF_SUB, R1, R2), |
24598 |
+- BPF_ALU64_REG(BPF_SUB, R1, R3), |
24599 |
+- BPF_ALU64_REG(BPF_SUB, R1, R4), |
24600 |
+- BPF_ALU64_REG(BPF_SUB, R1, R5), |
24601 |
+- BPF_ALU64_REG(BPF_SUB, R1, R6), |
24602 |
+- BPF_ALU64_REG(BPF_SUB, R1, R7), |
24603 |
+- BPF_ALU64_REG(BPF_SUB, R1, R8), |
24604 |
+- BPF_ALU64_REG(BPF_SUB, R1, R9), |
24605 |
+- BPF_ALU64_IMM(BPF_SUB, R1, 10), |
24606 |
+- BPF_ALU64_REG(BPF_SUB, R2, R0), |
24607 |
+- BPF_ALU64_REG(BPF_SUB, R2, R1), |
24608 |
+- BPF_ALU64_REG(BPF_SUB, R2, R3), |
24609 |
+- BPF_ALU64_REG(BPF_SUB, R2, R4), |
24610 |
+- BPF_ALU64_REG(BPF_SUB, R2, R5), |
24611 |
+- BPF_ALU64_REG(BPF_SUB, R2, R6), |
24612 |
+- BPF_ALU64_REG(BPF_SUB, R2, R7), |
24613 |
+- BPF_ALU64_REG(BPF_SUB, R2, R8), |
24614 |
+- BPF_ALU64_REG(BPF_SUB, R2, R9), |
24615 |
+- BPF_ALU64_IMM(BPF_SUB, R2, 10), |
24616 |
+- BPF_ALU64_REG(BPF_SUB, R3, R0), |
24617 |
+- BPF_ALU64_REG(BPF_SUB, R3, R1), |
24618 |
+- BPF_ALU64_REG(BPF_SUB, R3, R2), |
24619 |
+- BPF_ALU64_REG(BPF_SUB, R3, R4), |
24620 |
+- BPF_ALU64_REG(BPF_SUB, R3, R5), |
24621 |
+- BPF_ALU64_REG(BPF_SUB, R3, R6), |
24622 |
+- BPF_ALU64_REG(BPF_SUB, R3, R7), |
24623 |
+- BPF_ALU64_REG(BPF_SUB, R3, R8), |
24624 |
+- BPF_ALU64_REG(BPF_SUB, R3, R9), |
24625 |
+- BPF_ALU64_IMM(BPF_SUB, R3, 10), |
24626 |
+- BPF_ALU64_REG(BPF_SUB, R4, R0), |
24627 |
+- BPF_ALU64_REG(BPF_SUB, R4, R1), |
24628 |
+- BPF_ALU64_REG(BPF_SUB, R4, R2), |
24629 |
+- BPF_ALU64_REG(BPF_SUB, R4, R3), |
24630 |
+- BPF_ALU64_REG(BPF_SUB, R4, R5), |
24631 |
+- BPF_ALU64_REG(BPF_SUB, R4, R6), |
24632 |
+- BPF_ALU64_REG(BPF_SUB, R4, R7), |
24633 |
+- BPF_ALU64_REG(BPF_SUB, R4, R8), |
24634 |
+- BPF_ALU64_REG(BPF_SUB, R4, R9), |
24635 |
+- BPF_ALU64_IMM(BPF_SUB, R4, 10), |
24636 |
+- BPF_ALU64_REG(BPF_SUB, R5, R0), |
24637 |
+- BPF_ALU64_REG(BPF_SUB, R5, R1), |
24638 |
+- BPF_ALU64_REG(BPF_SUB, R5, R2), |
24639 |
+- BPF_ALU64_REG(BPF_SUB, R5, R3), |
24640 |
+- BPF_ALU64_REG(BPF_SUB, R5, R4), |
24641 |
+- BPF_ALU64_REG(BPF_SUB, R5, R6), |
24642 |
+- BPF_ALU64_REG(BPF_SUB, R5, R7), |
24643 |
+- BPF_ALU64_REG(BPF_SUB, R5, R8), |
24644 |
+- BPF_ALU64_REG(BPF_SUB, R5, R9), |
24645 |
+- BPF_ALU64_IMM(BPF_SUB, R5, 10), |
24646 |
+- BPF_ALU64_REG(BPF_SUB, R6, R0), |
24647 |
+- BPF_ALU64_REG(BPF_SUB, R6, R1), |
24648 |
+- BPF_ALU64_REG(BPF_SUB, R6, R2), |
24649 |
+- BPF_ALU64_REG(BPF_SUB, R6, R3), |
24650 |
+- BPF_ALU64_REG(BPF_SUB, R6, R4), |
24651 |
+- BPF_ALU64_REG(BPF_SUB, R6, R5), |
24652 |
+- BPF_ALU64_REG(BPF_SUB, R6, R7), |
24653 |
+- BPF_ALU64_REG(BPF_SUB, R6, R8), |
24654 |
+- BPF_ALU64_REG(BPF_SUB, R6, R9), |
24655 |
+- BPF_ALU64_IMM(BPF_SUB, R6, 10), |
24656 |
+- BPF_ALU64_REG(BPF_SUB, R7, R0), |
24657 |
+- BPF_ALU64_REG(BPF_SUB, R7, R1), |
24658 |
+- BPF_ALU64_REG(BPF_SUB, R7, R2), |
24659 |
+- BPF_ALU64_REG(BPF_SUB, R7, R3), |
24660 |
+- BPF_ALU64_REG(BPF_SUB, R7, R4), |
24661 |
+- BPF_ALU64_REG(BPF_SUB, R7, R5), |
24662 |
+- BPF_ALU64_REG(BPF_SUB, R7, R6), |
24663 |
+- BPF_ALU64_REG(BPF_SUB, R7, R8), |
24664 |
+- BPF_ALU64_REG(BPF_SUB, R7, R9), |
24665 |
+- BPF_ALU64_IMM(BPF_SUB, R7, 10), |
24666 |
+- BPF_ALU64_REG(BPF_SUB, R8, R0), |
24667 |
+- BPF_ALU64_REG(BPF_SUB, R8, R1), |
24668 |
+- BPF_ALU64_REG(BPF_SUB, R8, R2), |
24669 |
+- BPF_ALU64_REG(BPF_SUB, R8, R3), |
24670 |
+- BPF_ALU64_REG(BPF_SUB, R8, R4), |
24671 |
+- BPF_ALU64_REG(BPF_SUB, R8, R5), |
24672 |
+- BPF_ALU64_REG(BPF_SUB, R8, R6), |
24673 |
+- BPF_ALU64_REG(BPF_SUB, R8, R7), |
24674 |
+- BPF_ALU64_REG(BPF_SUB, R8, R9), |
24675 |
+- BPF_ALU64_IMM(BPF_SUB, R8, 10), |
24676 |
+- BPF_ALU64_REG(BPF_SUB, R9, R0), |
24677 |
+- BPF_ALU64_REG(BPF_SUB, R9, R1), |
24678 |
+- BPF_ALU64_REG(BPF_SUB, R9, R2), |
24679 |
+- BPF_ALU64_REG(BPF_SUB, R9, R3), |
24680 |
+- BPF_ALU64_REG(BPF_SUB, R9, R4), |
24681 |
+- BPF_ALU64_REG(BPF_SUB, R9, R5), |
24682 |
+- BPF_ALU64_REG(BPF_SUB, R9, R6), |
24683 |
+- BPF_ALU64_REG(BPF_SUB, R9, R7), |
24684 |
+- BPF_ALU64_REG(BPF_SUB, R9, R8), |
24685 |
+- BPF_ALU64_IMM(BPF_SUB, R9, 10), |
24686 |
+- BPF_ALU64_IMM(BPF_SUB, R0, 10), |
24687 |
+- BPF_ALU64_IMM(BPF_NEG, R0, 0), |
24688 |
+- BPF_ALU64_REG(BPF_SUB, R0, R1), |
24689 |
+- BPF_ALU64_REG(BPF_SUB, R0, R2), |
24690 |
+- BPF_ALU64_REG(BPF_SUB, R0, R3), |
24691 |
+- BPF_ALU64_REG(BPF_SUB, R0, R4), |
24692 |
+- BPF_ALU64_REG(BPF_SUB, R0, R5), |
24693 |
+- BPF_ALU64_REG(BPF_SUB, R0, R6), |
24694 |
+- BPF_ALU64_REG(BPF_SUB, R0, R7), |
24695 |
+- BPF_ALU64_REG(BPF_SUB, R0, R8), |
24696 |
+- BPF_ALU64_REG(BPF_SUB, R0, R9), |
24697 |
+- BPF_EXIT_INSN(), |
24698 |
+- }, |
24699 |
+- INTERNAL, |
24700 |
+- { }, |
24701 |
+- { { 0, 11 } } |
24702 |
+- }, |
24703 |
+- { /* Mainly checking JIT here. */ |
24704 |
+- "INT: XOR", |
24705 |
+- .u.insns_int = { |
24706 |
+- BPF_ALU64_REG(BPF_SUB, R0, R0), |
24707 |
+- BPF_ALU64_REG(BPF_XOR, R1, R1), |
24708 |
+- BPF_JMP_REG(BPF_JEQ, R0, R1, 1), |
24709 |
+- BPF_EXIT_INSN(), |
24710 |
+- BPF_ALU64_IMM(BPF_MOV, R0, 10), |
24711 |
+- BPF_ALU64_IMM(BPF_MOV, R1, -1), |
24712 |
+- BPF_ALU64_REG(BPF_SUB, R1, R1), |
24713 |
+- BPF_ALU64_REG(BPF_XOR, R2, R2), |
24714 |
+- BPF_JMP_REG(BPF_JEQ, R1, R2, 1), |
24715 |
+- BPF_EXIT_INSN(), |
24716 |
+- BPF_ALU64_REG(BPF_SUB, R2, R2), |
24717 |
+- BPF_ALU64_REG(BPF_XOR, R3, R3), |
24718 |
+- BPF_ALU64_IMM(BPF_MOV, R0, 10), |
24719 |
+- BPF_ALU64_IMM(BPF_MOV, R1, -1), |
24720 |
+- BPF_JMP_REG(BPF_JEQ, R2, R3, 1), |
24721 |
+- BPF_EXIT_INSN(), |
24722 |
+- BPF_ALU64_REG(BPF_SUB, R3, R3), |
24723 |
+- BPF_ALU64_REG(BPF_XOR, R4, R4), |
24724 |
+- BPF_ALU64_IMM(BPF_MOV, R2, 1), |
24725 |
+- BPF_ALU64_IMM(BPF_MOV, R5, -1), |
24726 |
+- BPF_JMP_REG(BPF_JEQ, R3, R4, 1), |
24727 |
+- BPF_EXIT_INSN(), |
24728 |
+- BPF_ALU64_REG(BPF_SUB, R4, R4), |
24729 |
+- BPF_ALU64_REG(BPF_XOR, R5, R5), |
24730 |
+- BPF_ALU64_IMM(BPF_MOV, R3, 1), |
24731 |
+- BPF_ALU64_IMM(BPF_MOV, R7, -1), |
24732 |
+- BPF_JMP_REG(BPF_JEQ, R5, R4, 1), |
24733 |
+- BPF_EXIT_INSN(), |
24734 |
+- BPF_ALU64_IMM(BPF_MOV, R5, 1), |
24735 |
+- BPF_ALU64_REG(BPF_SUB, R5, R5), |
24736 |
+- BPF_ALU64_REG(BPF_XOR, R6, R6), |
24737 |
+- BPF_ALU64_IMM(BPF_MOV, R1, 1), |
24738 |
+- BPF_ALU64_IMM(BPF_MOV, R8, -1), |
24739 |
+- BPF_JMP_REG(BPF_JEQ, R5, R6, 1), |
24740 |
+- BPF_EXIT_INSN(), |
24741 |
+- BPF_ALU64_REG(BPF_SUB, R6, R6), |
24742 |
+- BPF_ALU64_REG(BPF_XOR, R7, R7), |
24743 |
+- BPF_JMP_REG(BPF_JEQ, R7, R6, 1), |
24744 |
+- BPF_EXIT_INSN(), |
24745 |
+- BPF_ALU64_REG(BPF_SUB, R7, R7), |
24746 |
+- BPF_ALU64_REG(BPF_XOR, R8, R8), |
24747 |
+- BPF_JMP_REG(BPF_JEQ, R7, R8, 1), |
24748 |
+- BPF_EXIT_INSN(), |
24749 |
+- BPF_ALU64_REG(BPF_SUB, R8, R8), |
24750 |
+- BPF_ALU64_REG(BPF_XOR, R9, R9), |
24751 |
+- BPF_JMP_REG(BPF_JEQ, R9, R8, 1), |
24752 |
+- BPF_EXIT_INSN(), |
24753 |
+- BPF_ALU64_REG(BPF_SUB, R9, R9), |
24754 |
+- BPF_ALU64_REG(BPF_XOR, R0, R0), |
24755 |
+- BPF_JMP_REG(BPF_JEQ, R9, R0, 1), |
24756 |
+- BPF_EXIT_INSN(), |
24757 |
+- BPF_ALU64_REG(BPF_SUB, R1, R1), |
24758 |
+- BPF_ALU64_REG(BPF_XOR, R0, R0), |
24759 |
+- BPF_JMP_REG(BPF_JEQ, R9, R0, 2), |
24760 |
+- BPF_ALU64_IMM(BPF_MOV, R0, 0), |
24761 |
+- BPF_EXIT_INSN(), |
24762 |
+- BPF_ALU64_IMM(BPF_MOV, R0, 1), |
24763 |
+- BPF_EXIT_INSN(), |
24764 |
+- }, |
24765 |
+- INTERNAL, |
24766 |
+- { }, |
24767 |
+- { { 0, 1 } } |
24768 |
+- }, |
24769 |
+- { /* Mainly checking JIT here. */ |
24770 |
+- "INT: MUL", |
24771 |
+- .u.insns_int = { |
24772 |
+- BPF_ALU64_IMM(BPF_MOV, R0, 11), |
24773 |
+- BPF_ALU64_IMM(BPF_MOV, R1, 1), |
24774 |
+- BPF_ALU64_IMM(BPF_MOV, R2, 2), |
24775 |
+- BPF_ALU64_IMM(BPF_MOV, R3, 3), |
24776 |
+- BPF_ALU64_IMM(BPF_MOV, R4, 4), |
24777 |
+- BPF_ALU64_IMM(BPF_MOV, R5, 5), |
24778 |
+- BPF_ALU64_IMM(BPF_MOV, R6, 6), |
24779 |
+- BPF_ALU64_IMM(BPF_MOV, R7, 7), |
24780 |
+- BPF_ALU64_IMM(BPF_MOV, R8, 8), |
24781 |
+- BPF_ALU64_IMM(BPF_MOV, R9, 9), |
24782 |
+- BPF_ALU64_REG(BPF_MUL, R0, R0), |
24783 |
+- BPF_ALU64_REG(BPF_MUL, R0, R1), |
24784 |
+- BPF_ALU64_REG(BPF_MUL, R0, R2), |
24785 |
+- BPF_ALU64_REG(BPF_MUL, R0, R3), |
24786 |
+- BPF_ALU64_REG(BPF_MUL, R0, R4), |
24787 |
+- BPF_ALU64_REG(BPF_MUL, R0, R5), |
24788 |
+- BPF_ALU64_REG(BPF_MUL, R0, R6), |
24789 |
+- BPF_ALU64_REG(BPF_MUL, R0, R7), |
24790 |
+- BPF_ALU64_REG(BPF_MUL, R0, R8), |
24791 |
+- BPF_ALU64_REG(BPF_MUL, R0, R9), |
24792 |
+- BPF_ALU64_IMM(BPF_MUL, R0, 10), |
24793 |
+- BPF_JMP_IMM(BPF_JEQ, R0, 439084800, 1), |
24794 |
+- BPF_EXIT_INSN(), |
24795 |
+- BPF_ALU64_REG(BPF_MUL, R1, R0), |
24796 |
+- BPF_ALU64_REG(BPF_MUL, R1, R2), |
24797 |
+- BPF_ALU64_REG(BPF_MUL, R1, R3), |
24798 |
+- BPF_ALU64_REG(BPF_MUL, R1, R4), |
24799 |
+- BPF_ALU64_REG(BPF_MUL, R1, R5), |
24800 |
+- BPF_ALU64_REG(BPF_MUL, R1, R6), |
24801 |
+- BPF_ALU64_REG(BPF_MUL, R1, R7), |
24802 |
+- BPF_ALU64_REG(BPF_MUL, R1, R8), |
24803 |
+- BPF_ALU64_REG(BPF_MUL, R1, R9), |
24804 |
+- BPF_ALU64_IMM(BPF_MUL, R1, 10), |
24805 |
+- BPF_ALU64_REG(BPF_MOV, R2, R1), |
24806 |
+- BPF_ALU64_IMM(BPF_RSH, R2, 32), |
24807 |
+- BPF_JMP_IMM(BPF_JEQ, R2, 0x5a924, 1), |
24808 |
+- BPF_EXIT_INSN(), |
24809 |
+- BPF_ALU64_IMM(BPF_LSH, R1, 32), |
24810 |
+- BPF_ALU64_IMM(BPF_ARSH, R1, 32), |
24811 |
+- BPF_JMP_IMM(BPF_JEQ, R1, 0xebb90000, 1), |
24812 |
+- BPF_EXIT_INSN(), |
24813 |
+- BPF_ALU64_REG(BPF_MUL, R2, R0), |
24814 |
+- BPF_ALU64_REG(BPF_MUL, R2, R1), |
24815 |
+- BPF_ALU64_REG(BPF_MUL, R2, R3), |
24816 |
+- BPF_ALU64_REG(BPF_MUL, R2, R4), |
24817 |
+- BPF_ALU64_REG(BPF_MUL, R2, R5), |
24818 |
+- BPF_ALU64_REG(BPF_MUL, R2, R6), |
24819 |
+- BPF_ALU64_REG(BPF_MUL, R2, R7), |
24820 |
+- BPF_ALU64_REG(BPF_MUL, R2, R8), |
24821 |
+- BPF_ALU64_REG(BPF_MUL, R2, R9), |
24822 |
+- BPF_ALU64_IMM(BPF_MUL, R2, 10), |
24823 |
+- BPF_ALU64_IMM(BPF_RSH, R2, 32), |
24824 |
+- BPF_ALU64_REG(BPF_MOV, R0, R2), |
24825 |
+- BPF_EXIT_INSN(), |
24826 |
+- }, |
24827 |
+- INTERNAL, |
24828 |
+- { }, |
24829 |
+- { { 0, 0x35d97ef2 } } |
24830 |
+- }, |
24831 |
+- { |
24832 |
+- "INT: ALU MIX", |
24833 |
+- .u.insns_int = { |
24834 |
+- BPF_ALU64_IMM(BPF_MOV, R0, 11), |
24835 |
+- BPF_ALU64_IMM(BPF_ADD, R0, -1), |
24836 |
+- BPF_ALU64_IMM(BPF_MOV, R2, 2), |
24837 |
+- BPF_ALU64_IMM(BPF_XOR, R2, 3), |
24838 |
+- BPF_ALU64_REG(BPF_DIV, R0, R2), |
24839 |
+- BPF_JMP_IMM(BPF_JEQ, R0, 10, 1), |
24840 |
+- BPF_EXIT_INSN(), |
24841 |
+- BPF_ALU64_IMM(BPF_MOD, R0, 3), |
24842 |
+- BPF_JMP_IMM(BPF_JEQ, R0, 1, 1), |
24843 |
+- BPF_EXIT_INSN(), |
24844 |
+- BPF_ALU64_IMM(BPF_MOV, R0, -1), |
24845 |
+- BPF_EXIT_INSN(), |
24846 |
+- }, |
24847 |
+- INTERNAL, |
24848 |
+- { }, |
24849 |
+- { { 0, -1 } } |
24850 |
+- }, |
24851 |
+- { |
24852 |
+- "INT: DIV + ABS", |
24853 |
+- .u.insns_int = { |
24854 |
+- BPF_ALU64_REG(BPF_MOV, R6, R1), |
24855 |
+- BPF_LD_ABS(BPF_B, 3), |
24856 |
+- BPF_ALU64_IMM(BPF_MOV, R2, 2), |
24857 |
+- BPF_ALU32_REG(BPF_DIV, R0, R2), |
24858 |
+- BPF_ALU64_REG(BPF_MOV, R8, R0), |
24859 |
+- BPF_LD_ABS(BPF_B, 4), |
24860 |
+- BPF_ALU64_REG(BPF_ADD, R8, R0), |
24861 |
+- BPF_LD_IND(BPF_B, R8, -70), |
24862 |
+- BPF_EXIT_INSN(), |
24863 |
+- }, |
24864 |
+- INTERNAL, |
24865 |
+- { 10, 20, 30, 40, 50 }, |
24866 |
+- { { 4, 0 }, { 5, 10 } } |
24867 |
+- }, |
24868 |
+- { |
24869 |
+- "INT: DIV by zero", |
24870 |
+- .u.insns_int = { |
24871 |
+- BPF_ALU64_REG(BPF_MOV, R6, R1), |
24872 |
+- BPF_ALU64_IMM(BPF_MOV, R7, 0), |
24873 |
+- BPF_LD_ABS(BPF_B, 3), |
24874 |
+- BPF_ALU32_REG(BPF_DIV, R0, R7), |
24875 |
+- BPF_EXIT_INSN(), |
24876 |
+- }, |
24877 |
+- INTERNAL, |
24878 |
+- { 10, 20, 30, 40, 50 }, |
24879 |
+- { { 3, 0 }, { 4, 0 } } |
24880 |
+- }, |
24881 |
+- { |
24882 |
+- "check: missing ret", |
24883 |
+- .u.insns = { |
24884 |
+- BPF_STMT(BPF_LD | BPF_IMM, 1), |
24885 |
+- }, |
24886 |
+- CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, |
24887 |
+- { }, |
24888 |
+- { } |
24889 |
+- }, |
24890 |
+- { |
24891 |
+- "check: div_k_0", |
24892 |
+- .u.insns = { |
24893 |
+- BPF_STMT(BPF_ALU | BPF_DIV | BPF_K, 0), |
24894 |
+- BPF_STMT(BPF_RET | BPF_K, 0) |
24895 |
+- }, |
24896 |
+- CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, |
24897 |
+- { }, |
24898 |
+- { } |
24899 |
+- }, |
24900 |
+- { |
24901 |
+- "check: unknown insn", |
24902 |
+- .u.insns = { |
24903 |
+- /* seccomp insn, rejected in socket filter */ |
24904 |
+- BPF_STMT(BPF_LDX | BPF_W | BPF_ABS, 0), |
24905 |
+- BPF_STMT(BPF_RET | BPF_K, 0) |
24906 |
+- }, |
24907 |
+- CLASSIC | FLAG_EXPECTED_FAIL, |
24908 |
+- { }, |
24909 |
+- { } |
24910 |
+- }, |
24911 |
+- { |
24912 |
+- "check: out of range spill/fill", |
24913 |
+- .u.insns = { |
24914 |
+- BPF_STMT(BPF_STX, 16), |
24915 |
+- BPF_STMT(BPF_RET | BPF_K, 0) |
24916 |
+- }, |
24917 |
+- CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, |
24918 |
+- { }, |
24919 |
+- { } |
24920 |
+- }, |
24921 |
+- { |
24922 |
+- "JUMPS + HOLES", |
24923 |
+- .u.insns = { |
24924 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24925 |
+- BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 15), |
24926 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24927 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24928 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24929 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24930 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24931 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24932 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24933 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24934 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24935 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24936 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24937 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24938 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24939 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90c2894d, 3, 4), |
24940 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24941 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90c2894d, 1, 2), |
24942 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24943 |
+- BPF_JUMP(BPF_JMP | BPF_JGE, 0, 14, 15), |
24944 |
+- BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 14), |
24945 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24946 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24947 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24948 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24949 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24950 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24951 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24952 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24953 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24954 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24955 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24956 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24957 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24958 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ, 0x2ac28349, 2, 3), |
24959 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ, 0x2ac28349, 1, 2), |
24960 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24961 |
+- BPF_JUMP(BPF_JMP | BPF_JGE, 0, 14, 15), |
24962 |
+- BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 14), |
24963 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24964 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24965 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24966 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24967 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24968 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24969 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24970 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24971 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24972 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24973 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24974 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24975 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24976 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90d2ff41, 2, 3), |
24977 |
+- BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90d2ff41, 1, 2), |
24978 |
+- BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0), |
24979 |
+- BPF_STMT(BPF_RET | BPF_A, 0), |
24980 |
+- BPF_STMT(BPF_RET | BPF_A, 0), |
24981 |
+- }, |
24982 |
+- CLASSIC, |
24983 |
+- { 0x00, 0x1b, 0x21, 0x3c, 0x9d, 0xf8, |
24984 |
+- 0x90, 0xe2, 0xba, 0x0a, 0x56, 0xb4, |
24985 |
+- 0x08, 0x00, |
24986 |
+- 0x45, 0x00, 0x00, 0x28, 0x00, 0x00, |
24987 |
+- 0x20, 0x00, 0x40, 0x11, 0x00, 0x00, /* IP header */ |
24988 |
+- 0xc0, 0xa8, 0x33, 0x01, |
24989 |
+- 0xc0, 0xa8, 0x33, 0x02, |
24990 |
+- 0xbb, 0xb6, |
24991 |
+- 0xa9, 0xfa, |
24992 |
+- 0x00, 0x14, 0x00, 0x00, |
24993 |
+- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, |
24994 |
+- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, |
24995 |
+- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, |
24996 |
+- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, |
24997 |
+- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, |
24998 |
+- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, |
24999 |
+- 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, |
25000 |
+- 0xcc, 0xcc, 0xcc, 0xcc }, |
25001 |
+- { { 88, 0x001b } } |
25002 |
+- }, |
25003 |
+- { |
25004 |
+- "check: RET X", |
25005 |
+- .u.insns = { |
25006 |
+- BPF_STMT(BPF_RET | BPF_X, 0), |
25007 |
+- }, |
25008 |
+- CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, |
25009 |
+- { }, |
25010 |
+- { }, |
25011 |
+- }, |
25012 |
+- { |
25013 |
+- "check: LDX + RET X", |
25014 |
+- .u.insns = { |
25015 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 42), |
25016 |
+- BPF_STMT(BPF_RET | BPF_X, 0), |
25017 |
+- }, |
25018 |
+- CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, |
25019 |
+- { }, |
25020 |
+- { }, |
25021 |
+- }, |
25022 |
+- { /* Mainly checking JIT here. */ |
25023 |
+- "M[]: alt STX + LDX", |
25024 |
+- .u.insns = { |
25025 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 100), |
25026 |
+- BPF_STMT(BPF_STX, 0), |
25027 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 0), |
25028 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25029 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25030 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25031 |
+- BPF_STMT(BPF_STX, 1), |
25032 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 1), |
25033 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25034 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25035 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25036 |
+- BPF_STMT(BPF_STX, 2), |
25037 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 2), |
25038 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25039 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25040 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25041 |
+- BPF_STMT(BPF_STX, 3), |
25042 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 3), |
25043 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25044 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25045 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25046 |
+- BPF_STMT(BPF_STX, 4), |
25047 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 4), |
25048 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25049 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25050 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25051 |
+- BPF_STMT(BPF_STX, 5), |
25052 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 5), |
25053 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25054 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25055 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25056 |
+- BPF_STMT(BPF_STX, 6), |
25057 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 6), |
25058 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25059 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25060 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25061 |
+- BPF_STMT(BPF_STX, 7), |
25062 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 7), |
25063 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25064 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25065 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25066 |
+- BPF_STMT(BPF_STX, 8), |
25067 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 8), |
25068 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25069 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25070 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25071 |
+- BPF_STMT(BPF_STX, 9), |
25072 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 9), |
25073 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25074 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25075 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25076 |
+- BPF_STMT(BPF_STX, 10), |
25077 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 10), |
25078 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25079 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25080 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25081 |
+- BPF_STMT(BPF_STX, 11), |
25082 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 11), |
25083 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25084 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25085 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25086 |
+- BPF_STMT(BPF_STX, 12), |
25087 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 12), |
25088 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25089 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25090 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25091 |
+- BPF_STMT(BPF_STX, 13), |
25092 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 13), |
25093 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25094 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25095 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25096 |
+- BPF_STMT(BPF_STX, 14), |
25097 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 14), |
25098 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25099 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25100 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25101 |
+- BPF_STMT(BPF_STX, 15), |
25102 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 15), |
25103 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25104 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_K, 1), |
25105 |
+- BPF_STMT(BPF_MISC | BPF_TAX, 0), |
25106 |
+- BPF_STMT(BPF_RET | BPF_A, 0), |
25107 |
+- }, |
25108 |
+- CLASSIC | FLAG_NO_DATA, |
25109 |
+- { }, |
25110 |
+- { { 0, 116 } }, |
25111 |
+- }, |
25112 |
+- { /* Mainly checking JIT here. */ |
25113 |
+- "M[]: full STX + full LDX", |
25114 |
+- .u.insns = { |
25115 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xbadfeedb), |
25116 |
+- BPF_STMT(BPF_STX, 0), |
25117 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xecabedae), |
25118 |
+- BPF_STMT(BPF_STX, 1), |
25119 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xafccfeaf), |
25120 |
+- BPF_STMT(BPF_STX, 2), |
25121 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xbffdcedc), |
25122 |
+- BPF_STMT(BPF_STX, 3), |
25123 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xfbbbdccb), |
25124 |
+- BPF_STMT(BPF_STX, 4), |
25125 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xfbabcbda), |
25126 |
+- BPF_STMT(BPF_STX, 5), |
25127 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xaedecbdb), |
25128 |
+- BPF_STMT(BPF_STX, 6), |
25129 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xadebbade), |
25130 |
+- BPF_STMT(BPF_STX, 7), |
25131 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xfcfcfaec), |
25132 |
+- BPF_STMT(BPF_STX, 8), |
25133 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xbcdddbdc), |
25134 |
+- BPF_STMT(BPF_STX, 9), |
25135 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xfeefdfac), |
25136 |
+- BPF_STMT(BPF_STX, 10), |
25137 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xcddcdeea), |
25138 |
+- BPF_STMT(BPF_STX, 11), |
25139 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xaccfaebb), |
25140 |
+- BPF_STMT(BPF_STX, 12), |
25141 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xbdcccdcf), |
25142 |
+- BPF_STMT(BPF_STX, 13), |
25143 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xaaedecde), |
25144 |
+- BPF_STMT(BPF_STX, 14), |
25145 |
+- BPF_STMT(BPF_LDX | BPF_IMM, 0xfaeacdad), |
25146 |
+- BPF_STMT(BPF_STX, 15), |
25147 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 0), |
25148 |
+- BPF_STMT(BPF_MISC | BPF_TXA, 0), |
25149 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 1), |
25150 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25151 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 2), |
25152 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25153 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 3), |
25154 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25155 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 4), |
25156 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25157 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 5), |
25158 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25159 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 6), |
25160 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25161 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 7), |
25162 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25163 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 8), |
25164 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25165 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 9), |
25166 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25167 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 10), |
25168 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25169 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 11), |
25170 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25171 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 12), |
25172 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25173 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 13), |
25174 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25175 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 14), |
25176 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25177 |
+- BPF_STMT(BPF_LDX | BPF_MEM, 15), |
25178 |
+- BPF_STMT(BPF_ALU | BPF_ADD | BPF_X, 0), |
25179 |
+- BPF_STMT(BPF_RET | BPF_A, 0), |
25180 |
+- }, |
25181 |
+- CLASSIC | FLAG_NO_DATA, |
25182 |
+- { }, |
25183 |
+- { { 0, 0x2a5a5e5 } }, |
25184 |
+- }, |
25185 |
+- { |
25186 |
+- "check: SKF_AD_MAX", |
25187 |
+- .u.insns = { |
25188 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
25189 |
+- SKF_AD_OFF + SKF_AD_MAX), |
25190 |
+- BPF_STMT(BPF_RET | BPF_A, 0), |
25191 |
+- }, |
25192 |
+- CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL, |
25193 |
+- { }, |
25194 |
+- { }, |
25195 |
+- }, |
25196 |
+- { /* Passes checker but fails during runtime. */ |
25197 |
+- "LD [SKF_AD_OFF-1]", |
25198 |
+- .u.insns = { |
25199 |
+- BPF_STMT(BPF_LD | BPF_W | BPF_ABS, |
25200 |
+- SKF_AD_OFF - 1), |
25201 |
+- BPF_STMT(BPF_RET | BPF_K, 1), |
25202 |
+- }, |
25203 |
+- CLASSIC, |
25204 |
+- { }, |
25205 |
+- { { 1, 0 } }, |
25206 |
+- }, |
25207 |
+-}; |
25208 |
+- |
25209 |
+-static struct net_device dev; |
25210 |
+- |
25211 |
+-static struct sk_buff *populate_skb(char *buf, int size) |
25212 |
+-{ |
25213 |
+- struct sk_buff *skb; |
25214 |
+- |
25215 |
+- if (size >= MAX_DATA) |
25216 |
+- return NULL; |
25217 |
+- |
25218 |
+- skb = alloc_skb(MAX_DATA, GFP_KERNEL); |
25219 |
+- if (!skb) |
25220 |
+- return NULL; |
25221 |
+- |
25222 |
+- memcpy(__skb_put(skb, size), buf, size); |
25223 |
+- |
25224 |
+- /* Initialize a fake skb with test pattern. */ |
25225 |
+- skb_reset_mac_header(skb); |
25226 |
+- skb->protocol = htons(ETH_P_IP); |
25227 |
+- skb->pkt_type = SKB_TYPE; |
25228 |
+- skb->mark = SKB_MARK; |
25229 |
+- skb->hash = SKB_HASH; |
25230 |
+- skb->queue_mapping = SKB_QUEUE_MAP; |
25231 |
+- skb->vlan_tci = SKB_VLAN_TCI; |
25232 |
+- skb->dev = &dev; |
25233 |
+- skb->dev->ifindex = SKB_DEV_IFINDEX; |
25234 |
+- skb->dev->type = SKB_DEV_TYPE; |
25235 |
+- skb_set_network_header(skb, min(size, ETH_HLEN)); |
25236 |
+- |
25237 |
+- return skb; |
25238 |
+-} |
25239 |
+- |
25240 |
+-static void *generate_test_data(struct bpf_test *test, int sub) |
25241 |
+-{ |
25242 |
+- if (test->aux & FLAG_NO_DATA) |
25243 |
+- return NULL; |
25244 |
+- |
25245 |
+- /* Test case expects an skb, so populate one. Various |
25246 |
+- * subtests generate skbs of different sizes based on |
25247 |
+- * the same data. |
25248 |
+- */ |
25249 |
+- return populate_skb(test->data, test->test[sub].data_size); |
25250 |
+-} |
25251 |
+- |
25252 |
+-static void release_test_data(const struct bpf_test *test, void *data) |
25253 |
+-{ |
25254 |
+- if (test->aux & FLAG_NO_DATA) |
25255 |
+- return; |
25256 |
+- |
25257 |
+- kfree_skb(data); |
25258 |
+-} |
25259 |
+- |
25260 |
+-static int probe_filter_length(struct sock_filter *fp) |
25261 |
+-{ |
25262 |
+- int len = 0; |
25263 |
+- |
25264 |
+- for (len = MAX_INSNS - 1; len > 0; --len) |
25265 |
+- if (fp[len].code != 0 || fp[len].k != 0) |
25266 |
+- break; |
25267 |
+- |
25268 |
+- return len + 1; |
25269 |
+-} |
25270 |
+- |
25271 |
+-static struct sk_filter *generate_filter(int which, int *err) |
25272 |
+-{ |
25273 |
+- struct sk_filter *fp; |
25274 |
+- struct sock_fprog_kern fprog; |
25275 |
+- unsigned int flen = probe_filter_length(tests[which].u.insns); |
25276 |
+- __u8 test_type = tests[which].aux & TEST_TYPE_MASK; |
25277 |
+- |
25278 |
+- switch (test_type) { |
25279 |
+- case CLASSIC: |
25280 |
+- fprog.filter = tests[which].u.insns; |
25281 |
+- fprog.len = flen; |
25282 |
+- |
25283 |
+- *err = sk_unattached_filter_create(&fp, &fprog); |
25284 |
+- if (tests[which].aux & FLAG_EXPECTED_FAIL) { |
25285 |
+- if (*err == -EINVAL) { |
25286 |
+- pr_cont("PASS\n"); |
25287 |
+- /* Verifier rejected filter as expected. */ |
25288 |
+- *err = 0; |
25289 |
+- return NULL; |
25290 |
+- } else { |
25291 |
+- pr_cont("UNEXPECTED_PASS\n"); |
25292 |
+- /* Verifier didn't reject the test that's |
25293 |
+- * bad enough, just return! |
25294 |
+- */ |
25295 |
+- *err = -EINVAL; |
25296 |
+- return NULL; |
25297 |
+- } |
25298 |
+- } |
25299 |
+- /* We don't expect to fail. */ |
25300 |
+- if (*err) { |
25301 |
+- pr_cont("FAIL to attach err=%d len=%d\n", |
25302 |
+- *err, fprog.len); |
25303 |
+- return NULL; |
25304 |
+- } |
25305 |
+- break; |
25306 |
+- |
25307 |
+- case INTERNAL: |
25308 |
+- fp = kzalloc(sk_filter_size(flen), GFP_KERNEL); |
25309 |
+- if (fp == NULL) { |
25310 |
+- pr_cont("UNEXPECTED_FAIL no memory left\n"); |
25311 |
+- *err = -ENOMEM; |
25312 |
+- return NULL; |
25313 |
+- } |
25314 |
+- |
25315 |
+- fp->len = flen; |
25316 |
+- memcpy(fp->insnsi, tests[which].u.insns_int, |
25317 |
+- fp->len * sizeof(struct sock_filter_int)); |
25318 |
+- |
25319 |
+- sk_filter_select_runtime(fp); |
25320 |
+- break; |
25321 |
+- } |
25322 |
+- |
25323 |
+- *err = 0; |
25324 |
+- return fp; |
25325 |
+-} |
25326 |
+- |
25327 |
+-static void release_filter(struct sk_filter *fp, int which) |
25328 |
+-{ |
25329 |
+- __u8 test_type = tests[which].aux & TEST_TYPE_MASK; |
25330 |
+- |
25331 |
+- switch (test_type) { |
25332 |
+- case CLASSIC: |
25333 |
+- sk_unattached_filter_destroy(fp); |
25334 |
+- break; |
25335 |
+- case INTERNAL: |
25336 |
+- sk_filter_free(fp); |
25337 |
+- break; |
25338 |
+- } |
25339 |
+-} |
25340 |
+- |
25341 |
+-static int __run_one(const struct sk_filter *fp, const void *data, |
25342 |
+- int runs, u64 *duration) |
25343 |
+-{ |
25344 |
+- u64 start, finish; |
25345 |
+- int ret, i; |
25346 |
+- |
25347 |
+- start = ktime_to_us(ktime_get()); |
25348 |
+- |
25349 |
+- for (i = 0; i < runs; i++) |
25350 |
+- ret = SK_RUN_FILTER(fp, data); |
25351 |
+- |
25352 |
+- finish = ktime_to_us(ktime_get()); |
25353 |
+- |
25354 |
+- *duration = (finish - start) * 1000ULL; |
25355 |
+- do_div(*duration, runs); |
25356 |
+- |
25357 |
+- return ret; |
25358 |
+-} |
25359 |
+- |
25360 |
+-static int run_one(const struct sk_filter *fp, struct bpf_test *test) |
25361 |
+-{ |
25362 |
+- int err_cnt = 0, i, runs = MAX_TESTRUNS; |
25363 |
+- |
25364 |
+- for (i = 0; i < MAX_SUBTESTS; i++) { |
25365 |
+- void *data; |
25366 |
+- u64 duration; |
25367 |
+- u32 ret; |
25368 |
+- |
25369 |
+- if (test->test[i].data_size == 0 && |
25370 |
+- test->test[i].result == 0) |
25371 |
+- break; |
25372 |
+- |
25373 |
+- data = generate_test_data(test, i); |
25374 |
+- ret = __run_one(fp, data, runs, &duration); |
25375 |
+- release_test_data(test, data); |
25376 |
+- |
25377 |
+- if (ret == test->test[i].result) { |
25378 |
+- pr_cont("%lld ", duration); |
25379 |
+- } else { |
25380 |
+- pr_cont("ret %d != %d ", ret, |
25381 |
+- test->test[i].result); |
25382 |
+- err_cnt++; |
25383 |
+- } |
25384 |
+- } |
25385 |
+- |
25386 |
+- return err_cnt; |
25387 |
+-} |
25388 |
+- |
25389 |
+-static __init int test_bpf(void) |
25390 |
+-{ |
25391 |
+- int i, err_cnt = 0, pass_cnt = 0; |
25392 |
+- |
25393 |
+- for (i = 0; i < ARRAY_SIZE(tests); i++) { |
25394 |
+- struct sk_filter *fp; |
25395 |
+- int err; |
25396 |
+- |
25397 |
+- pr_info("#%d %s ", i, tests[i].descr); |
25398 |
+- |
25399 |
+- fp = generate_filter(i, &err); |
25400 |
+- if (fp == NULL) { |
25401 |
+- if (err == 0) { |
25402 |
+- pass_cnt++; |
25403 |
+- continue; |
25404 |
+- } |
25405 |
+- |
25406 |
+- return err; |
25407 |
+- } |
25408 |
+- err = run_one(fp, &tests[i]); |
25409 |
+- release_filter(fp, i); |
25410 |
+- |
25411 |
+- if (err) { |
25412 |
+- pr_cont("FAIL (%d times)\n", err); |
25413 |
+- err_cnt++; |
25414 |
+- } else { |
25415 |
+- pr_cont("PASS\n"); |
25416 |
+- pass_cnt++; |
25417 |
+- } |
25418 |
+- } |
25419 |
+- |
25420 |
+- pr_info("Summary: %d PASSED, %d FAILED\n", pass_cnt, err_cnt); |
25421 |
+- return err_cnt ? -EINVAL : 0; |
25422 |
+-} |
25423 |
+- |
25424 |
+-static int __init test_bpf_init(void) |
25425 |
+-{ |
25426 |
+- return test_bpf(); |
25427 |
+-} |
25428 |
+- |
25429 |
+-static void __exit test_bpf_exit(void) |
25430 |
+-{ |
25431 |
+-} |
25432 |
+- |
25433 |
+-module_init(test_bpf_init); |
25434 |
+-module_exit(test_bpf_exit); |
25435 |
+- |
25436 |
+-MODULE_LICENSE("GPL"); |
25437 |
diff --git a/lib/usercopy.c b/lib/usercopy.c |
25438 |
index 4f5b1dd..7cab418 100644 |
25439 |
--- a/lib/usercopy.c |
25440 |
@@ -92757,7 +98707,7 @@ index 4f5b1dd..7cab418 100644 |
25441 |
+} |
25442 |
+EXPORT_SYMBOL(copy_to_user_overflow); |
25443 |
diff --git a/lib/vsprintf.c b/lib/vsprintf.c |
25444 |
-index 0648291..42bf42b 100644 |
25445 |
+index 6fe2c84..2fe5ec6 100644 |
25446 |
--- a/lib/vsprintf.c |
25447 |
+++ b/lib/vsprintf.c |
25448 |
@@ -16,6 +16,9 @@ |
25449 |
@@ -92770,6 +98720,15 @@ index 0648291..42bf42b 100644 |
25450 |
#include <stdarg.h> |
25451 |
#include <linux/module.h> /* for KSYM_SYMBOL_LEN */ |
25452 |
#include <linux/types.h> |
25453 |
+@@ -624,7 +627,7 @@ char *symbol_string(char *buf, char *end, void *ptr, |
25454 |
+ #ifdef CONFIG_KALLSYMS |
25455 |
+ if (*fmt == 'B') |
25456 |
+ sprint_backtrace(sym, value); |
25457 |
+- else if (*fmt != 'f' && *fmt != 's') |
25458 |
++ else if (*fmt != 'f' && *fmt != 's' && *fmt != 'X') |
25459 |
+ sprint_symbol(sym, value); |
25460 |
+ else |
25461 |
+ sprint_symbol_no_offset(sym, value); |
25462 |
@@ -1183,7 +1186,11 @@ char *address_val(char *buf, char *end, const void *addr, |
25463 |
return number(buf, end, num, spec); |
25464 |
} |
25465 |
@@ -92782,15 +98741,18 @@ index 0648291..42bf42b 100644 |
25466 |
|
25467 |
/* |
25468 |
* Show a '%p' thing. A kernel extension is that the '%p' is followed |
25469 |
-@@ -1196,6 +1203,7 @@ int kptr_restrict __read_mostly; |
25470 |
+@@ -1194,8 +1201,10 @@ int kptr_restrict __read_mostly; |
25471 |
+ * |
25472 |
+ * - 'F' For symbolic function descriptor pointers with offset |
25473 |
* - 'f' For simple symbolic function names without offset |
25474 |
++ * - 'X' For simple symbolic function names without offset approved for use with GRKERNSEC_HIDESYM |
25475 |
* - 'S' For symbolic direct pointers with offset |
25476 |
* - 's' For symbolic direct pointers without offset |
25477 |
+ * - 'A' For symbolic direct pointers with offset approved for use with GRKERNSEC_HIDESYM |
25478 |
* - '[FfSs]R' as above with __builtin_extract_return_addr() translation |
25479 |
* - 'B' For backtraced symbolic direct pointers with offset |
25480 |
* - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref] |
25481 |
-@@ -1263,12 +1271,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, |
25482 |
+@@ -1263,12 +1272,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, |
25483 |
|
25484 |
if (!ptr && *fmt != 'K') { |
25485 |
/* |
25486 |
@@ -92805,7 +98767,7 @@ index 0648291..42bf42b 100644 |
25487 |
} |
25488 |
|
25489 |
switch (*fmt) { |
25490 |
-@@ -1278,6 +1286,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, |
25491 |
+@@ -1278,6 +1287,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, |
25492 |
/* Fallthrough */ |
25493 |
case 'S': |
25494 |
case 's': |
25495 |
@@ -92814,11 +98776,13 @@ index 0648291..42bf42b 100644 |
25496 |
+#else |
25497 |
+ return symbol_string(buf, end, ptr, spec, fmt); |
25498 |
+#endif |
25499 |
++ case 'X': |
25500 |
++ ptr = dereference_function_descriptor(ptr); |
25501 |
+ case 'A': |
25502 |
case 'B': |
25503 |
return symbol_string(buf, end, ptr, spec, fmt); |
25504 |
case 'R': |
25505 |
-@@ -1333,6 +1347,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, |
25506 |
+@@ -1333,6 +1350,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, |
25507 |
va_end(va); |
25508 |
return buf; |
25509 |
} |
25510 |
@@ -92827,7 +98791,7 @@ index 0648291..42bf42b 100644 |
25511 |
case 'K': |
25512 |
/* |
25513 |
* %pK cannot be used in IRQ context because its test |
25514 |
-@@ -1390,6 +1406,21 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, |
25515 |
+@@ -1390,6 +1409,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr, |
25516 |
((const struct file *)ptr)->f_path.dentry, |
25517 |
spec, fmt); |
25518 |
} |
25519 |
@@ -92836,10 +98800,11 @@ index 0648291..42bf42b 100644 |
25520 |
+ /* 'P' = approved pointers to copy to userland, |
25521 |
+ as in the /proc/kallsyms case, as we make it display nothing |
25522 |
+ for non-root users, and the real contents for root users |
25523 |
++ 'X' = approved simple symbols |
25524 |
+ Also ignore 'K' pointers, since we force their NULLing for non-root users |
25525 |
+ above |
25526 |
+ */ |
25527 |
-+ if ((unsigned long)ptr > TASK_SIZE && *fmt != 'P' && *fmt != 'K' && is_usercopy_object(buf)) { |
25528 |
++ if ((unsigned long)ptr > TASK_SIZE && *fmt != 'P' && *fmt != 'X' && *fmt != 'K' && is_usercopy_object(buf)) { |
25529 |
+ printk(KERN_ALERT "grsec: kernel infoleak detected! Please report this log to spender@××××××××××.net.\n"); |
25530 |
+ dump_stack(); |
25531 |
+ ptr = NULL; |
25532 |
@@ -92849,7 +98814,7 @@ index 0648291..42bf42b 100644 |
25533 |
spec.flags |= SMALL; |
25534 |
if (spec.field_width == -1) { |
25535 |
spec.field_width = default_width; |
25536 |
-@@ -2089,11 +2120,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) |
25537 |
+@@ -2089,11 +2124,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) |
25538 |
typeof(type) value; \ |
25539 |
if (sizeof(type) == 8) { \ |
25540 |
args = PTR_ALIGN(args, sizeof(u32)); \ |
25541 |
@@ -92864,7 +98829,7 @@ index 0648291..42bf42b 100644 |
25542 |
} \ |
25543 |
args += sizeof(type); \ |
25544 |
value; \ |
25545 |
-@@ -2156,7 +2187,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) |
25546 |
+@@ -2156,7 +2191,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) |
25547 |
case FORMAT_TYPE_STR: { |
25548 |
const char *str_arg = args; |
25549 |
args += strlen(str_arg) + 1; |
25550 |
@@ -92881,10 +98846,10 @@ index 0000000..7cd6065 |
25551 |
@@ -0,0 +1 @@ |
25552 |
+-grsec |
25553 |
diff --git a/mm/Kconfig b/mm/Kconfig |
25554 |
-index 2f42b9c..6095e14 100644 |
25555 |
+index 3e9977a..205074f 100644 |
25556 |
--- a/mm/Kconfig |
25557 |
+++ b/mm/Kconfig |
25558 |
-@@ -330,10 +330,11 @@ config KSM |
25559 |
+@@ -333,10 +333,11 @@ config KSM |
25560 |
root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set). |
25561 |
|
25562 |
config DEFAULT_MMAP_MIN_ADDR |
25563 |
@@ -92899,7 +98864,7 @@ index 2f42b9c..6095e14 100644 |
25564 |
This is the portion of low virtual memory which should be protected |
25565 |
from userspace allocation. Keeping a user from writing to low pages |
25566 |
can help reduce the impact of kernel NULL pointer bugs. |
25567 |
-@@ -364,7 +365,7 @@ config MEMORY_FAILURE |
25568 |
+@@ -367,7 +368,7 @@ config MEMORY_FAILURE |
25569 |
|
25570 |
config HWPOISON_INJECT |
25571 |
tristate "HWPoison pages injector" |
25572 |
@@ -92909,7 +98874,7 @@ index 2f42b9c..6095e14 100644 |
25573 |
|
25574 |
config NOMMU_INITIAL_TRIM_EXCESS |
25575 |
diff --git a/mm/backing-dev.c b/mm/backing-dev.c |
25576 |
-index 09d9591..165bb75 100644 |
25577 |
+index 1706cbb..f89dbca 100644 |
25578 |
--- a/mm/backing-dev.c |
25579 |
+++ b/mm/backing-dev.c |
25580 |
@@ -12,7 +12,7 @@ |
25581 |
@@ -92931,10 +98896,10 @@ index 09d9591..165bb75 100644 |
25582 |
bdi_destroy(bdi); |
25583 |
return err; |
25584 |
diff --git a/mm/filemap.c b/mm/filemap.c |
25585 |
-index 088358c..bb415bf 100644 |
25586 |
+index 900edfa..ff056b1 100644 |
25587 |
--- a/mm/filemap.c |
25588 |
+++ b/mm/filemap.c |
25589 |
-@@ -2125,7 +2125,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma) |
25590 |
+@@ -2074,7 +2074,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma) |
25591 |
struct address_space *mapping = file->f_mapping; |
25592 |
|
25593 |
if (!mapping->a_ops->readpage) |
25594 |
@@ -92943,7 +98908,7 @@ index 088358c..bb415bf 100644 |
25595 |
file_accessed(file); |
25596 |
vma->vm_ops = &generic_file_vm_ops; |
25597 |
return 0; |
25598 |
-@@ -2303,6 +2303,7 @@ inline int generic_write_checks(struct file *file, loff_t *pos, size_t *count, i |
25599 |
+@@ -2252,6 +2252,7 @@ inline int generic_write_checks(struct file *file, loff_t *pos, size_t *count, i |
25600 |
*pos = i_size_read(inode); |
25601 |
|
25602 |
if (limit != RLIM_INFINITY) { |
25603 |
@@ -92952,10 +98917,10 @@ index 088358c..bb415bf 100644 |
25604 |
send_sig(SIGXFSZ, current, 0); |
25605 |
return -EFBIG; |
25606 |
diff --git a/mm/fremap.c b/mm/fremap.c |
25607 |
-index 34feba6..315fe78 100644 |
25608 |
+index 72b8fa3..c5b39f1 100644 |
25609 |
--- a/mm/fremap.c |
25610 |
+++ b/mm/fremap.c |
25611 |
-@@ -179,6 +179,11 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, |
25612 |
+@@ -180,6 +180,11 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, |
25613 |
retry: |
25614 |
vma = find_vma(mm, start); |
25615 |
|
25616 |
@@ -92967,6 +98932,57 @@ index 34feba6..315fe78 100644 |
25617 |
/* |
25618 |
* Make sure the vma is shared, that it supports prefaulting, |
25619 |
* and that the remapped range is valid and fully within |
25620 |
+diff --git a/mm/gup.c b/mm/gup.c |
25621 |
+index cc5a9e7..d496acf 100644 |
25622 |
+--- a/mm/gup.c |
25623 |
++++ b/mm/gup.c |
25624 |
+@@ -265,11 +265,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma, |
25625 |
+ unsigned int fault_flags = 0; |
25626 |
+ int ret; |
25627 |
+ |
25628 |
+- /* For mlock, just skip the stack guard page. */ |
25629 |
+- if ((*flags & FOLL_MLOCK) && |
25630 |
+- (stack_guard_page_start(vma, address) || |
25631 |
+- stack_guard_page_end(vma, address + PAGE_SIZE))) |
25632 |
+- return -ENOENT; |
25633 |
+ if (*flags & FOLL_WRITE) |
25634 |
+ fault_flags |= FAULT_FLAG_WRITE; |
25635 |
+ if (nonblocking) |
25636 |
+@@ -424,14 +419,14 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, |
25637 |
+ if (!(gup_flags & FOLL_FORCE)) |
25638 |
+ gup_flags |= FOLL_NUMA; |
25639 |
+ |
25640 |
+- do { |
25641 |
++ while (nr_pages) { |
25642 |
+ struct page *page; |
25643 |
+ unsigned int foll_flags = gup_flags; |
25644 |
+ unsigned int page_increm; |
25645 |
+ |
25646 |
+ /* first iteration or cross vma bound */ |
25647 |
+ if (!vma || start >= vma->vm_end) { |
25648 |
+- vma = find_extend_vma(mm, start); |
25649 |
++ vma = find_vma(mm, start); |
25650 |
+ if (!vma && in_gate_area(mm, start)) { |
25651 |
+ int ret; |
25652 |
+ ret = get_gate_page(mm, start & PAGE_MASK, |
25653 |
+@@ -443,7 +438,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, |
25654 |
+ goto next_page; |
25655 |
+ } |
25656 |
+ |
25657 |
+- if (!vma || check_vma_flags(vma, gup_flags)) |
25658 |
++ if (!vma || start < vma->vm_start || check_vma_flags(vma, gup_flags)) |
25659 |
+ return i ? : -EFAULT; |
25660 |
+ if (is_vm_hugetlb_page(vma)) { |
25661 |
+ i = follow_hugetlb_page(mm, vma, pages, vmas, |
25662 |
+@@ -498,7 +493,7 @@ next_page: |
25663 |
+ i += page_increm; |
25664 |
+ start += page_increm * PAGE_SIZE; |
25665 |
+ nr_pages -= page_increm; |
25666 |
+- } while (nr_pages); |
25667 |
++ } |
25668 |
+ return i; |
25669 |
+ } |
25670 |
+ EXPORT_SYMBOL(__get_user_pages); |
25671 |
diff --git a/mm/highmem.c b/mm/highmem.c |
25672 |
index b32b70c..e512eb0 100644 |
25673 |
--- a/mm/highmem.c |
25674 |
@@ -92996,10 +99012,10 @@ index b32b70c..e512eb0 100644 |
25675 |
set_page_address(page, (void *)vaddr); |
25676 |
|
25677 |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c |
25678 |
-index 002f08e..68f11e8 100644 |
25679 |
+index 7a0a73d..d583cca 100644 |
25680 |
--- a/mm/hugetlb.c |
25681 |
+++ b/mm/hugetlb.c |
25682 |
-@@ -2107,6 +2107,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy, |
25683 |
+@@ -2250,6 +2250,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy, |
25684 |
struct hstate *h = &default_hstate; |
25685 |
unsigned long tmp; |
25686 |
int ret; |
25687 |
@@ -93007,8 +99023,8 @@ index 002f08e..68f11e8 100644 |
25688 |
|
25689 |
if (!hugepages_supported()) |
25690 |
return -ENOTSUPP; |
25691 |
-@@ -2116,9 +2117,10 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy, |
25692 |
- if (write && h->order >= MAX_ORDER) |
25693 |
+@@ -2259,9 +2260,10 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy, |
25694 |
+ if (write && hstate_is_gigantic(h) && !gigantic_page_supported()) |
25695 |
return -EINVAL; |
25696 |
|
25697 |
- table->data = &tmp; |
25698 |
@@ -93021,7 +99037,7 @@ index 002f08e..68f11e8 100644 |
25699 |
if (ret) |
25700 |
goto out; |
25701 |
|
25702 |
-@@ -2163,6 +2165,7 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write, |
25703 |
+@@ -2306,6 +2308,7 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write, |
25704 |
struct hstate *h = &default_hstate; |
25705 |
unsigned long tmp; |
25706 |
int ret; |
25707 |
@@ -93029,8 +99045,8 @@ index 002f08e..68f11e8 100644 |
25708 |
|
25709 |
if (!hugepages_supported()) |
25710 |
return -ENOTSUPP; |
25711 |
-@@ -2172,9 +2175,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write, |
25712 |
- if (write && h->order >= MAX_ORDER) |
25713 |
+@@ -2315,9 +2318,10 @@ int hugetlb_overcommit_handler(struct ctl_table *table, int write, |
25714 |
+ if (write && hstate_is_gigantic(h)) |
25715 |
return -EINVAL; |
25716 |
|
25717 |
- table->data = &tmp; |
25718 |
@@ -93043,7 +99059,7 @@ index 002f08e..68f11e8 100644 |
25719 |
if (ret) |
25720 |
goto out; |
25721 |
|
25722 |
-@@ -2655,6 +2659,27 @@ static int unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma, |
25723 |
+@@ -2798,6 +2802,27 @@ static int unmap_ref_private(struct mm_struct *mm, struct vm_area_struct *vma, |
25724 |
return 1; |
25725 |
} |
25726 |
|
25727 |
@@ -93071,7 +99087,7 @@ index 002f08e..68f11e8 100644 |
25728 |
/* |
25729 |
* Hugetlb_cow() should be called with page lock of the original hugepage held. |
25730 |
* Called with hugetlb_instantiation_mutex held and pte_page locked so we |
25731 |
-@@ -2772,6 +2797,11 @@ retry_avoidcopy: |
25732 |
+@@ -2915,6 +2940,11 @@ retry_avoidcopy: |
25733 |
make_huge_pte(vma, new_page, 1)); |
25734 |
page_remove_rmap(old_page); |
25735 |
hugepage_add_new_anon_rmap(new_page, vma, address); |
25736 |
@@ -93083,7 +99099,7 @@ index 002f08e..68f11e8 100644 |
25737 |
/* Make the old page be freed below */ |
25738 |
new_page = old_page; |
25739 |
} |
25740 |
-@@ -2931,6 +2961,10 @@ retry: |
25741 |
+@@ -3074,6 +3104,10 @@ retry: |
25742 |
&& (vma->vm_flags & VM_SHARED))); |
25743 |
set_huge_pte_at(mm, address, ptep, new_pte); |
25744 |
|
25745 |
@@ -93094,7 +99110,7 @@ index 002f08e..68f11e8 100644 |
25746 |
if ((flags & FAULT_FLAG_WRITE) && !(vma->vm_flags & VM_SHARED)) { |
25747 |
/* Optimization, do the COW without a second fault */ |
25748 |
ret = hugetlb_cow(mm, vma, address, ptep, new_pte, page, ptl); |
25749 |
-@@ -2997,6 +3031,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
25750 |
+@@ -3140,6 +3174,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
25751 |
struct hstate *h = hstate_vma(vma); |
25752 |
struct address_space *mapping; |
25753 |
|
25754 |
@@ -93105,7 +99121,7 @@ index 002f08e..68f11e8 100644 |
25755 |
address &= huge_page_mask(h); |
25756 |
|
25757 |
ptep = huge_pte_offset(mm, address); |
25758 |
-@@ -3010,6 +3048,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
25759 |
+@@ -3153,6 +3191,26 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
25760 |
VM_FAULT_SET_HINDEX(hstate_index(h)); |
25761 |
} |
25762 |
|
25763 |
@@ -93133,7 +99149,7 @@ index 002f08e..68f11e8 100644 |
25764 |
if (!ptep) |
25765 |
return VM_FAULT_OOM; |
25766 |
diff --git a/mm/internal.h b/mm/internal.h |
25767 |
-index 07b6736..ae8da20 100644 |
25768 |
+index 7f22a11f..f3c207f 100644 |
25769 |
--- a/mm/internal.h |
25770 |
+++ b/mm/internal.h |
25771 |
@@ -109,6 +109,7 @@ extern pmd_t *mm_find_pmd(struct mm_struct *mm, unsigned long address); |
25772 |
@@ -93144,7 +99160,7 @@ index 07b6736..ae8da20 100644 |
25773 |
extern void prep_compound_page(struct page *page, unsigned long order); |
25774 |
#ifdef CONFIG_MEMORY_FAILURE |
25775 |
extern bool is_free_buddy_page(struct page *page); |
25776 |
-@@ -367,7 +368,7 @@ extern u32 hwpoison_filter_enable; |
25777 |
+@@ -351,7 +352,7 @@ extern u32 hwpoison_filter_enable; |
25778 |
|
25779 |
extern unsigned long vm_mmap_pgoff(struct file *, unsigned long, |
25780 |
unsigned long, unsigned long, |
25781 |
@@ -93154,10 +99170,10 @@ index 07b6736..ae8da20 100644 |
25782 |
extern void set_pageblock_order(void); |
25783 |
unsigned long reclaim_clean_pages_from_list(struct zone *zone, |
25784 |
diff --git a/mm/iov_iter.c b/mm/iov_iter.c |
25785 |
-index 10e46cd..e3052f6 100644 |
25786 |
+index 7b5dbd1..af0e329 100644 |
25787 |
--- a/mm/iov_iter.c |
25788 |
+++ b/mm/iov_iter.c |
25789 |
-@@ -87,7 +87,7 @@ static size_t __iovec_copy_from_user_inatomic(char *vaddr, |
25790 |
+@@ -173,7 +173,7 @@ static size_t __iovec_copy_from_user_inatomic(char *vaddr, |
25791 |
|
25792 |
while (bytes) { |
25793 |
char __user *buf = iov->iov_base + base; |
25794 |
@@ -93166,7 +99182,7 @@ index 10e46cd..e3052f6 100644 |
25795 |
|
25796 |
base = 0; |
25797 |
left = __copy_from_user_inatomic(vaddr, buf, copy); |
25798 |
-@@ -115,7 +115,7 @@ size_t iov_iter_copy_from_user_atomic(struct page *page, |
25799 |
+@@ -201,7 +201,7 @@ static size_t copy_from_user_atomic_iovec(struct page *page, |
25800 |
|
25801 |
kaddr = kmap_atomic(page); |
25802 |
if (likely(i->nr_segs == 1)) { |
25803 |
@@ -93175,16 +99191,7 @@ index 10e46cd..e3052f6 100644 |
25804 |
char __user *buf = i->iov->iov_base + i->iov_offset; |
25805 |
left = __copy_from_user_inatomic(kaddr + offset, buf, bytes); |
25806 |
copied = bytes - left; |
25807 |
-@@ -143,7 +143,7 @@ size_t iov_iter_copy_from_user(struct page *page, |
25808 |
- |
25809 |
- kaddr = kmap(page); |
25810 |
- if (likely(i->nr_segs == 1)) { |
25811 |
-- int left; |
25812 |
-+ size_t left; |
25813 |
- char __user *buf = i->iov->iov_base + i->iov_offset; |
25814 |
- left = __copy_from_user(kaddr + offset, buf, bytes); |
25815 |
- copied = bytes - left; |
25816 |
-@@ -173,7 +173,7 @@ void iov_iter_advance(struct iov_iter *i, size_t bytes) |
25817 |
+@@ -231,7 +231,7 @@ static void advance_iovec(struct iov_iter *i, size_t bytes) |
25818 |
* zero-length segments (without overruning the iovec). |
25819 |
*/ |
25820 |
while (bytes || unlikely(i->count && !iov->iov_len)) { |
25821 |
@@ -93194,7 +99201,7 @@ index 10e46cd..e3052f6 100644 |
25822 |
copy = min(bytes, iov->iov_len - base); |
25823 |
BUG_ON(!i->count || i->count < copy); |
25824 |
diff --git a/mm/kmemleak.c b/mm/kmemleak.c |
25825 |
-index 8d2fcdf..6dd9f1a 100644 |
25826 |
+index 3cda50c..032ba634 100644 |
25827 |
--- a/mm/kmemleak.c |
25828 |
+++ b/mm/kmemleak.c |
25829 |
@@ -364,7 +364,7 @@ static void print_unreferenced(struct seq_file *seq, |
25830 |
@@ -93206,7 +99213,7 @@ index 8d2fcdf..6dd9f1a 100644 |
25831 |
} |
25832 |
} |
25833 |
|
25834 |
-@@ -1871,7 +1871,7 @@ static int __init kmemleak_late_init(void) |
25835 |
+@@ -1905,7 +1905,7 @@ static int __init kmemleak_late_init(void) |
25836 |
return -ENOMEM; |
25837 |
} |
25838 |
|
25839 |
@@ -93318,7 +99325,7 @@ index a402f8f..f5e5daa 100644 |
25840 |
if (end == start) |
25841 |
return error; |
25842 |
diff --git a/mm/memory-failure.c b/mm/memory-failure.c |
25843 |
-index eb8fb72..ae36cf3 100644 |
25844 |
+index a013bc9..a897a14 100644 |
25845 |
--- a/mm/memory-failure.c |
25846 |
+++ b/mm/memory-failure.c |
25847 |
@@ -61,7 +61,7 @@ int sysctl_memory_failure_early_kill __read_mostly = 0; |
25848 |
@@ -93348,7 +99355,7 @@ index eb8fb72..ae36cf3 100644 |
25849 |
{ reserved, reserved, "reserved kernel", me_kernel }, |
25850 |
/* |
25851 |
* free pages are specially detected outside this table: |
25852 |
-@@ -1091,7 +1091,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags) |
25853 |
+@@ -1099,7 +1099,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags) |
25854 |
nr_pages = 1 << compound_order(hpage); |
25855 |
else /* normal page or thp */ |
25856 |
nr_pages = 1; |
25857 |
@@ -93357,7 +99364,7 @@ index eb8fb72..ae36cf3 100644 |
25858 |
|
25859 |
/* |
25860 |
* We need/can do nothing about count=0 pages. |
25861 |
-@@ -1120,7 +1120,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags) |
25862 |
+@@ -1128,7 +1128,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags) |
25863 |
if (PageHWPoison(hpage)) { |
25864 |
if ((hwpoison_filter(p) && TestClearPageHWPoison(p)) |
25865 |
|| (p != hpage && TestSetPageHWPoison(hpage))) { |
25866 |
@@ -93383,7 +99390,7 @@ index eb8fb72..ae36cf3 100644 |
25867 |
unlock_page(hpage); |
25868 |
put_page(hpage); |
25869 |
return 0; |
25870 |
-@@ -1415,7 +1415,7 @@ int unpoison_memory(unsigned long pfn) |
25871 |
+@@ -1423,7 +1423,7 @@ int unpoison_memory(unsigned long pfn) |
25872 |
return 0; |
25873 |
} |
25874 |
if (TestClearPageHWPoison(p)) |
25875 |
@@ -93392,7 +99399,7 @@ index eb8fb72..ae36cf3 100644 |
25876 |
pr_info("MCE: Software-unpoisoned free page %#lx\n", pfn); |
25877 |
return 0; |
25878 |
} |
25879 |
-@@ -1429,7 +1429,7 @@ int unpoison_memory(unsigned long pfn) |
25880 |
+@@ -1437,7 +1437,7 @@ int unpoison_memory(unsigned long pfn) |
25881 |
*/ |
25882 |
if (TestClearPageHWPoison(page)) { |
25883 |
pr_info("MCE: Software-unpoisoned page %#lx\n", pfn); |
25884 |
@@ -93401,7 +99408,7 @@ index eb8fb72..ae36cf3 100644 |
25885 |
freeit = 1; |
25886 |
if (PageHuge(page)) |
25887 |
clear_page_hwpoison_huge_page(page); |
25888 |
-@@ -1554,11 +1554,11 @@ static int soft_offline_huge_page(struct page *page, int flags) |
25889 |
+@@ -1562,11 +1562,11 @@ static int soft_offline_huge_page(struct page *page, int flags) |
25890 |
if (PageHuge(page)) { |
25891 |
set_page_hwpoison_huge_page(hpage); |
25892 |
dequeue_hwpoisoned_huge_page(hpage); |
25893 |
@@ -93415,7 +99422,7 @@ index eb8fb72..ae36cf3 100644 |
25894 |
} |
25895 |
} |
25896 |
return ret; |
25897 |
-@@ -1597,7 +1597,7 @@ static int __soft_offline_page(struct page *page, int flags) |
25898 |
+@@ -1605,7 +1605,7 @@ static int __soft_offline_page(struct page *page, int flags) |
25899 |
put_page(page); |
25900 |
pr_info("soft_offline: %#lx: invalidated\n", pfn); |
25901 |
SetPageHWPoison(page); |
25902 |
@@ -93424,7 +99431,7 @@ index eb8fb72..ae36cf3 100644 |
25903 |
return 0; |
25904 |
} |
25905 |
|
25906 |
-@@ -1648,7 +1648,7 @@ static int __soft_offline_page(struct page *page, int flags) |
25907 |
+@@ -1656,7 +1656,7 @@ static int __soft_offline_page(struct page *page, int flags) |
25908 |
if (!is_free_buddy_page(page)) |
25909 |
pr_info("soft offline: %#lx: page leaked\n", |
25910 |
pfn); |
25911 |
@@ -93433,7 +99440,7 @@ index eb8fb72..ae36cf3 100644 |
25912 |
} |
25913 |
} else { |
25914 |
pr_info("soft offline: %#lx: isolation failed: %d, page count %d, type %lx\n", |
25915 |
-@@ -1722,11 +1722,11 @@ int soft_offline_page(struct page *page, int flags) |
25916 |
+@@ -1726,11 +1726,11 @@ int soft_offline_page(struct page *page, int flags) |
25917 |
if (PageHuge(page)) { |
25918 |
set_page_hwpoison_huge_page(hpage); |
25919 |
dequeue_hwpoisoned_huge_page(hpage); |
25920 |
@@ -93448,7 +99455,7 @@ index eb8fb72..ae36cf3 100644 |
25921 |
} |
25922 |
unset_migratetype_isolate(page, MIGRATE_MOVABLE); |
25923 |
diff --git a/mm/memory.c b/mm/memory.c |
25924 |
-index 4f9e530..779c7ce 100644 |
25925 |
+index 8b44f76..66f1954 100644 |
25926 |
--- a/mm/memory.c |
25927 |
+++ b/mm/memory.c |
25928 |
@@ -413,6 +413,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud, |
25929 |
@@ -93485,63 +99492,7 @@ index 4f9e530..779c7ce 100644 |
25930 |
} |
25931 |
|
25932 |
/* |
25933 |
-@@ -1652,12 +1658,6 @@ no_page_table: |
25934 |
- return page; |
25935 |
- } |
25936 |
- |
25937 |
--static inline int stack_guard_page(struct vm_area_struct *vma, unsigned long addr) |
25938 |
--{ |
25939 |
-- return stack_guard_page_start(vma, addr) || |
25940 |
-- stack_guard_page_end(vma, addr+PAGE_SIZE); |
25941 |
--} |
25942 |
-- |
25943 |
- /** |
25944 |
- * __get_user_pages() - pin user pages in memory |
25945 |
- * @tsk: task_struct of target task |
25946 |
-@@ -1735,10 +1735,10 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, |
25947 |
- |
25948 |
- i = 0; |
25949 |
- |
25950 |
-- do { |
25951 |
-+ while (nr_pages) { |
25952 |
- struct vm_area_struct *vma; |
25953 |
- |
25954 |
-- vma = find_extend_vma(mm, start); |
25955 |
-+ vma = find_vma(mm, start); |
25956 |
- if (!vma && in_gate_area(mm, start)) { |
25957 |
- unsigned long pg = start & PAGE_MASK; |
25958 |
- pgd_t *pgd; |
25959 |
-@@ -1787,7 +1787,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, |
25960 |
- goto next_page; |
25961 |
- } |
25962 |
- |
25963 |
-- if (!vma) |
25964 |
-+ if (!vma || start < vma->vm_start) |
25965 |
- goto efault; |
25966 |
- vm_flags = vma->vm_flags; |
25967 |
- if (vm_flags & (VM_IO | VM_PFNMAP)) |
25968 |
-@@ -1848,11 +1848,6 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, |
25969 |
- int ret; |
25970 |
- unsigned int fault_flags = 0; |
25971 |
- |
25972 |
-- /* For mlock, just skip the stack guard page. */ |
25973 |
-- if (foll_flags & FOLL_MLOCK) { |
25974 |
-- if (stack_guard_page(vma, start)) |
25975 |
-- goto next_page; |
25976 |
-- } |
25977 |
- if (foll_flags & FOLL_WRITE) |
25978 |
- fault_flags |= FAULT_FLAG_WRITE; |
25979 |
- if (nonblocking) |
25980 |
-@@ -1932,7 +1927,7 @@ next_page: |
25981 |
- start += page_increm * PAGE_SIZE; |
25982 |
- nr_pages -= page_increm; |
25983 |
- } while (nr_pages && start < vma->vm_end); |
25984 |
-- } while (nr_pages); |
25985 |
-+ } |
25986 |
- return i; |
25987 |
- efault: |
25988 |
- return i ? : -EFAULT; |
25989 |
-@@ -2145,6 +2140,10 @@ static int insert_page(struct vm_area_struct *vma, unsigned long addr, |
25990 |
+@@ -1501,6 +1507,10 @@ static int insert_page(struct vm_area_struct *vma, unsigned long addr, |
25991 |
page_add_file_rmap(page); |
25992 |
set_pte_at(mm, addr, pte, mk_pte(page, prot)); |
25993 |
|
25994 |
@@ -93552,7 +99503,7 @@ index 4f9e530..779c7ce 100644 |
25995 |
retval = 0; |
25996 |
pte_unmap_unlock(pte, ptl); |
25997 |
return retval; |
25998 |
-@@ -2189,9 +2188,21 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr, |
25999 |
+@@ -1545,9 +1555,21 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr, |
26000 |
if (!page_count(page)) |
26001 |
return -EINVAL; |
26002 |
if (!(vma->vm_flags & VM_MIXEDMAP)) { |
26003 |
@@ -93574,7 +99525,7 @@ index 4f9e530..779c7ce 100644 |
26004 |
} |
26005 |
return insert_page(vma, addr, page, vma->vm_page_prot); |
26006 |
} |
26007 |
-@@ -2274,6 +2285,7 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr, |
26008 |
+@@ -1630,6 +1652,7 @@ int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr, |
26009 |
unsigned long pfn) |
26010 |
{ |
26011 |
BUG_ON(!(vma->vm_flags & VM_MIXEDMAP)); |
26012 |
@@ -93582,7 +99533,7 @@ index 4f9e530..779c7ce 100644 |
26013 |
|
26014 |
if (addr < vma->vm_start || addr >= vma->vm_end) |
26015 |
return -EFAULT; |
26016 |
-@@ -2521,7 +2533,9 @@ static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud, |
26017 |
+@@ -1877,7 +1900,9 @@ static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud, |
26018 |
|
26019 |
BUG_ON(pud_huge(*pud)); |
26020 |
|
26021 |
@@ -93593,7 +99544,7 @@ index 4f9e530..779c7ce 100644 |
26022 |
if (!pmd) |
26023 |
return -ENOMEM; |
26024 |
do { |
26025 |
-@@ -2541,7 +2555,9 @@ static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd, |
26026 |
+@@ -1897,7 +1922,9 @@ static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd, |
26027 |
unsigned long next; |
26028 |
int err; |
26029 |
|
26030 |
@@ -93604,7 +99555,7 @@ index 4f9e530..779c7ce 100644 |
26031 |
if (!pud) |
26032 |
return -ENOMEM; |
26033 |
do { |
26034 |
-@@ -2663,6 +2679,186 @@ static int do_page_mkwrite(struct vm_area_struct *vma, struct page *page, |
26035 |
+@@ -2019,6 +2046,186 @@ static int do_page_mkwrite(struct vm_area_struct *vma, struct page *page, |
26036 |
return ret; |
26037 |
} |
26038 |
|
26039 |
@@ -93791,7 +99742,7 @@ index 4f9e530..779c7ce 100644 |
26040 |
/* |
26041 |
* This routine handles present pages, when users try to write |
26042 |
* to a shared page. It is done by copying the page to a new address |
26043 |
-@@ -2860,6 +3056,12 @@ gotten: |
26044 |
+@@ -2216,6 +2423,12 @@ gotten: |
26045 |
*/ |
26046 |
page_table = pte_offset_map_lock(mm, pmd, address, &ptl); |
26047 |
if (likely(pte_same(*page_table, orig_pte))) { |
26048 |
@@ -93804,7 +99755,7 @@ index 4f9e530..779c7ce 100644 |
26049 |
if (old_page) { |
26050 |
if (!PageAnon(old_page)) { |
26051 |
dec_mm_counter_fast(mm, MM_FILEPAGES); |
26052 |
-@@ -2911,6 +3113,10 @@ gotten: |
26053 |
+@@ -2267,6 +2480,10 @@ gotten: |
26054 |
page_remove_rmap(old_page); |
26055 |
} |
26056 |
|
26057 |
@@ -93815,7 +99766,7 @@ index 4f9e530..779c7ce 100644 |
26058 |
/* Free the old page.. */ |
26059 |
new_page = old_page; |
26060 |
ret |= VM_FAULT_WRITE; |
26061 |
-@@ -3184,6 +3390,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, |
26062 |
+@@ -2540,6 +2757,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, |
26063 |
swap_free(entry); |
26064 |
if (vm_swap_full() || (vma->vm_flags & VM_LOCKED) || PageMlocked(page)) |
26065 |
try_to_free_swap(page); |
26066 |
@@ -93827,7 +99778,7 @@ index 4f9e530..779c7ce 100644 |
26067 |
unlock_page(page); |
26068 |
if (page != swapcache) { |
26069 |
/* |
26070 |
-@@ -3207,6 +3418,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, |
26071 |
+@@ -2563,6 +2785,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma, |
26072 |
|
26073 |
/* No need to invalidate - it was non-present before */ |
26074 |
update_mmu_cache(vma, address, page_table); |
26075 |
@@ -93839,7 +99790,7 @@ index 4f9e530..779c7ce 100644 |
26076 |
unlock: |
26077 |
pte_unmap_unlock(page_table, ptl); |
26078 |
out: |
26079 |
-@@ -3226,40 +3442,6 @@ out_release: |
26080 |
+@@ -2582,40 +2809,6 @@ out_release: |
26081 |
} |
26082 |
|
26083 |
/* |
26084 |
@@ -93880,7 +99831,7 @@ index 4f9e530..779c7ce 100644 |
26085 |
* We enter with non-exclusive mmap_sem (to exclude vma changes, |
26086 |
* but allow concurrent faults), and pte mapped but not yet locked. |
26087 |
* We return with mmap_sem still held, but pte unmapped and unlocked. |
26088 |
-@@ -3268,27 +3450,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, |
26089 |
+@@ -2624,27 +2817,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, |
26090 |
unsigned long address, pte_t *page_table, pmd_t *pmd, |
26091 |
unsigned int flags) |
26092 |
{ |
26093 |
@@ -93913,7 +99864,7 @@ index 4f9e530..779c7ce 100644 |
26094 |
if (unlikely(anon_vma_prepare(vma))) |
26095 |
goto oom; |
26096 |
page = alloc_zeroed_user_highpage_movable(vma, address); |
26097 |
-@@ -3312,6 +3490,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, |
26098 |
+@@ -2668,6 +2857,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, |
26099 |
if (!pte_none(*page_table)) |
26100 |
goto release; |
26101 |
|
26102 |
@@ -93925,7 +99876,7 @@ index 4f9e530..779c7ce 100644 |
26103 |
inc_mm_counter_fast(mm, MM_ANONPAGES); |
26104 |
page_add_new_anon_rmap(page, vma, address); |
26105 |
setpte: |
26106 |
-@@ -3319,6 +3502,12 @@ setpte: |
26107 |
+@@ -2675,6 +2869,12 @@ setpte: |
26108 |
|
26109 |
/* No need to invalidate - it was non-present before */ |
26110 |
update_mmu_cache(vma, address, page_table); |
26111 |
@@ -93938,17 +99889,7 @@ index 4f9e530..779c7ce 100644 |
26112 |
unlock: |
26113 |
pte_unmap_unlock(page_table, ptl); |
26114 |
return 0; |
26115 |
-@@ -3515,7 +3704,8 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
26116 |
- * if page by the offset is not ready to be mapped (cold cache or |
26117 |
- * something). |
26118 |
- */ |
26119 |
-- if (vma->vm_ops->map_pages && !(flags & FAULT_FLAG_NONLINEAR)) { |
26120 |
-+ if (vma->vm_ops->map_pages && !(flags & FAULT_FLAG_NONLINEAR) && |
26121 |
-+ fault_around_pages() > 1) { |
26122 |
- pte = pte_offset_map_lock(mm, pmd, address, &ptl); |
26123 |
- do_fault_around(vma, address, pte, pgoff, flags); |
26124 |
- if (!pte_same(*pte, orig_pte)) |
26125 |
-@@ -3535,6 +3725,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
26126 |
+@@ -2906,6 +3106,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
26127 |
return ret; |
26128 |
} |
26129 |
do_set_pte(vma, address, fault_page, pte, false, false); |
26130 |
@@ -93960,7 +99901,7 @@ index 4f9e530..779c7ce 100644 |
26131 |
unlock_page(fault_page); |
26132 |
unlock_out: |
26133 |
pte_unmap_unlock(pte, ptl); |
26134 |
-@@ -3576,7 +3771,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
26135 |
+@@ -2947,7 +3152,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
26136 |
page_cache_release(fault_page); |
26137 |
goto uncharge_out; |
26138 |
} |
26139 |
@@ -93979,7 +99920,7 @@ index 4f9e530..779c7ce 100644 |
26140 |
pte_unmap_unlock(pte, ptl); |
26141 |
unlock_page(fault_page); |
26142 |
page_cache_release(fault_page); |
26143 |
-@@ -3624,6 +3830,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
26144 |
+@@ -2995,6 +3211,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
26145 |
return ret; |
26146 |
} |
26147 |
do_set_pte(vma, address, fault_page, pte, true, false); |
26148 |
@@ -93991,7 +99932,7 @@ index 4f9e530..779c7ce 100644 |
26149 |
pte_unmap_unlock(pte, ptl); |
26150 |
|
26151 |
if (set_page_dirty(fault_page)) |
26152 |
-@@ -3854,6 +4065,12 @@ static int handle_pte_fault(struct mm_struct *mm, |
26153 |
+@@ -3225,6 +3446,12 @@ static int handle_pte_fault(struct mm_struct *mm, |
26154 |
if (flags & FAULT_FLAG_WRITE) |
26155 |
flush_tlb_fix_spurious_fault(vma, address); |
26156 |
} |
26157 |
@@ -94004,7 +99945,7 @@ index 4f9e530..779c7ce 100644 |
26158 |
unlock: |
26159 |
pte_unmap_unlock(pte, ptl); |
26160 |
return 0; |
26161 |
-@@ -3870,9 +4087,41 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
26162 |
+@@ -3241,9 +3468,41 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, |
26163 |
pmd_t *pmd; |
26164 |
pte_t *pte; |
26165 |
|
26166 |
@@ -94046,7 +99987,7 @@ index 4f9e530..779c7ce 100644 |
26167 |
pgd = pgd_offset(mm, address); |
26168 |
pud = pud_alloc(mm, pgd, address); |
26169 |
if (!pud) |
26170 |
-@@ -4000,6 +4249,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address) |
26171 |
+@@ -3371,6 +3630,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address) |
26172 |
spin_unlock(&mm->page_table_lock); |
26173 |
return 0; |
26174 |
} |
26175 |
@@ -94070,7 +100011,7 @@ index 4f9e530..779c7ce 100644 |
26176 |
#endif /* __PAGETABLE_PUD_FOLDED */ |
26177 |
|
26178 |
#ifndef __PAGETABLE_PMD_FOLDED |
26179 |
-@@ -4030,6 +4296,30 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address) |
26180 |
+@@ -3401,6 +3677,30 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address) |
26181 |
spin_unlock(&mm->page_table_lock); |
26182 |
return 0; |
26183 |
} |
26184 |
@@ -94101,7 +100042,7 @@ index 4f9e530..779c7ce 100644 |
26185 |
#endif /* __PAGETABLE_PMD_FOLDED */ |
26186 |
|
26187 |
#if !defined(__HAVE_ARCH_GATE_AREA) |
26188 |
-@@ -4043,7 +4333,7 @@ static int __init gate_vma_init(void) |
26189 |
+@@ -3414,7 +3714,7 @@ static int __init gate_vma_init(void) |
26190 |
gate_vma.vm_start = FIXADDR_USER_START; |
26191 |
gate_vma.vm_end = FIXADDR_USER_END; |
26192 |
gate_vma.vm_flags = VM_READ | VM_MAYREAD | VM_EXEC | VM_MAYEXEC; |
26193 |
@@ -94110,7 +100051,7 @@ index 4f9e530..779c7ce 100644 |
26194 |
|
26195 |
return 0; |
26196 |
} |
26197 |
-@@ -4177,8 +4467,8 @@ out: |
26198 |
+@@ -3548,8 +3848,8 @@ out: |
26199 |
return ret; |
26200 |
} |
26201 |
|
26202 |
@@ -94121,7 +100062,7 @@ index 4f9e530..779c7ce 100644 |
26203 |
{ |
26204 |
resource_size_t phys_addr; |
26205 |
unsigned long prot = 0; |
26206 |
-@@ -4204,8 +4494,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys); |
26207 |
+@@ -3575,8 +3875,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys); |
26208 |
* Access another process' address space as given in mm. If non-NULL, use the |
26209 |
* given task for page fault accounting. |
26210 |
*/ |
26211 |
@@ -94132,7 +100073,7 @@ index 4f9e530..779c7ce 100644 |
26212 |
{ |
26213 |
struct vm_area_struct *vma; |
26214 |
void *old_buf = buf; |
26215 |
-@@ -4213,7 +4503,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, |
26216 |
+@@ -3584,7 +3884,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, |
26217 |
down_read(&mm->mmap_sem); |
26218 |
/* ignore errors, just check how much was successfully transferred */ |
26219 |
while (len) { |
26220 |
@@ -94141,7 +100082,7 @@ index 4f9e530..779c7ce 100644 |
26221 |
void *maddr; |
26222 |
struct page *page = NULL; |
26223 |
|
26224 |
-@@ -4272,8 +4562,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, |
26225 |
+@@ -3643,8 +3943,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, |
26226 |
* |
26227 |
* The caller must hold a reference on @mm. |
26228 |
*/ |
26229 |
@@ -94152,7 +100093,7 @@ index 4f9e530..779c7ce 100644 |
26230 |
{ |
26231 |
return __access_remote_vm(NULL, mm, addr, buf, len, write); |
26232 |
} |
26233 |
-@@ -4283,11 +4573,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr, |
26234 |
+@@ -3654,11 +3954,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr, |
26235 |
* Source/target buffer must be kernel space, |
26236 |
* Do not walk the page table directly, use get_user_pages |
26237 |
*/ |
26238 |
@@ -94168,10 +100109,10 @@ index 4f9e530..779c7ce 100644 |
26239 |
mm = get_task_mm(tsk); |
26240 |
if (!mm) |
26241 |
diff --git a/mm/mempolicy.c b/mm/mempolicy.c |
26242 |
-index 6b65d10..e6f415a 100644 |
26243 |
+index 8f5330d..b41914b 100644 |
26244 |
--- a/mm/mempolicy.c |
26245 |
+++ b/mm/mempolicy.c |
26246 |
-@@ -747,6 +747,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, |
26247 |
+@@ -750,6 +750,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, |
26248 |
unsigned long vmstart; |
26249 |
unsigned long vmend; |
26250 |
|
26251 |
@@ -94182,7 +100123,7 @@ index 6b65d10..e6f415a 100644 |
26252 |
vma = find_vma(mm, start); |
26253 |
if (!vma || vma->vm_start > start) |
26254 |
return -EFAULT; |
26255 |
-@@ -790,6 +794,16 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, |
26256 |
+@@ -793,6 +797,16 @@ static int mbind_range(struct mm_struct *mm, unsigned long start, |
26257 |
err = vma_replace_policy(vma, new_pol); |
26258 |
if (err) |
26259 |
goto out; |
26260 |
@@ -94199,7 +100140,7 @@ index 6b65d10..e6f415a 100644 |
26261 |
} |
26262 |
|
26263 |
out: |
26264 |
-@@ -1222,6 +1236,17 @@ static long do_mbind(unsigned long start, unsigned long len, |
26265 |
+@@ -1225,6 +1239,17 @@ static long do_mbind(unsigned long start, unsigned long len, |
26266 |
|
26267 |
if (end < start) |
26268 |
return -EINVAL; |
26269 |
@@ -94217,7 +100158,7 @@ index 6b65d10..e6f415a 100644 |
26270 |
if (end == start) |
26271 |
return 0; |
26272 |
|
26273 |
-@@ -1447,8 +1472,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, |
26274 |
+@@ -1450,8 +1475,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, |
26275 |
*/ |
26276 |
tcred = __task_cred(task); |
26277 |
if (!uid_eq(cred->euid, tcred->suid) && !uid_eq(cred->euid, tcred->uid) && |
26278 |
@@ -94227,7 +100168,7 @@ index 6b65d10..e6f415a 100644 |
26279 |
rcu_read_unlock(); |
26280 |
err = -EPERM; |
26281 |
goto out_put; |
26282 |
-@@ -1479,6 +1503,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, |
26283 |
+@@ -1482,6 +1506,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, |
26284 |
goto out; |
26285 |
} |
26286 |
|
26287 |
@@ -94244,10 +100185,10 @@ index 6b65d10..e6f415a 100644 |
26288 |
capable(CAP_SYS_NICE) ? MPOL_MF_MOVE_ALL : MPOL_MF_MOVE); |
26289 |
|
26290 |
diff --git a/mm/migrate.c b/mm/migrate.c |
26291 |
-index bed4880..a493f67 100644 |
26292 |
+index be6dbf9..febb8ec 100644 |
26293 |
--- a/mm/migrate.c |
26294 |
+++ b/mm/migrate.c |
26295 |
-@@ -1485,8 +1485,7 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages, |
26296 |
+@@ -1506,8 +1506,7 @@ SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages, |
26297 |
*/ |
26298 |
tcred = __task_cred(task); |
26299 |
if (!uid_eq(cred->euid, tcred->suid) && !uid_eq(cred->euid, tcred->uid) && |
26300 |
@@ -94333,18 +100274,18 @@ index b1eb536..091d154 100644 |
26301 |
capable(CAP_IPC_LOCK)) |
26302 |
ret = do_mlockall(flags); |
26303 |
diff --git a/mm/mmap.c b/mm/mmap.c |
26304 |
-index b1202cf..ee487f8 100644 |
26305 |
+index 129b847..fbed804 100644 |
26306 |
--- a/mm/mmap.c |
26307 |
+++ b/mm/mmap.c |
26308 |
-@@ -37,6 +37,7 @@ |
26309 |
- #include <linux/sched/sysctl.h> |
26310 |
+@@ -40,6 +40,7 @@ |
26311 |
#include <linux/notifier.h> |
26312 |
#include <linux/memory.h> |
26313 |
+ #include <linux/printk.h> |
26314 |
+#include <linux/random.h> |
26315 |
|
26316 |
#include <asm/uaccess.h> |
26317 |
#include <asm/cacheflush.h> |
26318 |
-@@ -53,6 +54,16 @@ |
26319 |
+@@ -56,6 +57,16 @@ |
26320 |
#define arch_rebalance_pgtables(addr, len) (addr) |
26321 |
#endif |
26322 |
|
26323 |
@@ -94361,7 +100302,7 @@ index b1202cf..ee487f8 100644 |
26324 |
static void unmap_region(struct mm_struct *mm, |
26325 |
struct vm_area_struct *vma, struct vm_area_struct *prev, |
26326 |
unsigned long start, unsigned long end); |
26327 |
-@@ -72,16 +83,25 @@ static void unmap_region(struct mm_struct *mm, |
26328 |
+@@ -75,16 +86,25 @@ static void unmap_region(struct mm_struct *mm, |
26329 |
* x: (no) no x: (no) yes x: (no) yes x: (yes) yes |
26330 |
* |
26331 |
*/ |
26332 |
@@ -94390,7 +100331,7 @@ index b1202cf..ee487f8 100644 |
26333 |
} |
26334 |
EXPORT_SYMBOL(vm_get_page_prot); |
26335 |
|
26336 |
-@@ -91,6 +111,7 @@ unsigned long sysctl_overcommit_kbytes __read_mostly; |
26337 |
+@@ -94,6 +114,7 @@ unsigned long sysctl_overcommit_kbytes __read_mostly; |
26338 |
int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT; |
26339 |
unsigned long sysctl_user_reserve_kbytes __read_mostly = 1UL << 17; /* 128MB */ |
26340 |
unsigned long sysctl_admin_reserve_kbytes __read_mostly = 1UL << 13; /* 8MB */ |
26341 |
@@ -94398,7 +100339,7 @@ index b1202cf..ee487f8 100644 |
26342 |
/* |
26343 |
* Make sure vm_committed_as in one cacheline and not cacheline shared with |
26344 |
* other variables. It can be updated by several CPUs frequently. |
26345 |
-@@ -247,6 +268,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) |
26346 |
+@@ -250,6 +271,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) |
26347 |
struct vm_area_struct *next = vma->vm_next; |
26348 |
|
26349 |
might_sleep(); |
26350 |
@@ -94406,15 +100347,20 @@ index b1202cf..ee487f8 100644 |
26351 |
if (vma->vm_ops && vma->vm_ops->close) |
26352 |
vma->vm_ops->close(vma); |
26353 |
if (vma->vm_file) |
26354 |
-@@ -291,6 +313,7 @@ SYSCALL_DEFINE1(brk, unsigned long, brk) |
26355 |
+@@ -294,6 +316,12 @@ SYSCALL_DEFINE1(brk, unsigned long, brk) |
26356 |
* not page aligned -Ram Gupta |
26357 |
*/ |
26358 |
rlim = rlimit(RLIMIT_DATA); |
26359 |
++#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP |
26360 |
++ /* force a minimum 16MB brk heap on setuid/setgid binaries */ |
26361 |
++ if (rlim < PAGE_SIZE && (get_dumpable(mm) != SUID_DUMP_USER) && gr_is_global_nonroot(current_uid())) |
26362 |
++ rlim = 4096 * PAGE_SIZE; |
26363 |
++#endif |
26364 |
+ gr_learn_resource(current, RLIMIT_DATA, (brk - mm->start_brk) + (mm->end_data - mm->start_data), 1); |
26365 |
if (rlim < RLIM_INFINITY && (brk - mm->start_brk) + |
26366 |
(mm->end_data - mm->start_data) > rlim) |
26367 |
goto out; |
26368 |
-@@ -942,6 +965,12 @@ static int |
26369 |
+@@ -944,6 +972,12 @@ static int |
26370 |
can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags, |
26371 |
struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff) |
26372 |
{ |
26373 |
@@ -94427,7 +100373,7 @@ index b1202cf..ee487f8 100644 |
26374 |
if (is_mergeable_vma(vma, file, vm_flags) && |
26375 |
is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) { |
26376 |
if (vma->vm_pgoff == vm_pgoff) |
26377 |
-@@ -961,6 +990,12 @@ static int |
26378 |
+@@ -963,6 +997,12 @@ static int |
26379 |
can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, |
26380 |
struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff) |
26381 |
{ |
26382 |
@@ -94440,7 +100386,7 @@ index b1202cf..ee487f8 100644 |
26383 |
if (is_mergeable_vma(vma, file, vm_flags) && |
26384 |
is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) { |
26385 |
pgoff_t vm_pglen; |
26386 |
-@@ -1003,13 +1038,20 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, |
26387 |
+@@ -1005,13 +1045,20 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags, |
26388 |
struct vm_area_struct *vma_merge(struct mm_struct *mm, |
26389 |
struct vm_area_struct *prev, unsigned long addr, |
26390 |
unsigned long end, unsigned long vm_flags, |
26391 |
@@ -94462,7 +100408,7 @@ index b1202cf..ee487f8 100644 |
26392 |
/* |
26393 |
* We later require that vma->vm_flags == vm_flags, |
26394 |
* so this tests vma->vm_flags & VM_SPECIAL, too. |
26395 |
-@@ -1025,6 +1067,15 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, |
26396 |
+@@ -1027,6 +1074,15 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, |
26397 |
if (next && next->vm_end == end) /* cases 6, 7, 8 */ |
26398 |
next = next->vm_next; |
26399 |
|
26400 |
@@ -94478,7 +100424,7 @@ index b1202cf..ee487f8 100644 |
26401 |
/* |
26402 |
* Can it merge with the predecessor? |
26403 |
*/ |
26404 |
-@@ -1044,9 +1095,24 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, |
26405 |
+@@ -1046,9 +1102,24 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, |
26406 |
/* cases 1, 6 */ |
26407 |
err = vma_adjust(prev, prev->vm_start, |
26408 |
next->vm_end, prev->vm_pgoff, NULL); |
26409 |
@@ -94504,7 +100450,7 @@ index b1202cf..ee487f8 100644 |
26410 |
if (err) |
26411 |
return NULL; |
26412 |
khugepaged_enter_vma_merge(prev); |
26413 |
-@@ -1060,12 +1126,27 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, |
26414 |
+@@ -1062,12 +1133,27 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm, |
26415 |
mpol_equal(policy, vma_policy(next)) && |
26416 |
can_vma_merge_before(next, vm_flags, |
26417 |
anon_vma, file, pgoff+pglen)) { |
26418 |
@@ -94534,7 +100480,7 @@ index b1202cf..ee487f8 100644 |
26419 |
if (err) |
26420 |
return NULL; |
26421 |
khugepaged_enter_vma_merge(area); |
26422 |
-@@ -1174,8 +1255,10 @@ none: |
26423 |
+@@ -1176,8 +1262,10 @@ none: |
26424 |
void vm_stat_account(struct mm_struct *mm, unsigned long flags, |
26425 |
struct file *file, long pages) |
26426 |
{ |
26427 |
@@ -94547,7 +100493,7 @@ index b1202cf..ee487f8 100644 |
26428 |
|
26429 |
mm->total_vm += pages; |
26430 |
|
26431 |
-@@ -1183,7 +1266,7 @@ void vm_stat_account(struct mm_struct *mm, unsigned long flags, |
26432 |
+@@ -1185,7 +1273,7 @@ void vm_stat_account(struct mm_struct *mm, unsigned long flags, |
26433 |
mm->shared_vm += pages; |
26434 |
if ((flags & (VM_EXEC|VM_WRITE)) == VM_EXEC) |
26435 |
mm->exec_vm += pages; |
26436 |
@@ -94556,7 +100502,7 @@ index b1202cf..ee487f8 100644 |
26437 |
mm->stack_vm += pages; |
26438 |
} |
26439 |
#endif /* CONFIG_PROC_FS */ |
26440 |
-@@ -1213,6 +1296,7 @@ static inline int mlock_future_check(struct mm_struct *mm, |
26441 |
+@@ -1215,6 +1303,7 @@ static inline int mlock_future_check(struct mm_struct *mm, |
26442 |
locked += mm->locked_vm; |
26443 |
lock_limit = rlimit(RLIMIT_MEMLOCK); |
26444 |
lock_limit >>= PAGE_SHIFT; |
26445 |
@@ -94564,7 +100510,7 @@ index b1202cf..ee487f8 100644 |
26446 |
if (locked > lock_limit && !capable(CAP_IPC_LOCK)) |
26447 |
return -EAGAIN; |
26448 |
} |
26449 |
-@@ -1239,7 +1323,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
26450 |
+@@ -1241,7 +1330,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
26451 |
* (the exception is when the underlying filesystem is noexec |
26452 |
* mounted, in which case we dont add PROT_EXEC.) |
26453 |
*/ |
26454 |
@@ -94573,7 +100519,7 @@ index b1202cf..ee487f8 100644 |
26455 |
if (!(file && (file->f_path.mnt->mnt_flags & MNT_NOEXEC))) |
26456 |
prot |= PROT_EXEC; |
26457 |
|
26458 |
-@@ -1265,7 +1349,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
26459 |
+@@ -1267,7 +1356,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
26460 |
/* Obtain the address to map to. we verify (or select) it and ensure |
26461 |
* that it represents a valid section of the address space. |
26462 |
*/ |
26463 |
@@ -94582,7 +100528,7 @@ index b1202cf..ee487f8 100644 |
26464 |
if (addr & ~PAGE_MASK) |
26465 |
return addr; |
26466 |
|
26467 |
-@@ -1276,6 +1360,43 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
26468 |
+@@ -1278,6 +1367,43 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
26469 |
vm_flags = calc_vm_prot_bits(prot) | calc_vm_flag_bits(flags) | |
26470 |
mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC; |
26471 |
|
26472 |
@@ -94626,7 +100572,7 @@ index b1202cf..ee487f8 100644 |
26473 |
if (flags & MAP_LOCKED) |
26474 |
if (!can_do_mlock()) |
26475 |
return -EPERM; |
26476 |
-@@ -1363,6 +1484,9 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
26477 |
+@@ -1365,6 +1491,9 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
26478 |
vm_flags |= VM_NORESERVE; |
26479 |
} |
26480 |
|
26481 |
@@ -94636,7 +100582,7 @@ index b1202cf..ee487f8 100644 |
26482 |
addr = mmap_region(file, addr, len, vm_flags, pgoff); |
26483 |
if (!IS_ERR_VALUE(addr) && |
26484 |
((vm_flags & VM_LOCKED) || |
26485 |
-@@ -1456,7 +1580,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma) |
26486 |
+@@ -1458,7 +1587,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma) |
26487 |
vm_flags_t vm_flags = vma->vm_flags; |
26488 |
|
26489 |
/* If it was private or non-writable, the write bit is already clear */ |
26490 |
@@ -94645,7 +100591,7 @@ index b1202cf..ee487f8 100644 |
26491 |
return 0; |
26492 |
|
26493 |
/* The backer wishes to know when pages are first written to? */ |
26494 |
-@@ -1502,7 +1626,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr, |
26495 |
+@@ -1504,7 +1633,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr, |
26496 |
struct rb_node **rb_link, *rb_parent; |
26497 |
unsigned long charged = 0; |
26498 |
|
26499 |
@@ -94668,7 +100614,7 @@ index b1202cf..ee487f8 100644 |
26500 |
if (!may_expand_vm(mm, len >> PAGE_SHIFT)) { |
26501 |
unsigned long nr_pages; |
26502 |
|
26503 |
-@@ -1521,11 +1660,10 @@ unsigned long mmap_region(struct file *file, unsigned long addr, |
26504 |
+@@ -1523,11 +1667,10 @@ unsigned long mmap_region(struct file *file, unsigned long addr, |
26505 |
|
26506 |
/* Clear old maps */ |
26507 |
error = -ENOMEM; |
26508 |
@@ -94681,7 +100627,7 @@ index b1202cf..ee487f8 100644 |
26509 |
} |
26510 |
|
26511 |
/* |
26512 |
-@@ -1556,6 +1694,16 @@ munmap_back: |
26513 |
+@@ -1558,6 +1701,16 @@ munmap_back: |
26514 |
goto unacct_error; |
26515 |
} |
26516 |
|
26517 |
@@ -94698,7 +100644,7 @@ index b1202cf..ee487f8 100644 |
26518 |
vma->vm_mm = mm; |
26519 |
vma->vm_start = addr; |
26520 |
vma->vm_end = addr + len; |
26521 |
-@@ -1575,6 +1723,13 @@ munmap_back: |
26522 |
+@@ -1577,6 +1730,13 @@ munmap_back: |
26523 |
if (error) |
26524 |
goto unmap_and_free_vma; |
26525 |
|
26526 |
@@ -94712,7 +100658,7 @@ index b1202cf..ee487f8 100644 |
26527 |
/* Can addr have changed?? |
26528 |
* |
26529 |
* Answer: Yes, several device drivers can do it in their |
26530 |
-@@ -1608,6 +1763,12 @@ munmap_back: |
26531 |
+@@ -1610,6 +1770,12 @@ munmap_back: |
26532 |
} |
26533 |
|
26534 |
vma_link(mm, vma, prev, rb_link, rb_parent); |
26535 |
@@ -94725,7 +100671,7 @@ index b1202cf..ee487f8 100644 |
26536 |
/* Once vma denies write, undo our temporary denial count */ |
26537 |
if (vm_flags & VM_DENYWRITE) |
26538 |
allow_write_access(file); |
26539 |
-@@ -1616,6 +1777,7 @@ out: |
26540 |
+@@ -1618,6 +1784,7 @@ out: |
26541 |
perf_event_mmap(vma); |
26542 |
|
26543 |
vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT); |
26544 |
@@ -94733,7 +100679,7 @@ index b1202cf..ee487f8 100644 |
26545 |
if (vm_flags & VM_LOCKED) { |
26546 |
if (!((vm_flags & VM_SPECIAL) || is_vm_hugetlb_page(vma) || |
26547 |
vma == get_gate_vma(current->mm))) |
26548 |
-@@ -1648,6 +1810,12 @@ unmap_and_free_vma: |
26549 |
+@@ -1650,6 +1817,12 @@ unmap_and_free_vma: |
26550 |
unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end); |
26551 |
charged = 0; |
26552 |
free_vma: |
26553 |
@@ -94746,7 +100692,7 @@ index b1202cf..ee487f8 100644 |
26554 |
kmem_cache_free(vm_area_cachep, vma); |
26555 |
unacct_error: |
26556 |
if (charged) |
26557 |
-@@ -1655,7 +1823,63 @@ unacct_error: |
26558 |
+@@ -1657,7 +1830,63 @@ unacct_error: |
26559 |
return error; |
26560 |
} |
26561 |
|
26562 |
@@ -94811,7 +100757,7 @@ index b1202cf..ee487f8 100644 |
26563 |
{ |
26564 |
/* |
26565 |
* We implement the search by looking for an rbtree node that |
26566 |
-@@ -1703,11 +1927,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info) |
26567 |
+@@ -1705,11 +1934,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info) |
26568 |
} |
26569 |
} |
26570 |
|
26571 |
@@ -94842,7 +100788,7 @@ index b1202cf..ee487f8 100644 |
26572 |
if (gap_end >= low_limit && gap_end - gap_start >= length) |
26573 |
goto found; |
26574 |
|
26575 |
-@@ -1757,7 +1999,7 @@ found: |
26576 |
+@@ -1759,7 +2006,7 @@ found: |
26577 |
return gap_start; |
26578 |
} |
26579 |
|
26580 |
@@ -94851,7 +100797,7 @@ index b1202cf..ee487f8 100644 |
26581 |
{ |
26582 |
struct mm_struct *mm = current->mm; |
26583 |
struct vm_area_struct *vma; |
26584 |
-@@ -1811,6 +2053,24 @@ check_current: |
26585 |
+@@ -1813,6 +2060,24 @@ check_current: |
26586 |
gap_end = vma->vm_start; |
26587 |
if (gap_end < low_limit) |
26588 |
return -ENOMEM; |
26589 |
@@ -94876,7 +100822,7 @@ index b1202cf..ee487f8 100644 |
26590 |
if (gap_start <= high_limit && gap_end - gap_start >= length) |
26591 |
goto found; |
26592 |
|
26593 |
-@@ -1874,6 +2134,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, |
26594 |
+@@ -1876,6 +2141,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, |
26595 |
struct mm_struct *mm = current->mm; |
26596 |
struct vm_area_struct *vma; |
26597 |
struct vm_unmapped_area_info info; |
26598 |
@@ -94884,7 +100830,7 @@ index b1202cf..ee487f8 100644 |
26599 |
|
26600 |
if (len > TASK_SIZE - mmap_min_addr) |
26601 |
return -ENOMEM; |
26602 |
-@@ -1881,11 +2142,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, |
26603 |
+@@ -1883,11 +2149,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, |
26604 |
if (flags & MAP_FIXED) |
26605 |
return addr; |
26606 |
|
26607 |
@@ -94901,7 +100847,7 @@ index b1202cf..ee487f8 100644 |
26608 |
return addr; |
26609 |
} |
26610 |
|
26611 |
-@@ -1894,6 +2159,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, |
26612 |
+@@ -1896,6 +2166,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, |
26613 |
info.low_limit = mm->mmap_base; |
26614 |
info.high_limit = TASK_SIZE; |
26615 |
info.align_mask = 0; |
26616 |
@@ -94909,7 +100855,7 @@ index b1202cf..ee487f8 100644 |
26617 |
return vm_unmapped_area(&info); |
26618 |
} |
26619 |
#endif |
26620 |
-@@ -1912,6 +2178,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
26621 |
+@@ -1914,6 +2185,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
26622 |
struct mm_struct *mm = current->mm; |
26623 |
unsigned long addr = addr0; |
26624 |
struct vm_unmapped_area_info info; |
26625 |
@@ -94917,7 +100863,7 @@ index b1202cf..ee487f8 100644 |
26626 |
|
26627 |
/* requested length too big for entire address space */ |
26628 |
if (len > TASK_SIZE - mmap_min_addr) |
26629 |
-@@ -1920,12 +2187,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
26630 |
+@@ -1922,12 +2194,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
26631 |
if (flags & MAP_FIXED) |
26632 |
return addr; |
26633 |
|
26634 |
@@ -94935,7 +100881,7 @@ index b1202cf..ee487f8 100644 |
26635 |
return addr; |
26636 |
} |
26637 |
|
26638 |
-@@ -1934,6 +2205,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
26639 |
+@@ -1936,6 +2212,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
26640 |
info.low_limit = max(PAGE_SIZE, mmap_min_addr); |
26641 |
info.high_limit = mm->mmap_base; |
26642 |
info.align_mask = 0; |
26643 |
@@ -94943,7 +100889,7 @@ index b1202cf..ee487f8 100644 |
26644 |
addr = vm_unmapped_area(&info); |
26645 |
|
26646 |
/* |
26647 |
-@@ -1946,6 +2218,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
26648 |
+@@ -1948,6 +2225,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
26649 |
VM_BUG_ON(addr != -ENOMEM); |
26650 |
info.flags = 0; |
26651 |
info.low_limit = TASK_UNMAPPED_BASE; |
26652 |
@@ -94956,7 +100902,7 @@ index b1202cf..ee487f8 100644 |
26653 |
info.high_limit = TASK_SIZE; |
26654 |
addr = vm_unmapped_area(&info); |
26655 |
} |
26656 |
-@@ -2046,6 +2324,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr, |
26657 |
+@@ -2048,6 +2331,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr, |
26658 |
return vma; |
26659 |
} |
26660 |
|
26661 |
@@ -94985,7 +100931,7 @@ index b1202cf..ee487f8 100644 |
26662 |
/* |
26663 |
* Verify that the stack growth is acceptable and |
26664 |
* update accounting. This is shared with both the |
26665 |
-@@ -2062,6 +2362,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns |
26666 |
+@@ -2064,6 +2369,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns |
26667 |
return -ENOMEM; |
26668 |
|
26669 |
/* Stack limit test */ |
26670 |
@@ -94993,7 +100939,7 @@ index b1202cf..ee487f8 100644 |
26671 |
if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur)) |
26672 |
return -ENOMEM; |
26673 |
|
26674 |
-@@ -2072,6 +2373,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns |
26675 |
+@@ -2074,6 +2380,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns |
26676 |
locked = mm->locked_vm + grow; |
26677 |
limit = ACCESS_ONCE(rlim[RLIMIT_MEMLOCK].rlim_cur); |
26678 |
limit >>= PAGE_SHIFT; |
26679 |
@@ -95001,7 +100947,7 @@ index b1202cf..ee487f8 100644 |
26680 |
if (locked > limit && !capable(CAP_IPC_LOCK)) |
26681 |
return -ENOMEM; |
26682 |
} |
26683 |
-@@ -2101,37 +2403,48 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns |
26684 |
+@@ -2103,37 +2410,48 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns |
26685 |
* PA-RISC uses this for its stack; IA64 for its Register Backing Store. |
26686 |
* vma is the last one with address > vma->vm_end. Have to extend vma. |
26687 |
*/ |
26688 |
@@ -95059,7 +101005,7 @@ index b1202cf..ee487f8 100644 |
26689 |
unsigned long size, grow; |
26690 |
|
26691 |
size = address - vma->vm_start; |
26692 |
-@@ -2166,6 +2479,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) |
26693 |
+@@ -2168,6 +2486,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) |
26694 |
} |
26695 |
} |
26696 |
} |
26697 |
@@ -95068,7 +101014,7 @@ index b1202cf..ee487f8 100644 |
26698 |
vma_unlock_anon_vma(vma); |
26699 |
khugepaged_enter_vma_merge(vma); |
26700 |
validate_mm(vma->vm_mm); |
26701 |
-@@ -2180,6 +2495,8 @@ int expand_downwards(struct vm_area_struct *vma, |
26702 |
+@@ -2182,6 +2502,8 @@ int expand_downwards(struct vm_area_struct *vma, |
26703 |
unsigned long address) |
26704 |
{ |
26705 |
int error; |
26706 |
@@ -95077,7 +101023,7 @@ index b1202cf..ee487f8 100644 |
26707 |
|
26708 |
/* |
26709 |
* We must make sure the anon_vma is allocated |
26710 |
-@@ -2193,6 +2510,15 @@ int expand_downwards(struct vm_area_struct *vma, |
26711 |
+@@ -2195,6 +2517,15 @@ int expand_downwards(struct vm_area_struct *vma, |
26712 |
if (error) |
26713 |
return error; |
26714 |
|
26715 |
@@ -95093,7 +101039,7 @@ index b1202cf..ee487f8 100644 |
26716 |
vma_lock_anon_vma(vma); |
26717 |
|
26718 |
/* |
26719 |
-@@ -2202,9 +2528,17 @@ int expand_downwards(struct vm_area_struct *vma, |
26720 |
+@@ -2204,9 +2535,17 @@ int expand_downwards(struct vm_area_struct *vma, |
26721 |
*/ |
26722 |
|
26723 |
/* Somebody else might have raced and expanded it already */ |
26724 |
@@ -95112,7 +101058,7 @@ index b1202cf..ee487f8 100644 |
26725 |
size = vma->vm_end - address; |
26726 |
grow = (vma->vm_start - address) >> PAGE_SHIFT; |
26727 |
|
26728 |
-@@ -2229,13 +2563,27 @@ int expand_downwards(struct vm_area_struct *vma, |
26729 |
+@@ -2231,13 +2570,27 @@ int expand_downwards(struct vm_area_struct *vma, |
26730 |
vma->vm_pgoff -= grow; |
26731 |
anon_vma_interval_tree_post_update_vma(vma); |
26732 |
vma_gap_update(vma); |
26733 |
@@ -95140,7 +101086,7 @@ index b1202cf..ee487f8 100644 |
26734 |
khugepaged_enter_vma_merge(vma); |
26735 |
validate_mm(vma->vm_mm); |
26736 |
return error; |
26737 |
-@@ -2333,6 +2681,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma) |
26738 |
+@@ -2335,6 +2688,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma) |
26739 |
do { |
26740 |
long nrpages = vma_pages(vma); |
26741 |
|
26742 |
@@ -95154,7 +101100,7 @@ index b1202cf..ee487f8 100644 |
26743 |
if (vma->vm_flags & VM_ACCOUNT) |
26744 |
nr_accounted += nrpages; |
26745 |
vm_stat_account(mm, vma->vm_flags, vma->vm_file, -nrpages); |
26746 |
-@@ -2377,6 +2732,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma, |
26747 |
+@@ -2379,6 +2739,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma, |
26748 |
insertion_point = (prev ? &prev->vm_next : &mm->mmap); |
26749 |
vma->vm_prev = NULL; |
26750 |
do { |
26751 |
@@ -95171,7 +101117,7 @@ index b1202cf..ee487f8 100644 |
26752 |
vma_rb_erase(vma, &mm->mm_rb); |
26753 |
mm->map_count--; |
26754 |
tail_vma = vma; |
26755 |
-@@ -2404,14 +2769,33 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, |
26756 |
+@@ -2406,14 +2776,33 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, |
26757 |
struct vm_area_struct *new; |
26758 |
int err = -ENOMEM; |
26759 |
|
26760 |
@@ -95205,7 +101151,7 @@ index b1202cf..ee487f8 100644 |
26761 |
/* most fields are the same, copy all, and then fixup */ |
26762 |
*new = *vma; |
26763 |
|
26764 |
-@@ -2424,6 +2808,22 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, |
26765 |
+@@ -2426,6 +2815,22 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, |
26766 |
new->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT); |
26767 |
} |
26768 |
|
26769 |
@@ -95228,7 +101174,7 @@ index b1202cf..ee487f8 100644 |
26770 |
err = vma_dup_policy(vma, new); |
26771 |
if (err) |
26772 |
goto out_free_vma; |
26773 |
-@@ -2443,6 +2843,38 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, |
26774 |
+@@ -2445,6 +2850,38 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, |
26775 |
else |
26776 |
err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new); |
26777 |
|
26778 |
@@ -95267,7 +101213,7 @@ index b1202cf..ee487f8 100644 |
26779 |
/* Success. */ |
26780 |
if (!err) |
26781 |
return 0; |
26782 |
-@@ -2452,10 +2884,18 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, |
26783 |
+@@ -2454,10 +2891,18 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, |
26784 |
new->vm_ops->close(new); |
26785 |
if (new->vm_file) |
26786 |
fput(new->vm_file); |
26787 |
@@ -95287,7 +101233,7 @@ index b1202cf..ee487f8 100644 |
26788 |
kmem_cache_free(vm_area_cachep, new); |
26789 |
out_err: |
26790 |
return err; |
26791 |
-@@ -2468,6 +2908,15 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, |
26792 |
+@@ -2470,6 +2915,15 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, |
26793 |
int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, |
26794 |
unsigned long addr, int new_below) |
26795 |
{ |
26796 |
@@ -95303,7 +101249,7 @@ index b1202cf..ee487f8 100644 |
26797 |
if (mm->map_count >= sysctl_max_map_count) |
26798 |
return -ENOMEM; |
26799 |
|
26800 |
-@@ -2479,11 +2928,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, |
26801 |
+@@ -2481,11 +2935,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, |
26802 |
* work. This now handles partial unmappings. |
26803 |
* Jeremy Fitzhardinge <jeremy@××××.org> |
26804 |
*/ |
26805 |
@@ -95334,7 +101280,7 @@ index b1202cf..ee487f8 100644 |
26806 |
if ((start & ~PAGE_MASK) || start > TASK_SIZE || len > TASK_SIZE-start) |
26807 |
return -EINVAL; |
26808 |
|
26809 |
-@@ -2558,6 +3026,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) |
26810 |
+@@ -2560,6 +3033,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) |
26811 |
/* Fix up all other VM information */ |
26812 |
remove_vma_list(mm, vma); |
26813 |
|
26814 |
@@ -95343,7 +101289,7 @@ index b1202cf..ee487f8 100644 |
26815 |
return 0; |
26816 |
} |
26817 |
|
26818 |
-@@ -2566,6 +3036,13 @@ int vm_munmap(unsigned long start, size_t len) |
26819 |
+@@ -2568,6 +3043,13 @@ int vm_munmap(unsigned long start, size_t len) |
26820 |
int ret; |
26821 |
struct mm_struct *mm = current->mm; |
26822 |
|
26823 |
@@ -95357,7 +101303,7 @@ index b1202cf..ee487f8 100644 |
26824 |
down_write(&mm->mmap_sem); |
26825 |
ret = do_munmap(mm, start, len); |
26826 |
up_write(&mm->mmap_sem); |
26827 |
-@@ -2579,16 +3056,6 @@ SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) |
26828 |
+@@ -2581,16 +3063,6 @@ SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) |
26829 |
return vm_munmap(addr, len); |
26830 |
} |
26831 |
|
26832 |
@@ -95374,7 +101320,7 @@ index b1202cf..ee487f8 100644 |
26833 |
/* |
26834 |
* this is really a simplified "do_mmap". it only handles |
26835 |
* anonymous maps. eventually we may be able to do some |
26836 |
-@@ -2602,6 +3069,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) |
26837 |
+@@ -2604,6 +3076,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) |
26838 |
struct rb_node ** rb_link, * rb_parent; |
26839 |
pgoff_t pgoff = addr >> PAGE_SHIFT; |
26840 |
int error; |
26841 |
@@ -95382,7 +101328,7 @@ index b1202cf..ee487f8 100644 |
26842 |
|
26843 |
len = PAGE_ALIGN(len); |
26844 |
if (!len) |
26845 |
-@@ -2609,10 +3077,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) |
26846 |
+@@ -2611,10 +3084,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) |
26847 |
|
26848 |
flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags; |
26849 |
|
26850 |
@@ -95407,7 +101353,7 @@ index b1202cf..ee487f8 100644 |
26851 |
error = mlock_future_check(mm, mm->def_flags, len); |
26852 |
if (error) |
26853 |
return error; |
26854 |
-@@ -2626,21 +3108,20 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) |
26855 |
+@@ -2628,21 +3115,20 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) |
26856 |
/* |
26857 |
* Clear old maps. this also does some error checking for us |
26858 |
*/ |
26859 |
@@ -95432,7 +101378,7 @@ index b1202cf..ee487f8 100644 |
26860 |
return -ENOMEM; |
26861 |
|
26862 |
/* Can we just expand an old private anonymous mapping? */ |
26863 |
-@@ -2654,7 +3135,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) |
26864 |
+@@ -2656,7 +3142,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) |
26865 |
*/ |
26866 |
vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL); |
26867 |
if (!vma) { |
26868 |
@@ -95441,7 +101387,7 @@ index b1202cf..ee487f8 100644 |
26869 |
return -ENOMEM; |
26870 |
} |
26871 |
|
26872 |
-@@ -2668,10 +3149,11 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) |
26873 |
+@@ -2670,10 +3156,11 @@ static unsigned long do_brk(unsigned long addr, unsigned long len) |
26874 |
vma_link(mm, vma, prev, rb_link, rb_parent); |
26875 |
out: |
26876 |
perf_event_mmap(vma); |
26877 |
@@ -95455,7 +101401,7 @@ index b1202cf..ee487f8 100644 |
26878 |
return addr; |
26879 |
} |
26880 |
|
26881 |
-@@ -2733,6 +3215,7 @@ void exit_mmap(struct mm_struct *mm) |
26882 |
+@@ -2735,6 +3222,7 @@ void exit_mmap(struct mm_struct *mm) |
26883 |
while (vma) { |
26884 |
if (vma->vm_flags & VM_ACCOUNT) |
26885 |
nr_accounted += vma_pages(vma); |
26886 |
@@ -95463,7 +101409,7 @@ index b1202cf..ee487f8 100644 |
26887 |
vma = remove_vma(vma); |
26888 |
} |
26889 |
vm_unacct_memory(nr_accounted); |
26890 |
-@@ -2750,6 +3233,13 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) |
26891 |
+@@ -2752,6 +3240,13 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) |
26892 |
struct vm_area_struct *prev; |
26893 |
struct rb_node **rb_link, *rb_parent; |
26894 |
|
26895 |
@@ -95477,7 +101423,7 @@ index b1202cf..ee487f8 100644 |
26896 |
/* |
26897 |
* The vm_pgoff of a purely anonymous vma should be irrelevant |
26898 |
* until its first write fault, when page's anon_vma and index |
26899 |
-@@ -2773,7 +3263,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) |
26900 |
+@@ -2775,7 +3270,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) |
26901 |
security_vm_enough_memory_mm(mm, vma_pages(vma))) |
26902 |
return -ENOMEM; |
26903 |
|
26904 |
@@ -95499,7 +101445,7 @@ index b1202cf..ee487f8 100644 |
26905 |
return 0; |
26906 |
} |
26907 |
|
26908 |
-@@ -2792,6 +3296,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, |
26909 |
+@@ -2794,6 +3303,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, |
26910 |
struct rb_node **rb_link, *rb_parent; |
26911 |
bool faulted_in_anon_vma = true; |
26912 |
|
26913 |
@@ -95508,7 +101454,7 @@ index b1202cf..ee487f8 100644 |
26914 |
/* |
26915 |
* If anonymous vma has not yet been faulted, update new pgoff |
26916 |
* to match new location, to increase its chance of merging. |
26917 |
-@@ -2856,6 +3362,39 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, |
26918 |
+@@ -2858,6 +3369,39 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, |
26919 |
return NULL; |
26920 |
} |
26921 |
|
26922 |
@@ -95548,7 +101494,7 @@ index b1202cf..ee487f8 100644 |
26923 |
/* |
26924 |
* Return true if the calling process may expand its vm space by the passed |
26925 |
* number of pages |
26926 |
-@@ -2867,6 +3406,7 @@ int may_expand_vm(struct mm_struct *mm, unsigned long npages) |
26927 |
+@@ -2869,6 +3413,7 @@ int may_expand_vm(struct mm_struct *mm, unsigned long npages) |
26928 |
|
26929 |
lim = rlimit(RLIMIT_AS) >> PAGE_SHIFT; |
26930 |
|
26931 |
@@ -95556,7 +101502,7 @@ index b1202cf..ee487f8 100644 |
26932 |
if (cur + npages > lim) |
26933 |
return 0; |
26934 |
return 1; |
26935 |
-@@ -2937,6 +3477,22 @@ struct vm_area_struct *_install_special_mapping(struct mm_struct *mm, |
26936 |
+@@ -2951,6 +3496,22 @@ static struct vm_area_struct *__install_special_mapping( |
26937 |
vma->vm_start = addr; |
26938 |
vma->vm_end = addr + len; |
26939 |
|
26940 |
@@ -95919,10 +101865,10 @@ index 05f1180..c3cde48 100644 |
26941 |
out: |
26942 |
if (ret & ~PAGE_MASK) |
26943 |
diff --git a/mm/nommu.c b/mm/nommu.c |
26944 |
-index 431fd7c..8674512 100644 |
26945 |
+index 4a852f6..4371a6b 100644 |
26946 |
--- a/mm/nommu.c |
26947 |
+++ b/mm/nommu.c |
26948 |
-@@ -67,7 +67,6 @@ int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT; |
26949 |
+@@ -70,7 +70,6 @@ int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT; |
26950 |
int sysctl_nr_trim_pages = CONFIG_NOMMU_INITIAL_TRIM_EXCESS; |
26951 |
unsigned long sysctl_user_reserve_kbytes __read_mostly = 1UL << 17; /* 128MB */ |
26952 |
unsigned long sysctl_admin_reserve_kbytes __read_mostly = 1UL << 13; /* 8MB */ |
26953 |
@@ -95930,7 +101876,7 @@ index 431fd7c..8674512 100644 |
26954 |
|
26955 |
atomic_long_t mmap_pages_allocated; |
26956 |
|
26957 |
-@@ -854,15 +853,6 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) |
26958 |
+@@ -857,15 +856,6 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) |
26959 |
EXPORT_SYMBOL(find_vma); |
26960 |
|
26961 |
/* |
26962 |
@@ -95946,7 +101892,7 @@ index 431fd7c..8674512 100644 |
26963 |
* expand a stack to a given address |
26964 |
* - not supported under NOMMU conditions |
26965 |
*/ |
26966 |
-@@ -1569,6 +1559,7 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, |
26967 |
+@@ -1572,6 +1562,7 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, |
26968 |
|
26969 |
/* most fields are the same, copy all, and then fixup */ |
26970 |
*new = *vma; |
26971 |
@@ -95954,7 +101900,7 @@ index 431fd7c..8674512 100644 |
26972 |
*region = *vma->vm_region; |
26973 |
new->vm_region = region; |
26974 |
|
26975 |
-@@ -2004,8 +1995,8 @@ int generic_file_remap_pages(struct vm_area_struct *vma, unsigned long addr, |
26976 |
+@@ -2007,8 +1998,8 @@ int generic_file_remap_pages(struct vm_area_struct *vma, unsigned long addr, |
26977 |
} |
26978 |
EXPORT_SYMBOL(generic_file_remap_pages); |
26979 |
|
26980 |
@@ -95965,7 +101911,7 @@ index 431fd7c..8674512 100644 |
26981 |
{ |
26982 |
struct vm_area_struct *vma; |
26983 |
|
26984 |
-@@ -2046,8 +2037,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, |
26985 |
+@@ -2049,8 +2040,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, |
26986 |
* |
26987 |
* The caller must hold a reference on @mm. |
26988 |
*/ |
26989 |
@@ -95976,7 +101922,7 @@ index 431fd7c..8674512 100644 |
26990 |
{ |
26991 |
return __access_remote_vm(NULL, mm, addr, buf, len, write); |
26992 |
} |
26993 |
-@@ -2056,7 +2047,7 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr, |
26994 |
+@@ -2059,7 +2050,7 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr, |
26995 |
* Access another process' address space. |
26996 |
* - source/target buffer must be kernel space |
26997 |
*/ |
26998 |
@@ -95986,10 +101932,10 @@ index 431fd7c..8674512 100644 |
26999 |
struct mm_struct *mm; |
27000 |
|
27001 |
diff --git a/mm/page-writeback.c b/mm/page-writeback.c |
27002 |
-index f972182..e7f7c07 100644 |
27003 |
+index e0c9430..3c6bf79 100644 |
27004 |
--- a/mm/page-writeback.c |
27005 |
+++ b/mm/page-writeback.c |
27006 |
-@@ -685,7 +685,7 @@ static long long pos_ratio_polynom(unsigned long setpoint, |
27007 |
+@@ -667,7 +667,7 @@ static long long pos_ratio_polynom(unsigned long setpoint, |
27008 |
* card's bdi_dirty may rush to many times higher than bdi_setpoint. |
27009 |
* - the bdi dirty thresh drops quickly due to change of JBOD workload |
27010 |
*/ |
27011 |
@@ -95999,7 +101945,7 @@ index f972182..e7f7c07 100644 |
27012 |
unsigned long bg_thresh, |
27013 |
unsigned long dirty, |
27014 |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c |
27015 |
-index e98306f..3311d5e 100644 |
27016 |
+index ef44ad7..1056bc7 100644 |
27017 |
--- a/mm/page_alloc.c |
27018 |
+++ b/mm/page_alloc.c |
27019 |
@@ -61,6 +61,7 @@ |
27020 |
@@ -96010,7 +101956,7 @@ index e98306f..3311d5e 100644 |
27021 |
|
27022 |
#include <asm/sections.h> |
27023 |
#include <asm/tlbflush.h> |
27024 |
-@@ -356,7 +357,7 @@ out: |
27025 |
+@@ -357,7 +358,7 @@ out: |
27026 |
* This usage means that zero-order pages may not be compound. |
27027 |
*/ |
27028 |
|
27029 |
@@ -96019,7 +101965,7 @@ index e98306f..3311d5e 100644 |
27030 |
{ |
27031 |
__free_pages_ok(page, compound_order(page)); |
27032 |
} |
27033 |
-@@ -730,6 +731,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order) |
27034 |
+@@ -745,6 +746,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order) |
27035 |
int i; |
27036 |
int bad = 0; |
27037 |
|
27038 |
@@ -96030,7 +101976,7 @@ index e98306f..3311d5e 100644 |
27039 |
trace_mm_page_free(page, order); |
27040 |
kmemcheck_free_shadow(page, order); |
27041 |
|
27042 |
-@@ -746,6 +751,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order) |
27043 |
+@@ -761,6 +766,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order) |
27044 |
debug_check_no_obj_freed(page_address(page), |
27045 |
PAGE_SIZE << order); |
27046 |
} |
27047 |
@@ -96043,7 +101989,7 @@ index e98306f..3311d5e 100644 |
27048 |
arch_free_page(page, order); |
27049 |
kernel_map_pages(page, 1 << order, 0); |
27050 |
|
27051 |
-@@ -768,6 +779,20 @@ static void __free_pages_ok(struct page *page, unsigned int order) |
27052 |
+@@ -784,6 +795,20 @@ static void __free_pages_ok(struct page *page, unsigned int order) |
27053 |
local_irq_restore(flags); |
27054 |
} |
27055 |
|
27056 |
@@ -96064,7 +102010,7 @@ index e98306f..3311d5e 100644 |
27057 |
void __init __free_pages_bootmem(struct page *page, unsigned int order) |
27058 |
{ |
27059 |
unsigned int nr_pages = 1 << order; |
27060 |
-@@ -783,6 +808,19 @@ void __init __free_pages_bootmem(struct page *page, unsigned int order) |
27061 |
+@@ -799,6 +824,19 @@ void __init __free_pages_bootmem(struct page *page, unsigned int order) |
27062 |
__ClearPageReserved(p); |
27063 |
set_page_count(p, 0); |
27064 |
|
27065 |
@@ -96084,7 +102030,7 @@ index e98306f..3311d5e 100644 |
27066 |
page_zone(page)->managed_pages += nr_pages; |
27067 |
set_page_refcounted(page); |
27068 |
__free_pages(page, order); |
27069 |
-@@ -911,8 +949,10 @@ static int prep_new_page(struct page *page, int order, gfp_t gfp_flags) |
27070 |
+@@ -927,8 +965,10 @@ static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags) |
27071 |
arch_alloc_page(page, order); |
27072 |
kernel_map_pages(page, 1 << order, 1); |
27073 |
|
27074 |
@@ -96095,7 +102041,7 @@ index e98306f..3311d5e 100644 |
27075 |
|
27076 |
if (order && (gfp_flags & __GFP_COMP)) |
27077 |
prep_compound_page(page, order); |
27078 |
-@@ -2415,7 +2455,7 @@ static void reset_alloc_batches(struct zonelist *zonelist, |
27079 |
+@@ -2427,7 +2467,7 @@ static void reset_alloc_batches(struct zonelist *zonelist, |
27080 |
continue; |
27081 |
mod_zone_page_state(zone, NR_ALLOC_BATCH, |
27082 |
high_wmark_pages(zone) - low_wmark_pages(zone) - |
27083 |
@@ -96104,19 +102050,6 @@ index e98306f..3311d5e 100644 |
27084 |
} |
27085 |
} |
27086 |
|
27087 |
-diff --git a/mm/page_io.c b/mm/page_io.c |
27088 |
-index 7c59ef6..1358905 100644 |
27089 |
---- a/mm/page_io.c |
27090 |
-+++ b/mm/page_io.c |
27091 |
-@@ -260,7 +260,7 @@ int __swap_writepage(struct page *page, struct writeback_control *wbc, |
27092 |
- struct file *swap_file = sis->swap_file; |
27093 |
- struct address_space *mapping = swap_file->f_mapping; |
27094 |
- struct iovec iov = { |
27095 |
-- .iov_base = kmap(page), |
27096 |
-+ .iov_base = (void __force_user *)kmap(page), |
27097 |
- .iov_len = PAGE_SIZE, |
27098 |
- }; |
27099 |
- |
27100 |
diff --git a/mm/percpu.c b/mm/percpu.c |
27101 |
index 2ddf9a9..f8fc075 100644 |
27102 |
--- a/mm/percpu.c |
27103 |
@@ -96131,7 +102064,7 @@ index 2ddf9a9..f8fc075 100644 |
27104 |
|
27105 |
static const int *pcpu_unit_map __read_mostly; /* cpu -> unit */ |
27106 |
diff --git a/mm/process_vm_access.c b/mm/process_vm_access.c |
27107 |
-index 8505c92..946bfc9 100644 |
27108 |
+index 5077afc..846c9ef 100644 |
27109 |
--- a/mm/process_vm_access.c |
27110 |
+++ b/mm/process_vm_access.c |
27111 |
@@ -13,6 +13,7 @@ |
27112 |
@@ -96142,7 +102075,7 @@ index 8505c92..946bfc9 100644 |
27113 |
#include <linux/ptrace.h> |
27114 |
#include <linux/slab.h> |
27115 |
#include <linux/syscalls.h> |
27116 |
-@@ -161,19 +162,19 @@ static ssize_t process_vm_rw_core(pid_t pid, struct iov_iter *iter, |
27117 |
+@@ -157,19 +158,19 @@ static ssize_t process_vm_rw_core(pid_t pid, struct iov_iter *iter, |
27118 |
ssize_t iov_len; |
27119 |
size_t total_len = iov_iter_count(iter); |
27120 |
|
27121 |
@@ -96169,7 +102102,7 @@ index 8505c92..946bfc9 100644 |
27122 |
} |
27123 |
|
27124 |
if (nr_pages == 0) |
27125 |
-@@ -201,6 +202,11 @@ static ssize_t process_vm_rw_core(pid_t pid, struct iov_iter *iter, |
27126 |
+@@ -197,6 +198,11 @@ static ssize_t process_vm_rw_core(pid_t pid, struct iov_iter *iter, |
27127 |
goto free_proc_pages; |
27128 |
} |
27129 |
|
27130 |
@@ -96182,7 +102115,7 @@ index 8505c92..946bfc9 100644 |
27131 |
if (!mm || IS_ERR(mm)) { |
27132 |
rc = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH; |
27133 |
diff --git a/mm/rmap.c b/mm/rmap.c |
27134 |
-index 14d1e28..3777962 100644 |
27135 |
+index 22a4a76..9551288 100644 |
27136 |
--- a/mm/rmap.c |
27137 |
+++ b/mm/rmap.c |
27138 |
@@ -164,6 +164,10 @@ int anon_vma_prepare(struct vm_area_struct *vma) |
27139 |
@@ -96285,7 +102218,7 @@ index 14d1e28..3777962 100644 |
27140 |
|
27141 |
/* |
27142 |
diff --git a/mm/shmem.c b/mm/shmem.c |
27143 |
-index a731cef..1e82984 100644 |
27144 |
+index af68b15..1227320 100644 |
27145 |
--- a/mm/shmem.c |
27146 |
+++ b/mm/shmem.c |
27147 |
@@ -33,7 +33,7 @@ |
27148 |
@@ -96306,7 +102239,7 @@ index a731cef..1e82984 100644 |
27149 |
|
27150 |
/* |
27151 |
* shmem_fallocate communicates with shmem_fault or shmem_writepage via |
27152 |
-@@ -2218,6 +2218,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = { |
27153 |
+@@ -2219,6 +2219,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = { |
27154 |
static int shmem_xattr_validate(const char *name) |
27155 |
{ |
27156 |
struct { const char *prefix; size_t len; } arr[] = { |
27157 |
@@ -96318,7 +102251,7 @@ index a731cef..1e82984 100644 |
27158 |
{ XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN }, |
27159 |
{ XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN } |
27160 |
}; |
27161 |
-@@ -2273,6 +2278,15 @@ static int shmem_setxattr(struct dentry *dentry, const char *name, |
27162 |
+@@ -2274,6 +2279,15 @@ static int shmem_setxattr(struct dentry *dentry, const char *name, |
27163 |
if (err) |
27164 |
return err; |
27165 |
|
27166 |
@@ -96334,7 +102267,7 @@ index a731cef..1e82984 100644 |
27167 |
return simple_xattr_set(&info->xattrs, name, value, size, flags); |
27168 |
} |
27169 |
|
27170 |
-@@ -2585,8 +2599,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent) |
27171 |
+@@ -2586,8 +2600,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent) |
27172 |
int err = -ENOMEM; |
27173 |
|
27174 |
/* Round up to L1_CACHE_BYTES to resist false sharing */ |
27175 |
@@ -96345,7 +102278,7 @@ index a731cef..1e82984 100644 |
27176 |
return -ENOMEM; |
27177 |
|
27178 |
diff --git a/mm/slab.c b/mm/slab.c |
27179 |
-index 9432556..e0dc685 100644 |
27180 |
+index 3070b92..bcfff83 100644 |
27181 |
--- a/mm/slab.c |
27182 |
+++ b/mm/slab.c |
27183 |
@@ -311,10 +311,12 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent) |
27184 |
@@ -96398,7 +102331,7 @@ index 9432556..e0dc685 100644 |
27185 |
|
27186 |
slab_early_init = 0; |
27187 |
|
27188 |
-@@ -3525,6 +3529,21 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp, |
27189 |
+@@ -3512,6 +3516,21 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp, |
27190 |
struct array_cache *ac = cpu_cache_get(cachep); |
27191 |
|
27192 |
check_irq_off(); |
27193 |
@@ -96420,7 +102353,7 @@ index 9432556..e0dc685 100644 |
27194 |
kmemleak_free_recursive(objp, cachep->flags); |
27195 |
objp = cache_free_debugcheck(cachep, objp, caller); |
27196 |
|
27197 |
-@@ -3748,6 +3767,7 @@ void kfree(const void *objp) |
27198 |
+@@ -3735,6 +3754,7 @@ void kfree(const void *objp) |
27199 |
|
27200 |
if (unlikely(ZERO_OR_NULL_PTR(objp))) |
27201 |
return; |
27202 |
@@ -96428,7 +102361,7 @@ index 9432556..e0dc685 100644 |
27203 |
local_irq_save(flags); |
27204 |
kfree_debugcheck(objp); |
27205 |
c = virt_to_cache(objp); |
27206 |
-@@ -4189,14 +4209,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep) |
27207 |
+@@ -4176,14 +4196,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep) |
27208 |
} |
27209 |
/* cpu stats */ |
27210 |
{ |
27211 |
@@ -96455,7 +102388,7 @@ index 9432556..e0dc685 100644 |
27212 |
#endif |
27213 |
} |
27214 |
|
27215 |
-@@ -4417,13 +4445,69 @@ static const struct file_operations proc_slabstats_operations = { |
27216 |
+@@ -4404,13 +4432,69 @@ static const struct file_operations proc_slabstats_operations = { |
27217 |
static int __init slab_proc_init(void) |
27218 |
{ |
27219 |
#ifdef CONFIG_DEBUG_SLAB_LEAK |
27220 |
@@ -96527,7 +102460,7 @@ index 9432556..e0dc685 100644 |
27221 |
* ksize - get the actual amount of memory allocated for a given object |
27222 |
* @objp: Pointer to the object |
27223 |
diff --git a/mm/slab.h b/mm/slab.h |
27224 |
-index 6bd4c35..97565a1 100644 |
27225 |
+index 961a3fb..6b12514 100644 |
27226 |
--- a/mm/slab.h |
27227 |
+++ b/mm/slab.h |
27228 |
@@ -32,6 +32,15 @@ extern struct list_head slab_caches; |
27229 |
@@ -96556,7 +102489,7 @@ index 6bd4c35..97565a1 100644 |
27230 |
|
27231 |
#if defined(CONFIG_DEBUG_SLAB) |
27232 |
#define SLAB_DEBUG_FLAGS (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER) |
27233 |
-@@ -245,6 +255,9 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x) |
27234 |
+@@ -251,6 +261,9 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x) |
27235 |
return s; |
27236 |
|
27237 |
page = virt_to_head_page(x); |
27238 |
@@ -96567,7 +102500,7 @@ index 6bd4c35..97565a1 100644 |
27239 |
if (slab_equal_or_root(cachep, s)) |
27240 |
return cachep; |
27241 |
diff --git a/mm/slab_common.c b/mm/slab_common.c |
27242 |
-index b810fba..ae882bf 100644 |
27243 |
+index d31c4ba..1121296 100644 |
27244 |
--- a/mm/slab_common.c |
27245 |
+++ b/mm/slab_common.c |
27246 |
@@ -23,11 +23,22 @@ |
27247 |
@@ -96601,10 +102534,10 @@ index b810fba..ae882bf 100644 |
27248 |
- s->refcount = 1; |
27249 |
+ atomic_set(&s->refcount, 1); |
27250 |
list_add(&s->list, &slab_caches); |
27251 |
- memcg_register_cache(s); |
27252 |
out: |
27253 |
-@@ -334,8 +345,7 @@ void kmem_cache_destroy(struct kmem_cache *s) |
27254 |
- get_online_cpus(); |
27255 |
+ if (err) |
27256 |
+@@ -339,8 +350,7 @@ void kmem_cache_destroy(struct kmem_cache *s) |
27257 |
+ |
27258 |
mutex_lock(&slab_mutex); |
27259 |
|
27260 |
- s->refcount--; |
27261 |
@@ -96612,8 +102545,8 @@ index b810fba..ae882bf 100644 |
27262 |
+ if (!atomic_dec_and_test(&s->refcount)) |
27263 |
goto out_unlock; |
27264 |
|
27265 |
- if (kmem_cache_destroy_memcg_children(s) != 0) |
27266 |
-@@ -358,7 +368,7 @@ void kmem_cache_destroy(struct kmem_cache *s) |
27267 |
+ if (memcg_cleanup_cache_params(s) != 0) |
27268 |
+@@ -360,7 +370,7 @@ void kmem_cache_destroy(struct kmem_cache *s) |
27269 |
rcu_barrier(); |
27270 |
|
27271 |
memcg_free_cache_params(s); |
27272 |
@@ -96622,7 +102555,7 @@ index b810fba..ae882bf 100644 |
27273 |
sysfs_slab_remove(s); |
27274 |
#else |
27275 |
slab_kmem_cache_release(s); |
27276 |
-@@ -393,7 +403,7 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t siz |
27277 |
+@@ -416,7 +426,7 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t siz |
27278 |
panic("Creation of kmalloc slab %s size=%zu failed. Reason %d\n", |
27279 |
name, size, err); |
27280 |
|
27281 |
@@ -96631,7 +102564,7 @@ index b810fba..ae882bf 100644 |
27282 |
} |
27283 |
|
27284 |
struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size, |
27285 |
-@@ -406,7 +416,7 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size, |
27286 |
+@@ -429,7 +439,7 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size, |
27287 |
|
27288 |
create_boot_cache(s, name, size, flags); |
27289 |
list_add(&s->list, &slab_caches); |
27290 |
@@ -96640,7 +102573,7 @@ index b810fba..ae882bf 100644 |
27291 |
return s; |
27292 |
} |
27293 |
|
27294 |
-@@ -418,6 +428,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; |
27295 |
+@@ -441,6 +451,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1]; |
27296 |
EXPORT_SYMBOL(kmalloc_dma_caches); |
27297 |
#endif |
27298 |
|
27299 |
@@ -96652,7 +102585,7 @@ index b810fba..ae882bf 100644 |
27300 |
/* |
27301 |
* Conversion table for small slabs sizes / 8 to the index in the |
27302 |
* kmalloc array. This is necessary for slabs < 192 since we have non power |
27303 |
-@@ -482,6 +497,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags) |
27304 |
+@@ -505,6 +520,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags) |
27305 |
return kmalloc_dma_caches[index]; |
27306 |
|
27307 |
#endif |
27308 |
@@ -96666,7 +102599,7 @@ index b810fba..ae882bf 100644 |
27309 |
return kmalloc_caches[index]; |
27310 |
} |
27311 |
|
27312 |
-@@ -538,7 +560,7 @@ void __init create_kmalloc_caches(unsigned long flags) |
27313 |
+@@ -561,7 +583,7 @@ void __init create_kmalloc_caches(unsigned long flags) |
27314 |
for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) { |
27315 |
if (!kmalloc_caches[i]) { |
27316 |
kmalloc_caches[i] = create_kmalloc_cache(NULL, |
27317 |
@@ -96675,7 +102608,7 @@ index b810fba..ae882bf 100644 |
27318 |
} |
27319 |
|
27320 |
/* |
27321 |
-@@ -547,10 +569,10 @@ void __init create_kmalloc_caches(unsigned long flags) |
27322 |
+@@ -570,10 +592,10 @@ void __init create_kmalloc_caches(unsigned long flags) |
27323 |
* earlier power of two caches |
27324 |
*/ |
27325 |
if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6) |
27326 |
@@ -96688,7 +102621,7 @@ index b810fba..ae882bf 100644 |
27327 |
} |
27328 |
|
27329 |
/* Kmalloc array is now usable */ |
27330 |
-@@ -583,6 +605,23 @@ void __init create_kmalloc_caches(unsigned long flags) |
27331 |
+@@ -606,6 +628,23 @@ void __init create_kmalloc_caches(unsigned long flags) |
27332 |
} |
27333 |
} |
27334 |
#endif |
27335 |
@@ -96712,7 +102645,7 @@ index b810fba..ae882bf 100644 |
27336 |
} |
27337 |
#endif /* !CONFIG_SLOB */ |
27338 |
|
27339 |
-@@ -623,6 +662,9 @@ void print_slabinfo_header(struct seq_file *m) |
27340 |
+@@ -664,6 +703,9 @@ void print_slabinfo_header(struct seq_file *m) |
27341 |
seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> " |
27342 |
"<error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>"); |
27343 |
seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>"); |
27344 |
@@ -96723,7 +102656,7 @@ index b810fba..ae882bf 100644 |
27345 |
seq_putc(m, '\n'); |
27346 |
} |
27347 |
diff --git a/mm/slob.c b/mm/slob.c |
27348 |
-index 730cad4..8cfd442 100644 |
27349 |
+index 21980e0..ed9a648 100644 |
27350 |
--- a/mm/slob.c |
27351 |
+++ b/mm/slob.c |
27352 |
@@ -157,7 +157,7 @@ static void set_slob(slob_t *s, slobidx_t size, slob_t *next) |
27353 |
@@ -97094,7 +103027,7 @@ index 730cad4..8cfd442 100644 |
27354 |
EXPORT_SYMBOL(kmem_cache_free); |
27355 |
|
27356 |
diff --git a/mm/slub.c b/mm/slub.c |
27357 |
-index 2b1ce69..4a2193f 100644 |
27358 |
+index 7300480..cb92846 100644 |
27359 |
--- a/mm/slub.c |
27360 |
+++ b/mm/slub.c |
27361 |
@@ -207,7 +207,7 @@ struct track { |
27362 |
@@ -97110,12 +103043,12 @@ index 2b1ce69..4a2193f 100644 |
27363 |
if (!t->addr) |
27364 |
return; |
27365 |
|
27366 |
-- printk(KERN_ERR "INFO: %s in %pS age=%lu cpu=%u pid=%d\n", |
27367 |
-+ printk(KERN_ERR "INFO: %s in %pA age=%lu cpu=%u pid=%d\n", |
27368 |
- s, (void *)t->addr, jiffies - t->when, t->cpu, t->pid); |
27369 |
+- pr_err("INFO: %s in %pS age=%lu cpu=%u pid=%d\n", |
27370 |
++ pr_err("INFO: %s in %pA age=%lu cpu=%u pid=%d\n", |
27371 |
+ s, (void *)t->addr, jiffies - t->when, t->cpu, t->pid); |
27372 |
#ifdef CONFIG_STACKTRACE |
27373 |
{ |
27374 |
-@@ -2666,6 +2666,14 @@ static __always_inline void slab_free(struct kmem_cache *s, |
27375 |
+@@ -2673,6 +2673,14 @@ static __always_inline void slab_free(struct kmem_cache *s, |
27376 |
|
27377 |
slab_free_hook(s, x); |
27378 |
|
27379 |
@@ -97130,7 +103063,7 @@ index 2b1ce69..4a2193f 100644 |
27380 |
redo: |
27381 |
/* |
27382 |
* Determine the currently cpus per cpu slab. |
27383 |
-@@ -2733,7 +2741,7 @@ static int slub_min_objects; |
27384 |
+@@ -2740,7 +2748,7 @@ static int slub_min_objects; |
27385 |
* Merge control. If this is set then no merging of slab caches will occur. |
27386 |
* (Could be removed. This was introduced to pacify the merge skeptics.) |
27387 |
*/ |
27388 |
@@ -97139,7 +103072,7 @@ index 2b1ce69..4a2193f 100644 |
27389 |
|
27390 |
/* |
27391 |
* Calculate the order of allocation given an slab object size. |
27392 |
-@@ -3014,6 +3022,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order) |
27393 |
+@@ -3019,6 +3027,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order) |
27394 |
s->inuse = size; |
27395 |
|
27396 |
if (((flags & (SLAB_DESTROY_BY_RCU | SLAB_POISON)) || |
27397 |
@@ -97149,7 +103082,7 @@ index 2b1ce69..4a2193f 100644 |
27398 |
s->ctor)) { |
27399 |
/* |
27400 |
* Relocate free pointer after the object if it is not |
27401 |
-@@ -3343,6 +3354,59 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node) |
27402 |
+@@ -3347,6 +3358,59 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node) |
27403 |
EXPORT_SYMBOL(__kmalloc_node); |
27404 |
#endif |
27405 |
|
27406 |
@@ -97209,7 +103142,7 @@ index 2b1ce69..4a2193f 100644 |
27407 |
size_t ksize(const void *object) |
27408 |
{ |
27409 |
struct page *page; |
27410 |
-@@ -3371,6 +3435,7 @@ void kfree(const void *x) |
27411 |
+@@ -3375,6 +3439,7 @@ void kfree(const void *x) |
27412 |
if (unlikely(ZERO_OR_NULL_PTR(x))) |
27413 |
return; |
27414 |
|
27415 |
@@ -97217,7 +103150,7 @@ index 2b1ce69..4a2193f 100644 |
27416 |
page = virt_to_head_page(x); |
27417 |
if (unlikely(!PageSlab(page))) { |
27418 |
BUG_ON(!PageCompound(page)); |
27419 |
-@@ -3679,7 +3744,7 @@ static int slab_unmergeable(struct kmem_cache *s) |
27420 |
+@@ -3680,7 +3745,7 @@ static int slab_unmergeable(struct kmem_cache *s) |
27421 |
/* |
27422 |
* We may have set a slab to be unmergeable during bootstrap. |
27423 |
*/ |
27424 |
@@ -97226,7 +103159,7 @@ index 2b1ce69..4a2193f 100644 |
27425 |
return 1; |
27426 |
|
27427 |
return 0; |
27428 |
-@@ -3736,7 +3801,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, |
27429 |
+@@ -3737,7 +3802,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, |
27430 |
int i; |
27431 |
struct kmem_cache *c; |
27432 |
|
27433 |
@@ -97235,7 +103168,7 @@ index 2b1ce69..4a2193f 100644 |
27434 |
|
27435 |
/* |
27436 |
* Adjust the object sizes so that we clear |
27437 |
-@@ -3755,7 +3820,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, |
27438 |
+@@ -3756,7 +3821,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align, |
27439 |
} |
27440 |
|
27441 |
if (sysfs_slab_alias(s, name)) { |
27442 |
@@ -97244,7 +103177,7 @@ index 2b1ce69..4a2193f 100644 |
27443 |
s = NULL; |
27444 |
} |
27445 |
} |
27446 |
-@@ -3872,7 +3937,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags, |
27447 |
+@@ -3873,7 +3938,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags, |
27448 |
} |
27449 |
#endif |
27450 |
|
27451 |
@@ -97265,7 +103198,7 @@ index 2b1ce69..4a2193f 100644 |
27452 |
else |
27453 |
len += sprintf(buf + len, "<not-available>"); |
27454 |
|
27455 |
-@@ -4261,12 +4330,12 @@ static void resiliency_test(void) |
27456 |
+@@ -4258,12 +4327,12 @@ static void resiliency_test(void) |
27457 |
validate_slab_cache(kmalloc_caches[9]); |
27458 |
} |
27459 |
#else |
27460 |
@@ -97280,7 +103213,7 @@ index 2b1ce69..4a2193f 100644 |
27461 |
enum slab_stat_type { |
27462 |
SL_ALL, /* All slabs */ |
27463 |
SL_PARTIAL, /* Only partially allocated slabs */ |
27464 |
-@@ -4506,13 +4575,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf) |
27465 |
+@@ -4503,13 +4572,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf) |
27466 |
{ |
27467 |
if (!s->ctor) |
27468 |
return 0; |
27469 |
@@ -97299,7 +103232,7 @@ index 2b1ce69..4a2193f 100644 |
27470 |
} |
27471 |
SLAB_ATTR_RO(aliases); |
27472 |
|
27473 |
-@@ -4600,6 +4673,14 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf) |
27474 |
+@@ -4597,6 +4670,14 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf) |
27475 |
SLAB_ATTR_RO(cache_dma); |
27476 |
#endif |
27477 |
|
27478 |
@@ -97314,7 +103247,7 @@ index 2b1ce69..4a2193f 100644 |
27479 |
static ssize_t destroy_by_rcu_show(struct kmem_cache *s, char *buf) |
27480 |
{ |
27481 |
return sprintf(buf, "%d\n", !!(s->flags & SLAB_DESTROY_BY_RCU)); |
27482 |
-@@ -4934,6 +5015,9 @@ static struct attribute *slab_attrs[] = { |
27483 |
+@@ -4931,6 +5012,9 @@ static struct attribute *slab_attrs[] = { |
27484 |
#ifdef CONFIG_ZONE_DMA |
27485 |
&cache_dma_attr.attr, |
27486 |
#endif |
27487 |
@@ -97324,7 +103257,7 @@ index 2b1ce69..4a2193f 100644 |
27488 |
#ifdef CONFIG_NUMA |
27489 |
&remote_node_defrag_ratio_attr.attr, |
27490 |
#endif |
27491 |
-@@ -5184,6 +5268,7 @@ static char *create_unique_id(struct kmem_cache *s) |
27492 |
+@@ -5181,6 +5265,7 @@ static char *create_unique_id(struct kmem_cache *s) |
27493 |
return name; |
27494 |
} |
27495 |
|
27496 |
@@ -97332,7 +103265,7 @@ index 2b1ce69..4a2193f 100644 |
27497 |
static int sysfs_slab_add(struct kmem_cache *s) |
27498 |
{ |
27499 |
int err; |
27500 |
-@@ -5257,6 +5342,7 @@ void sysfs_slab_remove(struct kmem_cache *s) |
27501 |
+@@ -5254,6 +5339,7 @@ void sysfs_slab_remove(struct kmem_cache *s) |
27502 |
kobject_del(&s->kobj); |
27503 |
kobject_put(&s->kobj); |
27504 |
} |
27505 |
@@ -97340,7 +103273,7 @@ index 2b1ce69..4a2193f 100644 |
27506 |
|
27507 |
/* |
27508 |
* Need to buffer aliases during bootup until sysfs becomes |
27509 |
-@@ -5270,6 +5356,7 @@ struct saved_alias { |
27510 |
+@@ -5267,6 +5353,7 @@ struct saved_alias { |
27511 |
|
27512 |
static struct saved_alias *alias_list; |
27513 |
|
27514 |
@@ -97348,7 +103281,7 @@ index 2b1ce69..4a2193f 100644 |
27515 |
static int sysfs_slab_alias(struct kmem_cache *s, const char *name) |
27516 |
{ |
27517 |
struct saved_alias *al; |
27518 |
-@@ -5292,6 +5379,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name) |
27519 |
+@@ -5289,6 +5376,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name) |
27520 |
alias_list = al; |
27521 |
return 0; |
27522 |
} |
27523 |
@@ -97392,7 +103325,7 @@ index d1b48b6..6e8590e 100644 |
27524 |
} |
27525 |
} |
27526 |
diff --git a/mm/swap.c b/mm/swap.c |
27527 |
-index 9ce43ba..43bdc4c 100644 |
27528 |
+index 9e8e347..3c22e0f 100644 |
27529 |
--- a/mm/swap.c |
27530 |
+++ b/mm/swap.c |
27531 |
@@ -31,6 +31,7 @@ |
27532 |
@@ -97413,10 +103346,10 @@ index 9ce43ba..43bdc4c 100644 |
27533 |
} |
27534 |
|
27535 |
diff --git a/mm/swapfile.c b/mm/swapfile.c |
27536 |
-index 4a7f7e6..22cddf5 100644 |
27537 |
+index 4c524f7..f7601f17 100644 |
27538 |
--- a/mm/swapfile.c |
27539 |
+++ b/mm/swapfile.c |
27540 |
-@@ -66,7 +66,7 @@ static DEFINE_MUTEX(swapon_mutex); |
27541 |
+@@ -84,7 +84,7 @@ static DEFINE_MUTEX(swapon_mutex); |
27542 |
|
27543 |
static DECLARE_WAIT_QUEUE_HEAD(proc_poll_wait); |
27544 |
/* Activity counter to indicate that a swapon or swapoff has occurred */ |
27545 |
@@ -97425,7 +103358,7 @@ index 4a7f7e6..22cddf5 100644 |
27546 |
|
27547 |
static inline unsigned char swap_count(unsigned char ent) |
27548 |
{ |
27549 |
-@@ -1959,7 +1959,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) |
27550 |
+@@ -1945,7 +1945,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) |
27551 |
spin_unlock(&swap_lock); |
27552 |
|
27553 |
err = 0; |
27554 |
@@ -97434,7 +103367,7 @@ index 4a7f7e6..22cddf5 100644 |
27555 |
wake_up_interruptible(&proc_poll_wait); |
27556 |
|
27557 |
out_dput: |
27558 |
-@@ -1976,8 +1976,8 @@ static unsigned swaps_poll(struct file *file, poll_table *wait) |
27559 |
+@@ -1962,8 +1962,8 @@ static unsigned swaps_poll(struct file *file, poll_table *wait) |
27560 |
|
27561 |
poll_wait(file, &proc_poll_wait, wait); |
27562 |
|
27563 |
@@ -97445,7 +103378,7 @@ index 4a7f7e6..22cddf5 100644 |
27564 |
return POLLIN | POLLRDNORM | POLLERR | POLLPRI; |
27565 |
} |
27566 |
|
27567 |
-@@ -2075,7 +2075,7 @@ static int swaps_open(struct inode *inode, struct file *file) |
27568 |
+@@ -2061,7 +2061,7 @@ static int swaps_open(struct inode *inode, struct file *file) |
27569 |
return ret; |
27570 |
|
27571 |
seq = file->private_data; |
27572 |
@@ -97454,7 +103387,7 @@ index 4a7f7e6..22cddf5 100644 |
27573 |
return 0; |
27574 |
} |
27575 |
|
27576 |
-@@ -2534,7 +2534,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) |
27577 |
+@@ -2521,7 +2521,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) |
27578 |
(frontswap_map) ? "FS" : ""); |
27579 |
|
27580 |
mutex_unlock(&swapon_mutex); |
27581 |
@@ -97491,7 +103424,7 @@ index d5ea733..e8953f9 100644 |
27582 |
|
27583 |
if (len > buflen) |
27584 |
diff --git a/mm/vmalloc.c b/mm/vmalloc.c |
27585 |
-index bf233b2..1dfa1bc 100644 |
27586 |
+index f64632b..e8c52e7 100644 |
27587 |
--- a/mm/vmalloc.c |
27588 |
+++ b/mm/vmalloc.c |
27589 |
@@ -40,6 +40,21 @@ struct vfree_deferred { |
27590 |
@@ -97541,7 +103474,7 @@ index bf233b2..1dfa1bc 100644 |
27591 |
+ void *lowmem_stack = ACCESS_ONCE(x->lowmem_stack); |
27592 |
+ llnode = llist_next(llnode); |
27593 |
+ __vunmap(stack, 0); |
27594 |
-+ free_memcg_kmem_pages((unsigned long)lowmem_stack, THREAD_SIZE_ORDER); |
27595 |
++ free_kmem_pages((unsigned long)lowmem_stack, THREAD_SIZE_ORDER); |
27596 |
+ } |
27597 |
+} |
27598 |
+#endif |
27599 |
@@ -97673,7 +103606,7 @@ index bf233b2..1dfa1bc 100644 |
27600 |
} |
27601 |
|
27602 |
/* Import existing vmlist entries. */ |
27603 |
-@@ -1317,6 +1396,16 @@ static struct vm_struct *__get_vm_area_node(unsigned long size, |
27604 |
+@@ -1318,6 +1397,16 @@ static struct vm_struct *__get_vm_area_node(unsigned long size, |
27605 |
struct vm_struct *area; |
27606 |
|
27607 |
BUG_ON(in_interrupt()); |
27608 |
@@ -97690,7 +103623,7 @@ index bf233b2..1dfa1bc 100644 |
27609 |
if (flags & VM_IOREMAP) |
27610 |
align = 1ul << clamp(fls(size), PAGE_SHIFT, IOREMAP_MAX_ORDER); |
27611 |
|
27612 |
-@@ -1522,6 +1611,23 @@ void vunmap(const void *addr) |
27613 |
+@@ -1523,6 +1612,23 @@ void vunmap(const void *addr) |
27614 |
} |
27615 |
EXPORT_SYMBOL(vunmap); |
27616 |
|
27617 |
@@ -97706,7 +103639,7 @@ index bf233b2..1dfa1bc 100644 |
27618 |
+ schedule_work(&p->wq); |
27619 |
+ } else { |
27620 |
+ __vunmap(task->stack, 0); |
27621 |
-+ free_memcg_kmem_pages((unsigned long)task->lowmem_stack, THREAD_SIZE_ORDER); |
27622 |
++ free_kmem_pages((unsigned long)task->lowmem_stack, THREAD_SIZE_ORDER); |
27623 |
+ } |
27624 |
+} |
27625 |
+#endif |
27626 |
@@ -97714,7 +103647,7 @@ index bf233b2..1dfa1bc 100644 |
27627 |
/** |
27628 |
* vmap - map an array of pages into virtually contiguous space |
27629 |
* @pages: array of page pointers |
27630 |
-@@ -1542,6 +1648,11 @@ void *vmap(struct page **pages, unsigned int count, |
27631 |
+@@ -1543,6 +1649,11 @@ void *vmap(struct page **pages, unsigned int count, |
27632 |
if (count > totalram_pages) |
27633 |
return NULL; |
27634 |
|
27635 |
@@ -97726,7 +103659,7 @@ index bf233b2..1dfa1bc 100644 |
27636 |
area = get_vm_area_caller((count << PAGE_SHIFT), flags, |
27637 |
__builtin_return_address(0)); |
27638 |
if (!area) |
27639 |
-@@ -1642,6 +1753,13 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align, |
27640 |
+@@ -1643,6 +1754,13 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align, |
27641 |
if (!size || (size >> PAGE_SHIFT) > totalram_pages) |
27642 |
goto fail; |
27643 |
|
27644 |
@@ -97740,7 +103673,7 @@ index bf233b2..1dfa1bc 100644 |
27645 |
area = __get_vm_area_node(size, align, VM_ALLOC | VM_UNINITIALIZED, |
27646 |
start, end, node, gfp_mask, caller); |
27647 |
if (!area) |
27648 |
-@@ -1818,10 +1936,9 @@ EXPORT_SYMBOL(vzalloc_node); |
27649 |
+@@ -1819,10 +1937,9 @@ EXPORT_SYMBOL(vzalloc_node); |
27650 |
* For tight control over page level allocator and protection flags |
27651 |
* use __vmalloc() instead. |
27652 |
*/ |
27653 |
@@ -97752,7 +103685,7 @@ index bf233b2..1dfa1bc 100644 |
27654 |
NUMA_NO_NODE, __builtin_return_address(0)); |
27655 |
} |
27656 |
|
27657 |
-@@ -2128,6 +2245,8 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr, |
27658 |
+@@ -2129,6 +2246,8 @@ int remap_vmalloc_range_partial(struct vm_area_struct *vma, unsigned long uaddr, |
27659 |
{ |
27660 |
struct vm_struct *area; |
27661 |
|
27662 |
@@ -97761,7 +103694,7 @@ index bf233b2..1dfa1bc 100644 |
27663 |
size = PAGE_ALIGN(size); |
27664 |
|
27665 |
if (!PAGE_ALIGNED(uaddr) || !PAGE_ALIGNED(kaddr)) |
27666 |
-@@ -2610,7 +2729,11 @@ static int s_show(struct seq_file *m, void *p) |
27667 |
+@@ -2611,7 +2730,11 @@ static int s_show(struct seq_file *m, void *p) |
27668 |
v->addr, v->addr + v->size, v->size); |
27669 |
|
27670 |
if (v->caller) |
27671 |
@@ -97774,7 +103707,7 @@ index bf233b2..1dfa1bc 100644 |
27672 |
if (v->nr_pages) |
27673 |
seq_printf(m, " pages=%d", v->nr_pages); |
27674 |
diff --git a/mm/vmstat.c b/mm/vmstat.c |
27675 |
-index 302dd07..3841f1c 100644 |
27676 |
+index b37bd49..4d7b3da 100644 |
27677 |
--- a/mm/vmstat.c |
27678 |
+++ b/mm/vmstat.c |
27679 |
@@ -20,6 +20,7 @@ |
27680 |
@@ -97794,7 +103727,7 @@ index 302dd07..3841f1c 100644 |
27681 |
EXPORT_SYMBOL(vm_stat); |
27682 |
|
27683 |
#ifdef CONFIG_SMP |
27684 |
-@@ -423,7 +424,7 @@ static inline void fold_diff(int *diff) |
27685 |
+@@ -425,7 +426,7 @@ static inline void fold_diff(int *diff) |
27686 |
|
27687 |
for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) |
27688 |
if (diff[i]) |
27689 |
@@ -97803,7 +103736,7 @@ index 302dd07..3841f1c 100644 |
27690 |
} |
27691 |
|
27692 |
/* |
27693 |
-@@ -455,7 +456,7 @@ static void refresh_cpu_vm_stats(void) |
27694 |
+@@ -457,7 +458,7 @@ static void refresh_cpu_vm_stats(void) |
27695 |
v = this_cpu_xchg(p->vm_stat_diff[i], 0); |
27696 |
if (v) { |
27697 |
|
27698 |
@@ -97812,7 +103745,7 @@ index 302dd07..3841f1c 100644 |
27699 |
global_diff[i] += v; |
27700 |
#ifdef CONFIG_NUMA |
27701 |
/* 3 seconds idle till flush */ |
27702 |
-@@ -517,7 +518,7 @@ void cpu_vm_stats_fold(int cpu) |
27703 |
+@@ -519,7 +520,7 @@ void cpu_vm_stats_fold(int cpu) |
27704 |
|
27705 |
v = p->vm_stat_diff[i]; |
27706 |
p->vm_stat_diff[i] = 0; |
27707 |
@@ -97821,7 +103754,7 @@ index 302dd07..3841f1c 100644 |
27708 |
global_diff[i] += v; |
27709 |
} |
27710 |
} |
27711 |
-@@ -537,8 +538,8 @@ void drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset) |
27712 |
+@@ -539,8 +540,8 @@ void drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset) |
27713 |
if (pset->vm_stat_diff[i]) { |
27714 |
int v = pset->vm_stat_diff[i]; |
27715 |
pset->vm_stat_diff[i] = 0; |
27716 |
@@ -97832,7 +103765,7 @@ index 302dd07..3841f1c 100644 |
27717 |
} |
27718 |
} |
27719 |
#endif |
27720 |
-@@ -1156,10 +1157,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos) |
27721 |
+@@ -1162,10 +1163,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos) |
27722 |
stat_items_size += sizeof(struct vm_event_state); |
27723 |
#endif |
27724 |
|
27725 |
@@ -97856,7 +103789,7 @@ index 302dd07..3841f1c 100644 |
27726 |
for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) |
27727 |
v[i] = global_page_state(i); |
27728 |
v += NR_VM_ZONE_STAT_ITEMS; |
27729 |
-@@ -1308,10 +1321,16 @@ static int __init setup_vmstat(void) |
27730 |
+@@ -1314,10 +1327,16 @@ static int __init setup_vmstat(void) |
27731 |
cpu_notifier_register_done(); |
27732 |
#endif |
27733 |
#ifdef CONFIG_PROC_FS |
27734 |
@@ -97966,6 +103899,32 @@ index 80d08f6..de63fd1 100644 |
27735 |
set_fs(oldfs); |
27736 |
|
27737 |
if (ret <= 0 && ret != -ERESTARTSYS && ret != -EAGAIN) |
27738 |
+diff --git a/net/Kconfig b/net/Kconfig |
27739 |
+index d92afe4..ab63892 100644 |
27740 |
+--- a/net/Kconfig |
27741 |
++++ b/net/Kconfig |
27742 |
+@@ -89,12 +89,8 @@ config NETWORK_SECMARK |
27743 |
+ to nfmark, but designated for security purposes. |
27744 |
+ If you are unsure how to answer this question, answer N. |
27745 |
+ |
27746 |
+-config NET_PTP_CLASSIFY |
27747 |
+- def_bool n |
27748 |
+- |
27749 |
+ config NETWORK_PHY_TIMESTAMPING |
27750 |
+ bool "Timestamping in PHY devices" |
27751 |
+- select NET_PTP_CLASSIFY |
27752 |
+ help |
27753 |
+ This allows timestamping of network packets by PHYs with |
27754 |
+ hardware timestamping capabilities. This option adds some |
27755 |
+@@ -269,7 +265,7 @@ config BQL |
27756 |
+ config BPF_JIT |
27757 |
+ bool "enable BPF Just In Time compiler" |
27758 |
+ depends on HAVE_BPF_JIT |
27759 |
+- depends on MODULES |
27760 |
++ depends on MODULES && X86 |
27761 |
+ ---help--- |
27762 |
+ Berkeley Packet Filter filtering capabilities are normally handled |
27763 |
+ by an interpreter. This option allows kernel to generate a native |
27764 |
diff --git a/net/appletalk/atalk_proc.c b/net/appletalk/atalk_proc.c |
27765 |
index af46bc4..f9adfcd 100644 |
27766 |
--- a/net/appletalk/atalk_proc.c |
27767 |
@@ -98205,7 +104164,7 @@ index 022d18a..919daff 100644 |
27768 |
frag_header.no = 0; |
27769 |
frag_header.total_size = htons(skb->len); |
27770 |
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c |
27771 |
-index 744a59b..8fd037c 100644 |
27772 |
+index cbd677f..b783347 100644 |
27773 |
--- a/net/batman-adv/soft-interface.c |
27774 |
+++ b/net/batman-adv/soft-interface.c |
27775 |
@@ -296,7 +296,7 @@ send: |
27776 |
@@ -98217,7 +104176,7 @@ index 744a59b..8fd037c 100644 |
27777 |
bcast_packet->seqno = htonl(seqno); |
27778 |
|
27779 |
batadv_add_bcast_packet_to_list(bat_priv, skb, brd_delay); |
27780 |
-@@ -729,7 +729,7 @@ static int batadv_softif_init_late(struct net_device *dev) |
27781 |
+@@ -761,7 +761,7 @@ static int batadv_softif_init_late(struct net_device *dev) |
27782 |
atomic_set(&bat_priv->batman_queue_left, BATADV_BATMAN_QUEUE_LEN); |
27783 |
|
27784 |
atomic_set(&bat_priv->mesh_state, BATADV_MESH_INACTIVE); |
27785 |
@@ -98226,7 +104185,7 @@ index 744a59b..8fd037c 100644 |
27786 |
atomic_set(&bat_priv->tt.vn, 0); |
27787 |
atomic_set(&bat_priv->tt.local_changes, 0); |
27788 |
atomic_set(&bat_priv->tt.ogm_append_cnt, 0); |
27789 |
-@@ -743,7 +743,7 @@ static int batadv_softif_init_late(struct net_device *dev) |
27790 |
+@@ -775,7 +775,7 @@ static int batadv_softif_init_late(struct net_device *dev) |
27791 |
|
27792 |
/* randomize initial seqno to avoid collision */ |
27793 |
get_random_bytes(&random_seqno, sizeof(random_seqno)); |
27794 |
@@ -98236,7 +104195,7 @@ index 744a59b..8fd037c 100644 |
27795 |
bat_priv->primary_if = NULL; |
27796 |
bat_priv->num_ifaces = 0; |
27797 |
diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h |
27798 |
-index 34891a5..3cfece0 100644 |
27799 |
+index 8854c05..ee5d5497 100644 |
27800 |
--- a/net/batman-adv/types.h |
27801 |
+++ b/net/batman-adv/types.h |
27802 |
@@ -67,7 +67,7 @@ enum batadv_dhcp_recipient { |
27803 |
@@ -98248,7 +104207,7 @@ index 34891a5..3cfece0 100644 |
27804 |
}; |
27805 |
|
27806 |
/** |
27807 |
-@@ -766,7 +766,7 @@ struct batadv_priv { |
27808 |
+@@ -768,7 +768,7 @@ struct batadv_priv { |
27809 |
atomic_t bonding; |
27810 |
atomic_t fragmentation; |
27811 |
atomic_t packet_size_max; |
27812 |
@@ -98257,7 +104216,7 @@ index 34891a5..3cfece0 100644 |
27813 |
#ifdef CONFIG_BATMAN_ADV_BLA |
27814 |
atomic_t bridge_loop_avoidance; |
27815 |
#endif |
27816 |
-@@ -785,7 +785,7 @@ struct batadv_priv { |
27817 |
+@@ -787,7 +787,7 @@ struct batadv_priv { |
27818 |
#endif |
27819 |
uint32_t isolation_mark; |
27820 |
uint32_t isolation_mark_mask; |
27821 |
@@ -98267,10 +104226,10 @@ index 34891a5..3cfece0 100644 |
27822 |
atomic_t batman_queue_left; |
27823 |
char num_ifaces; |
27824 |
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c |
27825 |
-index b9a418e..2af862a 100644 |
27826 |
+index 80d25c1..aa99a98 100644 |
27827 |
--- a/net/bluetooth/hci_sock.c |
27828 |
+++ b/net/bluetooth/hci_sock.c |
27829 |
-@@ -1053,7 +1053,7 @@ static int hci_sock_setsockopt(struct socket *sock, int level, int optname, |
27830 |
+@@ -1044,7 +1044,7 @@ static int hci_sock_setsockopt(struct socket *sock, int level, int optname, |
27831 |
uf.event_mask[1] = *((u32 *) f->event_mask + 1); |
27832 |
} |
27833 |
|
27834 |
@@ -98280,10 +104239,10 @@ index b9a418e..2af862a 100644 |
27835 |
err = -EFAULT; |
27836 |
break; |
27837 |
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c |
27838 |
-index 1c97b7a..9171d69 100644 |
27839 |
+index 323f23c..5e27529 100644 |
27840 |
--- a/net/bluetooth/l2cap_core.c |
27841 |
+++ b/net/bluetooth/l2cap_core.c |
27842 |
-@@ -3542,8 +3542,10 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, |
27843 |
+@@ -3548,8 +3548,10 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, |
27844 |
break; |
27845 |
|
27846 |
case L2CAP_CONF_RFC: |
27847 |
@@ -98370,7 +104329,7 @@ index c603a5e..7f08991 100644 |
27848 |
err = -EFAULT; |
27849 |
break; |
27850 |
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c |
27851 |
-index 403ec09..a21a003 100644 |
27852 |
+index 8e385a0..a5bdd8e 100644 |
27853 |
--- a/net/bluetooth/rfcomm/tty.c |
27854 |
+++ b/net/bluetooth/rfcomm/tty.c |
27855 |
@@ -752,7 +752,7 @@ static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp) |
27856 |
@@ -98466,10 +104425,10 @@ index 0f45522..dab651f 100644 |
27857 |
list_del(&p->list); |
27858 |
goto out; |
27859 |
diff --git a/net/can/af_can.c b/net/can/af_can.c |
27860 |
-index a27f8aa..67174a3 100644 |
27861 |
+index ce82337..5d17b4d 100644 |
27862 |
--- a/net/can/af_can.c |
27863 |
+++ b/net/can/af_can.c |
27864 |
-@@ -863,7 +863,7 @@ static const struct net_proto_family can_family_ops = { |
27865 |
+@@ -884,7 +884,7 @@ static const struct net_proto_family can_family_ops = { |
27866 |
}; |
27867 |
|
27868 |
/* notifier block for netdevice event */ |
27869 |
@@ -98523,10 +104482,10 @@ index 050a211..bb9fe33 100644 |
27870 |
|
27871 |
if (__rtnl_register(PF_CAN, RTM_GETROUTE, NULL, cgw_dump_jobs, NULL)) { |
27872 |
diff --git a/net/can/proc.c b/net/can/proc.c |
27873 |
-index b543470..d2ddae2 100644 |
27874 |
+index 1a19b98..df2b4ec 100644 |
27875 |
--- a/net/can/proc.c |
27876 |
+++ b/net/can/proc.c |
27877 |
-@@ -468,7 +468,7 @@ static void can_remove_proc_readentry(const char *name) |
27878 |
+@@ -514,7 +514,7 @@ static void can_remove_proc_readentry(const char *name) |
27879 |
void can_init_proc(void) |
27880 |
{ |
27881 |
/* create /proc/net/can directory */ |
27882 |
@@ -98679,176 +104638,2265 @@ index bc8aeef..f9c070c 100644 |
27883 |
struct group_filter __user *kgf; |
27884 |
u32 interface, fmode, numsrc; |
27885 |
|
27886 |
-@@ -651,7 +651,7 @@ int compat_mc_getsockopt(struct sock *sock, int level, int optname, |
27887 |
- char __user *optval, int __user *optlen, |
27888 |
- int (*getsockopt)(struct sock *, int, int, char __user *, int __user *)) |
27889 |
+@@ -651,7 +651,7 @@ int compat_mc_getsockopt(struct sock *sock, int level, int optname, |
27890 |
+ char __user *optval, int __user *optlen, |
27891 |
+ int (*getsockopt)(struct sock *, int, int, char __user *, int __user *)) |
27892 |
+ { |
27893 |
+- struct compat_group_filter __user *gf32 = (void *)optval; |
27894 |
++ struct compat_group_filter __user *gf32 = (void __user *)optval; |
27895 |
+ struct group_filter __user *kgf; |
27896 |
+ int __user *koptlen; |
27897 |
+ u32 interface, fmode, numsrc; |
27898 |
+@@ -804,7 +804,7 @@ COMPAT_SYSCALL_DEFINE2(socketcall, int, call, u32 __user *, args) |
27899 |
+ |
27900 |
+ if (call < SYS_SOCKET || call > SYS_SENDMMSG) |
27901 |
+ return -EINVAL; |
27902 |
+- if (copy_from_user(a, args, nas[call])) |
27903 |
++ if (nas[call] > sizeof a || copy_from_user(a, args, nas[call])) |
27904 |
+ return -EFAULT; |
27905 |
+ a0 = a[0]; |
27906 |
+ a1 = a[1]; |
27907 |
+diff --git a/net/core/Makefile b/net/core/Makefile |
27908 |
+index 71093d9..a8a035b 100644 |
27909 |
+--- a/net/core/Makefile |
27910 |
++++ b/net/core/Makefile |
27911 |
+@@ -21,6 +21,5 @@ obj-$(CONFIG_FIB_RULES) += fib_rules.o |
27912 |
+ obj-$(CONFIG_TRACEPOINTS) += net-traces.o |
27913 |
+ obj-$(CONFIG_NET_DROP_MONITOR) += drop_monitor.o |
27914 |
+ obj-$(CONFIG_NETWORK_PHY_TIMESTAMPING) += timestamping.o |
27915 |
+-obj-$(CONFIG_NET_PTP_CLASSIFY) += ptp_classifier.o |
27916 |
+ obj-$(CONFIG_CGROUP_NET_PRIO) += netprio_cgroup.o |
27917 |
+ obj-$(CONFIG_CGROUP_NET_CLASSID) += netclassid_cgroup.o |
27918 |
+diff --git a/net/core/datagram.c b/net/core/datagram.c |
27919 |
+index 488dd1a..7179f0f 100644 |
27920 |
+--- a/net/core/datagram.c |
27921 |
++++ b/net/core/datagram.c |
27922 |
+@@ -301,7 +301,7 @@ int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags) |
27923 |
+ } |
27924 |
+ |
27925 |
+ kfree_skb(skb); |
27926 |
+- atomic_inc(&sk->sk_drops); |
27927 |
++ atomic_inc_unchecked(&sk->sk_drops); |
27928 |
+ sk_mem_reclaim_partial(sk); |
27929 |
+ |
27930 |
+ return err; |
27931 |
+diff --git a/net/core/dev.c b/net/core/dev.c |
27932 |
+index 367a586..ef2fe17 100644 |
27933 |
+--- a/net/core/dev.c |
27934 |
++++ b/net/core/dev.c |
27935 |
+@@ -1672,14 +1672,14 @@ int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb) |
27936 |
+ { |
27937 |
+ if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) { |
27938 |
+ if (skb_copy_ubufs(skb, GFP_ATOMIC)) { |
27939 |
+- atomic_long_inc(&dev->rx_dropped); |
27940 |
++ atomic_long_inc_unchecked(&dev->rx_dropped); |
27941 |
+ kfree_skb(skb); |
27942 |
+ return NET_RX_DROP; |
27943 |
+ } |
27944 |
+ } |
27945 |
+ |
27946 |
+ if (unlikely(!is_skb_forwardable(dev, skb))) { |
27947 |
+- atomic_long_inc(&dev->rx_dropped); |
27948 |
++ atomic_long_inc_unchecked(&dev->rx_dropped); |
27949 |
+ kfree_skb(skb); |
27950 |
+ return NET_RX_DROP; |
27951 |
+ } |
27952 |
+@@ -2476,7 +2476,7 @@ static int illegal_highdma(struct net_device *dev, struct sk_buff *skb) |
27953 |
+ |
27954 |
+ struct dev_gso_cb { |
27955 |
+ void (*destructor)(struct sk_buff *skb); |
27956 |
+-}; |
27957 |
++} __no_const; |
27958 |
+ |
27959 |
+ #define DEV_GSO_CB(skb) ((struct dev_gso_cb *)(skb)->cb) |
27960 |
+ |
27961 |
+@@ -2932,7 +2932,7 @@ recursion_alert: |
27962 |
+ rc = -ENETDOWN; |
27963 |
+ rcu_read_unlock_bh(); |
27964 |
+ |
27965 |
+- atomic_long_inc(&dev->tx_dropped); |
27966 |
++ atomic_long_inc_unchecked(&dev->tx_dropped); |
27967 |
+ kfree_skb(skb); |
27968 |
+ return rc; |
27969 |
+ out: |
27970 |
+@@ -3276,7 +3276,7 @@ enqueue: |
27971 |
+ |
27972 |
+ local_irq_restore(flags); |
27973 |
+ |
27974 |
+- atomic_long_inc(&skb->dev->rx_dropped); |
27975 |
++ atomic_long_inc_unchecked(&skb->dev->rx_dropped); |
27976 |
+ kfree_skb(skb); |
27977 |
+ return NET_RX_DROP; |
27978 |
+ } |
27979 |
+@@ -3353,7 +3353,7 @@ int netif_rx_ni(struct sk_buff *skb) |
27980 |
+ } |
27981 |
+ EXPORT_SYMBOL(netif_rx_ni); |
27982 |
+ |
27983 |
+-static void net_tx_action(struct softirq_action *h) |
27984 |
++static __latent_entropy void net_tx_action(void) |
27985 |
+ { |
27986 |
+ struct softnet_data *sd = &__get_cpu_var(softnet_data); |
27987 |
+ |
27988 |
+@@ -3686,7 +3686,7 @@ ncls: |
27989 |
+ ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev); |
27990 |
+ } else { |
27991 |
+ drop: |
27992 |
+- atomic_long_inc(&skb->dev->rx_dropped); |
27993 |
++ atomic_long_inc_unchecked(&skb->dev->rx_dropped); |
27994 |
+ kfree_skb(skb); |
27995 |
+ /* Jamal, now you will not able to escape explaining |
27996 |
+ * me how you were going to use this. :-) |
27997 |
+@@ -4406,7 +4406,7 @@ void netif_napi_del(struct napi_struct *napi) |
27998 |
+ } |
27999 |
+ EXPORT_SYMBOL(netif_napi_del); |
28000 |
+ |
28001 |
+-static void net_rx_action(struct softirq_action *h) |
28002 |
++static __latent_entropy void net_rx_action(void) |
28003 |
+ { |
28004 |
+ struct softnet_data *sd = &__get_cpu_var(softnet_data); |
28005 |
+ unsigned long time_limit = jiffies + 2; |
28006 |
+@@ -6403,8 +6403,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, |
28007 |
+ } else { |
28008 |
+ netdev_stats_to_stats64(storage, &dev->stats); |
28009 |
+ } |
28010 |
+- storage->rx_dropped += atomic_long_read(&dev->rx_dropped); |
28011 |
+- storage->tx_dropped += atomic_long_read(&dev->tx_dropped); |
28012 |
++ storage->rx_dropped += atomic_long_read_unchecked(&dev->rx_dropped); |
28013 |
++ storage->tx_dropped += atomic_long_read_unchecked(&dev->tx_dropped); |
28014 |
+ return storage; |
28015 |
+ } |
28016 |
+ EXPORT_SYMBOL(dev_get_stats); |
28017 |
+diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c |
28018 |
+index cf999e0..c59a975 100644 |
28019 |
+--- a/net/core/dev_ioctl.c |
28020 |
++++ b/net/core/dev_ioctl.c |
28021 |
+@@ -366,9 +366,13 @@ void dev_load(struct net *net, const char *name) |
28022 |
+ if (no_module && capable(CAP_NET_ADMIN)) |
28023 |
+ no_module = request_module("netdev-%s", name); |
28024 |
+ if (no_module && capable(CAP_SYS_MODULE)) { |
28025 |
++#ifdef CONFIG_GRKERNSEC_MODHARDEN |
28026 |
++ ___request_module(true, "grsec_modharden_netdev", "%s", name); |
28027 |
++#else |
28028 |
+ if (!request_module("%s", name)) |
28029 |
+ pr_warn("Loading kernel module for a network device with CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-%s instead.\n", |
28030 |
+ name); |
28031 |
++#endif |
28032 |
+ } |
28033 |
+ } |
28034 |
+ EXPORT_SYMBOL(dev_load); |
28035 |
+diff --git a/net/core/filter.c b/net/core/filter.c |
28036 |
+index 1dbf646..0f95703 100644 |
28037 |
+--- a/net/core/filter.c |
28038 |
++++ b/net/core/filter.c |
28039 |
+@@ -1,16 +1,11 @@ |
28040 |
+ /* |
28041 |
+ * Linux Socket Filter - Kernel level socket filtering |
28042 |
+ * |
28043 |
+- * Based on the design of the Berkeley Packet Filter. The new |
28044 |
+- * internal format has been designed by PLUMgrid: |
28045 |
++ * Author: |
28046 |
++ * Jay Schulist <jschlst@×××××.org> |
28047 |
+ * |
28048 |
+- * Copyright (c) 2011 - 2014 PLUMgrid, http://plumgrid.com |
28049 |
+- * |
28050 |
+- * Authors: |
28051 |
+- * |
28052 |
+- * Jay Schulist <jschlst@×××××.org> |
28053 |
+- * Alexei Starovoitov <ast@××××××××.com> |
28054 |
+- * Daniel Borkmann <dborkman@××××××.com> |
28055 |
++ * Based on the design of: |
28056 |
++ * - The Berkeley Packet Filter |
28057 |
+ * |
28058 |
+ * This program is free software; you can redistribute it and/or |
28059 |
+ * modify it under the terms of the GNU General Public License |
28060 |
+@@ -45,27 +40,6 @@ |
28061 |
+ #include <linux/seccomp.h> |
28062 |
+ #include <linux/if_vlan.h> |
28063 |
+ |
28064 |
+-/* Registers */ |
28065 |
+-#define BPF_R0 regs[BPF_REG_0] |
28066 |
+-#define BPF_R1 regs[BPF_REG_1] |
28067 |
+-#define BPF_R2 regs[BPF_REG_2] |
28068 |
+-#define BPF_R3 regs[BPF_REG_3] |
28069 |
+-#define BPF_R4 regs[BPF_REG_4] |
28070 |
+-#define BPF_R5 regs[BPF_REG_5] |
28071 |
+-#define BPF_R6 regs[BPF_REG_6] |
28072 |
+-#define BPF_R7 regs[BPF_REG_7] |
28073 |
+-#define BPF_R8 regs[BPF_REG_8] |
28074 |
+-#define BPF_R9 regs[BPF_REG_9] |
28075 |
+-#define BPF_R10 regs[BPF_REG_10] |
28076 |
+- |
28077 |
+-/* Named registers */ |
28078 |
+-#define DST regs[insn->dst_reg] |
28079 |
+-#define SRC regs[insn->src_reg] |
28080 |
+-#define FP regs[BPF_REG_FP] |
28081 |
+-#define ARG1 regs[BPF_REG_ARG1] |
28082 |
+-#define CTX regs[BPF_REG_CTX] |
28083 |
+-#define IMM insn->imm |
28084 |
+- |
28085 |
+ /* No hurry in this branch |
28086 |
+ * |
28087 |
+ * Exported for the bpf jit load helper. |
28088 |
+@@ -78,9 +52,9 @@ void *bpf_internal_load_pointer_neg_helper(const struct sk_buff *skb, int k, uns |
28089 |
+ ptr = skb_network_header(skb) + k - SKF_NET_OFF; |
28090 |
+ else if (k >= SKF_LL_OFF) |
28091 |
+ ptr = skb_mac_header(skb) + k - SKF_LL_OFF; |
28092 |
++ |
28093 |
+ if (ptr >= skb->head && ptr + size <= skb_tail_pointer(skb)) |
28094 |
+ return ptr; |
28095 |
+- |
28096 |
+ return NULL; |
28097 |
+ } |
28098 |
+ |
28099 |
+@@ -89,7 +63,6 @@ static inline void *load_pointer(const struct sk_buff *skb, int k, |
28100 |
+ { |
28101 |
+ if (k >= 0) |
28102 |
+ return skb_header_pointer(skb, k, size, buffer); |
28103 |
+- |
28104 |
+ return bpf_internal_load_pointer_neg_helper(skb, k, size); |
28105 |
+ } |
28106 |
+ |
28107 |
+@@ -135,960 +108,309 @@ int sk_filter(struct sock *sk, struct sk_buff *skb) |
28108 |
+ } |
28109 |
+ EXPORT_SYMBOL(sk_filter); |
28110 |
+ |
28111 |
+-/* Base function for offset calculation. Needs to go into .text section, |
28112 |
+- * therefore keeping it non-static as well; will also be used by JITs |
28113 |
+- * anyway later on, so do not let the compiler omit it. |
28114 |
+- */ |
28115 |
+-noinline u64 __bpf_call_base(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5) |
28116 |
+-{ |
28117 |
+- return 0; |
28118 |
+-} |
28119 |
+- |
28120 |
+ /** |
28121 |
+- * __sk_run_filter - run a filter on a given context |
28122 |
+- * @ctx: buffer to run the filter on |
28123 |
+- * @insn: filter to apply |
28124 |
++ * sk_run_filter - run a filter on a socket |
28125 |
++ * @skb: buffer to run the filter on |
28126 |
++ * @fentry: filter to apply |
28127 |
+ * |
28128 |
+- * Decode and apply filter instructions to the skb->data. Return length to |
28129 |
+- * keep, 0 for none. @ctx is the data we are operating on, @insn is the |
28130 |
+- * array of filter instructions. |
28131 |
++ * Decode and apply filter instructions to the skb->data. |
28132 |
++ * Return length to keep, 0 for none. @skb is the data we are |
28133 |
++ * filtering, @filter is the array of filter instructions. |
28134 |
++ * Because all jumps are guaranteed to be before last instruction, |
28135 |
++ * and last instruction guaranteed to be a RET, we dont need to check |
28136 |
++ * flen. (We used to pass to this function the length of filter) |
28137 |
+ */ |
28138 |
+-static unsigned int __sk_run_filter(void *ctx, const struct sock_filter_int *insn) |
28139 |
++unsigned int sk_run_filter(const struct sk_buff *skb, |
28140 |
++ const struct sock_filter *fentry) |
28141 |
+ { |
28142 |
+- u64 stack[MAX_BPF_STACK / sizeof(u64)]; |
28143 |
+- u64 regs[MAX_BPF_REG], tmp; |
28144 |
+- static const void *jumptable[256] = { |
28145 |
+- [0 ... 255] = &&default_label, |
28146 |
+- /* Now overwrite non-defaults ... */ |
28147 |
+- /* 32 bit ALU operations */ |
28148 |
+- [BPF_ALU | BPF_ADD | BPF_X] = &&ALU_ADD_X, |
28149 |
+- [BPF_ALU | BPF_ADD | BPF_K] = &&ALU_ADD_K, |
28150 |
+- [BPF_ALU | BPF_SUB | BPF_X] = &&ALU_SUB_X, |
28151 |
+- [BPF_ALU | BPF_SUB | BPF_K] = &&ALU_SUB_K, |
28152 |
+- [BPF_ALU | BPF_AND | BPF_X] = &&ALU_AND_X, |
28153 |
+- [BPF_ALU | BPF_AND | BPF_K] = &&ALU_AND_K, |
28154 |
+- [BPF_ALU | BPF_OR | BPF_X] = &&ALU_OR_X, |
28155 |
+- [BPF_ALU | BPF_OR | BPF_K] = &&ALU_OR_K, |
28156 |
+- [BPF_ALU | BPF_LSH | BPF_X] = &&ALU_LSH_X, |
28157 |
+- [BPF_ALU | BPF_LSH | BPF_K] = &&ALU_LSH_K, |
28158 |
+- [BPF_ALU | BPF_RSH | BPF_X] = &&ALU_RSH_X, |
28159 |
+- [BPF_ALU | BPF_RSH | BPF_K] = &&ALU_RSH_K, |
28160 |
+- [BPF_ALU | BPF_XOR | BPF_X] = &&ALU_XOR_X, |
28161 |
+- [BPF_ALU | BPF_XOR | BPF_K] = &&ALU_XOR_K, |
28162 |
+- [BPF_ALU | BPF_MUL | BPF_X] = &&ALU_MUL_X, |
28163 |
+- [BPF_ALU | BPF_MUL | BPF_K] = &&ALU_MUL_K, |
28164 |
+- [BPF_ALU | BPF_MOV | BPF_X] = &&ALU_MOV_X, |
28165 |
+- [BPF_ALU | BPF_MOV | BPF_K] = &&ALU_MOV_K, |
28166 |
+- [BPF_ALU | BPF_DIV | BPF_X] = &&ALU_DIV_X, |
28167 |
+- [BPF_ALU | BPF_DIV | BPF_K] = &&ALU_DIV_K, |
28168 |
+- [BPF_ALU | BPF_MOD | BPF_X] = &&ALU_MOD_X, |
28169 |
+- [BPF_ALU | BPF_MOD | BPF_K] = &&ALU_MOD_K, |
28170 |
+- [BPF_ALU | BPF_NEG] = &&ALU_NEG, |
28171 |
+- [BPF_ALU | BPF_END | BPF_TO_BE] = &&ALU_END_TO_BE, |
28172 |
+- [BPF_ALU | BPF_END | BPF_TO_LE] = &&ALU_END_TO_LE, |
28173 |
+- /* 64 bit ALU operations */ |
28174 |
+- [BPF_ALU64 | BPF_ADD | BPF_X] = &&ALU64_ADD_X, |
28175 |
+- [BPF_ALU64 | BPF_ADD | BPF_K] = &&ALU64_ADD_K, |
28176 |
+- [BPF_ALU64 | BPF_SUB | BPF_X] = &&ALU64_SUB_X, |
28177 |
+- [BPF_ALU64 | BPF_SUB | BPF_K] = &&ALU64_SUB_K, |
28178 |
+- [BPF_ALU64 | BPF_AND | BPF_X] = &&ALU64_AND_X, |
28179 |
+- [BPF_ALU64 | BPF_AND | BPF_K] = &&ALU64_AND_K, |
28180 |
+- [BPF_ALU64 | BPF_OR | BPF_X] = &&ALU64_OR_X, |
28181 |
+- [BPF_ALU64 | BPF_OR | BPF_K] = &&ALU64_OR_K, |
28182 |
+- [BPF_ALU64 | BPF_LSH | BPF_X] = &&ALU64_LSH_X, |
28183 |
+- [BPF_ALU64 | BPF_LSH | BPF_K] = &&ALU64_LSH_K, |
28184 |
+- [BPF_ALU64 | BPF_RSH | BPF_X] = &&ALU64_RSH_X, |
28185 |
+- [BPF_ALU64 | BPF_RSH | BPF_K] = &&ALU64_RSH_K, |
28186 |
+- [BPF_ALU64 | BPF_XOR | BPF_X] = &&ALU64_XOR_X, |
28187 |
+- [BPF_ALU64 | BPF_XOR | BPF_K] = &&ALU64_XOR_K, |
28188 |
+- [BPF_ALU64 | BPF_MUL | BPF_X] = &&ALU64_MUL_X, |
28189 |
+- [BPF_ALU64 | BPF_MUL | BPF_K] = &&ALU64_MUL_K, |
28190 |
+- [BPF_ALU64 | BPF_MOV | BPF_X] = &&ALU64_MOV_X, |
28191 |
+- [BPF_ALU64 | BPF_MOV | BPF_K] = &&ALU64_MOV_K, |
28192 |
+- [BPF_ALU64 | BPF_ARSH | BPF_X] = &&ALU64_ARSH_X, |
28193 |
+- [BPF_ALU64 | BPF_ARSH | BPF_K] = &&ALU64_ARSH_K, |
28194 |
+- [BPF_ALU64 | BPF_DIV | BPF_X] = &&ALU64_DIV_X, |
28195 |
+- [BPF_ALU64 | BPF_DIV | BPF_K] = &&ALU64_DIV_K, |
28196 |
+- [BPF_ALU64 | BPF_MOD | BPF_X] = &&ALU64_MOD_X, |
28197 |
+- [BPF_ALU64 | BPF_MOD | BPF_K] = &&ALU64_MOD_K, |
28198 |
+- [BPF_ALU64 | BPF_NEG] = &&ALU64_NEG, |
28199 |
+- /* Call instruction */ |
28200 |
+- [BPF_JMP | BPF_CALL] = &&JMP_CALL, |
28201 |
+- /* Jumps */ |
28202 |
+- [BPF_JMP | BPF_JA] = &&JMP_JA, |
28203 |
+- [BPF_JMP | BPF_JEQ | BPF_X] = &&JMP_JEQ_X, |
28204 |
+- [BPF_JMP | BPF_JEQ | BPF_K] = &&JMP_JEQ_K, |
28205 |
+- [BPF_JMP | BPF_JNE | BPF_X] = &&JMP_JNE_X, |
28206 |
+- [BPF_JMP | BPF_JNE | BPF_K] = &&JMP_JNE_K, |
28207 |
+- [BPF_JMP | BPF_JGT | BPF_X] = &&JMP_JGT_X, |
28208 |
+- [BPF_JMP | BPF_JGT | BPF_K] = &&JMP_JGT_K, |
28209 |
+- [BPF_JMP | BPF_JGE | BPF_X] = &&JMP_JGE_X, |
28210 |
+- [BPF_JMP | BPF_JGE | BPF_K] = &&JMP_JGE_K, |
28211 |
+- [BPF_JMP | BPF_JSGT | BPF_X] = &&JMP_JSGT_X, |
28212 |
+- [BPF_JMP | BPF_JSGT | BPF_K] = &&JMP_JSGT_K, |
28213 |
+- [BPF_JMP | BPF_JSGE | BPF_X] = &&JMP_JSGE_X, |
28214 |
+- [BPF_JMP | BPF_JSGE | BPF_K] = &&JMP_JSGE_K, |
28215 |
+- [BPF_JMP | BPF_JSET | BPF_X] = &&JMP_JSET_X, |
28216 |
+- [BPF_JMP | BPF_JSET | BPF_K] = &&JMP_JSET_K, |
28217 |
+- /* Program return */ |
28218 |
+- [BPF_JMP | BPF_EXIT] = &&JMP_EXIT, |
28219 |
+- /* Store instructions */ |
28220 |
+- [BPF_STX | BPF_MEM | BPF_B] = &&STX_MEM_B, |
28221 |
+- [BPF_STX | BPF_MEM | BPF_H] = &&STX_MEM_H, |
28222 |
+- [BPF_STX | BPF_MEM | BPF_W] = &&STX_MEM_W, |
28223 |
+- [BPF_STX | BPF_MEM | BPF_DW] = &&STX_MEM_DW, |
28224 |
+- [BPF_STX | BPF_XADD | BPF_W] = &&STX_XADD_W, |
28225 |
+- [BPF_STX | BPF_XADD | BPF_DW] = &&STX_XADD_DW, |
28226 |
+- [BPF_ST | BPF_MEM | BPF_B] = &&ST_MEM_B, |
28227 |
+- [BPF_ST | BPF_MEM | BPF_H] = &&ST_MEM_H, |
28228 |
+- [BPF_ST | BPF_MEM | BPF_W] = &&ST_MEM_W, |
28229 |
+- [BPF_ST | BPF_MEM | BPF_DW] = &&ST_MEM_DW, |
28230 |
+- /* Load instructions */ |
28231 |
+- [BPF_LDX | BPF_MEM | BPF_B] = &&LDX_MEM_B, |
28232 |
+- [BPF_LDX | BPF_MEM | BPF_H] = &&LDX_MEM_H, |
28233 |
+- [BPF_LDX | BPF_MEM | BPF_W] = &&LDX_MEM_W, |
28234 |
+- [BPF_LDX | BPF_MEM | BPF_DW] = &&LDX_MEM_DW, |
28235 |
+- [BPF_LD | BPF_ABS | BPF_W] = &&LD_ABS_W, |
28236 |
+- [BPF_LD | BPF_ABS | BPF_H] = &&LD_ABS_H, |
28237 |
+- [BPF_LD | BPF_ABS | BPF_B] = &&LD_ABS_B, |
28238 |
+- [BPF_LD | BPF_IND | BPF_W] = &&LD_IND_W, |
28239 |
+- [BPF_LD | BPF_IND | BPF_H] = &&LD_IND_H, |
28240 |
+- [BPF_LD | BPF_IND | BPF_B] = &&LD_IND_B, |
28241 |
+- }; |
28242 |
+ void *ptr; |
28243 |
+- int off; |
28244 |
+- |
28245 |
+-#define CONT ({ insn++; goto select_insn; }) |
28246 |
+-#define CONT_JMP ({ insn++; goto select_insn; }) |
28247 |
+- |
28248 |
+- FP = (u64) (unsigned long) &stack[ARRAY_SIZE(stack)]; |
28249 |
+- ARG1 = (u64) (unsigned long) ctx; |
28250 |
+- |
28251 |
+- /* Registers used in classic BPF programs need to be reset first. */ |
28252 |
+- regs[BPF_REG_A] = 0; |
28253 |
+- regs[BPF_REG_X] = 0; |
28254 |
+- |
28255 |
+-select_insn: |
28256 |
+- goto *jumptable[insn->code]; |
28257 |
+- |
28258 |
+- /* ALU */ |
28259 |
+-#define ALU(OPCODE, OP) \ |
28260 |
+- ALU64_##OPCODE##_X: \ |
28261 |
+- DST = DST OP SRC; \ |
28262 |
+- CONT; \ |
28263 |
+- ALU_##OPCODE##_X: \ |
28264 |
+- DST = (u32) DST OP (u32) SRC; \ |
28265 |
+- CONT; \ |
28266 |
+- ALU64_##OPCODE##_K: \ |
28267 |
+- DST = DST OP IMM; \ |
28268 |
+- CONT; \ |
28269 |
+- ALU_##OPCODE##_K: \ |
28270 |
+- DST = (u32) DST OP (u32) IMM; \ |
28271 |
+- CONT; |
28272 |
+- |
28273 |
+- ALU(ADD, +) |
28274 |
+- ALU(SUB, -) |
28275 |
+- ALU(AND, &) |
28276 |
+- ALU(OR, |) |
28277 |
+- ALU(LSH, <<) |
28278 |
+- ALU(RSH, >>) |
28279 |
+- ALU(XOR, ^) |
28280 |
+- ALU(MUL, *) |
28281 |
+-#undef ALU |
28282 |
+- ALU_NEG: |
28283 |
+- DST = (u32) -DST; |
28284 |
+- CONT; |
28285 |
+- ALU64_NEG: |
28286 |
+- DST = -DST; |
28287 |
+- CONT; |
28288 |
+- ALU_MOV_X: |
28289 |
+- DST = (u32) SRC; |
28290 |
+- CONT; |
28291 |
+- ALU_MOV_K: |
28292 |
+- DST = (u32) IMM; |
28293 |
+- CONT; |
28294 |
+- ALU64_MOV_X: |
28295 |
+- DST = SRC; |
28296 |
+- CONT; |
28297 |
+- ALU64_MOV_K: |
28298 |
+- DST = IMM; |
28299 |
+- CONT; |
28300 |
+- ALU64_ARSH_X: |
28301 |
+- (*(s64 *) &DST) >>= SRC; |
28302 |
+- CONT; |
28303 |
+- ALU64_ARSH_K: |
28304 |
+- (*(s64 *) &DST) >>= IMM; |
28305 |
+- CONT; |
28306 |
+- ALU64_MOD_X: |
28307 |
+- if (unlikely(SRC == 0)) |
28308 |
+- return 0; |
28309 |
+- tmp = DST; |
28310 |
+- DST = do_div(tmp, SRC); |
28311 |
+- CONT; |
28312 |
+- ALU_MOD_X: |
28313 |
+- if (unlikely(SRC == 0)) |
28314 |
+- return 0; |
28315 |
+- tmp = (u32) DST; |
28316 |
+- DST = do_div(tmp, (u32) SRC); |
28317 |
+- CONT; |
28318 |
+- ALU64_MOD_K: |
28319 |
+- tmp = DST; |
28320 |
+- DST = do_div(tmp, IMM); |
28321 |
+- CONT; |
28322 |
+- ALU_MOD_K: |
28323 |
+- tmp = (u32) DST; |
28324 |
+- DST = do_div(tmp, (u32) IMM); |
28325 |
+- CONT; |
28326 |
+- ALU64_DIV_X: |
28327 |
+- if (unlikely(SRC == 0)) |
28328 |
+- return 0; |
28329 |
+- do_div(DST, SRC); |
28330 |
+- CONT; |
28331 |
+- ALU_DIV_X: |
28332 |
+- if (unlikely(SRC == 0)) |
28333 |
+- return 0; |
28334 |
+- tmp = (u32) DST; |
28335 |
+- do_div(tmp, (u32) SRC); |
28336 |
+- DST = (u32) tmp; |
28337 |
+- CONT; |
28338 |
+- ALU64_DIV_K: |
28339 |
+- do_div(DST, IMM); |
28340 |
+- CONT; |
28341 |
+- ALU_DIV_K: |
28342 |
+- tmp = (u32) DST; |
28343 |
+- do_div(tmp, (u32) IMM); |
28344 |
+- DST = (u32) tmp; |
28345 |
+- CONT; |
28346 |
+- ALU_END_TO_BE: |
28347 |
+- switch (IMM) { |
28348 |
+- case 16: |
28349 |
+- DST = (__force u16) cpu_to_be16(DST); |
28350 |
+- break; |
28351 |
+- case 32: |
28352 |
+- DST = (__force u32) cpu_to_be32(DST); |
28353 |
+- break; |
28354 |
+- case 64: |
28355 |
+- DST = (__force u64) cpu_to_be64(DST); |
28356 |
+- break; |
28357 |
+- } |
28358 |
+- CONT; |
28359 |
+- ALU_END_TO_LE: |
28360 |
+- switch (IMM) { |
28361 |
+- case 16: |
28362 |
+- DST = (__force u16) cpu_to_le16(DST); |
28363 |
+- break; |
28364 |
+- case 32: |
28365 |
+- DST = (__force u32) cpu_to_le32(DST); |
28366 |
+- break; |
28367 |
+- case 64: |
28368 |
+- DST = (__force u64) cpu_to_le64(DST); |
28369 |
+- break; |
28370 |
+- } |
28371 |
+- CONT; |
28372 |
+- |
28373 |
+- /* CALL */ |
28374 |
+- JMP_CALL: |
28375 |
+- /* Function call scratches BPF_R1-BPF_R5 registers, |
28376 |
+- * preserves BPF_R6-BPF_R9, and stores return value |
28377 |
+- * into BPF_R0. |
28378 |
+- */ |
28379 |
+- BPF_R0 = (__bpf_call_base + insn->imm)(BPF_R1, BPF_R2, BPF_R3, |
28380 |
+- BPF_R4, BPF_R5); |
28381 |
+- CONT; |
28382 |
+- |
28383 |
+- /* JMP */ |
28384 |
+- JMP_JA: |
28385 |
+- insn += insn->off; |
28386 |
+- CONT; |
28387 |
+- JMP_JEQ_X: |
28388 |
+- if (DST == SRC) { |
28389 |
+- insn += insn->off; |
28390 |
+- CONT_JMP; |
28391 |
+- } |
28392 |
+- CONT; |
28393 |
+- JMP_JEQ_K: |
28394 |
+- if (DST == IMM) { |
28395 |
+- insn += insn->off; |
28396 |
+- CONT_JMP; |
28397 |
+- } |
28398 |
+- CONT; |
28399 |
+- JMP_JNE_X: |
28400 |
+- if (DST != SRC) { |
28401 |
+- insn += insn->off; |
28402 |
+- CONT_JMP; |
28403 |
+- } |
28404 |
+- CONT; |
28405 |
+- JMP_JNE_K: |
28406 |
+- if (DST != IMM) { |
28407 |
+- insn += insn->off; |
28408 |
+- CONT_JMP; |
28409 |
+- } |
28410 |
+- CONT; |
28411 |
+- JMP_JGT_X: |
28412 |
+- if (DST > SRC) { |
28413 |
+- insn += insn->off; |
28414 |
+- CONT_JMP; |
28415 |
+- } |
28416 |
+- CONT; |
28417 |
+- JMP_JGT_K: |
28418 |
+- if (DST > IMM) { |
28419 |
+- insn += insn->off; |
28420 |
+- CONT_JMP; |
28421 |
+- } |
28422 |
+- CONT; |
28423 |
+- JMP_JGE_X: |
28424 |
+- if (DST >= SRC) { |
28425 |
+- insn += insn->off; |
28426 |
+- CONT_JMP; |
28427 |
+- } |
28428 |
+- CONT; |
28429 |
+- JMP_JGE_K: |
28430 |
+- if (DST >= IMM) { |
28431 |
+- insn += insn->off; |
28432 |
+- CONT_JMP; |
28433 |
+- } |
28434 |
+- CONT; |
28435 |
+- JMP_JSGT_X: |
28436 |
+- if (((s64) DST) > ((s64) SRC)) { |
28437 |
+- insn += insn->off; |
28438 |
+- CONT_JMP; |
28439 |
+- } |
28440 |
+- CONT; |
28441 |
+- JMP_JSGT_K: |
28442 |
+- if (((s64) DST) > ((s64) IMM)) { |
28443 |
+- insn += insn->off; |
28444 |
+- CONT_JMP; |
28445 |
+- } |
28446 |
+- CONT; |
28447 |
+- JMP_JSGE_X: |
28448 |
+- if (((s64) DST) >= ((s64) SRC)) { |
28449 |
+- insn += insn->off; |
28450 |
+- CONT_JMP; |
28451 |
+- } |
28452 |
+- CONT; |
28453 |
+- JMP_JSGE_K: |
28454 |
+- if (((s64) DST) >= ((s64) IMM)) { |
28455 |
+- insn += insn->off; |
28456 |
+- CONT_JMP; |
28457 |
+- } |
28458 |
+- CONT; |
28459 |
+- JMP_JSET_X: |
28460 |
+- if (DST & SRC) { |
28461 |
+- insn += insn->off; |
28462 |
+- CONT_JMP; |
28463 |
+- } |
28464 |
+- CONT; |
28465 |
+- JMP_JSET_K: |
28466 |
+- if (DST & IMM) { |
28467 |
+- insn += insn->off; |
28468 |
+- CONT_JMP; |
28469 |
+- } |
28470 |
+- CONT; |
28471 |
+- JMP_EXIT: |
28472 |
+- return BPF_R0; |
28473 |
+- |
28474 |
+- /* STX and ST and LDX*/ |
28475 |
+-#define LDST(SIZEOP, SIZE) \ |
28476 |
+- STX_MEM_##SIZEOP: \ |
28477 |
+- *(SIZE *)(unsigned long) (DST + insn->off) = SRC; \ |
28478 |
+- CONT; \ |
28479 |
+- ST_MEM_##SIZEOP: \ |
28480 |
+- *(SIZE *)(unsigned long) (DST + insn->off) = IMM; \ |
28481 |
+- CONT; \ |
28482 |
+- LDX_MEM_##SIZEOP: \ |
28483 |
+- DST = *(SIZE *)(unsigned long) (SRC + insn->off); \ |
28484 |
+- CONT; |
28485 |
+- |
28486 |
+- LDST(B, u8) |
28487 |
+- LDST(H, u16) |
28488 |
+- LDST(W, u32) |
28489 |
+- LDST(DW, u64) |
28490 |
+-#undef LDST |
28491 |
+- STX_XADD_W: /* lock xadd *(u32 *)(dst_reg + off16) += src_reg */ |
28492 |
+- atomic_add((u32) SRC, (atomic_t *)(unsigned long) |
28493 |
+- (DST + insn->off)); |
28494 |
+- CONT; |
28495 |
+- STX_XADD_DW: /* lock xadd *(u64 *)(dst_reg + off16) += src_reg */ |
28496 |
+- atomic64_add((u64) SRC, (atomic64_t *)(unsigned long) |
28497 |
+- (DST + insn->off)); |
28498 |
+- CONT; |
28499 |
+- LD_ABS_W: /* BPF_R0 = ntohl(*(u32 *) (skb->data + imm32)) */ |
28500 |
+- off = IMM; |
28501 |
+-load_word: |
28502 |
+- /* BPF_LD + BPD_ABS and BPF_LD + BPF_IND insns are |
28503 |
+- * only appearing in the programs where ctx == |
28504 |
+- * skb. All programs keep 'ctx' in regs[BPF_REG_CTX] |
28505 |
+- * == BPF_R6, sk_convert_filter() saves it in BPF_R6, |
28506 |
+- * internal BPF verifier will check that BPF_R6 == |
28507 |
+- * ctx. |
28508 |
+- * |
28509 |
+- * BPF_ABS and BPF_IND are wrappers of function calls, |
28510 |
+- * so they scratch BPF_R1-BPF_R5 registers, preserve |
28511 |
+- * BPF_R6-BPF_R9, and store return value into BPF_R0. |
28512 |
+- * |
28513 |
+- * Implicit input: |
28514 |
+- * ctx == skb == BPF_R6 == CTX |
28515 |
+- * |
28516 |
+- * Explicit input: |
28517 |
+- * SRC == any register |
28518 |
+- * IMM == 32-bit immediate |
28519 |
+- * |
28520 |
+- * Output: |
28521 |
+- * BPF_R0 - 8/16/32-bit skb data converted to cpu endianness |
28522 |
+- */ |
28523 |
+- |
28524 |
+- ptr = load_pointer((struct sk_buff *) (unsigned long) CTX, off, 4, &tmp); |
28525 |
+- if (likely(ptr != NULL)) { |
28526 |
+- BPF_R0 = get_unaligned_be32(ptr); |
28527 |
+- CONT; |
28528 |
+- } |
28529 |
+- |
28530 |
+- return 0; |
28531 |
+- LD_ABS_H: /* BPF_R0 = ntohs(*(u16 *) (skb->data + imm32)) */ |
28532 |
+- off = IMM; |
28533 |
+-load_half: |
28534 |
+- ptr = load_pointer((struct sk_buff *) (unsigned long) CTX, off, 2, &tmp); |
28535 |
+- if (likely(ptr != NULL)) { |
28536 |
+- BPF_R0 = get_unaligned_be16(ptr); |
28537 |
+- CONT; |
28538 |
+- } |
28539 |
+- |
28540 |
+- return 0; |
28541 |
+- LD_ABS_B: /* BPF_R0 = *(u8 *) (skb->data + imm32) */ |
28542 |
+- off = IMM; |
28543 |
+-load_byte: |
28544 |
+- ptr = load_pointer((struct sk_buff *) (unsigned long) CTX, off, 1, &tmp); |
28545 |
+- if (likely(ptr != NULL)) { |
28546 |
+- BPF_R0 = *(u8 *)ptr; |
28547 |
+- CONT; |
28548 |
+- } |
28549 |
+- |
28550 |
+- return 0; |
28551 |
+- LD_IND_W: /* BPF_R0 = ntohl(*(u32 *) (skb->data + src_reg + imm32)) */ |
28552 |
+- off = IMM + SRC; |
28553 |
+- goto load_word; |
28554 |
+- LD_IND_H: /* BPF_R0 = ntohs(*(u16 *) (skb->data + src_reg + imm32)) */ |
28555 |
+- off = IMM + SRC; |
28556 |
+- goto load_half; |
28557 |
+- LD_IND_B: /* BPF_R0 = *(u8 *) (skb->data + src_reg + imm32) */ |
28558 |
+- off = IMM + SRC; |
28559 |
+- goto load_byte; |
28560 |
+- |
28561 |
+- default_label: |
28562 |
+- /* If we ever reach this, we have a bug somewhere. */ |
28563 |
+- WARN_RATELIMIT(1, "unknown opcode %02x\n", insn->code); |
28564 |
+- return 0; |
28565 |
+-} |
28566 |
+- |
28567 |
+-/* Helper to find the offset of pkt_type in sk_buff structure. We want |
28568 |
+- * to make sure its still a 3bit field starting at a byte boundary; |
28569 |
+- * taken from arch/x86/net/bpf_jit_comp.c. |
28570 |
+- */ |
28571 |
+-#ifdef __BIG_ENDIAN_BITFIELD |
28572 |
+-#define PKT_TYPE_MAX (7 << 5) |
28573 |
++ u32 A = 0; /* Accumulator */ |
28574 |
++ u32 X = 0; /* Index Register */ |
28575 |
++ u32 mem[BPF_MEMWORDS] = {}; /* Scratch Memory Store */ |
28576 |
++ u32 tmp; |
28577 |
++ int k; |
28578 |
++ |
28579 |
++ /* |
28580 |
++ * Process array of filter instructions. |
28581 |
++ */ |
28582 |
++ for (;; fentry++) { |
28583 |
++#if defined(CONFIG_X86_32) |
28584 |
++#define K (fentry->k) |
28585 |
+ #else |
28586 |
+-#define PKT_TYPE_MAX 7 |
28587 |
++ const u32 K = fentry->k; |
28588 |
+ #endif |
28589 |
+-static unsigned int pkt_type_offset(void) |
28590 |
+-{ |
28591 |
+- struct sk_buff skb_probe = { .pkt_type = ~0, }; |
28592 |
+- u8 *ct = (u8 *) &skb_probe; |
28593 |
+- unsigned int off; |
28594 |
+ |
28595 |
+- for (off = 0; off < sizeof(struct sk_buff); off++) { |
28596 |
+- if (ct[off] == PKT_TYPE_MAX) |
28597 |
+- return off; |
28598 |
+- } |
28599 |
+- |
28600 |
+- pr_err_once("Please fix %s, as pkt_type couldn't be found!\n", __func__); |
28601 |
+- return -1; |
28602 |
+-} |
28603 |
+- |
28604 |
+-static u64 __skb_get_pay_offset(u64 ctx, u64 a, u64 x, u64 r4, u64 r5) |
28605 |
+-{ |
28606 |
+- return __skb_get_poff((struct sk_buff *)(unsigned long) ctx); |
28607 |
+-} |
28608 |
+- |
28609 |
+-static u64 __skb_get_nlattr(u64 ctx, u64 a, u64 x, u64 r4, u64 r5) |
28610 |
+-{ |
28611 |
+- struct sk_buff *skb = (struct sk_buff *)(unsigned long) ctx; |
28612 |
+- struct nlattr *nla; |
28613 |
+- |
28614 |
+- if (skb_is_nonlinear(skb)) |
28615 |
+- return 0; |
28616 |
+- |
28617 |
+- if (skb->len < sizeof(struct nlattr)) |
28618 |
+- return 0; |
28619 |
+- |
28620 |
+- if (a > skb->len - sizeof(struct nlattr)) |
28621 |
+- return 0; |
28622 |
+- |
28623 |
+- nla = nla_find((struct nlattr *) &skb->data[a], skb->len - a, x); |
28624 |
+- if (nla) |
28625 |
+- return (void *) nla - (void *) skb->data; |
28626 |
+- |
28627 |
+- return 0; |
28628 |
+-} |
28629 |
+- |
28630 |
+-static u64 __skb_get_nlattr_nest(u64 ctx, u64 a, u64 x, u64 r4, u64 r5) |
28631 |
+-{ |
28632 |
+- struct sk_buff *skb = (struct sk_buff *)(unsigned long) ctx; |
28633 |
+- struct nlattr *nla; |
28634 |
+- |
28635 |
+- if (skb_is_nonlinear(skb)) |
28636 |
+- return 0; |
28637 |
+- |
28638 |
+- if (skb->len < sizeof(struct nlattr)) |
28639 |
+- return 0; |
28640 |
+- |
28641 |
+- if (a > skb->len - sizeof(struct nlattr)) |
28642 |
+- return 0; |
28643 |
+- |
28644 |
+- nla = (struct nlattr *) &skb->data[a]; |
28645 |
+- if (nla->nla_len > skb->len - a) |
28646 |
+- return 0; |
28647 |
+- |
28648 |
+- nla = nla_find_nested(nla, x); |
28649 |
+- if (nla) |
28650 |
+- return (void *) nla - (void *) skb->data; |
28651 |
+- |
28652 |
+- return 0; |
28653 |
+-} |
28654 |
+- |
28655 |
+-static u64 __get_raw_cpu_id(u64 ctx, u64 a, u64 x, u64 r4, u64 r5) |
28656 |
+-{ |
28657 |
+- return raw_smp_processor_id(); |
28658 |
+-} |
28659 |
+- |
28660 |
+-/* note that this only generates 32-bit random numbers */ |
28661 |
+-static u64 __get_random_u32(u64 ctx, u64 a, u64 x, u64 r4, u64 r5) |
28662 |
+-{ |
28663 |
+- return prandom_u32(); |
28664 |
+-} |
28665 |
+- |
28666 |
+-static bool convert_bpf_extensions(struct sock_filter *fp, |
28667 |
+- struct sock_filter_int **insnp) |
28668 |
+-{ |
28669 |
+- struct sock_filter_int *insn = *insnp; |
28670 |
+- |
28671 |
+- switch (fp->k) { |
28672 |
+- case SKF_AD_OFF + SKF_AD_PROTOCOL: |
28673 |
+- BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, protocol) != 2); |
28674 |
+- |
28675 |
+- /* A = *(u16 *) (CTX + offsetof(protocol)) */ |
28676 |
+- *insn++ = BPF_LDX_MEM(BPF_H, BPF_REG_A, BPF_REG_CTX, |
28677 |
+- offsetof(struct sk_buff, protocol)); |
28678 |
+- /* A = ntohs(A) [emitting a nop or swap16] */ |
28679 |
+- *insn = BPF_ENDIAN(BPF_FROM_BE, BPF_REG_A, 16); |
28680 |
+- break; |
28681 |
+- |
28682 |
+- case SKF_AD_OFF + SKF_AD_PKTTYPE: |
28683 |
+- *insn = BPF_LDX_MEM(BPF_B, BPF_REG_A, BPF_REG_CTX, |
28684 |
+- pkt_type_offset()); |
28685 |
+- if (insn->off < 0) |
28686 |
+- return false; |
28687 |
+- insn++; |
28688 |
+- *insn = BPF_ALU32_IMM(BPF_AND, BPF_REG_A, PKT_TYPE_MAX); |
28689 |
+-#ifdef __BIG_ENDIAN_BITFIELD |
28690 |
+- insn++; |
28691 |
+- *insn = BPF_ALU32_IMM(BPF_RSH, BPF_REG_A, 5); |
28692 |
+-#endif |
28693 |
+- break; |
28694 |
+- |
28695 |
+- case SKF_AD_OFF + SKF_AD_IFINDEX: |
28696 |
+- case SKF_AD_OFF + SKF_AD_HATYPE: |
28697 |
+- BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, ifindex) != 4); |
28698 |
+- BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, type) != 2); |
28699 |
+- BUILD_BUG_ON(bytes_to_bpf_size(FIELD_SIZEOF(struct sk_buff, dev)) < 0); |
28700 |
+- |
28701 |
+- *insn++ = BPF_LDX_MEM(bytes_to_bpf_size(FIELD_SIZEOF(struct sk_buff, dev)), |
28702 |
+- BPF_REG_TMP, BPF_REG_CTX, |
28703 |
+- offsetof(struct sk_buff, dev)); |
28704 |
+- /* if (tmp != 0) goto pc + 1 */ |
28705 |
+- *insn++ = BPF_JMP_IMM(BPF_JNE, BPF_REG_TMP, 0, 1); |
28706 |
+- *insn++ = BPF_EXIT_INSN(); |
28707 |
+- if (fp->k == SKF_AD_OFF + SKF_AD_IFINDEX) |
28708 |
+- *insn = BPF_LDX_MEM(BPF_W, BPF_REG_A, BPF_REG_TMP, |
28709 |
+- offsetof(struct net_device, ifindex)); |
28710 |
+- else |
28711 |
+- *insn = BPF_LDX_MEM(BPF_H, BPF_REG_A, BPF_REG_TMP, |
28712 |
+- offsetof(struct net_device, type)); |
28713 |
+- break; |
28714 |
+- |
28715 |
+- case SKF_AD_OFF + SKF_AD_MARK: |
28716 |
+- BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, mark) != 4); |
28717 |
+- |
28718 |
+- *insn = BPF_LDX_MEM(BPF_W, BPF_REG_A, BPF_REG_CTX, |
28719 |
+- offsetof(struct sk_buff, mark)); |
28720 |
+- break; |
28721 |
+- |
28722 |
+- case SKF_AD_OFF + SKF_AD_RXHASH: |
28723 |
+- BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, hash) != 4); |
28724 |
+- |
28725 |
+- *insn = BPF_LDX_MEM(BPF_W, BPF_REG_A, BPF_REG_CTX, |
28726 |
+- offsetof(struct sk_buff, hash)); |
28727 |
+- break; |
28728 |
+- |
28729 |
+- case SKF_AD_OFF + SKF_AD_QUEUE: |
28730 |
+- BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, queue_mapping) != 2); |
28731 |
+- |
28732 |
+- *insn = BPF_LDX_MEM(BPF_H, BPF_REG_A, BPF_REG_CTX, |
28733 |
+- offsetof(struct sk_buff, queue_mapping)); |
28734 |
+- break; |
28735 |
+- |
28736 |
+- case SKF_AD_OFF + SKF_AD_VLAN_TAG: |
28737 |
+- case SKF_AD_OFF + SKF_AD_VLAN_TAG_PRESENT: |
28738 |
+- BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2); |
28739 |
+- BUILD_BUG_ON(VLAN_TAG_PRESENT != 0x1000); |
28740 |
+- |
28741 |
+- /* A = *(u16 *) (CTX + offsetof(vlan_tci)) */ |
28742 |
+- *insn++ = BPF_LDX_MEM(BPF_H, BPF_REG_A, BPF_REG_CTX, |
28743 |
+- offsetof(struct sk_buff, vlan_tci)); |
28744 |
+- if (fp->k == SKF_AD_OFF + SKF_AD_VLAN_TAG) { |
28745 |
+- *insn = BPF_ALU32_IMM(BPF_AND, BPF_REG_A, |
28746 |
+- ~VLAN_TAG_PRESENT); |
28747 |
+- } else { |
28748 |
+- /* A >>= 12 */ |
28749 |
+- *insn++ = BPF_ALU32_IMM(BPF_RSH, BPF_REG_A, 12); |
28750 |
+- /* A &= 1 */ |
28751 |
+- *insn = BPF_ALU32_IMM(BPF_AND, BPF_REG_A, 1); |
28752 |
+- } |
28753 |
+- break; |
28754 |
+- |
28755 |
+- case SKF_AD_OFF + SKF_AD_PAY_OFFSET: |
28756 |
+- case SKF_AD_OFF + SKF_AD_NLATTR: |
28757 |
+- case SKF_AD_OFF + SKF_AD_NLATTR_NEST: |
28758 |
+- case SKF_AD_OFF + SKF_AD_CPU: |
28759 |
+- case SKF_AD_OFF + SKF_AD_RANDOM: |
28760 |
+- /* arg1 = CTX */ |
28761 |
+- *insn++ = BPF_MOV64_REG(BPF_REG_ARG1, BPF_REG_CTX); |
28762 |
+- /* arg2 = A */ |
28763 |
+- *insn++ = BPF_MOV64_REG(BPF_REG_ARG2, BPF_REG_A); |
28764 |
+- /* arg3 = X */ |
28765 |
+- *insn++ = BPF_MOV64_REG(BPF_REG_ARG3, BPF_REG_X); |
28766 |
+- /* Emit call(arg1=CTX, arg2=A, arg3=X) */ |
28767 |
+- switch (fp->k) { |
28768 |
+- case SKF_AD_OFF + SKF_AD_PAY_OFFSET: |
28769 |
+- *insn = BPF_EMIT_CALL(__skb_get_pay_offset); |
28770 |
+- break; |
28771 |
+- case SKF_AD_OFF + SKF_AD_NLATTR: |
28772 |
+- *insn = BPF_EMIT_CALL(__skb_get_nlattr); |
28773 |
+- break; |
28774 |
+- case SKF_AD_OFF + SKF_AD_NLATTR_NEST: |
28775 |
+- *insn = BPF_EMIT_CALL(__skb_get_nlattr_nest); |
28776 |
+- break; |
28777 |
+- case SKF_AD_OFF + SKF_AD_CPU: |
28778 |
+- *insn = BPF_EMIT_CALL(__get_raw_cpu_id); |
28779 |
+- break; |
28780 |
+- case SKF_AD_OFF + SKF_AD_RANDOM: |
28781 |
+- *insn = BPF_EMIT_CALL(__get_random_u32); |
28782 |
+- break; |
28783 |
+- } |
28784 |
+- break; |
28785 |
+- |
28786 |
+- case SKF_AD_OFF + SKF_AD_ALU_XOR_X: |
28787 |
+- /* A ^= X */ |
28788 |
+- *insn = BPF_ALU32_REG(BPF_XOR, BPF_REG_A, BPF_REG_X); |
28789 |
+- break; |
28790 |
+- |
28791 |
+- default: |
28792 |
+- /* This is just a dummy call to avoid letting the compiler |
28793 |
+- * evict __bpf_call_base() as an optimization. Placed here |
28794 |
+- * where no-one bothers. |
28795 |
+- */ |
28796 |
+- BUG_ON(__bpf_call_base(0, 0, 0, 0, 0) != 0); |
28797 |
+- return false; |
28798 |
+- } |
28799 |
+- |
28800 |
+- *insnp = insn; |
28801 |
+- return true; |
28802 |
+-} |
28803 |
+- |
28804 |
+-/** |
28805 |
+- * sk_convert_filter - convert filter program |
28806 |
+- * @prog: the user passed filter program |
28807 |
+- * @len: the length of the user passed filter program |
28808 |
+- * @new_prog: buffer where converted program will be stored |
28809 |
+- * @new_len: pointer to store length of converted program |
28810 |
+- * |
28811 |
+- * Remap 'sock_filter' style BPF instruction set to 'sock_filter_ext' style. |
28812 |
+- * Conversion workflow: |
28813 |
+- * |
28814 |
+- * 1) First pass for calculating the new program length: |
28815 |
+- * sk_convert_filter(old_prog, old_len, NULL, &new_len) |
28816 |
+- * |
28817 |
+- * 2) 2nd pass to remap in two passes: 1st pass finds new |
28818 |
+- * jump offsets, 2nd pass remapping: |
28819 |
+- * new_prog = kmalloc(sizeof(struct sock_filter_int) * new_len); |
28820 |
+- * sk_convert_filter(old_prog, old_len, new_prog, &new_len); |
28821 |
+- * |
28822 |
+- * User BPF's register A is mapped to our BPF register 6, user BPF |
28823 |
+- * register X is mapped to BPF register 7; frame pointer is always |
28824 |
+- * register 10; Context 'void *ctx' is stored in register 1, that is, |
28825 |
+- * for socket filters: ctx == 'struct sk_buff *', for seccomp: |
28826 |
+- * ctx == 'struct seccomp_data *'. |
28827 |
+- */ |
28828 |
+-int sk_convert_filter(struct sock_filter *prog, int len, |
28829 |
+- struct sock_filter_int *new_prog, int *new_len) |
28830 |
+-{ |
28831 |
+- int new_flen = 0, pass = 0, target, i; |
28832 |
+- struct sock_filter_int *new_insn; |
28833 |
+- struct sock_filter *fp; |
28834 |
+- int *addrs = NULL; |
28835 |
+- u8 bpf_src; |
28836 |
+- |
28837 |
+- BUILD_BUG_ON(BPF_MEMWORDS * sizeof(u32) > MAX_BPF_STACK); |
28838 |
+- BUILD_BUG_ON(BPF_REG_FP + 1 != MAX_BPF_REG); |
28839 |
+- |
28840 |
+- if (len <= 0 || len > BPF_MAXINSNS) |
28841 |
+- return -EINVAL; |
28842 |
+- |
28843 |
+- if (new_prog) { |
28844 |
+- addrs = kcalloc(len, sizeof(*addrs), GFP_KERNEL); |
28845 |
+- if (!addrs) |
28846 |
+- return -ENOMEM; |
28847 |
+- } |
28848 |
+- |
28849 |
+-do_pass: |
28850 |
+- new_insn = new_prog; |
28851 |
+- fp = prog; |
28852 |
+- |
28853 |
+- if (new_insn) |
28854 |
+- *new_insn = BPF_MOV64_REG(BPF_REG_CTX, BPF_REG_ARG1); |
28855 |
+- new_insn++; |
28856 |
+- |
28857 |
+- for (i = 0; i < len; fp++, i++) { |
28858 |
+- struct sock_filter_int tmp_insns[6] = { }; |
28859 |
+- struct sock_filter_int *insn = tmp_insns; |
28860 |
+- |
28861 |
+- if (addrs) |
28862 |
+- addrs[i] = new_insn - new_prog; |
28863 |
+- |
28864 |
+- switch (fp->code) { |
28865 |
+- /* All arithmetic insns and skb loads map as-is. */ |
28866 |
+- case BPF_ALU | BPF_ADD | BPF_X: |
28867 |
+- case BPF_ALU | BPF_ADD | BPF_K: |
28868 |
+- case BPF_ALU | BPF_SUB | BPF_X: |
28869 |
+- case BPF_ALU | BPF_SUB | BPF_K: |
28870 |
+- case BPF_ALU | BPF_AND | BPF_X: |
28871 |
+- case BPF_ALU | BPF_AND | BPF_K: |
28872 |
+- case BPF_ALU | BPF_OR | BPF_X: |
28873 |
+- case BPF_ALU | BPF_OR | BPF_K: |
28874 |
+- case BPF_ALU | BPF_LSH | BPF_X: |
28875 |
+- case BPF_ALU | BPF_LSH | BPF_K: |
28876 |
+- case BPF_ALU | BPF_RSH | BPF_X: |
28877 |
+- case BPF_ALU | BPF_RSH | BPF_K: |
28878 |
+- case BPF_ALU | BPF_XOR | BPF_X: |
28879 |
+- case BPF_ALU | BPF_XOR | BPF_K: |
28880 |
+- case BPF_ALU | BPF_MUL | BPF_X: |
28881 |
+- case BPF_ALU | BPF_MUL | BPF_K: |
28882 |
+- case BPF_ALU | BPF_DIV | BPF_X: |
28883 |
+- case BPF_ALU | BPF_DIV | BPF_K: |
28884 |
+- case BPF_ALU | BPF_MOD | BPF_X: |
28885 |
+- case BPF_ALU | BPF_MOD | BPF_K: |
28886 |
+- case BPF_ALU | BPF_NEG: |
28887 |
+- case BPF_LD | BPF_ABS | BPF_W: |
28888 |
+- case BPF_LD | BPF_ABS | BPF_H: |
28889 |
+- case BPF_LD | BPF_ABS | BPF_B: |
28890 |
+- case BPF_LD | BPF_IND | BPF_W: |
28891 |
+- case BPF_LD | BPF_IND | BPF_H: |
28892 |
+- case BPF_LD | BPF_IND | BPF_B: |
28893 |
+- /* Check for overloaded BPF extension and |
28894 |
+- * directly convert it if found, otherwise |
28895 |
+- * just move on with mapping. |
28896 |
+- */ |
28897 |
+- if (BPF_CLASS(fp->code) == BPF_LD && |
28898 |
+- BPF_MODE(fp->code) == BPF_ABS && |
28899 |
+- convert_bpf_extensions(fp, &insn)) |
28900 |
+- break; |
28901 |
+- |
28902 |
+- *insn = BPF_RAW_INSN(fp->code, BPF_REG_A, BPF_REG_X, 0, fp->k); |
28903 |
+- break; |
28904 |
+- |
28905 |
+- /* Jump transformation cannot use BPF block macros |
28906 |
+- * everywhere as offset calculation and target updates |
28907 |
+- * require a bit more work than the rest, i.e. jump |
28908 |
+- * opcodes map as-is, but offsets need adjustment. |
28909 |
+- */ |
28910 |
+- |
28911 |
+-#define BPF_EMIT_JMP \ |
28912 |
+- do { \ |
28913 |
+- if (target >= len || target < 0) \ |
28914 |
+- goto err; \ |
28915 |
+- insn->off = addrs ? addrs[target] - addrs[i] - 1 : 0; \ |
28916 |
+- /* Adjust pc relative offset for 2nd or 3rd insn. */ \ |
28917 |
+- insn->off -= insn - tmp_insns; \ |
28918 |
+- } while (0) |
28919 |
+- |
28920 |
+- case BPF_JMP | BPF_JA: |
28921 |
+- target = i + fp->k + 1; |
28922 |
+- insn->code = fp->code; |
28923 |
+- BPF_EMIT_JMP; |
28924 |
+- break; |
28925 |
+- |
28926 |
+- case BPF_JMP | BPF_JEQ | BPF_K: |
28927 |
+- case BPF_JMP | BPF_JEQ | BPF_X: |
28928 |
+- case BPF_JMP | BPF_JSET | BPF_K: |
28929 |
+- case BPF_JMP | BPF_JSET | BPF_X: |
28930 |
+- case BPF_JMP | BPF_JGT | BPF_K: |
28931 |
+- case BPF_JMP | BPF_JGT | BPF_X: |
28932 |
+- case BPF_JMP | BPF_JGE | BPF_K: |
28933 |
+- case BPF_JMP | BPF_JGE | BPF_X: |
28934 |
+- if (BPF_SRC(fp->code) == BPF_K && (int) fp->k < 0) { |
28935 |
+- /* BPF immediates are signed, zero extend |
28936 |
+- * immediate into tmp register and use it |
28937 |
+- * in compare insn. |
28938 |
+- */ |
28939 |
+- *insn++ = BPF_MOV32_IMM(BPF_REG_TMP, fp->k); |
28940 |
+- |
28941 |
+- insn->dst_reg = BPF_REG_A; |
28942 |
+- insn->src_reg = BPF_REG_TMP; |
28943 |
+- bpf_src = BPF_X; |
28944 |
+- } else { |
28945 |
+- insn->dst_reg = BPF_REG_A; |
28946 |
+- insn->src_reg = BPF_REG_X; |
28947 |
+- insn->imm = fp->k; |
28948 |
+- bpf_src = BPF_SRC(fp->code); |
28949 |
++ switch (fentry->code) { |
28950 |
++ case BPF_S_ALU_ADD_X: |
28951 |
++ A += X; |
28952 |
++ continue; |
28953 |
++ case BPF_S_ALU_ADD_K: |
28954 |
++ A += K; |
28955 |
++ continue; |
28956 |
++ case BPF_S_ALU_SUB_X: |
28957 |
++ A -= X; |
28958 |
++ continue; |
28959 |
++ case BPF_S_ALU_SUB_K: |
28960 |
++ A -= K; |
28961 |
++ continue; |
28962 |
++ case BPF_S_ALU_MUL_X: |
28963 |
++ A *= X; |
28964 |
++ continue; |
28965 |
++ case BPF_S_ALU_MUL_K: |
28966 |
++ A *= K; |
28967 |
++ continue; |
28968 |
++ case BPF_S_ALU_DIV_X: |
28969 |
++ if (X == 0) |
28970 |
++ return 0; |
28971 |
++ A /= X; |
28972 |
++ continue; |
28973 |
++ case BPF_S_ALU_DIV_K: |
28974 |
++ A /= K; |
28975 |
++ continue; |
28976 |
++ case BPF_S_ALU_MOD_X: |
28977 |
++ if (X == 0) |
28978 |
++ return 0; |
28979 |
++ A %= X; |
28980 |
++ continue; |
28981 |
++ case BPF_S_ALU_MOD_K: |
28982 |
++ A %= K; |
28983 |
++ continue; |
28984 |
++ case BPF_S_ALU_AND_X: |
28985 |
++ A &= X; |
28986 |
++ continue; |
28987 |
++ case BPF_S_ALU_AND_K: |
28988 |
++ A &= K; |
28989 |
++ continue; |
28990 |
++ case BPF_S_ALU_OR_X: |
28991 |
++ A |= X; |
28992 |
++ continue; |
28993 |
++ case BPF_S_ALU_OR_K: |
28994 |
++ A |= K; |
28995 |
++ continue; |
28996 |
++ case BPF_S_ANC_ALU_XOR_X: |
28997 |
++ case BPF_S_ALU_XOR_X: |
28998 |
++ A ^= X; |
28999 |
++ continue; |
29000 |
++ case BPF_S_ALU_XOR_K: |
29001 |
++ A ^= K; |
29002 |
++ continue; |
29003 |
++ case BPF_S_ALU_LSH_X: |
29004 |
++ A <<= X; |
29005 |
++ continue; |
29006 |
++ case BPF_S_ALU_LSH_K: |
29007 |
++ A <<= K; |
29008 |
++ continue; |
29009 |
++ case BPF_S_ALU_RSH_X: |
29010 |
++ A >>= X; |
29011 |
++ continue; |
29012 |
++ case BPF_S_ALU_RSH_K: |
29013 |
++ A >>= K; |
29014 |
++ continue; |
29015 |
++ case BPF_S_ALU_NEG: |
29016 |
++ A = -A; |
29017 |
++ continue; |
29018 |
++ case BPF_S_JMP_JA: |
29019 |
++ fentry += K; |
29020 |
++ continue; |
29021 |
++ case BPF_S_JMP_JGT_K: |
29022 |
++ fentry += (A > K) ? fentry->jt : fentry->jf; |
29023 |
++ continue; |
29024 |
++ case BPF_S_JMP_JGE_K: |
29025 |
++ fentry += (A >= K) ? fentry->jt : fentry->jf; |
29026 |
++ continue; |
29027 |
++ case BPF_S_JMP_JEQ_K: |
29028 |
++ fentry += (A == K) ? fentry->jt : fentry->jf; |
29029 |
++ continue; |
29030 |
++ case BPF_S_JMP_JSET_K: |
29031 |
++ fentry += (A & K) ? fentry->jt : fentry->jf; |
29032 |
++ continue; |
29033 |
++ case BPF_S_JMP_JGT_X: |
29034 |
++ fentry += (A > X) ? fentry->jt : fentry->jf; |
29035 |
++ continue; |
29036 |
++ case BPF_S_JMP_JGE_X: |
29037 |
++ fentry += (A >= X) ? fentry->jt : fentry->jf; |
29038 |
++ continue; |
29039 |
++ case BPF_S_JMP_JEQ_X: |
29040 |
++ fentry += (A == X) ? fentry->jt : fentry->jf; |
29041 |
++ continue; |
29042 |
++ case BPF_S_JMP_JSET_X: |
29043 |
++ fentry += (A & X) ? fentry->jt : fentry->jf; |
29044 |
++ continue; |
29045 |
++ case BPF_S_LD_W_ABS: |
29046 |
++ k = K; |
29047 |
++load_w: |
29048 |
++ ptr = load_pointer(skb, k, 4, &tmp); |
29049 |
++ if (ptr != NULL) { |
29050 |
++ A = get_unaligned_be32(ptr); |
29051 |
++ continue; |
29052 |
+ } |
29053 |
+- |
29054 |
+- /* Common case where 'jump_false' is next insn. */ |
29055 |
+- if (fp->jf == 0) { |
29056 |
+- insn->code = BPF_JMP | BPF_OP(fp->code) | bpf_src; |
29057 |
+- target = i + fp->jt + 1; |
29058 |
+- BPF_EMIT_JMP; |
29059 |
+- break; |
29060 |
++ return 0; |
29061 |
++ case BPF_S_LD_H_ABS: |
29062 |
++ k = K; |
29063 |
++load_h: |
29064 |
++ ptr = load_pointer(skb, k, 2, &tmp); |
29065 |
++ if (ptr != NULL) { |
29066 |
++ A = get_unaligned_be16(ptr); |
29067 |
++ continue; |
29068 |
+ } |
29069 |
+- |
29070 |
+- /* Convert JEQ into JNE when 'jump_true' is next insn. */ |
29071 |
+- if (fp->jt == 0 && BPF_OP(fp->code) == BPF_JEQ) { |
29072 |
+- insn->code = BPF_JMP | BPF_JNE | bpf_src; |
29073 |
+- target = i + fp->jf + 1; |
29074 |
+- BPF_EMIT_JMP; |
29075 |
+- break; |
29076 |
++ return 0; |
29077 |
++ case BPF_S_LD_B_ABS: |
29078 |
++ k = K; |
29079 |
++load_b: |
29080 |
++ ptr = load_pointer(skb, k, 1, &tmp); |
29081 |
++ if (ptr != NULL) { |
29082 |
++ A = *(u8 *)ptr; |
29083 |
++ continue; |
29084 |
+ } |
29085 |
+- |
29086 |
+- /* Other jumps are mapped into two insns: Jxx and JA. */ |
29087 |
+- target = i + fp->jt + 1; |
29088 |
+- insn->code = BPF_JMP | BPF_OP(fp->code) | bpf_src; |
29089 |
+- BPF_EMIT_JMP; |
29090 |
+- insn++; |
29091 |
+- |
29092 |
+- insn->code = BPF_JMP | BPF_JA; |
29093 |
+- target = i + fp->jf + 1; |
29094 |
+- BPF_EMIT_JMP; |
29095 |
+- break; |
29096 |
+- |
29097 |
+- /* ldxb 4 * ([14] & 0xf) is remaped into 6 insns. */ |
29098 |
+- case BPF_LDX | BPF_MSH | BPF_B: |
29099 |
+- /* tmp = A */ |
29100 |
+- *insn++ = BPF_MOV64_REG(BPF_REG_TMP, BPF_REG_A); |
29101 |
+- /* A = BPF_R0 = *(u8 *) (skb->data + K) */ |
29102 |
+- *insn++ = BPF_LD_ABS(BPF_B, fp->k); |
29103 |
+- /* A &= 0xf */ |
29104 |
+- *insn++ = BPF_ALU32_IMM(BPF_AND, BPF_REG_A, 0xf); |
29105 |
+- /* A <<= 2 */ |
29106 |
+- *insn++ = BPF_ALU32_IMM(BPF_LSH, BPF_REG_A, 2); |
29107 |
+- /* X = A */ |
29108 |
+- *insn++ = BPF_MOV64_REG(BPF_REG_X, BPF_REG_A); |
29109 |
+- /* A = tmp */ |
29110 |
+- *insn = BPF_MOV64_REG(BPF_REG_A, BPF_REG_TMP); |
29111 |
+- break; |
29112 |
+- |
29113 |
+- /* RET_K, RET_A are remaped into 2 insns. */ |
29114 |
+- case BPF_RET | BPF_A: |
29115 |
+- case BPF_RET | BPF_K: |
29116 |
+- *insn++ = BPF_MOV32_RAW(BPF_RVAL(fp->code) == BPF_K ? |
29117 |
+- BPF_K : BPF_X, BPF_REG_0, |
29118 |
+- BPF_REG_A, fp->k); |
29119 |
+- *insn = BPF_EXIT_INSN(); |
29120 |
+- break; |
29121 |
+- |
29122 |
+- /* Store to stack. */ |
29123 |
+- case BPF_ST: |
29124 |
+- case BPF_STX: |
29125 |
+- *insn = BPF_STX_MEM(BPF_W, BPF_REG_FP, BPF_CLASS(fp->code) == |
29126 |
+- BPF_ST ? BPF_REG_A : BPF_REG_X, |
29127 |
+- -(BPF_MEMWORDS - fp->k) * 4); |
29128 |
+- break; |
29129 |
+- |
29130 |
+- /* Load from stack. */ |
29131 |
+- case BPF_LD | BPF_MEM: |
29132 |
+- case BPF_LDX | BPF_MEM: |
29133 |
+- *insn = BPF_LDX_MEM(BPF_W, BPF_CLASS(fp->code) == BPF_LD ? |
29134 |
+- BPF_REG_A : BPF_REG_X, BPF_REG_FP, |
29135 |
+- -(BPF_MEMWORDS - fp->k) * 4); |
29136 |
+- break; |
29137 |
+- |
29138 |
+- /* A = K or X = K */ |
29139 |
+- case BPF_LD | BPF_IMM: |
29140 |
+- case BPF_LDX | BPF_IMM: |
29141 |
+- *insn = BPF_MOV32_IMM(BPF_CLASS(fp->code) == BPF_LD ? |
29142 |
+- BPF_REG_A : BPF_REG_X, fp->k); |
29143 |
+- break; |
29144 |
+- |
29145 |
+- /* X = A */ |
29146 |
+- case BPF_MISC | BPF_TAX: |
29147 |
+- *insn = BPF_MOV64_REG(BPF_REG_X, BPF_REG_A); |
29148 |
+- break; |
29149 |
+- |
29150 |
+- /* A = X */ |
29151 |
+- case BPF_MISC | BPF_TXA: |
29152 |
+- *insn = BPF_MOV64_REG(BPF_REG_A, BPF_REG_X); |
29153 |
+- break; |
29154 |
+- |
29155 |
+- /* A = skb->len or X = skb->len */ |
29156 |
+- case BPF_LD | BPF_W | BPF_LEN: |
29157 |
+- case BPF_LDX | BPF_W | BPF_LEN: |
29158 |
+- *insn = BPF_LDX_MEM(BPF_W, BPF_CLASS(fp->code) == BPF_LD ? |
29159 |
+- BPF_REG_A : BPF_REG_X, BPF_REG_CTX, |
29160 |
+- offsetof(struct sk_buff, len)); |
29161 |
+- break; |
29162 |
+- |
29163 |
+- /* Access seccomp_data fields. */ |
29164 |
+- case BPF_LDX | BPF_ABS | BPF_W: |
29165 |
+- /* A = *(u32 *) (ctx + K) */ |
29166 |
+- *insn = BPF_LDX_MEM(BPF_W, BPF_REG_A, BPF_REG_CTX, fp->k); |
29167 |
+- break; |
29168 |
+- |
29169 |
+- /* Unkown instruction. */ |
29170 |
++ return 0; |
29171 |
++ case BPF_S_LD_W_LEN: |
29172 |
++ A = skb->len; |
29173 |
++ continue; |
29174 |
++ case BPF_S_LDX_W_LEN: |
29175 |
++ X = skb->len; |
29176 |
++ continue; |
29177 |
++ case BPF_S_LD_W_IND: |
29178 |
++ k = X + K; |
29179 |
++ goto load_w; |
29180 |
++ case BPF_S_LD_H_IND: |
29181 |
++ k = X + K; |
29182 |
++ goto load_h; |
29183 |
++ case BPF_S_LD_B_IND: |
29184 |
++ k = X + K; |
29185 |
++ goto load_b; |
29186 |
++ case BPF_S_LDX_B_MSH: |
29187 |
++ ptr = load_pointer(skb, K, 1, &tmp); |
29188 |
++ if (ptr != NULL) { |
29189 |
++ X = (*(u8 *)ptr & 0xf) << 2; |
29190 |
++ continue; |
29191 |
++ } |
29192 |
++ return 0; |
29193 |
++ case BPF_S_LD_IMM: |
29194 |
++ A = K; |
29195 |
++ continue; |
29196 |
++ case BPF_S_LDX_IMM: |
29197 |
++ X = K; |
29198 |
++ continue; |
29199 |
++ case BPF_S_LD_MEM: |
29200 |
++ A = mem[K&15]; |
29201 |
++ continue; |
29202 |
++ case BPF_S_LDX_MEM: |
29203 |
++ X = mem[K&15]; |
29204 |
++ continue; |
29205 |
++ case BPF_S_MISC_TAX: |
29206 |
++ X = A; |
29207 |
++ continue; |
29208 |
++ case BPF_S_MISC_TXA: |
29209 |
++ A = X; |
29210 |
++ continue; |
29211 |
++ case BPF_S_RET_K: |
29212 |
++ return K; |
29213 |
++ case BPF_S_RET_A: |
29214 |
++ return A; |
29215 |
++ case BPF_S_ST: |
29216 |
++ mem[K&15] = A; |
29217 |
++ continue; |
29218 |
++ case BPF_S_STX: |
29219 |
++ mem[K&15] = X; |
29220 |
++ continue; |
29221 |
++ case BPF_S_ANC_PROTOCOL: |
29222 |
++ A = ntohs(skb->protocol); |
29223 |
++ continue; |
29224 |
++ case BPF_S_ANC_PKTTYPE: |
29225 |
++ A = skb->pkt_type; |
29226 |
++ continue; |
29227 |
++ case BPF_S_ANC_IFINDEX: |
29228 |
++ if (!skb->dev) |
29229 |
++ return 0; |
29230 |
++ A = skb->dev->ifindex; |
29231 |
++ continue; |
29232 |
++ case BPF_S_ANC_MARK: |
29233 |
++ A = skb->mark; |
29234 |
++ continue; |
29235 |
++ case BPF_S_ANC_QUEUE: |
29236 |
++ A = skb->queue_mapping; |
29237 |
++ continue; |
29238 |
++ case BPF_S_ANC_HATYPE: |
29239 |
++ if (!skb->dev) |
29240 |
++ return 0; |
29241 |
++ A = skb->dev->type; |
29242 |
++ continue; |
29243 |
++ case BPF_S_ANC_RXHASH: |
29244 |
++ A = skb->hash; |
29245 |
++ continue; |
29246 |
++ case BPF_S_ANC_CPU: |
29247 |
++ A = raw_smp_processor_id(); |
29248 |
++ continue; |
29249 |
++ case BPF_S_ANC_VLAN_TAG: |
29250 |
++ A = vlan_tx_tag_get(skb); |
29251 |
++ continue; |
29252 |
++ case BPF_S_ANC_VLAN_TAG_PRESENT: |
29253 |
++ A = !!vlan_tx_tag_present(skb); |
29254 |
++ continue; |
29255 |
++ case BPF_S_ANC_PAY_OFFSET: |
29256 |
++ A = __skb_get_poff(skb); |
29257 |
++ continue; |
29258 |
++ case BPF_S_ANC_NLATTR: { |
29259 |
++ struct nlattr *nla; |
29260 |
++ |
29261 |
++ if (skb_is_nonlinear(skb)) |
29262 |
++ return 0; |
29263 |
++ if (skb->len < sizeof(struct nlattr)) |
29264 |
++ return 0; |
29265 |
++ if (A > skb->len - sizeof(struct nlattr)) |
29266 |
++ return 0; |
29267 |
++ |
29268 |
++ nla = nla_find((struct nlattr *)&skb->data[A], |
29269 |
++ skb->len - A, X); |
29270 |
++ if (nla) |
29271 |
++ A = (void *)nla - (void *)skb->data; |
29272 |
++ else |
29273 |
++ A = 0; |
29274 |
++ continue; |
29275 |
++ } |
29276 |
++ case BPF_S_ANC_NLATTR_NEST: { |
29277 |
++ struct nlattr *nla; |
29278 |
++ |
29279 |
++ if (skb_is_nonlinear(skb)) |
29280 |
++ return 0; |
29281 |
++ if (skb->len < sizeof(struct nlattr)) |
29282 |
++ return 0; |
29283 |
++ if (A > skb->len - sizeof(struct nlattr)) |
29284 |
++ return 0; |
29285 |
++ |
29286 |
++ nla = (struct nlattr *)&skb->data[A]; |
29287 |
++ if (nla->nla_len > skb->len - A) |
29288 |
++ return 0; |
29289 |
++ |
29290 |
++ nla = nla_find_nested(nla, X); |
29291 |
++ if (nla) |
29292 |
++ A = (void *)nla - (void *)skb->data; |
29293 |
++ else |
29294 |
++ A = 0; |
29295 |
++ continue; |
29296 |
++ } |
29297 |
++#ifdef CONFIG_SECCOMP_FILTER |
29298 |
++ case BPF_S_ANC_SECCOMP_LD_W: |
29299 |
++ A = seccomp_bpf_load(fentry->k); |
29300 |
++ continue; |
29301 |
++#endif |
29302 |
+ default: |
29303 |
+- goto err; |
29304 |
++ WARN(1, KERN_ALERT "Unknown sock filter code:%u jt:%u tf:%u k:%u\n", |
29305 |
++ fentry->code, fentry->jt, |
29306 |
++ fentry->jf, fentry->k); |
29307 |
++ BUG(); |
29308 |
++ return 0; |
29309 |
+ } |
29310 |
+- |
29311 |
+- insn++; |
29312 |
+- if (new_prog) |
29313 |
+- memcpy(new_insn, tmp_insns, |
29314 |
+- sizeof(*insn) * (insn - tmp_insns)); |
29315 |
+- new_insn += insn - tmp_insns; |
29316 |
+- } |
29317 |
+- |
29318 |
+- if (!new_prog) { |
29319 |
+- /* Only calculating new length. */ |
29320 |
+- *new_len = new_insn - new_prog; |
29321 |
+- return 0; |
29322 |
+- } |
29323 |
+- |
29324 |
+- pass++; |
29325 |
+- if (new_flen != new_insn - new_prog) { |
29326 |
+- new_flen = new_insn - new_prog; |
29327 |
+- if (pass > 2) |
29328 |
+- goto err; |
29329 |
+- goto do_pass; |
29330 |
+ } |
29331 |
+ |
29332 |
+- kfree(addrs); |
29333 |
+- BUG_ON(*new_len != new_flen); |
29334 |
+ return 0; |
29335 |
+-err: |
29336 |
+- kfree(addrs); |
29337 |
+- return -EINVAL; |
29338 |
+ } |
29339 |
++EXPORT_SYMBOL(sk_run_filter); |
29340 |
+ |
29341 |
+-/* Security: |
29342 |
+- * |
29343 |
++/* |
29344 |
++ * Security : |
29345 |
+ * A BPF program is able to use 16 cells of memory to store intermediate |
29346 |
+- * values (check u32 mem[BPF_MEMWORDS] in sk_run_filter()). |
29347 |
+- * |
29348 |
++ * values (check u32 mem[BPF_MEMWORDS] in sk_run_filter()) |
29349 |
+ * As we dont want to clear mem[] array for each packet going through |
29350 |
+ * sk_run_filter(), we check that filter loaded by user never try to read |
29351 |
+ * a cell if not previously written, and we check all branches to be sure |
29352 |
+@@ -1096,46 +418,44 @@ err: |
29353 |
+ */ |
29354 |
+ static int check_load_and_stores(struct sock_filter *filter, int flen) |
29355 |
+ { |
29356 |
+- u16 *masks, memvalid = 0; /* One bit per cell, 16 cells */ |
29357 |
++ u16 *masks, memvalid = 0; /* one bit per cell, 16 cells */ |
29358 |
+ int pc, ret = 0; |
29359 |
+ |
29360 |
+- BUILD_BUG_ON(BPF_MEMWORDS > 16); |
29361 |
+- |
29362 |
+- masks = kmalloc_array(flen, sizeof(*masks), GFP_KERNEL); |
29363 |
++ BUILD_BUG_ON(BPF_MEMWORDS != 16); |
29364 |
++ masks = kmalloc(flen * sizeof(*masks), GFP_KERNEL); |
29365 |
+ if (!masks) |
29366 |
+ return -ENOMEM; |
29367 |
+- |
29368 |
+ memset(masks, 0xff, flen * sizeof(*masks)); |
29369 |
+ |
29370 |
+ for (pc = 0; pc < flen; pc++) { |
29371 |
+ memvalid &= masks[pc]; |
29372 |
+ |
29373 |
+ switch (filter[pc].code) { |
29374 |
+- case BPF_ST: |
29375 |
+- case BPF_STX: |
29376 |
++ case BPF_S_ST: |
29377 |
++ case BPF_S_STX: |
29378 |
+ memvalid |= (1 << filter[pc].k); |
29379 |
+ break; |
29380 |
+- case BPF_LD | BPF_MEM: |
29381 |
+- case BPF_LDX | BPF_MEM: |
29382 |
++ case BPF_S_LD_MEM: |
29383 |
++ case BPF_S_LDX_MEM: |
29384 |
+ if (!(memvalid & (1 << filter[pc].k))) { |
29385 |
+ ret = -EINVAL; |
29386 |
+ goto error; |
29387 |
+ } |
29388 |
+ break; |
29389 |
+- case BPF_JMP | BPF_JA: |
29390 |
+- /* A jump must set masks on target */ |
29391 |
++ case BPF_S_JMP_JA: |
29392 |
++ /* a jump must set masks on target */ |
29393 |
+ masks[pc + 1 + filter[pc].k] &= memvalid; |
29394 |
+ memvalid = ~0; |
29395 |
+ break; |
29396 |
+- case BPF_JMP | BPF_JEQ | BPF_K: |
29397 |
+- case BPF_JMP | BPF_JEQ | BPF_X: |
29398 |
+- case BPF_JMP | BPF_JGE | BPF_K: |
29399 |
+- case BPF_JMP | BPF_JGE | BPF_X: |
29400 |
+- case BPF_JMP | BPF_JGT | BPF_K: |
29401 |
+- case BPF_JMP | BPF_JGT | BPF_X: |
29402 |
+- case BPF_JMP | BPF_JSET | BPF_K: |
29403 |
+- case BPF_JMP | BPF_JSET | BPF_X: |
29404 |
+- /* A jump must set masks on targets */ |
29405 |
++ case BPF_S_JMP_JEQ_K: |
29406 |
++ case BPF_S_JMP_JEQ_X: |
29407 |
++ case BPF_S_JMP_JGE_K: |
29408 |
++ case BPF_S_JMP_JGE_X: |
29409 |
++ case BPF_S_JMP_JGT_K: |
29410 |
++ case BPF_S_JMP_JGT_X: |
29411 |
++ case BPF_S_JMP_JSET_X: |
29412 |
++ case BPF_S_JMP_JSET_K: |
29413 |
++ /* a jump must set masks on targets */ |
29414 |
+ masks[pc + 1 + filter[pc].jt] &= memvalid; |
29415 |
+ masks[pc + 1 + filter[pc].jf] &= memvalid; |
29416 |
+ memvalid = ~0; |
29417 |
+@@ -1147,72 +467,6 @@ error: |
29418 |
+ return ret; |
29419 |
+ } |
29420 |
+ |
29421 |
+-static bool chk_code_allowed(u16 code_to_probe) |
29422 |
+-{ |
29423 |
+- static const bool codes[] = { |
29424 |
+- /* 32 bit ALU operations */ |
29425 |
+- [BPF_ALU | BPF_ADD | BPF_K] = true, |
29426 |
+- [BPF_ALU | BPF_ADD | BPF_X] = true, |
29427 |
+- [BPF_ALU | BPF_SUB | BPF_K] = true, |
29428 |
+- [BPF_ALU | BPF_SUB | BPF_X] = true, |
29429 |
+- [BPF_ALU | BPF_MUL | BPF_K] = true, |
29430 |
+- [BPF_ALU | BPF_MUL | BPF_X] = true, |
29431 |
+- [BPF_ALU | BPF_DIV | BPF_K] = true, |
29432 |
+- [BPF_ALU | BPF_DIV | BPF_X] = true, |
29433 |
+- [BPF_ALU | BPF_MOD | BPF_K] = true, |
29434 |
+- [BPF_ALU | BPF_MOD | BPF_X] = true, |
29435 |
+- [BPF_ALU | BPF_AND | BPF_K] = true, |
29436 |
+- [BPF_ALU | BPF_AND | BPF_X] = true, |
29437 |
+- [BPF_ALU | BPF_OR | BPF_K] = true, |
29438 |
+- [BPF_ALU | BPF_OR | BPF_X] = true, |
29439 |
+- [BPF_ALU | BPF_XOR | BPF_K] = true, |
29440 |
+- [BPF_ALU | BPF_XOR | BPF_X] = true, |
29441 |
+- [BPF_ALU | BPF_LSH | BPF_K] = true, |
29442 |
+- [BPF_ALU | BPF_LSH | BPF_X] = true, |
29443 |
+- [BPF_ALU | BPF_RSH | BPF_K] = true, |
29444 |
+- [BPF_ALU | BPF_RSH | BPF_X] = true, |
29445 |
+- [BPF_ALU | BPF_NEG] = true, |
29446 |
+- /* Load instructions */ |
29447 |
+- [BPF_LD | BPF_W | BPF_ABS] = true, |
29448 |
+- [BPF_LD | BPF_H | BPF_ABS] = true, |
29449 |
+- [BPF_LD | BPF_B | BPF_ABS] = true, |
29450 |
+- [BPF_LD | BPF_W | BPF_LEN] = true, |
29451 |
+- [BPF_LD | BPF_W | BPF_IND] = true, |
29452 |
+- [BPF_LD | BPF_H | BPF_IND] = true, |
29453 |
+- [BPF_LD | BPF_B | BPF_IND] = true, |
29454 |
+- [BPF_LD | BPF_IMM] = true, |
29455 |
+- [BPF_LD | BPF_MEM] = true, |
29456 |
+- [BPF_LDX | BPF_W | BPF_LEN] = true, |
29457 |
+- [BPF_LDX | BPF_B | BPF_MSH] = true, |
29458 |
+- [BPF_LDX | BPF_IMM] = true, |
29459 |
+- [BPF_LDX | BPF_MEM] = true, |
29460 |
+- /* Store instructions */ |
29461 |
+- [BPF_ST] = true, |
29462 |
+- [BPF_STX] = true, |
29463 |
+- /* Misc instructions */ |
29464 |
+- [BPF_MISC | BPF_TAX] = true, |
29465 |
+- [BPF_MISC | BPF_TXA] = true, |
29466 |
+- /* Return instructions */ |
29467 |
+- [BPF_RET | BPF_K] = true, |
29468 |
+- [BPF_RET | BPF_A] = true, |
29469 |
+- /* Jump instructions */ |
29470 |
+- [BPF_JMP | BPF_JA] = true, |
29471 |
+- [BPF_JMP | BPF_JEQ | BPF_K] = true, |
29472 |
+- [BPF_JMP | BPF_JEQ | BPF_X] = true, |
29473 |
+- [BPF_JMP | BPF_JGE | BPF_K] = true, |
29474 |
+- [BPF_JMP | BPF_JGE | BPF_X] = true, |
29475 |
+- [BPF_JMP | BPF_JGT | BPF_K] = true, |
29476 |
+- [BPF_JMP | BPF_JGT | BPF_X] = true, |
29477 |
+- [BPF_JMP | BPF_JSET | BPF_K] = true, |
29478 |
+- [BPF_JMP | BPF_JSET | BPF_X] = true, |
29479 |
+- }; |
29480 |
+- |
29481 |
+- if (code_to_probe >= ARRAY_SIZE(codes)) |
29482 |
+- return false; |
29483 |
+- |
29484 |
+- return codes[code_to_probe]; |
29485 |
+-} |
29486 |
+- |
29487 |
+ /** |
29488 |
+ * sk_chk_filter - verify socket filter code |
29489 |
+ * @filter: filter to verify |
29490 |
+@@ -1229,303 +483,187 @@ static bool chk_code_allowed(u16 code_to_probe) |
29491 |
+ */ |
29492 |
+ int sk_chk_filter(struct sock_filter *filter, unsigned int flen) |
29493 |
{ |
29494 |
-- struct compat_group_filter __user *gf32 = (void *)optval; |
29495 |
-+ struct compat_group_filter __user *gf32 = (void __user *)optval; |
29496 |
- struct group_filter __user *kgf; |
29497 |
- int __user *koptlen; |
29498 |
- u32 interface, fmode, numsrc; |
29499 |
-@@ -804,7 +804,7 @@ COMPAT_SYSCALL_DEFINE2(socketcall, int, call, u32 __user *, args) |
29500 |
+- bool anc_found; |
29501 |
++ /* |
29502 |
++ * Valid instructions are initialized to non-0. |
29503 |
++ * Invalid instructions are initialized to 0. |
29504 |
++ */ |
29505 |
++ static const u8 codes[] = { |
29506 |
++ [BPF_ALU|BPF_ADD|BPF_K] = BPF_S_ALU_ADD_K, |
29507 |
++ [BPF_ALU|BPF_ADD|BPF_X] = BPF_S_ALU_ADD_X, |
29508 |
++ [BPF_ALU|BPF_SUB|BPF_K] = BPF_S_ALU_SUB_K, |
29509 |
++ [BPF_ALU|BPF_SUB|BPF_X] = BPF_S_ALU_SUB_X, |
29510 |
++ [BPF_ALU|BPF_MUL|BPF_K] = BPF_S_ALU_MUL_K, |
29511 |
++ [BPF_ALU|BPF_MUL|BPF_X] = BPF_S_ALU_MUL_X, |
29512 |
++ [BPF_ALU|BPF_DIV|BPF_X] = BPF_S_ALU_DIV_X, |
29513 |
++ [BPF_ALU|BPF_MOD|BPF_K] = BPF_S_ALU_MOD_K, |
29514 |
++ [BPF_ALU|BPF_MOD|BPF_X] = BPF_S_ALU_MOD_X, |
29515 |
++ [BPF_ALU|BPF_AND|BPF_K] = BPF_S_ALU_AND_K, |
29516 |
++ [BPF_ALU|BPF_AND|BPF_X] = BPF_S_ALU_AND_X, |
29517 |
++ [BPF_ALU|BPF_OR|BPF_K] = BPF_S_ALU_OR_K, |
29518 |
++ [BPF_ALU|BPF_OR|BPF_X] = BPF_S_ALU_OR_X, |
29519 |
++ [BPF_ALU|BPF_XOR|BPF_K] = BPF_S_ALU_XOR_K, |
29520 |
++ [BPF_ALU|BPF_XOR|BPF_X] = BPF_S_ALU_XOR_X, |
29521 |
++ [BPF_ALU|BPF_LSH|BPF_K] = BPF_S_ALU_LSH_K, |
29522 |
++ [BPF_ALU|BPF_LSH|BPF_X] = BPF_S_ALU_LSH_X, |
29523 |
++ [BPF_ALU|BPF_RSH|BPF_K] = BPF_S_ALU_RSH_K, |
29524 |
++ [BPF_ALU|BPF_RSH|BPF_X] = BPF_S_ALU_RSH_X, |
29525 |
++ [BPF_ALU|BPF_NEG] = BPF_S_ALU_NEG, |
29526 |
++ [BPF_LD|BPF_W|BPF_ABS] = BPF_S_LD_W_ABS, |
29527 |
++ [BPF_LD|BPF_H|BPF_ABS] = BPF_S_LD_H_ABS, |
29528 |
++ [BPF_LD|BPF_B|BPF_ABS] = BPF_S_LD_B_ABS, |
29529 |
++ [BPF_LD|BPF_W|BPF_LEN] = BPF_S_LD_W_LEN, |
29530 |
++ [BPF_LD|BPF_W|BPF_IND] = BPF_S_LD_W_IND, |
29531 |
++ [BPF_LD|BPF_H|BPF_IND] = BPF_S_LD_H_IND, |
29532 |
++ [BPF_LD|BPF_B|BPF_IND] = BPF_S_LD_B_IND, |
29533 |
++ [BPF_LD|BPF_IMM] = BPF_S_LD_IMM, |
29534 |
++ [BPF_LDX|BPF_W|BPF_LEN] = BPF_S_LDX_W_LEN, |
29535 |
++ [BPF_LDX|BPF_B|BPF_MSH] = BPF_S_LDX_B_MSH, |
29536 |
++ [BPF_LDX|BPF_IMM] = BPF_S_LDX_IMM, |
29537 |
++ [BPF_MISC|BPF_TAX] = BPF_S_MISC_TAX, |
29538 |
++ [BPF_MISC|BPF_TXA] = BPF_S_MISC_TXA, |
29539 |
++ [BPF_RET|BPF_K] = BPF_S_RET_K, |
29540 |
++ [BPF_RET|BPF_A] = BPF_S_RET_A, |
29541 |
++ [BPF_ALU|BPF_DIV|BPF_K] = BPF_S_ALU_DIV_K, |
29542 |
++ [BPF_LD|BPF_MEM] = BPF_S_LD_MEM, |
29543 |
++ [BPF_LDX|BPF_MEM] = BPF_S_LDX_MEM, |
29544 |
++ [BPF_ST] = BPF_S_ST, |
29545 |
++ [BPF_STX] = BPF_S_STX, |
29546 |
++ [BPF_JMP|BPF_JA] = BPF_S_JMP_JA, |
29547 |
++ [BPF_JMP|BPF_JEQ|BPF_K] = BPF_S_JMP_JEQ_K, |
29548 |
++ [BPF_JMP|BPF_JEQ|BPF_X] = BPF_S_JMP_JEQ_X, |
29549 |
++ [BPF_JMP|BPF_JGE|BPF_K] = BPF_S_JMP_JGE_K, |
29550 |
++ [BPF_JMP|BPF_JGE|BPF_X] = BPF_S_JMP_JGE_X, |
29551 |
++ [BPF_JMP|BPF_JGT|BPF_K] = BPF_S_JMP_JGT_K, |
29552 |
++ [BPF_JMP|BPF_JGT|BPF_X] = BPF_S_JMP_JGT_X, |
29553 |
++ [BPF_JMP|BPF_JSET|BPF_K] = BPF_S_JMP_JSET_K, |
29554 |
++ [BPF_JMP|BPF_JSET|BPF_X] = BPF_S_JMP_JSET_X, |
29555 |
++ }; |
29556 |
+ int pc; |
29557 |
++ bool anc_found; |
29558 |
|
29559 |
- if (call < SYS_SOCKET || call > SYS_SENDMMSG) |
29560 |
+ if (flen == 0 || flen > BPF_MAXINSNS) |
29561 |
return -EINVAL; |
29562 |
-- if (copy_from_user(a, args, nas[call])) |
29563 |
-+ if (nas[call] > sizeof a || copy_from_user(a, args, nas[call])) |
29564 |
- return -EFAULT; |
29565 |
- a0 = a[0]; |
29566 |
- a1 = a[1]; |
29567 |
-diff --git a/net/core/datagram.c b/net/core/datagram.c |
29568 |
-index a16ed7b..eb44d17 100644 |
29569 |
---- a/net/core/datagram.c |
29570 |
-+++ b/net/core/datagram.c |
29571 |
-@@ -301,7 +301,7 @@ int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags) |
29572 |
- } |
29573 |
|
29574 |
- kfree_skb(skb); |
29575 |
-- atomic_inc(&sk->sk_drops); |
29576 |
-+ atomic_inc_unchecked(&sk->sk_drops); |
29577 |
- sk_mem_reclaim_partial(sk); |
29578 |
+- /* Check the filter code now */ |
29579 |
++ /* check the filter code now */ |
29580 |
+ for (pc = 0; pc < flen; pc++) { |
29581 |
+ struct sock_filter *ftest = &filter[pc]; |
29582 |
++ u16 code = ftest->code; |
29583 |
|
29584 |
- return err; |
29585 |
-diff --git a/net/core/dev.c b/net/core/dev.c |
29586 |
-index a7621f3..ca7dac3 100644 |
29587 |
---- a/net/core/dev.c |
29588 |
-+++ b/net/core/dev.c |
29589 |
-@@ -1690,14 +1690,14 @@ int dev_forward_skb(struct net_device *dev, struct sk_buff *skb) |
29590 |
- { |
29591 |
- if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) { |
29592 |
- if (skb_copy_ubufs(skb, GFP_ATOMIC)) { |
29593 |
-- atomic_long_inc(&dev->rx_dropped); |
29594 |
-+ atomic_long_inc_unchecked(&dev->rx_dropped); |
29595 |
- kfree_skb(skb); |
29596 |
- return NET_RX_DROP; |
29597 |
+- /* May we actually operate on this code? */ |
29598 |
+- if (!chk_code_allowed(ftest->code)) |
29599 |
++ if (code >= ARRAY_SIZE(codes)) |
29600 |
++ return -EINVAL; |
29601 |
++ code = codes[code]; |
29602 |
++ if (!code) |
29603 |
+ return -EINVAL; |
29604 |
+- |
29605 |
+ /* Some instructions need special checks */ |
29606 |
+- switch (ftest->code) { |
29607 |
+- case BPF_ALU | BPF_DIV | BPF_K: |
29608 |
+- case BPF_ALU | BPF_MOD | BPF_K: |
29609 |
+- /* Check for division by zero */ |
29610 |
++ switch (code) { |
29611 |
++ case BPF_S_ALU_DIV_K: |
29612 |
++ case BPF_S_ALU_MOD_K: |
29613 |
++ /* check for division by zero */ |
29614 |
+ if (ftest->k == 0) |
29615 |
+ return -EINVAL; |
29616 |
+ break; |
29617 |
+- case BPF_LD | BPF_MEM: |
29618 |
+- case BPF_LDX | BPF_MEM: |
29619 |
+- case BPF_ST: |
29620 |
+- case BPF_STX: |
29621 |
+- /* Check for invalid memory addresses */ |
29622 |
++ case BPF_S_LD_MEM: |
29623 |
++ case BPF_S_LDX_MEM: |
29624 |
++ case BPF_S_ST: |
29625 |
++ case BPF_S_STX: |
29626 |
++ /* check for invalid memory addresses */ |
29627 |
+ if (ftest->k >= BPF_MEMWORDS) |
29628 |
+ return -EINVAL; |
29629 |
+ break; |
29630 |
+- case BPF_JMP | BPF_JA: |
29631 |
+- /* Note, the large ftest->k might cause loops. |
29632 |
++ case BPF_S_JMP_JA: |
29633 |
++ /* |
29634 |
++ * Note, the large ftest->k might cause loops. |
29635 |
+ * Compare this with conditional jumps below, |
29636 |
+ * where offsets are limited. --ANK (981016) |
29637 |
+ */ |
29638 |
+- if (ftest->k >= (unsigned int)(flen - pc - 1)) |
29639 |
++ if (ftest->k >= (unsigned int)(flen-pc-1)) |
29640 |
+ return -EINVAL; |
29641 |
+ break; |
29642 |
+- case BPF_JMP | BPF_JEQ | BPF_K: |
29643 |
+- case BPF_JMP | BPF_JEQ | BPF_X: |
29644 |
+- case BPF_JMP | BPF_JGE | BPF_K: |
29645 |
+- case BPF_JMP | BPF_JGE | BPF_X: |
29646 |
+- case BPF_JMP | BPF_JGT | BPF_K: |
29647 |
+- case BPF_JMP | BPF_JGT | BPF_X: |
29648 |
+- case BPF_JMP | BPF_JSET | BPF_K: |
29649 |
+- case BPF_JMP | BPF_JSET | BPF_X: |
29650 |
+- /* Both conditionals must be safe */ |
29651 |
++ case BPF_S_JMP_JEQ_K: |
29652 |
++ case BPF_S_JMP_JEQ_X: |
29653 |
++ case BPF_S_JMP_JGE_K: |
29654 |
++ case BPF_S_JMP_JGE_X: |
29655 |
++ case BPF_S_JMP_JGT_K: |
29656 |
++ case BPF_S_JMP_JGT_X: |
29657 |
++ case BPF_S_JMP_JSET_X: |
29658 |
++ case BPF_S_JMP_JSET_K: |
29659 |
++ /* for conditionals both must be safe */ |
29660 |
+ if (pc + ftest->jt + 1 >= flen || |
29661 |
+ pc + ftest->jf + 1 >= flen) |
29662 |
+ return -EINVAL; |
29663 |
+ break; |
29664 |
+- case BPF_LD | BPF_W | BPF_ABS: |
29665 |
+- case BPF_LD | BPF_H | BPF_ABS: |
29666 |
+- case BPF_LD | BPF_B | BPF_ABS: |
29667 |
++ case BPF_S_LD_W_ABS: |
29668 |
++ case BPF_S_LD_H_ABS: |
29669 |
++ case BPF_S_LD_B_ABS: |
29670 |
+ anc_found = false; |
29671 |
+- if (bpf_anc_helper(ftest) & BPF_ANC) |
29672 |
+- anc_found = true; |
29673 |
+- /* Ancillary operation unknown or unsupported */ |
29674 |
++#define ANCILLARY(CODE) case SKF_AD_OFF + SKF_AD_##CODE: \ |
29675 |
++ code = BPF_S_ANC_##CODE; \ |
29676 |
++ anc_found = true; \ |
29677 |
++ break |
29678 |
++ switch (ftest->k) { |
29679 |
++ ANCILLARY(PROTOCOL); |
29680 |
++ ANCILLARY(PKTTYPE); |
29681 |
++ ANCILLARY(IFINDEX); |
29682 |
++ ANCILLARY(NLATTR); |
29683 |
++ ANCILLARY(NLATTR_NEST); |
29684 |
++ ANCILLARY(MARK); |
29685 |
++ ANCILLARY(QUEUE); |
29686 |
++ ANCILLARY(HATYPE); |
29687 |
++ ANCILLARY(RXHASH); |
29688 |
++ ANCILLARY(CPU); |
29689 |
++ ANCILLARY(ALU_XOR_X); |
29690 |
++ ANCILLARY(VLAN_TAG); |
29691 |
++ ANCILLARY(VLAN_TAG_PRESENT); |
29692 |
++ ANCILLARY(PAY_OFFSET); |
29693 |
++ } |
29694 |
++ |
29695 |
++ /* ancillary operation unknown or unsupported */ |
29696 |
+ if (anc_found == false && ftest->k >= SKF_AD_OFF) |
29697 |
+ return -EINVAL; |
29698 |
} |
29699 |
++ ftest->code = code; |
29700 |
} |
29701 |
|
29702 |
- if (unlikely(!is_skb_forwardable(dev, skb))) { |
29703 |
-- atomic_long_inc(&dev->rx_dropped); |
29704 |
-+ atomic_long_inc_unchecked(&dev->rx_dropped); |
29705 |
- kfree_skb(skb); |
29706 |
- return NET_RX_DROP; |
29707 |
+- /* Last instruction must be a RET code */ |
29708 |
++ /* last instruction must be a RET code */ |
29709 |
+ switch (filter[flen - 1].code) { |
29710 |
+- case BPF_RET | BPF_K: |
29711 |
+- case BPF_RET | BPF_A: |
29712 |
++ case BPF_S_RET_K: |
29713 |
++ case BPF_S_RET_A: |
29714 |
+ return check_load_and_stores(filter, flen); |
29715 |
} |
29716 |
-@@ -2470,7 +2470,7 @@ static int illegal_highdma(struct net_device *dev, struct sk_buff *skb) |
29717 |
+- |
29718 |
+ return -EINVAL; |
29719 |
+ } |
29720 |
+ EXPORT_SYMBOL(sk_chk_filter); |
29721 |
|
29722 |
- struct dev_gso_cb { |
29723 |
- void (*destructor)(struct sk_buff *skb); |
29724 |
--}; |
29725 |
-+} __no_const; |
29726 |
+-static int sk_store_orig_filter(struct sk_filter *fp, |
29727 |
+- const struct sock_fprog *fprog) |
29728 |
+-{ |
29729 |
+- unsigned int fsize = sk_filter_proglen(fprog); |
29730 |
+- struct sock_fprog_kern *fkprog; |
29731 |
+- |
29732 |
+- fp->orig_prog = kmalloc(sizeof(*fkprog), GFP_KERNEL); |
29733 |
+- if (!fp->orig_prog) |
29734 |
+- return -ENOMEM; |
29735 |
+- |
29736 |
+- fkprog = fp->orig_prog; |
29737 |
+- fkprog->len = fprog->len; |
29738 |
+- fkprog->filter = kmemdup(fp->insns, fsize, GFP_KERNEL); |
29739 |
+- if (!fkprog->filter) { |
29740 |
+- kfree(fp->orig_prog); |
29741 |
+- return -ENOMEM; |
29742 |
+- } |
29743 |
+- |
29744 |
+- return 0; |
29745 |
+-} |
29746 |
+- |
29747 |
+-static void sk_release_orig_filter(struct sk_filter *fp) |
29748 |
+-{ |
29749 |
+- struct sock_fprog_kern *fprog = fp->orig_prog; |
29750 |
+- |
29751 |
+- if (fprog) { |
29752 |
+- kfree(fprog->filter); |
29753 |
+- kfree(fprog); |
29754 |
+- } |
29755 |
+-} |
29756 |
+- |
29757 |
+ /** |
29758 |
+ * sk_filter_release_rcu - Release a socket filter by rcu_head |
29759 |
+ * @rcu: rcu_head that contains the sk_filter to free |
29760 |
+ */ |
29761 |
+-static void sk_filter_release_rcu(struct rcu_head *rcu) |
29762 |
++void sk_filter_release_rcu(struct rcu_head *rcu) |
29763 |
+ { |
29764 |
+ struct sk_filter *fp = container_of(rcu, struct sk_filter, rcu); |
29765 |
|
29766 |
- #define DEV_GSO_CB(skb) ((struct dev_gso_cb *)(skb)->cb) |
29767 |
+- sk_release_orig_filter(fp); |
29768 |
+- sk_filter_free(fp); |
29769 |
+-} |
29770 |
+- |
29771 |
+-/** |
29772 |
+- * sk_filter_release - release a socket filter |
29773 |
+- * @fp: filter to remove |
29774 |
+- * |
29775 |
+- * Remove a filter from a socket and release its resources. |
29776 |
+- */ |
29777 |
+-static void sk_filter_release(struct sk_filter *fp) |
29778 |
+-{ |
29779 |
+- if (atomic_dec_and_test(&fp->refcnt)) |
29780 |
+- call_rcu(&fp->rcu, sk_filter_release_rcu); |
29781 |
+-} |
29782 |
+- |
29783 |
+-void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp) |
29784 |
+-{ |
29785 |
+- atomic_sub(sk_filter_size(fp->len), &sk->sk_omem_alloc); |
29786 |
+- sk_filter_release(fp); |
29787 |
+-} |
29788 |
+- |
29789 |
+-void sk_filter_charge(struct sock *sk, struct sk_filter *fp) |
29790 |
+-{ |
29791 |
+- atomic_inc(&fp->refcnt); |
29792 |
+- atomic_add(sk_filter_size(fp->len), &sk->sk_omem_alloc); |
29793 |
+-} |
29794 |
+- |
29795 |
+-static struct sk_filter *__sk_migrate_realloc(struct sk_filter *fp, |
29796 |
+- struct sock *sk, |
29797 |
+- unsigned int len) |
29798 |
+-{ |
29799 |
+- struct sk_filter *fp_new; |
29800 |
+- |
29801 |
+- if (sk == NULL) |
29802 |
+- return krealloc(fp, len, GFP_KERNEL); |
29803 |
+- |
29804 |
+- fp_new = sock_kmalloc(sk, len, GFP_KERNEL); |
29805 |
+- if (fp_new) { |
29806 |
+- *fp_new = *fp; |
29807 |
+- /* As we're keeping orig_prog in fp_new along, |
29808 |
+- * we need to make sure we're not evicting it |
29809 |
+- * from the old fp. |
29810 |
+- */ |
29811 |
+- fp->orig_prog = NULL; |
29812 |
+- sk_filter_uncharge(sk, fp); |
29813 |
+- } |
29814 |
+- |
29815 |
+- return fp_new; |
29816 |
+-} |
29817 |
+- |
29818 |
+-static struct sk_filter *__sk_migrate_filter(struct sk_filter *fp, |
29819 |
+- struct sock *sk) |
29820 |
+-{ |
29821 |
+- struct sock_filter *old_prog; |
29822 |
+- struct sk_filter *old_fp; |
29823 |
+- int err, new_len, old_len = fp->len; |
29824 |
+- |
29825 |
+- /* We are free to overwrite insns et al right here as it |
29826 |
+- * won't be used at this point in time anymore internally |
29827 |
+- * after the migration to the internal BPF instruction |
29828 |
+- * representation. |
29829 |
+- */ |
29830 |
+- BUILD_BUG_ON(sizeof(struct sock_filter) != |
29831 |
+- sizeof(struct sock_filter_int)); |
29832 |
+- |
29833 |
+- /* Conversion cannot happen on overlapping memory areas, |
29834 |
+- * so we need to keep the user BPF around until the 2nd |
29835 |
+- * pass. At this time, the user BPF is stored in fp->insns. |
29836 |
+- */ |
29837 |
+- old_prog = kmemdup(fp->insns, old_len * sizeof(struct sock_filter), |
29838 |
+- GFP_KERNEL); |
29839 |
+- if (!old_prog) { |
29840 |
+- err = -ENOMEM; |
29841 |
+- goto out_err; |
29842 |
+- } |
29843 |
+- |
29844 |
+- /* 1st pass: calculate the new program length. */ |
29845 |
+- err = sk_convert_filter(old_prog, old_len, NULL, &new_len); |
29846 |
+- if (err) |
29847 |
+- goto out_err_free; |
29848 |
+- |
29849 |
+- /* Expand fp for appending the new filter representation. */ |
29850 |
+- old_fp = fp; |
29851 |
+- fp = __sk_migrate_realloc(old_fp, sk, sk_filter_size(new_len)); |
29852 |
+- if (!fp) { |
29853 |
+- /* The old_fp is still around in case we couldn't |
29854 |
+- * allocate new memory, so uncharge on that one. |
29855 |
+- */ |
29856 |
+- fp = old_fp; |
29857 |
+- err = -ENOMEM; |
29858 |
+- goto out_err_free; |
29859 |
+- } |
29860 |
+- |
29861 |
+- fp->len = new_len; |
29862 |
+- |
29863 |
+- /* 2nd pass: remap sock_filter insns into sock_filter_int insns. */ |
29864 |
+- err = sk_convert_filter(old_prog, old_len, fp->insnsi, &new_len); |
29865 |
+- if (err) |
29866 |
+- /* 2nd sk_convert_filter() can fail only if it fails |
29867 |
+- * to allocate memory, remapping must succeed. Note, |
29868 |
+- * that at this time old_fp has already been released |
29869 |
+- * by __sk_migrate_realloc(). |
29870 |
+- */ |
29871 |
+- goto out_err_free; |
29872 |
+- |
29873 |
+- sk_filter_select_runtime(fp); |
29874 |
+- |
29875 |
+- kfree(old_prog); |
29876 |
+- return fp; |
29877 |
+- |
29878 |
+-out_err_free: |
29879 |
+- kfree(old_prog); |
29880 |
+-out_err: |
29881 |
+- /* Rollback filter setup. */ |
29882 |
+- if (sk != NULL) |
29883 |
+- sk_filter_uncharge(sk, fp); |
29884 |
+- else |
29885 |
+- kfree(fp); |
29886 |
+- return ERR_PTR(err); |
29887 |
+-} |
29888 |
+- |
29889 |
+-void __weak bpf_int_jit_compile(struct sk_filter *prog) |
29890 |
+-{ |
29891 |
+-} |
29892 |
+- |
29893 |
+-/** |
29894 |
+- * sk_filter_select_runtime - select execution runtime for BPF program |
29895 |
+- * @fp: sk_filter populated with internal BPF program |
29896 |
+- * |
29897 |
+- * try to JIT internal BPF program, if JIT is not available select interpreter |
29898 |
+- * BPF program will be executed via SK_RUN_FILTER() macro |
29899 |
+- */ |
29900 |
+-void sk_filter_select_runtime(struct sk_filter *fp) |
29901 |
+-{ |
29902 |
+- fp->bpf_func = (void *) __sk_run_filter; |
29903 |
+- |
29904 |
+- /* Probe if internal BPF can be JITed */ |
29905 |
+- bpf_int_jit_compile(fp); |
29906 |
+-} |
29907 |
+-EXPORT_SYMBOL_GPL(sk_filter_select_runtime); |
29908 |
+- |
29909 |
+-/* free internal BPF program */ |
29910 |
+-void sk_filter_free(struct sk_filter *fp) |
29911 |
+-{ |
29912 |
+ bpf_jit_free(fp); |
29913 |
+ } |
29914 |
+-EXPORT_SYMBOL_GPL(sk_filter_free); |
29915 |
++EXPORT_SYMBOL(sk_filter_release_rcu); |
29916 |
|
29917 |
-@@ -2900,7 +2900,7 @@ recursion_alert: |
29918 |
- rc = -ENETDOWN; |
29919 |
- rcu_read_unlock_bh(); |
29920 |
+-static struct sk_filter *__sk_prepare_filter(struct sk_filter *fp, |
29921 |
+- struct sock *sk) |
29922 |
++static int __sk_prepare_filter(struct sk_filter *fp) |
29923 |
+ { |
29924 |
+ int err; |
29925 |
|
29926 |
-- atomic_long_inc(&dev->tx_dropped); |
29927 |
-+ atomic_long_inc_unchecked(&dev->tx_dropped); |
29928 |
- kfree_skb(skb); |
29929 |
- return rc; |
29930 |
- out: |
29931 |
-@@ -3244,7 +3244,7 @@ enqueue: |
29932 |
+- fp->bpf_func = NULL; |
29933 |
+- fp->jited = 0; |
29934 |
++ fp->bpf_func = sk_run_filter; |
29935 |
|
29936 |
- local_irq_restore(flags); |
29937 |
+ err = sk_chk_filter(fp->insns, fp->len); |
29938 |
+- if (err) { |
29939 |
+- if (sk != NULL) |
29940 |
+- sk_filter_uncharge(sk, fp); |
29941 |
+- else |
29942 |
+- kfree(fp); |
29943 |
+- return ERR_PTR(err); |
29944 |
+- } |
29945 |
++ if (err) |
29946 |
++ return err; |
29947 |
|
29948 |
-- atomic_long_inc(&skb->dev->rx_dropped); |
29949 |
-+ atomic_long_inc_unchecked(&skb->dev->rx_dropped); |
29950 |
- kfree_skb(skb); |
29951 |
- return NET_RX_DROP; |
29952 |
- } |
29953 |
-@@ -3321,7 +3321,7 @@ int netif_rx_ni(struct sk_buff *skb) |
29954 |
+- /* Probe if we can JIT compile the filter and if so, do |
29955 |
+- * the compilation of the filter. |
29956 |
+- */ |
29957 |
+ bpf_jit_compile(fp); |
29958 |
+- |
29959 |
+- /* JIT compiler couldn't process this filter, so do the |
29960 |
+- * internal BPF translation for the optimized interpreter. |
29961 |
+- */ |
29962 |
+- if (!fp->jited) |
29963 |
+- fp = __sk_migrate_filter(fp, sk); |
29964 |
+- |
29965 |
+- return fp; |
29966 |
++ return 0; |
29967 |
} |
29968 |
- EXPORT_SYMBOL(netif_rx_ni); |
29969 |
|
29970 |
--static void net_tx_action(struct softirq_action *h) |
29971 |
-+static __latent_entropy void net_tx_action(void) |
29972 |
+ /** |
29973 |
+ * sk_unattached_filter_create - create an unattached filter |
29974 |
++ * @fprog: the filter program |
29975 |
+ * @pfp: the unattached filter that is created |
29976 |
+- * @fprog: the filter program |
29977 |
+ * |
29978 |
+ * Create a filter independent of any socket. We first run some |
29979 |
+ * sanity checks on it to make sure it does not explode on us later. |
29980 |
+@@ -1533,10 +671,11 @@ static struct sk_filter *__sk_prepare_filter(struct sk_filter *fp, |
29981 |
+ * a negative errno code is returned. On success the return is zero. |
29982 |
+ */ |
29983 |
+ int sk_unattached_filter_create(struct sk_filter **pfp, |
29984 |
+- struct sock_fprog_kern *fprog) |
29985 |
++ struct sock_fprog *fprog) |
29986 |
{ |
29987 |
- struct softnet_data *sd = &__get_cpu_var(softnet_data); |
29988 |
+- unsigned int fsize = sk_filter_proglen(fprog); |
29989 |
+ struct sk_filter *fp; |
29990 |
++ unsigned int fsize = sizeof(struct sock_filter) * fprog->len; |
29991 |
++ int err; |
29992 |
|
29993 |
-@@ -3654,7 +3654,7 @@ ncls: |
29994 |
- ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev); |
29995 |
- } else { |
29996 |
- drop: |
29997 |
-- atomic_long_inc(&skb->dev->rx_dropped); |
29998 |
-+ atomic_long_inc_unchecked(&skb->dev->rx_dropped); |
29999 |
- kfree_skb(skb); |
30000 |
- /* Jamal, now you will not able to escape explaining |
30001 |
- * me how you were going to use this. :-) |
30002 |
-@@ -4375,7 +4375,7 @@ void netif_napi_del(struct napi_struct *napi) |
30003 |
+ /* Make sure new filter is there and in the right amounts. */ |
30004 |
+ if (fprog->filter == NULL) |
30005 |
+@@ -1545,26 +684,20 @@ int sk_unattached_filter_create(struct sk_filter **pfp, |
30006 |
+ fp = kmalloc(sk_filter_size(fprog->len), GFP_KERNEL); |
30007 |
+ if (!fp) |
30008 |
+ return -ENOMEM; |
30009 |
+- |
30010 |
+- memcpy(fp->insns, fprog->filter, fsize); |
30011 |
++ memcpy(fp->insns, (void __force_kernel *)fprog->filter, fsize); |
30012 |
+ |
30013 |
+ atomic_set(&fp->refcnt, 1); |
30014 |
+ fp->len = fprog->len; |
30015 |
+- /* Since unattached filters are not copied back to user |
30016 |
+- * space through sk_get_filter(), we do not need to hold |
30017 |
+- * a copy here, and can spare us the work. |
30018 |
+- */ |
30019 |
+- fp->orig_prog = NULL; |
30020 |
+ |
30021 |
+- /* __sk_prepare_filter() already takes care of uncharging |
30022 |
+- * memory in case something goes wrong. |
30023 |
+- */ |
30024 |
+- fp = __sk_prepare_filter(fp, NULL); |
30025 |
+- if (IS_ERR(fp)) |
30026 |
+- return PTR_ERR(fp); |
30027 |
++ err = __sk_prepare_filter(fp); |
30028 |
++ if (err) |
30029 |
++ goto free_mem; |
30030 |
+ |
30031 |
+ *pfp = fp; |
30032 |
+ return 0; |
30033 |
++free_mem: |
30034 |
++ kfree(fp); |
30035 |
++ return err; |
30036 |
} |
30037 |
- EXPORT_SYMBOL(netif_napi_del); |
30038 |
+ EXPORT_SYMBOL_GPL(sk_unattached_filter_create); |
30039 |
|
30040 |
--static void net_rx_action(struct softirq_action *h) |
30041 |
-+static __latent_entropy void net_rx_action(void) |
30042 |
+@@ -1587,7 +720,7 @@ EXPORT_SYMBOL_GPL(sk_unattached_filter_destroy); |
30043 |
+ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk) |
30044 |
{ |
30045 |
- struct softnet_data *sd = &__get_cpu_var(softnet_data); |
30046 |
- unsigned long time_limit = jiffies + 2; |
30047 |
-@@ -6375,8 +6375,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev, |
30048 |
- } else { |
30049 |
- netdev_stats_to_stats64(storage, &dev->stats); |
30050 |
+ struct sk_filter *fp, *old_fp; |
30051 |
+- unsigned int fsize = sk_filter_proglen(fprog); |
30052 |
++ unsigned int fsize = sizeof(struct sock_filter) * fprog->len; |
30053 |
+ unsigned int sk_fsize = sk_filter_size(fprog->len); |
30054 |
+ int err; |
30055 |
+ |
30056 |
+@@ -1601,7 +734,6 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk) |
30057 |
+ fp = sock_kmalloc(sk, sk_fsize, GFP_KERNEL); |
30058 |
+ if (!fp) |
30059 |
+ return -ENOMEM; |
30060 |
+- |
30061 |
+ if (copy_from_user(fp->insns, fprog->filter, fsize)) { |
30062 |
+ sock_kfree_s(sk, fp, sk_fsize); |
30063 |
+ return -EFAULT; |
30064 |
+@@ -1610,26 +742,18 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk) |
30065 |
+ atomic_set(&fp->refcnt, 1); |
30066 |
+ fp->len = fprog->len; |
30067 |
+ |
30068 |
+- err = sk_store_orig_filter(fp, fprog); |
30069 |
++ err = __sk_prepare_filter(fp); |
30070 |
+ if (err) { |
30071 |
+ sk_filter_uncharge(sk, fp); |
30072 |
+- return -ENOMEM; |
30073 |
++ return err; |
30074 |
} |
30075 |
-- storage->rx_dropped += atomic_long_read(&dev->rx_dropped); |
30076 |
-- storage->tx_dropped += atomic_long_read(&dev->tx_dropped); |
30077 |
-+ storage->rx_dropped += atomic_long_read_unchecked(&dev->rx_dropped); |
30078 |
-+ storage->tx_dropped += atomic_long_read_unchecked(&dev->tx_dropped); |
30079 |
- return storage; |
30080 |
+ |
30081 |
+- /* __sk_prepare_filter() already takes care of uncharging |
30082 |
+- * memory in case something goes wrong. |
30083 |
+- */ |
30084 |
+- fp = __sk_prepare_filter(fp, sk); |
30085 |
+- if (IS_ERR(fp)) |
30086 |
+- return PTR_ERR(fp); |
30087 |
+- |
30088 |
+ old_fp = rcu_dereference_protected(sk->sk_filter, |
30089 |
+ sock_owned_by_user(sk)); |
30090 |
+ rcu_assign_pointer(sk->sk_filter, fp); |
30091 |
+ |
30092 |
+ if (old_fp) |
30093 |
+ sk_filter_uncharge(sk, old_fp); |
30094 |
+- |
30095 |
+ return 0; |
30096 |
} |
30097 |
- EXPORT_SYMBOL(dev_get_stats); |
30098 |
-diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c |
30099 |
-index cf999e0..c59a975 100644 |
30100 |
---- a/net/core/dev_ioctl.c |
30101 |
-+++ b/net/core/dev_ioctl.c |
30102 |
-@@ -366,9 +366,13 @@ void dev_load(struct net *net, const char *name) |
30103 |
- if (no_module && capable(CAP_NET_ADMIN)) |
30104 |
- no_module = request_module("netdev-%s", name); |
30105 |
- if (no_module && capable(CAP_SYS_MODULE)) { |
30106 |
-+#ifdef CONFIG_GRKERNSEC_MODHARDEN |
30107 |
-+ ___request_module(true, "grsec_modharden_netdev", "%s", name); |
30108 |
-+#else |
30109 |
- if (!request_module("%s", name)) |
30110 |
- pr_warn("Loading kernel module for a network device with CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-%s instead.\n", |
30111 |
- name); |
30112 |
-+#endif |
30113 |
+ EXPORT_SYMBOL_GPL(sk_attach_filter); |
30114 |
+@@ -1649,46 +773,116 @@ int sk_detach_filter(struct sock *sk) |
30115 |
+ sk_filter_uncharge(sk, filter); |
30116 |
+ ret = 0; |
30117 |
} |
30118 |
+- |
30119 |
+ return ret; |
30120 |
} |
30121 |
- EXPORT_SYMBOL(dev_load); |
30122 |
-diff --git a/net/core/filter.c b/net/core/filter.c |
30123 |
-index 5310d5e..01f885e 100644 |
30124 |
---- a/net/core/filter.c |
30125 |
-+++ b/net/core/filter.c |
30126 |
-@@ -1121,7 +1121,11 @@ do_pass: |
30127 |
- break; |
30128 |
- |
30129 |
- default: |
30130 |
-- goto err; |
30131 |
-+ WARN(1, KERN_ALERT "Unknown sock filter code:%u jt:%u tf:%u k:%u\n", |
30132 |
-+ fp->code, fp->jt, fp->jf, fp->k); |
30133 |
-+ kfree(addrs); |
30134 |
-+ BUG(); |
30135 |
-+ return -EINVAL; |
30136 |
- } |
30137 |
- |
30138 |
- insn++; |
30139 |
-@@ -1170,7 +1174,7 @@ static int check_load_and_stores(struct sock_filter *filter, int flen) |
30140 |
- u16 *masks, memvalid = 0; /* one bit per cell, 16 cells */ |
30141 |
- int pc, ret = 0; |
30142 |
- |
30143 |
-- BUILD_BUG_ON(BPF_MEMWORDS > 16); |
30144 |
-+ BUILD_BUG_ON(BPF_MEMWORDS != 16); |
30145 |
- masks = kmalloc(flen * sizeof(*masks), GFP_KERNEL); |
30146 |
- if (!masks) |
30147 |
- return -ENOMEM; |
30148 |
-@@ -1605,7 +1609,7 @@ int sk_unattached_filter_create(struct sk_filter **pfp, |
30149 |
- if (!fp) |
30150 |
- return -ENOMEM; |
30151 |
+ EXPORT_SYMBOL_GPL(sk_detach_filter); |
30152 |
+ |
30153 |
+-int sk_get_filter(struct sock *sk, struct sock_filter __user *ubuf, |
30154 |
+- unsigned int len) |
30155 |
++void sk_decode_filter(struct sock_filter *filt, struct sock_filter *to) |
30156 |
++{ |
30157 |
++ static const u16 decodes[] = { |
30158 |
++ [BPF_S_ALU_ADD_K] = BPF_ALU|BPF_ADD|BPF_K, |
30159 |
++ [BPF_S_ALU_ADD_X] = BPF_ALU|BPF_ADD|BPF_X, |
30160 |
++ [BPF_S_ALU_SUB_K] = BPF_ALU|BPF_SUB|BPF_K, |
30161 |
++ [BPF_S_ALU_SUB_X] = BPF_ALU|BPF_SUB|BPF_X, |
30162 |
++ [BPF_S_ALU_MUL_K] = BPF_ALU|BPF_MUL|BPF_K, |
30163 |
++ [BPF_S_ALU_MUL_X] = BPF_ALU|BPF_MUL|BPF_X, |
30164 |
++ [BPF_S_ALU_DIV_X] = BPF_ALU|BPF_DIV|BPF_X, |
30165 |
++ [BPF_S_ALU_MOD_K] = BPF_ALU|BPF_MOD|BPF_K, |
30166 |
++ [BPF_S_ALU_MOD_X] = BPF_ALU|BPF_MOD|BPF_X, |
30167 |
++ [BPF_S_ALU_AND_K] = BPF_ALU|BPF_AND|BPF_K, |
30168 |
++ [BPF_S_ALU_AND_X] = BPF_ALU|BPF_AND|BPF_X, |
30169 |
++ [BPF_S_ALU_OR_K] = BPF_ALU|BPF_OR|BPF_K, |
30170 |
++ [BPF_S_ALU_OR_X] = BPF_ALU|BPF_OR|BPF_X, |
30171 |
++ [BPF_S_ALU_XOR_K] = BPF_ALU|BPF_XOR|BPF_K, |
30172 |
++ [BPF_S_ALU_XOR_X] = BPF_ALU|BPF_XOR|BPF_X, |
30173 |
++ [BPF_S_ALU_LSH_K] = BPF_ALU|BPF_LSH|BPF_K, |
30174 |
++ [BPF_S_ALU_LSH_X] = BPF_ALU|BPF_LSH|BPF_X, |
30175 |
++ [BPF_S_ALU_RSH_K] = BPF_ALU|BPF_RSH|BPF_K, |
30176 |
++ [BPF_S_ALU_RSH_X] = BPF_ALU|BPF_RSH|BPF_X, |
30177 |
++ [BPF_S_ALU_NEG] = BPF_ALU|BPF_NEG, |
30178 |
++ [BPF_S_LD_W_ABS] = BPF_LD|BPF_W|BPF_ABS, |
30179 |
++ [BPF_S_LD_H_ABS] = BPF_LD|BPF_H|BPF_ABS, |
30180 |
++ [BPF_S_LD_B_ABS] = BPF_LD|BPF_B|BPF_ABS, |
30181 |
++ [BPF_S_ANC_PROTOCOL] = BPF_LD|BPF_B|BPF_ABS, |
30182 |
++ [BPF_S_ANC_PKTTYPE] = BPF_LD|BPF_B|BPF_ABS, |
30183 |
++ [BPF_S_ANC_IFINDEX] = BPF_LD|BPF_B|BPF_ABS, |
30184 |
++ [BPF_S_ANC_NLATTR] = BPF_LD|BPF_B|BPF_ABS, |
30185 |
++ [BPF_S_ANC_NLATTR_NEST] = BPF_LD|BPF_B|BPF_ABS, |
30186 |
++ [BPF_S_ANC_MARK] = BPF_LD|BPF_B|BPF_ABS, |
30187 |
++ [BPF_S_ANC_QUEUE] = BPF_LD|BPF_B|BPF_ABS, |
30188 |
++ [BPF_S_ANC_HATYPE] = BPF_LD|BPF_B|BPF_ABS, |
30189 |
++ [BPF_S_ANC_RXHASH] = BPF_LD|BPF_B|BPF_ABS, |
30190 |
++ [BPF_S_ANC_CPU] = BPF_LD|BPF_B|BPF_ABS, |
30191 |
++ [BPF_S_ANC_ALU_XOR_X] = BPF_LD|BPF_B|BPF_ABS, |
30192 |
++ [BPF_S_ANC_SECCOMP_LD_W] = BPF_LD|BPF_B|BPF_ABS, |
30193 |
++ [BPF_S_ANC_VLAN_TAG] = BPF_LD|BPF_B|BPF_ABS, |
30194 |
++ [BPF_S_ANC_VLAN_TAG_PRESENT] = BPF_LD|BPF_B|BPF_ABS, |
30195 |
++ [BPF_S_ANC_PAY_OFFSET] = BPF_LD|BPF_B|BPF_ABS, |
30196 |
++ [BPF_S_LD_W_LEN] = BPF_LD|BPF_W|BPF_LEN, |
30197 |
++ [BPF_S_LD_W_IND] = BPF_LD|BPF_W|BPF_IND, |
30198 |
++ [BPF_S_LD_H_IND] = BPF_LD|BPF_H|BPF_IND, |
30199 |
++ [BPF_S_LD_B_IND] = BPF_LD|BPF_B|BPF_IND, |
30200 |
++ [BPF_S_LD_IMM] = BPF_LD|BPF_IMM, |
30201 |
++ [BPF_S_LDX_W_LEN] = BPF_LDX|BPF_W|BPF_LEN, |
30202 |
++ [BPF_S_LDX_B_MSH] = BPF_LDX|BPF_B|BPF_MSH, |
30203 |
++ [BPF_S_LDX_IMM] = BPF_LDX|BPF_IMM, |
30204 |
++ [BPF_S_MISC_TAX] = BPF_MISC|BPF_TAX, |
30205 |
++ [BPF_S_MISC_TXA] = BPF_MISC|BPF_TXA, |
30206 |
++ [BPF_S_RET_K] = BPF_RET|BPF_K, |
30207 |
++ [BPF_S_RET_A] = BPF_RET|BPF_A, |
30208 |
++ [BPF_S_ALU_DIV_K] = BPF_ALU|BPF_DIV|BPF_K, |
30209 |
++ [BPF_S_LD_MEM] = BPF_LD|BPF_MEM, |
30210 |
++ [BPF_S_LDX_MEM] = BPF_LDX|BPF_MEM, |
30211 |
++ [BPF_S_ST] = BPF_ST, |
30212 |
++ [BPF_S_STX] = BPF_STX, |
30213 |
++ [BPF_S_JMP_JA] = BPF_JMP|BPF_JA, |
30214 |
++ [BPF_S_JMP_JEQ_K] = BPF_JMP|BPF_JEQ|BPF_K, |
30215 |
++ [BPF_S_JMP_JEQ_X] = BPF_JMP|BPF_JEQ|BPF_X, |
30216 |
++ [BPF_S_JMP_JGE_K] = BPF_JMP|BPF_JGE|BPF_K, |
30217 |
++ [BPF_S_JMP_JGE_X] = BPF_JMP|BPF_JGE|BPF_X, |
30218 |
++ [BPF_S_JMP_JGT_K] = BPF_JMP|BPF_JGT|BPF_K, |
30219 |
++ [BPF_S_JMP_JGT_X] = BPF_JMP|BPF_JGT|BPF_X, |
30220 |
++ [BPF_S_JMP_JSET_K] = BPF_JMP|BPF_JSET|BPF_K, |
30221 |
++ [BPF_S_JMP_JSET_X] = BPF_JMP|BPF_JSET|BPF_X, |
30222 |
++ }; |
30223 |
++ u16 code; |
30224 |
++ |
30225 |
++ code = filt->code; |
30226 |
++ |
30227 |
++ to->code = decodes[code]; |
30228 |
++ to->jt = filt->jt; |
30229 |
++ to->jf = filt->jf; |
30230 |
++ to->k = filt->k; |
30231 |
++} |
30232 |
++ |
30233 |
++int sk_get_filter(struct sock *sk, struct sock_filter __user *ubuf, unsigned int len) |
30234 |
+ { |
30235 |
+- struct sock_fprog_kern *fprog; |
30236 |
+ struct sk_filter *filter; |
30237 |
+- int ret = 0; |
30238 |
++ int i, ret; |
30239 |
+ |
30240 |
+ lock_sock(sk); |
30241 |
+ filter = rcu_dereference_protected(sk->sk_filter, |
30242 |
+- sock_owned_by_user(sk)); |
30243 |
++ sock_owned_by_user(sk)); |
30244 |
++ ret = 0; |
30245 |
+ if (!filter) |
30246 |
+ goto out; |
30247 |
+- |
30248 |
+- /* We're copying the filter that has been originally attached, |
30249 |
+- * so no conversion/decode needed anymore. |
30250 |
+- */ |
30251 |
+- fprog = filter->orig_prog; |
30252 |
+- |
30253 |
+- ret = fprog->len; |
30254 |
++ ret = filter->len; |
30255 |
+ if (!len) |
30256 |
+- /* User space only enquires number of filter blocks. */ |
30257 |
+ goto out; |
30258 |
+- |
30259 |
+ ret = -EINVAL; |
30260 |
+- if (len < fprog->len) |
30261 |
++ if (len < filter->len) |
30262 |
+ goto out; |
30263 |
|
30264 |
-- memcpy(fp->insns, fprog->filter, fsize); |
30265 |
-+ memcpy(fp->insns, (void __force_kernel *)fprog->filter, fsize); |
30266 |
+ ret = -EFAULT; |
30267 |
+- if (copy_to_user(ubuf, fprog->filter, sk_filter_proglen(fprog))) |
30268 |
+- goto out; |
30269 |
++ for (i = 0; i < filter->len; i++) { |
30270 |
++ struct sock_filter fb; |
30271 |
|
30272 |
- atomic_set(&fp->refcnt, 1); |
30273 |
- fp->len = fprog->len; |
30274 |
+- /* Instead of bytes, the API requests to return the number |
30275 |
+- * of filter blocks. |
30276 |
+- */ |
30277 |
+- ret = fprog->len; |
30278 |
++ sk_decode_filter(&filter->insns[i], &fb); |
30279 |
++ if (copy_to_user(&ubuf[i], &fb, sizeof(fb))) |
30280 |
++ goto out; |
30281 |
++ } |
30282 |
++ |
30283 |
++ ret = filter->len; |
30284 |
+ out: |
30285 |
+ release_sock(sk); |
30286 |
+ return ret; |
30287 |
diff --git a/net/core/flow.c b/net/core/flow.c |
30288 |
index a0348fd..6951c76 100644 |
30289 |
--- a/net/core/flow.c |
30290 |
@@ -98881,7 +106929,7 @@ index a0348fd..6951c76 100644 |
30291 |
fle->object = flo; |
30292 |
else |
30293 |
diff --git a/net/core/iovec.c b/net/core/iovec.c |
30294 |
-index 26dc006..89e838e 100644 |
30295 |
+index e1ec45a..e5c6f16 100644 |
30296 |
--- a/net/core/iovec.c |
30297 |
+++ b/net/core/iovec.c |
30298 |
@@ -42,7 +42,7 @@ int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr_storage *a |
30299 |
@@ -98903,7 +106951,7 @@ index 26dc006..89e838e 100644 |
30300 |
|
30301 |
m->msg_iov = iov; |
30302 |
diff --git a/net/core/neighbour.c b/net/core/neighbour.c |
30303 |
-index 32d872e..487e769 100644 |
30304 |
+index ef31fef..8be66d9 100644 |
30305 |
--- a/net/core/neighbour.c |
30306 |
+++ b/net/core/neighbour.c |
30307 |
@@ -2825,7 +2825,7 @@ static int proc_unres_qlen(struct ctl_table *ctl, int write, |
30308 |
@@ -98924,23 +106972,6 @@ index 32d872e..487e769 100644 |
30309 |
int ret; |
30310 |
|
30311 |
tmp.extra1 = &zero; |
30312 |
-@@ -3059,11 +3059,12 @@ int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p, |
30313 |
- memset(&t->neigh_vars[NEIGH_VAR_GC_INTERVAL], 0, |
30314 |
- sizeof(t->neigh_vars[NEIGH_VAR_GC_INTERVAL])); |
30315 |
- } else { |
30316 |
-+ struct neigh_table *ntable = container_of(p, struct neigh_table, parms); |
30317 |
- dev_name_source = "default"; |
30318 |
-- t->neigh_vars[NEIGH_VAR_GC_INTERVAL].data = (int *)(p + 1); |
30319 |
-- t->neigh_vars[NEIGH_VAR_GC_THRESH1].data = (int *)(p + 1) + 1; |
30320 |
-- t->neigh_vars[NEIGH_VAR_GC_THRESH2].data = (int *)(p + 1) + 2; |
30321 |
-- t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = (int *)(p + 1) + 3; |
30322 |
-+ t->neigh_vars[NEIGH_VAR_GC_INTERVAL].data = &ntable->gc_interval; |
30323 |
-+ t->neigh_vars[NEIGH_VAR_GC_THRESH1].data = &ntable->gc_thresh1; |
30324 |
-+ t->neigh_vars[NEIGH_VAR_GC_THRESH2].data = &ntable->gc_thresh2; |
30325 |
-+ t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = &ntable->gc_thresh3; |
30326 |
- } |
30327 |
- |
30328 |
- if (handler) { |
30329 |
diff --git a/net/core/net-procfs.c b/net/core/net-procfs.c |
30330 |
index 2bf8329..2eb1423 100644 |
30331 |
--- a/net/core/net-procfs.c |
30332 |
@@ -99006,7 +107037,7 @@ index 1cac29e..fb482f3 100644 |
30333 |
static DEVICE_ATTR_RO(carrier_changes); |
30334 |
|
30335 |
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c |
30336 |
-index 7c8ffd9..0cb3687 100644 |
30337 |
+index 85b6269..fc77ea0 100644 |
30338 |
--- a/net/core/net_namespace.c |
30339 |
+++ b/net/core/net_namespace.c |
30340 |
@@ -443,7 +443,7 @@ static int __register_pernet_operations(struct list_head *list, |
30341 |
@@ -99068,7 +107099,7 @@ index e33937f..b2b4981 100644 |
30342 |
iph->ttl = 64; |
30343 |
iph->protocol = IPPROTO_UDP; |
30344 |
diff --git a/net/core/pktgen.c b/net/core/pktgen.c |
30345 |
-index 0304f98..ddfead6 100644 |
30346 |
+index fc17a9d..d4a3d88 100644 |
30347 |
--- a/net/core/pktgen.c |
30348 |
+++ b/net/core/pktgen.c |
30349 |
@@ -3725,7 +3725,7 @@ static int __net_init pg_net_init(struct net *net) |
30350 |
@@ -99080,8 +107111,155 @@ index 0304f98..ddfead6 100644 |
30351 |
if (!pn->proc_dir) { |
30352 |
pr_warn("cannot create /proc/net/%s\n", PG_PROC_DIR); |
30353 |
return -ENODEV; |
30354 |
+diff --git a/net/core/ptp_classifier.c b/net/core/ptp_classifier.c |
30355 |
+deleted file mode 100644 |
30356 |
+index d3027a7..0000000 |
30357 |
+--- a/net/core/ptp_classifier.c |
30358 |
++++ /dev/null |
30359 |
+@@ -1,141 +0,0 @@ |
30360 |
+-/* PTP classifier |
30361 |
+- * |
30362 |
+- * This program is free software; you can redistribute it and/or |
30363 |
+- * modify it under the terms of version 2 of the GNU General Public |
30364 |
+- * License as published by the Free Software Foundation. |
30365 |
+- * |
30366 |
+- * This program is distributed in the hope that it will be useful, but |
30367 |
+- * WITHOUT ANY WARRANTY; without even the implied warranty of |
30368 |
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
30369 |
+- * General Public License for more details. |
30370 |
+- */ |
30371 |
+- |
30372 |
+-/* The below program is the bpf_asm (tools/net/) representation of |
30373 |
+- * the opcode array in the ptp_filter structure. |
30374 |
+- * |
30375 |
+- * For convenience, this can easily be altered and reviewed with |
30376 |
+- * bpf_asm and bpf_dbg, e.g. `./bpf_asm -c prog` where prog is a |
30377 |
+- * simple file containing the below program: |
30378 |
+- * |
30379 |
+- * ldh [12] ; load ethertype |
30380 |
+- * |
30381 |
+- * ; PTP over UDP over IPv4 over Ethernet |
30382 |
+- * test_ipv4: |
30383 |
+- * jneq #0x800, test_ipv6 ; ETH_P_IP ? |
30384 |
+- * ldb [23] ; load proto |
30385 |
+- * jneq #17, drop_ipv4 ; IPPROTO_UDP ? |
30386 |
+- * ldh [20] ; load frag offset field |
30387 |
+- * jset #0x1fff, drop_ipv4 ; don't allow fragments |
30388 |
+- * ldxb 4*([14]&0xf) ; load IP header len |
30389 |
+- * ldh [x + 16] ; load UDP dst port |
30390 |
+- * jneq #319, drop_ipv4 ; is port PTP_EV_PORT ? |
30391 |
+- * ldh [x + 22] ; load payload |
30392 |
+- * and #0xf ; mask PTP_CLASS_VMASK |
30393 |
+- * or #0x10 ; PTP_CLASS_IPV4 |
30394 |
+- * ret a ; return PTP class |
30395 |
+- * drop_ipv4: ret #0x0 ; PTP_CLASS_NONE |
30396 |
+- * |
30397 |
+- * ; PTP over UDP over IPv6 over Ethernet |
30398 |
+- * test_ipv6: |
30399 |
+- * jneq #0x86dd, test_8021q ; ETH_P_IPV6 ? |
30400 |
+- * ldb [20] ; load proto |
30401 |
+- * jneq #17, drop_ipv6 ; IPPROTO_UDP ? |
30402 |
+- * ldh [56] ; load UDP dst port |
30403 |
+- * jneq #319, drop_ipv6 ; is port PTP_EV_PORT ? |
30404 |
+- * ldh [62] ; load payload |
30405 |
+- * and #0xf ; mask PTP_CLASS_VMASK |
30406 |
+- * or #0x20 ; PTP_CLASS_IPV6 |
30407 |
+- * ret a ; return PTP class |
30408 |
+- * drop_ipv6: ret #0x0 ; PTP_CLASS_NONE |
30409 |
+- * |
30410 |
+- * ; PTP over 802.1Q over Ethernet |
30411 |
+- * test_8021q: |
30412 |
+- * jneq #0x8100, test_ieee1588 ; ETH_P_8021Q ? |
30413 |
+- * ldh [16] ; load inner type |
30414 |
+- * jneq #0x88f7, drop_ieee1588 ; ETH_P_1588 ? |
30415 |
+- * ldb [18] ; load payload |
30416 |
+- * and #0x8 ; as we don't have ports here, test |
30417 |
+- * jneq #0x0, drop_ieee1588 ; for PTP_GEN_BIT and drop these |
30418 |
+- * ldh [18] ; reload payload |
30419 |
+- * and #0xf ; mask PTP_CLASS_VMASK |
30420 |
+- * or #0x40 ; PTP_CLASS_V2_VLAN |
30421 |
+- * ret a ; return PTP class |
30422 |
+- * |
30423 |
+- * ; PTP over Ethernet |
30424 |
+- * test_ieee1588: |
30425 |
+- * jneq #0x88f7, drop_ieee1588 ; ETH_P_1588 ? |
30426 |
+- * ldb [14] ; load payload |
30427 |
+- * and #0x8 ; as we don't have ports here, test |
30428 |
+- * jneq #0x0, drop_ieee1588 ; for PTP_GEN_BIT and drop these |
30429 |
+- * ldh [14] ; reload payload |
30430 |
+- * and #0xf ; mask PTP_CLASS_VMASK |
30431 |
+- * or #0x30 ; PTP_CLASS_L2 |
30432 |
+- * ret a ; return PTP class |
30433 |
+- * drop_ieee1588: ret #0x0 ; PTP_CLASS_NONE |
30434 |
+- */ |
30435 |
+- |
30436 |
+-#include <linux/skbuff.h> |
30437 |
+-#include <linux/filter.h> |
30438 |
+-#include <linux/ptp_classify.h> |
30439 |
+- |
30440 |
+-static struct sk_filter *ptp_insns __read_mostly; |
30441 |
+- |
30442 |
+-unsigned int ptp_classify_raw(const struct sk_buff *skb) |
30443 |
+-{ |
30444 |
+- return SK_RUN_FILTER(ptp_insns, skb); |
30445 |
+-} |
30446 |
+-EXPORT_SYMBOL_GPL(ptp_classify_raw); |
30447 |
+- |
30448 |
+-void __init ptp_classifier_init(void) |
30449 |
+-{ |
30450 |
+- static struct sock_filter ptp_filter[] __initdata = { |
30451 |
+- { 0x28, 0, 0, 0x0000000c }, |
30452 |
+- { 0x15, 0, 12, 0x00000800 }, |
30453 |
+- { 0x30, 0, 0, 0x00000017 }, |
30454 |
+- { 0x15, 0, 9, 0x00000011 }, |
30455 |
+- { 0x28, 0, 0, 0x00000014 }, |
30456 |
+- { 0x45, 7, 0, 0x00001fff }, |
30457 |
+- { 0xb1, 0, 0, 0x0000000e }, |
30458 |
+- { 0x48, 0, 0, 0x00000010 }, |
30459 |
+- { 0x15, 0, 4, 0x0000013f }, |
30460 |
+- { 0x48, 0, 0, 0x00000016 }, |
30461 |
+- { 0x54, 0, 0, 0x0000000f }, |
30462 |
+- { 0x44, 0, 0, 0x00000010 }, |
30463 |
+- { 0x16, 0, 0, 0x00000000 }, |
30464 |
+- { 0x06, 0, 0, 0x00000000 }, |
30465 |
+- { 0x15, 0, 9, 0x000086dd }, |
30466 |
+- { 0x30, 0, 0, 0x00000014 }, |
30467 |
+- { 0x15, 0, 6, 0x00000011 }, |
30468 |
+- { 0x28, 0, 0, 0x00000038 }, |
30469 |
+- { 0x15, 0, 4, 0x0000013f }, |
30470 |
+- { 0x28, 0, 0, 0x0000003e }, |
30471 |
+- { 0x54, 0, 0, 0x0000000f }, |
30472 |
+- { 0x44, 0, 0, 0x00000020 }, |
30473 |
+- { 0x16, 0, 0, 0x00000000 }, |
30474 |
+- { 0x06, 0, 0, 0x00000000 }, |
30475 |
+- { 0x15, 0, 9, 0x00008100 }, |
30476 |
+- { 0x28, 0, 0, 0x00000010 }, |
30477 |
+- { 0x15, 0, 15, 0x000088f7 }, |
30478 |
+- { 0x30, 0, 0, 0x00000012 }, |
30479 |
+- { 0x54, 0, 0, 0x00000008 }, |
30480 |
+- { 0x15, 0, 12, 0x00000000 }, |
30481 |
+- { 0x28, 0, 0, 0x00000012 }, |
30482 |
+- { 0x54, 0, 0, 0x0000000f }, |
30483 |
+- { 0x44, 0, 0, 0x00000040 }, |
30484 |
+- { 0x16, 0, 0, 0x00000000 }, |
30485 |
+- { 0x15, 0, 7, 0x000088f7 }, |
30486 |
+- { 0x30, 0, 0, 0x0000000e }, |
30487 |
+- { 0x54, 0, 0, 0x00000008 }, |
30488 |
+- { 0x15, 0, 4, 0x00000000 }, |
30489 |
+- { 0x28, 0, 0, 0x0000000e }, |
30490 |
+- { 0x54, 0, 0, 0x0000000f }, |
30491 |
+- { 0x44, 0, 0, 0x00000030 }, |
30492 |
+- { 0x16, 0, 0, 0x00000000 }, |
30493 |
+- { 0x06, 0, 0, 0x00000000 }, |
30494 |
+- }; |
30495 |
+- struct sock_fprog_kern ptp_prog = { |
30496 |
+- .len = ARRAY_SIZE(ptp_filter), .filter = ptp_filter, |
30497 |
+- }; |
30498 |
+- |
30499 |
+- BUG_ON(sk_unattached_filter_create(&ptp_insns, &ptp_prog)); |
30500 |
+-} |
30501 |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c |
30502 |
-index 1999ed8..1e6e58a 100644 |
30503 |
+index 1063996..0729c19 100644 |
30504 |
--- a/net/core/rtnetlink.c |
30505 |
+++ b/net/core/rtnetlink.c |
30506 |
@@ -58,7 +58,7 @@ struct rtnl_link { |
30507 |
@@ -99169,10 +107347,10 @@ index b442e7e..6f5b5a2 100644 |
30508 |
{ |
30509 |
struct socket *sock; |
30510 |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c |
30511 |
-index 6ab5f77..6fd2a81 100644 |
30512 |
+index 58ff88e..af9b458 100644 |
30513 |
--- a/net/core/skbuff.c |
30514 |
+++ b/net/core/skbuff.c |
30515 |
-@@ -2003,7 +2003,7 @@ EXPORT_SYMBOL(__skb_checksum); |
30516 |
+@@ -2010,7 +2010,7 @@ EXPORT_SYMBOL(__skb_checksum); |
30517 |
__wsum skb_checksum(const struct sk_buff *skb, int offset, |
30518 |
int len, __wsum csum) |
30519 |
{ |
30520 |
@@ -99181,7 +107359,7 @@ index 6ab5f77..6fd2a81 100644 |
30521 |
.update = csum_partial_ext, |
30522 |
.combine = csum_block_add_ext, |
30523 |
}; |
30524 |
-@@ -3221,13 +3221,15 @@ void __init skb_init(void) |
30525 |
+@@ -3233,13 +3233,15 @@ void __init skb_init(void) |
30526 |
skbuff_head_cache = kmem_cache_create("skbuff_head_cache", |
30527 |
sizeof(struct sk_buff), |
30528 |
0, |
30529 |
@@ -99200,7 +107378,7 @@ index 6ab5f77..6fd2a81 100644 |
30530 |
} |
30531 |
|
30532 |
diff --git a/net/core/sock.c b/net/core/sock.c |
30533 |
-index 664ee42..aaf9e6e 100644 |
30534 |
+index 026e01f..f54f908 100644 |
30535 |
--- a/net/core/sock.c |
30536 |
+++ b/net/core/sock.c |
30537 |
@@ -442,7 +442,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) |
30538 |
@@ -99315,7 +107493,7 @@ index 664ee42..aaf9e6e 100644 |
30539 |
msg->msg_flags |= MSG_ERRQUEUE; |
30540 |
err = copied; |
30541 |
diff --git a/net/core/sock_diag.c b/net/core/sock_diag.c |
30542 |
-index a4216a4..1c07687 100644 |
30543 |
+index a4216a4..773e3d7 100644 |
30544 |
--- a/net/core/sock_diag.c |
30545 |
+++ b/net/core/sock_diag.c |
30546 |
@@ -9,26 +9,33 @@ |
30547 |
@@ -99353,7 +107531,52 @@ index a4216a4..1c07687 100644 |
30548 |
} |
30549 |
EXPORT_SYMBOL_GPL(sock_diag_save_cookie); |
30550 |
|
30551 |
-@@ -110,8 +117,11 @@ int sock_diag_register(const struct sock_diag_handler *hndl) |
30552 |
+@@ -52,10 +59,9 @@ EXPORT_SYMBOL_GPL(sock_diag_put_meminfo); |
30553 |
+ int sock_diag_put_filterinfo(bool may_report_filterinfo, struct sock *sk, |
30554 |
+ struct sk_buff *skb, int attrtype) |
30555 |
+ { |
30556 |
+- struct sock_fprog_kern *fprog; |
30557 |
+- struct sk_filter *filter; |
30558 |
+ struct nlattr *attr; |
30559 |
+- unsigned int flen; |
30560 |
++ struct sk_filter *filter; |
30561 |
++ unsigned int len; |
30562 |
+ int err = 0; |
30563 |
+ |
30564 |
+ if (!may_report_filterinfo) { |
30565 |
+@@ -64,20 +70,24 @@ int sock_diag_put_filterinfo(bool may_report_filterinfo, struct sock *sk, |
30566 |
+ } |
30567 |
+ |
30568 |
+ rcu_read_lock(); |
30569 |
++ |
30570 |
+ filter = rcu_dereference(sk->sk_filter); |
30571 |
+- if (!filter) |
30572 |
+- goto out; |
30573 |
++ len = filter ? filter->len * sizeof(struct sock_filter) : 0; |
30574 |
+ |
30575 |
+- fprog = filter->orig_prog; |
30576 |
+- flen = sk_filter_proglen(fprog); |
30577 |
+- |
30578 |
+- attr = nla_reserve(skb, attrtype, flen); |
30579 |
++ attr = nla_reserve(skb, attrtype, len); |
30580 |
+ if (attr == NULL) { |
30581 |
+ err = -EMSGSIZE; |
30582 |
+ goto out; |
30583 |
+ } |
30584 |
+ |
30585 |
+- memcpy(nla_data(attr), fprog->filter, flen); |
30586 |
++ if (filter) { |
30587 |
++ struct sock_filter *fb = (struct sock_filter *)nla_data(attr); |
30588 |
++ int i; |
30589 |
++ |
30590 |
++ for (i = 0; i < filter->len; i++, fb++) |
30591 |
++ sk_decode_filter(&filter->insns[i], fb); |
30592 |
++ } |
30593 |
++ |
30594 |
+ out: |
30595 |
+ rcu_read_unlock(); |
30596 |
+ return err; |
30597 |
+@@ -110,8 +120,11 @@ int sock_diag_register(const struct sock_diag_handler *hndl) |
30598 |
mutex_lock(&sock_diag_table_mutex); |
30599 |
if (sock_diag_handlers[hndl->family]) |
30600 |
err = -EBUSY; |
30601 |
@@ -99366,7 +107589,7 @@ index a4216a4..1c07687 100644 |
30602 |
mutex_unlock(&sock_diag_table_mutex); |
30603 |
|
30604 |
return err; |
30605 |
-@@ -127,7 +137,9 @@ void sock_diag_unregister(const struct sock_diag_handler *hnld) |
30606 |
+@@ -127,7 +140,9 @@ void sock_diag_unregister(const struct sock_diag_handler *hnld) |
30607 |
|
30608 |
mutex_lock(&sock_diag_table_mutex); |
30609 |
BUG_ON(sock_diag_handlers[family] != hnld); |
30610 |
@@ -99445,8 +107668,70 @@ index cf9cd13..8b56af3 100644 |
30611 |
.init = sysctl_core_net_init, |
30612 |
.exit = sysctl_core_net_exit, |
30613 |
}; |
30614 |
+diff --git a/net/core/timestamping.c b/net/core/timestamping.c |
30615 |
+index 6521dfd..661b5a4 100644 |
30616 |
+--- a/net/core/timestamping.c |
30617 |
++++ b/net/core/timestamping.c |
30618 |
+@@ -23,11 +23,16 @@ |
30619 |
+ #include <linux/skbuff.h> |
30620 |
+ #include <linux/export.h> |
30621 |
+ |
30622 |
++static struct sock_filter ptp_filter[] = { |
30623 |
++ PTP_FILTER |
30624 |
++}; |
30625 |
++ |
30626 |
+ static unsigned int classify(const struct sk_buff *skb) |
30627 |
+ { |
30628 |
+- if (likely(skb->dev && skb->dev->phydev && |
30629 |
++ if (likely(skb->dev && |
30630 |
++ skb->dev->phydev && |
30631 |
+ skb->dev->phydev->drv)) |
30632 |
+- return ptp_classify_raw(skb); |
30633 |
++ return sk_run_filter(skb, ptp_filter); |
30634 |
+ else |
30635 |
+ return PTP_CLASS_NONE; |
30636 |
+ } |
30637 |
+@@ -55,13 +60,11 @@ void skb_clone_tx_timestamp(struct sk_buff *skb) |
30638 |
+ if (likely(phydev->drv->txtstamp)) { |
30639 |
+ if (!atomic_inc_not_zero(&sk->sk_refcnt)) |
30640 |
+ return; |
30641 |
+- |
30642 |
+ clone = skb_clone(skb, GFP_ATOMIC); |
30643 |
+ if (!clone) { |
30644 |
+ sock_put(sk); |
30645 |
+ return; |
30646 |
+ } |
30647 |
+- |
30648 |
+ clone->sk = sk; |
30649 |
+ phydev->drv->txtstamp(phydev, clone, type); |
30650 |
+ } |
30651 |
+@@ -86,15 +89,12 @@ void skb_complete_tx_timestamp(struct sk_buff *skb, |
30652 |
+ } |
30653 |
+ |
30654 |
+ *skb_hwtstamps(skb) = *hwtstamps; |
30655 |
+- |
30656 |
+ serr = SKB_EXT_ERR(skb); |
30657 |
+ memset(serr, 0, sizeof(*serr)); |
30658 |
+ serr->ee.ee_errno = ENOMSG; |
30659 |
+ serr->ee.ee_origin = SO_EE_ORIGIN_TIMESTAMPING; |
30660 |
+ skb->sk = NULL; |
30661 |
+- |
30662 |
+ err = sock_queue_err_skb(sk, skb); |
30663 |
+- |
30664 |
+ sock_put(sk); |
30665 |
+ if (err) |
30666 |
+ kfree_skb(skb); |
30667 |
+@@ -132,3 +132,8 @@ bool skb_defer_rx_timestamp(struct sk_buff *skb) |
30668 |
+ return false; |
30669 |
+ } |
30670 |
+ EXPORT_SYMBOL_GPL(skb_defer_rx_timestamp); |
30671 |
++ |
30672 |
++void __init skb_timestamping_init(void) |
30673 |
++{ |
30674 |
++ BUG_ON(sk_chk_filter(ptp_filter, ARRAY_SIZE(ptp_filter))); |
30675 |
++} |
30676 |
diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c |
30677 |
-index 4c04848..f575934 100644 |
30678 |
+index ae011b4..d2d18bf 100644 |
30679 |
--- a/net/decnet/af_decnet.c |
30680 |
+++ b/net/decnet/af_decnet.c |
30681 |
@@ -465,6 +465,7 @@ static struct proto dn_proto = { |
30682 |
@@ -99493,16 +107778,18 @@ index 5325b54..a0d4d69 100644 |
30683 |
|
30684 |
*lenp = len; |
30685 |
diff --git a/net/ieee802154/reassembly.c b/net/ieee802154/reassembly.c |
30686 |
-index ef2d543..5b9b73f 100644 |
30687 |
+index 6f1428c..9586b83 100644 |
30688 |
--- a/net/ieee802154/reassembly.c |
30689 |
+++ b/net/ieee802154/reassembly.c |
30690 |
-@@ -434,12 +434,11 @@ static struct ctl_table lowpan_frags_ctl_table[] = { |
30691 |
+@@ -438,14 +438,13 @@ static struct ctl_table lowpan_frags_ctl_table[] = { |
30692 |
|
30693 |
static int __net_init lowpan_frags_ns_sysctl_register(struct net *net) |
30694 |
{ |
30695 |
- struct ctl_table *table; |
30696 |
+ ctl_table_no_const *table = NULL; |
30697 |
struct ctl_table_header *hdr; |
30698 |
+ struct netns_ieee802154_lowpan *ieee802154_lowpan = |
30699 |
+ net_ieee802154_lowpan(net); |
30700 |
|
30701 |
- table = lowpan_frags_ns_ctl_table; |
30702 |
if (!net_eq(net, &init_net)) { |
30703 |
@@ -99511,7 +107798,7 @@ index ef2d543..5b9b73f 100644 |
30704 |
GFP_KERNEL); |
30705 |
if (table == NULL) |
30706 |
goto err_alloc; |
30707 |
-@@ -452,9 +451,9 @@ static int __net_init lowpan_frags_ns_sysctl_register(struct net *net) |
30708 |
+@@ -458,9 +457,9 @@ static int __net_init lowpan_frags_ns_sysctl_register(struct net *net) |
30709 |
/* Don't export sysctls to unprivileged users */ |
30710 |
if (net->user_ns != &init_user_ns) |
30711 |
table[0].procname = NULL; |
30712 |
@@ -99524,7 +107811,7 @@ index ef2d543..5b9b73f 100644 |
30713 |
if (hdr == NULL) |
30714 |
goto err_reg; |
30715 |
|
30716 |
-@@ -462,8 +461,7 @@ static int __net_init lowpan_frags_ns_sysctl_register(struct net *net) |
30717 |
+@@ -468,8 +467,7 @@ static int __net_init lowpan_frags_ns_sysctl_register(struct net *net) |
30718 |
return 0; |
30719 |
|
30720 |
err_reg: |
30721 |
@@ -99534,39 +107821,11 @@ index ef2d543..5b9b73f 100644 |
30722 |
err_alloc: |
30723 |
return -ENOMEM; |
30724 |
} |
30725 |
-diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c |
30726 |
-index 6af8ab6..3831cb8 100644 |
30727 |
---- a/net/ipv4/af_inet.c |
30728 |
-+++ b/net/ipv4/af_inet.c |
30729 |
-@@ -1739,13 +1739,9 @@ static int __init inet_init(void) |
30730 |
- |
30731 |
- BUILD_BUG_ON(sizeof(struct inet_skb_parm) > FIELD_SIZEOF(struct sk_buff, cb)); |
30732 |
- |
30733 |
-- sysctl_local_reserved_ports = kzalloc(65536 / 8, GFP_KERNEL); |
30734 |
-- if (!sysctl_local_reserved_ports) |
30735 |
-- goto out; |
30736 |
-- |
30737 |
- rc = proto_register(&tcp_prot, 1); |
30738 |
- if (rc) |
30739 |
-- goto out_free_reserved_ports; |
30740 |
-+ goto out; |
30741 |
- |
30742 |
- rc = proto_register(&udp_prot, 1); |
30743 |
- if (rc) |
30744 |
-@@ -1855,8 +1851,6 @@ out_unregister_udp_proto: |
30745 |
- proto_unregister(&udp_prot); |
30746 |
- out_unregister_tcp_proto: |
30747 |
- proto_unregister(&tcp_prot); |
30748 |
--out_free_reserved_ports: |
30749 |
-- kfree(sysctl_local_reserved_ports); |
30750 |
- goto out; |
30751 |
- } |
30752 |
- |
30753 |
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c |
30754 |
-index bdbf68b..deb4759 100644 |
30755 |
+index e944937..368fe78 100644 |
30756 |
--- a/net/ipv4/devinet.c |
30757 |
+++ b/net/ipv4/devinet.c |
30758 |
-@@ -1543,7 +1543,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb) |
30759 |
+@@ -1540,7 +1540,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb) |
30760 |
idx = 0; |
30761 |
head = &net->dev_index_head[h]; |
30762 |
rcu_read_lock(); |
30763 |
@@ -99575,7 +107834,7 @@ index bdbf68b..deb4759 100644 |
30764 |
net->dev_base_seq; |
30765 |
hlist_for_each_entry_rcu(dev, head, index_hlist) { |
30766 |
if (idx < s_idx) |
30767 |
-@@ -1861,7 +1861,7 @@ static int inet_netconf_dump_devconf(struct sk_buff *skb, |
30768 |
+@@ -1858,7 +1858,7 @@ static int inet_netconf_dump_devconf(struct sk_buff *skb, |
30769 |
idx = 0; |
30770 |
head = &net->dev_index_head[h]; |
30771 |
rcu_read_lock(); |
30772 |
@@ -99584,7 +107843,7 @@ index bdbf68b..deb4759 100644 |
30773 |
net->dev_base_seq; |
30774 |
hlist_for_each_entry_rcu(dev, head, index_hlist) { |
30775 |
if (idx < s_idx) |
30776 |
-@@ -2096,7 +2096,7 @@ static int ipv4_doint_and_flush(struct ctl_table *ctl, int write, |
30777 |
+@@ -2093,7 +2093,7 @@ static int ipv4_doint_and_flush(struct ctl_table *ctl, int write, |
30778 |
#define DEVINET_SYSCTL_FLUSHING_ENTRY(attr, name) \ |
30779 |
DEVINET_SYSCTL_COMPLEX_ENTRY(attr, name, ipv4_doint_and_flush) |
30780 |
|
30781 |
@@ -99593,7 +107852,7 @@ index bdbf68b..deb4759 100644 |
30782 |
struct ctl_table_header *sysctl_header; |
30783 |
struct ctl_table devinet_vars[__IPV4_DEVCONF_MAX]; |
30784 |
} devinet_sysctl = { |
30785 |
-@@ -2218,7 +2218,7 @@ static __net_init int devinet_init_net(struct net *net) |
30786 |
+@@ -2215,7 +2215,7 @@ static __net_init int devinet_init_net(struct net *net) |
30787 |
int err; |
30788 |
struct ipv4_devconf *all, *dflt; |
30789 |
#ifdef CONFIG_SYSCTL |
30790 |
@@ -99602,7 +107861,7 @@ index bdbf68b..deb4759 100644 |
30791 |
struct ctl_table_header *forw_hdr; |
30792 |
#endif |
30793 |
|
30794 |
-@@ -2236,7 +2236,7 @@ static __net_init int devinet_init_net(struct net *net) |
30795 |
+@@ -2233,7 +2233,7 @@ static __net_init int devinet_init_net(struct net *net) |
30796 |
goto err_alloc_dflt; |
30797 |
|
30798 |
#ifdef CONFIG_SYSCTL |
30799 |
@@ -99611,7 +107870,7 @@ index bdbf68b..deb4759 100644 |
30800 |
if (tbl == NULL) |
30801 |
goto err_alloc_ctl; |
30802 |
|
30803 |
-@@ -2256,7 +2256,10 @@ static __net_init int devinet_init_net(struct net *net) |
30804 |
+@@ -2253,7 +2253,10 @@ static __net_init int devinet_init_net(struct net *net) |
30805 |
goto err_reg_dflt; |
30806 |
|
30807 |
err = -ENOMEM; |
30808 |
@@ -99623,7 +107882,7 @@ index bdbf68b..deb4759 100644 |
30809 |
if (forw_hdr == NULL) |
30810 |
goto err_reg_ctl; |
30811 |
net->ipv4.forw_hdr = forw_hdr; |
30812 |
-@@ -2272,8 +2275,7 @@ err_reg_ctl: |
30813 |
+@@ -2269,8 +2272,7 @@ err_reg_ctl: |
30814 |
err_reg_dflt: |
30815 |
__devinet_sysctl_unregister(all); |
30816 |
err_reg_all: |
30817 |
@@ -99674,21 +107933,8 @@ index b10cd43a..22327f9 100644 |
30818 |
|
30819 |
return nh->nh_saddr; |
30820 |
} |
30821 |
-diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c |
30822 |
-index a56b8e6..5be2a30 100644 |
30823 |
---- a/net/ipv4/inet_connection_sock.c |
30824 |
-+++ b/net/ipv4/inet_connection_sock.c |
30825 |
-@@ -29,7 +29,7 @@ const char inet_csk_timer_bug_msg[] = "inet_csk BUG: unknown timer value\n"; |
30826 |
- EXPORT_SYMBOL(inet_csk_timer_bug_msg); |
30827 |
- #endif |
30828 |
- |
30829 |
--unsigned long *sysctl_local_reserved_ports; |
30830 |
-+unsigned long sysctl_local_reserved_ports[65536 / 8 / sizeof(unsigned long)]; |
30831 |
- EXPORT_SYMBOL(sysctl_local_reserved_ports); |
30832 |
- |
30833 |
- void inet_get_local_port_range(struct net *net, int *low, int *high) |
30834 |
diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c |
30835 |
-index 8b9cf27..0d8d592 100644 |
30836 |
+index 43116e8..e3e6159 100644 |
30837 |
--- a/net/ipv4/inet_hashtables.c |
30838 |
+++ b/net/ipv4/inet_hashtables.c |
30839 |
@@ -18,6 +18,7 @@ |
30840 |
@@ -99718,7 +107964,7 @@ index 8b9cf27..0d8d592 100644 |
30841 |
inet_twsk_deschedule(tw, death_row); |
30842 |
while (twrefcnt) { |
30843 |
diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c |
30844 |
-index bf2cb4a..d83ba8a 100644 |
30845 |
+index bd5f592..e80e605 100644 |
30846 |
--- a/net/ipv4/inetpeer.c |
30847 |
+++ b/net/ipv4/inetpeer.c |
30848 |
@@ -482,7 +482,7 @@ relookup: |
30849 |
@@ -99782,7 +108028,7 @@ index ed32313..3762abe 100644 |
30850 |
return -ENOMEM; |
30851 |
} |
30852 |
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c |
30853 |
-index 94213c8..8bdb342 100644 |
30854 |
+index 9b84254..c776611 100644 |
30855 |
--- a/net/ipv4/ip_gre.c |
30856 |
+++ b/net/ipv4/ip_gre.c |
30857 |
@@ -115,7 +115,7 @@ static bool log_ecn_error = true; |
30858 |
@@ -99794,7 +108040,7 @@ index 94213c8..8bdb342 100644 |
30859 |
static int ipgre_tunnel_init(struct net_device *dev); |
30860 |
|
30861 |
static int ipgre_net_id __read_mostly; |
30862 |
-@@ -732,7 +732,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = { |
30863 |
+@@ -733,7 +733,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = { |
30864 |
[IFLA_GRE_PMTUDISC] = { .type = NLA_U8 }, |
30865 |
}; |
30866 |
|
30867 |
@@ -99803,7 +108049,7 @@ index 94213c8..8bdb342 100644 |
30868 |
.kind = "gre", |
30869 |
.maxtype = IFLA_GRE_MAX, |
30870 |
.policy = ipgre_policy, |
30871 |
-@@ -746,7 +746,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = { |
30872 |
+@@ -747,7 +747,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = { |
30873 |
.fill_info = ipgre_fill_info, |
30874 |
}; |
30875 |
|
30876 |
@@ -99836,7 +108082,7 @@ index 64741b9..6f334a2 100644 |
30877 |
msg.msg_flags = flags; |
30878 |
|
30879 |
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c |
30880 |
-index 13ef00f..8ffca25 100644 |
30881 |
+index b8960f3..0f025db 100644 |
30882 |
--- a/net/ipv4/ip_vti.c |
30883 |
+++ b/net/ipv4/ip_vti.c |
30884 |
@@ -45,7 +45,7 @@ |
30885 |
@@ -99848,7 +108094,7 @@ index 13ef00f..8ffca25 100644 |
30886 |
|
30887 |
static int vti_net_id __read_mostly; |
30888 |
static int vti_tunnel_init(struct net_device *dev); |
30889 |
-@@ -513,7 +513,7 @@ static const struct nla_policy vti_policy[IFLA_VTI_MAX + 1] = { |
30890 |
+@@ -519,7 +519,7 @@ static const struct nla_policy vti_policy[IFLA_VTI_MAX + 1] = { |
30891 |
[IFLA_VTI_REMOTE] = { .len = FIELD_SIZEOF(struct iphdr, daddr) }, |
30892 |
}; |
30893 |
|
30894 |
@@ -100022,7 +108268,7 @@ index 2510c02..cfb34fa 100644 |
30895 |
pr_err("Unable to proc dir entry\n"); |
30896 |
return -ENOMEM; |
30897 |
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c |
30898 |
-index 044a0dd..e0c1971 100644 |
30899 |
+index 044a0dd..3399751 100644 |
30900 |
--- a/net/ipv4/ping.c |
30901 |
+++ b/net/ipv4/ping.c |
30902 |
@@ -59,7 +59,7 @@ struct ping_table { |
30903 |
@@ -100061,28 +108307,7 @@ index 044a0dd..e0c1971 100644 |
30904 |
info, (u8 *)icmph); |
30905 |
#endif |
30906 |
} |
30907 |
-@@ -844,6 +844,8 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
30908 |
- { |
30909 |
- struct inet_sock *isk = inet_sk(sk); |
30910 |
- int family = sk->sk_family; |
30911 |
-+ struct sockaddr_in *sin; |
30912 |
-+ struct sockaddr_in6 *sin6; |
30913 |
- struct sk_buff *skb; |
30914 |
- int copied, err; |
30915 |
- |
30916 |
-@@ -853,12 +855,19 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
30917 |
- if (flags & MSG_OOB) |
30918 |
- goto out; |
30919 |
- |
30920 |
-+ if (addr_len) { |
30921 |
-+ if (family == AF_INET) |
30922 |
-+ *addr_len = sizeof(*sin); |
30923 |
-+ else if (family == AF_INET6 && addr_len) |
30924 |
-+ *addr_len = sizeof(*sin6); |
30925 |
-+ } |
30926 |
-+ |
30927 |
- if (flags & MSG_ERRQUEUE) { |
30928 |
- if (family == AF_INET) { |
30929 |
+@@ -858,7 +858,7 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
30930 |
return ip_recv_error(sk, msg, len, addr_len); |
30931 |
#if IS_ENABLED(CONFIG_IPV6) |
30932 |
} else if (family == AF_INET6) { |
30933 |
@@ -100091,19 +108316,7 @@ index 044a0dd..e0c1971 100644 |
30934 |
addr_len); |
30935 |
#endif |
30936 |
} |
30937 |
-@@ -890,7 +899,6 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
30938 |
- sin->sin_port = 0 /* skb->h.uh->source */; |
30939 |
- sin->sin_addr.s_addr = ip_hdr(skb)->saddr; |
30940 |
- memset(sin->sin_zero, 0, sizeof(sin->sin_zero)); |
30941 |
-- *addr_len = sizeof(*sin); |
30942 |
- } |
30943 |
- |
30944 |
- if (isk->cmsg_flags) |
30945 |
-@@ -912,14 +920,13 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
30946 |
- sin6->sin6_scope_id = |
30947 |
- ipv6_iface_scope_id(&sin6->sin6_addr, |
30948 |
- IP6CB(skb)->iif); |
30949 |
-- *addr_len = sizeof(*sin6); |
30950 |
+@@ -916,10 +916,10 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
30951 |
} |
30952 |
|
30953 |
if (inet6_sk(sk)->rxopt.all) |
30954 |
@@ -100116,7 +108329,7 @@ index 044a0dd..e0c1971 100644 |
30955 |
else if (skb->protocol == htons(ETH_P_IP) && isk->cmsg_flags) |
30956 |
ip_cmsg_recv(msg, skb); |
30957 |
#endif |
30958 |
-@@ -1111,7 +1118,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f, |
30959 |
+@@ -1111,7 +1111,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f, |
30960 |
from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)), |
30961 |
0, sock_i_ino(sp), |
30962 |
atomic_read(&sp->sk_refcnt), sp, |
30963 |
@@ -100126,7 +108339,7 @@ index 044a0dd..e0c1971 100644 |
30964 |
|
30965 |
static int ping_v4_seq_show(struct seq_file *seq, void *v) |
30966 |
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c |
30967 |
-index 2c65160..b54c00e 100644 |
30968 |
+index 2c65160..213ecdf 100644 |
30969 |
--- a/net/ipv4/raw.c |
30970 |
+++ b/net/ipv4/raw.c |
30971 |
@@ -311,7 +311,7 @@ static int raw_rcv_skb(struct sock *sk, struct sk_buff *skb) |
30972 |
@@ -100138,25 +108351,7 @@ index 2c65160..b54c00e 100644 |
30973 |
kfree_skb(skb); |
30974 |
return NET_RX_DROP; |
30975 |
} |
30976 |
-@@ -696,6 +696,9 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
30977 |
- if (flags & MSG_OOB) |
30978 |
- goto out; |
30979 |
- |
30980 |
-+ if (addr_len) |
30981 |
-+ *addr_len = sizeof(*sin); |
30982 |
-+ |
30983 |
- if (flags & MSG_ERRQUEUE) { |
30984 |
- err = ip_recv_error(sk, msg, len, addr_len); |
30985 |
- goto out; |
30986 |
-@@ -723,7 +726,6 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
30987 |
- sin->sin_addr.s_addr = ip_hdr(skb)->saddr; |
30988 |
- sin->sin_port = 0; |
30989 |
- memset(&sin->sin_zero, 0, sizeof(sin->sin_zero)); |
30990 |
-- *addr_len = sizeof(*sin); |
30991 |
- } |
30992 |
- if (inet->cmsg_flags) |
30993 |
- ip_cmsg_recv(msg, skb); |
30994 |
-@@ -748,16 +750,20 @@ static int raw_init(struct sock *sk) |
30995 |
+@@ -748,16 +748,20 @@ static int raw_init(struct sock *sk) |
30996 |
|
30997 |
static int raw_seticmpfilter(struct sock *sk, char __user *optval, int optlen) |
30998 |
{ |
30999 |
@@ -100178,7 +108373,7 @@ index 2c65160..b54c00e 100644 |
31000 |
|
31001 |
if (get_user(len, optlen)) |
31002 |
goto out; |
31003 |
-@@ -767,8 +773,8 @@ static int raw_geticmpfilter(struct sock *sk, char __user *optval, int __user *o |
31004 |
+@@ -767,8 +771,8 @@ static int raw_geticmpfilter(struct sock *sk, char __user *optval, int __user *o |
31005 |
if (len > sizeof(struct icmp_filter)) |
31006 |
len = sizeof(struct icmp_filter); |
31007 |
ret = -EFAULT; |
31008 |
@@ -100189,7 +108384,7 @@ index 2c65160..b54c00e 100644 |
31009 |
goto out; |
31010 |
ret = 0; |
31011 |
out: return ret; |
31012 |
-@@ -997,7 +1003,7 @@ static void raw_sock_seq_show(struct seq_file *seq, struct sock *sp, int i) |
31013 |
+@@ -997,7 +1001,7 @@ static void raw_sock_seq_show(struct seq_file *seq, struct sock *sp, int i) |
31014 |
0, 0L, 0, |
31015 |
from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)), |
31016 |
0, sock_i_ino(sp), |
31017 |
@@ -100199,7 +108394,7 @@ index 2c65160..b54c00e 100644 |
31018 |
|
31019 |
static int raw_seq_show(struct seq_file *seq, void *v) |
31020 |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c |
31021 |
-index fd618d4..aae0ac9 100644 |
31022 |
+index 1901998..a9a850a 100644 |
31023 |
--- a/net/ipv4/route.c |
31024 |
+++ b/net/ipv4/route.c |
31025 |
@@ -228,7 +228,7 @@ static const struct seq_operations rt_cache_seq_ops = { |
31026 |
@@ -100229,7 +108424,7 @@ index fd618d4..aae0ac9 100644 |
31027 |
} |
31028 |
|
31029 |
static const struct file_operations rt_acct_proc_fops = { |
31030 |
-@@ -459,7 +459,7 @@ static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst, |
31031 |
+@@ -459,11 +459,11 @@ static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst, |
31032 |
|
31033 |
#define IP_IDENTS_SZ 2048u |
31034 |
struct ip_ident_bucket { |
31035 |
@@ -100238,6 +108433,11 @@ index fd618d4..aae0ac9 100644 |
31036 |
u32 stamp32; |
31037 |
}; |
31038 |
|
31039 |
+-static struct ip_ident_bucket *ip_idents __read_mostly; |
31040 |
++static struct ip_ident_bucket ip_idents[IP_IDENTS_SZ] __read_mostly; |
31041 |
+ |
31042 |
+ /* In order to protect privacy, we add a perturbation to identifiers |
31043 |
+ * if one generator is seldom used. This makes hard for an attacker |
31044 |
@@ -479,7 +479,7 @@ u32 ip_idents_reserve(u32 hash, int segs) |
31045 |
if (old != now && cmpxchg(&bucket->stamp32, old, now) == old) |
31046 |
delta = prandom_u32_max(now - old); |
31047 |
@@ -100247,7 +108447,7 @@ index fd618d4..aae0ac9 100644 |
31048 |
} |
31049 |
EXPORT_SYMBOL(ip_idents_reserve); |
31050 |
|
31051 |
-@@ -2618,34 +2618,34 @@ static struct ctl_table ipv4_route_flush_table[] = { |
31052 |
+@@ -2625,34 +2625,34 @@ static struct ctl_table ipv4_route_flush_table[] = { |
31053 |
.maxlen = sizeof(int), |
31054 |
.mode = 0200, |
31055 |
.proc_handler = ipv4_sysctl_rtcache_flush, |
31056 |
@@ -100290,7 +108490,7 @@ index fd618d4..aae0ac9 100644 |
31057 |
err_dup: |
31058 |
return -ENOMEM; |
31059 |
} |
31060 |
-@@ -2668,8 +2668,8 @@ static __net_initdata struct pernet_operations sysctl_route_ops = { |
31061 |
+@@ -2675,8 +2675,8 @@ static __net_initdata struct pernet_operations sysctl_route_ops = { |
31062 |
|
31063 |
static __net_init int rt_genid_init(struct net *net) |
31064 |
{ |
31065 |
@@ -100301,8 +108501,21 @@ index fd618d4..aae0ac9 100644 |
31066 |
get_random_bytes(&net->ipv4.dev_addr_genid, |
31067 |
sizeof(net->ipv4.dev_addr_genid)); |
31068 |
return 0; |
31069 |
+@@ -2719,11 +2719,7 @@ int __init ip_rt_init(void) |
31070 |
+ { |
31071 |
+ int rc = 0; |
31072 |
+ |
31073 |
+- ip_idents = kmalloc(IP_IDENTS_SZ * sizeof(*ip_idents), GFP_KERNEL); |
31074 |
+- if (!ip_idents) |
31075 |
+- panic("IP: failed to allocate ip_idents\n"); |
31076 |
+- |
31077 |
+- prandom_bytes(ip_idents, IP_IDENTS_SZ * sizeof(*ip_idents)); |
31078 |
++ prandom_bytes(ip_idents, sizeof(ip_idents)); |
31079 |
+ |
31080 |
+ #ifdef CONFIG_IP_ROUTE_CLASSID |
31081 |
+ ip_rt_acct = __alloc_percpu(256 * sizeof(struct ip_rt_acct), __alignof__(struct ip_rt_acct)); |
31082 |
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c |
31083 |
-index 5cde8f2..5f5684e 100644 |
31084 |
+index 79a007c..5023029 100644 |
31085 |
--- a/net/ipv4/sysctl_net_ipv4.c |
31086 |
+++ b/net/ipv4/sysctl_net_ipv4.c |
31087 |
@@ -60,7 +60,7 @@ static int ipv4_local_port_range(struct ctl_table *table, int write, |
31088 |
@@ -100359,16 +108572,7 @@ index 5cde8f2..5f5684e 100644 |
31089 |
struct tcp_fastopen_context *ctxt; |
31090 |
int ret; |
31091 |
u32 user_key[4]; /* 16 bytes, matching TCP_FASTOPEN_KEY_LENGTH */ |
31092 |
-@@ -438,7 +438,7 @@ static struct ctl_table ipv4_table[] = { |
31093 |
- }, |
31094 |
- { |
31095 |
- .procname = "ip_local_reserved_ports", |
31096 |
-- .data = NULL, /* initialized in sysctl_ipv4_init */ |
31097 |
-+ .data = sysctl_local_reserved_ports, |
31098 |
- .maxlen = 65536, |
31099 |
- .mode = 0644, |
31100 |
- .proc_handler = proc_do_large_bitmap, |
31101 |
-@@ -843,13 +843,12 @@ static struct ctl_table ipv4_net_table[] = { |
31102 |
+@@ -857,13 +857,12 @@ static struct ctl_table ipv4_net_table[] = { |
31103 |
|
31104 |
static __net_init int ipv4_sysctl_init_net(struct net *net) |
31105 |
{ |
31106 |
@@ -100384,7 +108588,7 @@ index 5cde8f2..5f5684e 100644 |
31107 |
if (table == NULL) |
31108 |
goto err_alloc; |
31109 |
|
31110 |
-@@ -858,15 +857,17 @@ static __net_init int ipv4_sysctl_init_net(struct net *net) |
31111 |
+@@ -872,7 +871,10 @@ static __net_init int ipv4_sysctl_init_net(struct net *net) |
31112 |
table[i].data += (void *)net - (void *)&init_net; |
31113 |
} |
31114 |
|
31115 |
@@ -100396,34 +108600,8 @@ index 5cde8f2..5f5684e 100644 |
31116 |
if (net->ipv4.ipv4_hdr == NULL) |
31117 |
goto err_reg; |
31118 |
|
31119 |
- return 0; |
31120 |
- |
31121 |
- err_reg: |
31122 |
-- if (!net_eq(net, &init_net)) |
31123 |
-- kfree(table); |
31124 |
-+ kfree(table); |
31125 |
- err_alloc: |
31126 |
- return -ENOMEM; |
31127 |
- } |
31128 |
-@@ -888,16 +889,6 @@ static __net_initdata struct pernet_operations ipv4_sysctl_ops = { |
31129 |
- static __init int sysctl_ipv4_init(void) |
31130 |
- { |
31131 |
- struct ctl_table_header *hdr; |
31132 |
-- struct ctl_table *i; |
31133 |
-- |
31134 |
-- for (i = ipv4_table; i->procname; i++) { |
31135 |
-- if (strcmp(i->procname, "ip_local_reserved_ports") == 0) { |
31136 |
-- i->data = sysctl_local_reserved_ports; |
31137 |
-- break; |
31138 |
-- } |
31139 |
-- } |
31140 |
-- if (!i->procname) |
31141 |
-- return -EINVAL; |
31142 |
- |
31143 |
- hdr = register_net_sysctl(&init_net, "net/ipv4", ipv4_table); |
31144 |
- if (hdr == NULL) |
31145 |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c |
31146 |
-index 09b85cd..df9c266 100644 |
31147 |
+index 40639c2..dfc86b2 100644 |
31148 |
--- a/net/ipv4/tcp_input.c |
31149 |
+++ b/net/ipv4/tcp_input.c |
31150 |
@@ -754,7 +754,7 @@ static void tcp_update_pacing_rate(struct sock *sk) |
31151 |
@@ -100444,7 +108622,7 @@ index 09b85cd..df9c266 100644 |
31152 |
struct sk_buff *head, struct sk_buff *tail, |
31153 |
u32 start, u32 end) |
31154 |
{ |
31155 |
-@@ -5558,6 +5558,7 @@ discard: |
31156 |
+@@ -5536,6 +5536,7 @@ discard: |
31157 |
tcp_paws_reject(&tp->rx_opt, 0)) |
31158 |
goto discard_and_undo; |
31159 |
|
31160 |
@@ -100452,7 +108630,7 @@ index 09b85cd..df9c266 100644 |
31161 |
if (th->syn) { |
31162 |
/* We see SYN without ACK. It is attempt of |
31163 |
* simultaneous connect with crossed SYNs. |
31164 |
-@@ -5608,6 +5609,7 @@ discard: |
31165 |
+@@ -5586,6 +5587,7 @@ discard: |
31166 |
goto discard; |
31167 |
#endif |
31168 |
} |
31169 |
@@ -100460,7 +108638,7 @@ index 09b85cd..df9c266 100644 |
31170 |
/* "fifth, if neither of the SYN or RST bits is set then |
31171 |
* drop the segment and return." |
31172 |
*/ |
31173 |
-@@ -5654,7 +5656,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, |
31174 |
+@@ -5632,7 +5634,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, |
31175 |
goto discard; |
31176 |
|
31177 |
if (th->syn) { |
31178 |
@@ -100470,7 +108648,7 @@ index 09b85cd..df9c266 100644 |
31179 |
if (icsk->icsk_af_ops->conn_request(sk, skb) < 0) |
31180 |
return 1; |
31181 |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c |
31182 |
-index 438f3b9..bc9e1ad 100644 |
31183 |
+index 77cccda..10122c4 100644 |
31184 |
--- a/net/ipv4/tcp_ipv4.c |
31185 |
+++ b/net/ipv4/tcp_ipv4.c |
31186 |
@@ -91,6 +91,10 @@ int sysctl_tcp_low_latency __read_mostly; |
31187 |
@@ -100484,7 +108662,7 @@ index 438f3b9..bc9e1ad 100644 |
31188 |
#ifdef CONFIG_TCP_MD5SIG |
31189 |
static int tcp_v4_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key, |
31190 |
__be32 daddr, __be32 saddr, const struct tcphdr *th); |
31191 |
-@@ -1829,6 +1833,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) |
31192 |
+@@ -1591,6 +1595,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) |
31193 |
return 0; |
31194 |
|
31195 |
reset: |
31196 |
@@ -100494,7 +108672,7 @@ index 438f3b9..bc9e1ad 100644 |
31197 |
tcp_v4_send_reset(rsk, skb); |
31198 |
discard: |
31199 |
kfree_skb(skb); |
31200 |
-@@ -1974,12 +1981,19 @@ int tcp_v4_rcv(struct sk_buff *skb) |
31201 |
+@@ -1737,12 +1744,19 @@ int tcp_v4_rcv(struct sk_buff *skb) |
31202 |
TCP_SKB_CB(skb)->sacked = 0; |
31203 |
|
31204 |
sk = __inet_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest); |
31205 |
@@ -100517,7 +108695,7 @@ index 438f3b9..bc9e1ad 100644 |
31206 |
|
31207 |
if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) { |
31208 |
NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP); |
31209 |
-@@ -2033,6 +2047,10 @@ csum_error: |
31210 |
+@@ -1796,6 +1810,10 @@ csum_error: |
31211 |
bad_packet: |
31212 |
TCP_INC_STATS_BH(net, TCP_MIB_INERRS); |
31213 |
} else { |
31214 |
@@ -100529,7 +108707,7 @@ index 438f3b9..bc9e1ad 100644 |
31215 |
} |
31216 |
|
31217 |
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c |
31218 |
-index 05c1b15..3e9344b 100644 |
31219 |
+index e68e0d4..0334263 100644 |
31220 |
--- a/net/ipv4/tcp_minisocks.c |
31221 |
+++ b/net/ipv4/tcp_minisocks.c |
31222 |
@@ -27,6 +27,10 @@ |
31223 |
@@ -100543,7 +108721,7 @@ index 05c1b15..3e9344b 100644 |
31224 |
int sysctl_tcp_syncookies __read_mostly = 1; |
31225 |
EXPORT_SYMBOL(sysctl_tcp_syncookies); |
31226 |
|
31227 |
-@@ -709,7 +713,10 @@ embryonic_reset: |
31228 |
+@@ -740,7 +744,10 @@ embryonic_reset: |
31229 |
* avoid becoming vulnerable to outside attack aiming at |
31230 |
* resetting legit local connections. |
31231 |
*/ |
31232 |
@@ -100598,7 +108776,7 @@ index 286227a..c495a76 100644 |
31233 |
syn_set ? 0 : icsk->icsk_user_timeout, syn_set)) { |
31234 |
/* Has it gone just too far? */ |
31235 |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c |
31236 |
-index 54a5fe9..78fea00 100644 |
31237 |
+index 7d5a866..4874211 100644 |
31238 |
--- a/net/ipv4/udp.c |
31239 |
+++ b/net/ipv4/udp.c |
31240 |
@@ -87,6 +87,7 @@ |
31241 |
@@ -100630,7 +108808,7 @@ index 54a5fe9..78fea00 100644 |
31242 |
/* |
31243 |
* This routine is called by the ICMP module when it gets some |
31244 |
* sort of error condition. If err < 0 then the socket should |
31245 |
-@@ -914,9 +922,18 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
31246 |
+@@ -952,9 +960,18 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
31247 |
dport = usin->sin_port; |
31248 |
if (dport == 0) |
31249 |
return -EINVAL; |
31250 |
@@ -100649,7 +108827,7 @@ index 54a5fe9..78fea00 100644 |
31251 |
daddr = inet->inet_daddr; |
31252 |
dport = inet->inet_dport; |
31253 |
/* Open fast path for connected socket. |
31254 |
-@@ -1164,7 +1181,7 @@ static unsigned int first_packet_length(struct sock *sk) |
31255 |
+@@ -1202,7 +1219,7 @@ static unsigned int first_packet_length(struct sock *sk) |
31256 |
IS_UDPLITE(sk)); |
31257 |
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, |
31258 |
IS_UDPLITE(sk)); |
31259 |
@@ -100658,20 +108836,7 @@ index 54a5fe9..78fea00 100644 |
31260 |
__skb_unlink(skb, rcvq); |
31261 |
__skb_queue_tail(&list_kill, skb); |
31262 |
} |
31263 |
-@@ -1235,6 +1252,12 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, |
31264 |
- int is_udplite = IS_UDPLITE(sk); |
31265 |
- bool slow; |
31266 |
- |
31267 |
-+ /* |
31268 |
-+ * Check any passed addresses |
31269 |
-+ */ |
31270 |
-+ if (addr_len) |
31271 |
-+ *addr_len = sizeof(*sin); |
31272 |
-+ |
31273 |
- if (flags & MSG_ERRQUEUE) |
31274 |
- return ip_recv_error(sk, msg, len, addr_len); |
31275 |
- |
31276 |
-@@ -1244,6 +1267,10 @@ try_again: |
31277 |
+@@ -1282,6 +1299,10 @@ try_again: |
31278 |
if (!skb) |
31279 |
goto out; |
31280 |
|
31281 |
@@ -100682,7 +108847,7 @@ index 54a5fe9..78fea00 100644 |
31282 |
ulen = skb->len - sizeof(struct udphdr); |
31283 |
copied = len; |
31284 |
if (copied > ulen) |
31285 |
-@@ -1277,7 +1304,7 @@ try_again: |
31286 |
+@@ -1315,7 +1336,7 @@ try_again: |
31287 |
if (unlikely(err)) { |
31288 |
trace_kfree_skb(skb, udp_recvmsg); |
31289 |
if (!peeked) { |
31290 |
@@ -100691,15 +108856,7 @@ index 54a5fe9..78fea00 100644 |
31291 |
UDP_INC_STATS_USER(sock_net(sk), |
31292 |
UDP_MIB_INERRORS, is_udplite); |
31293 |
} |
31294 |
-@@ -1296,7 +1323,6 @@ try_again: |
31295 |
- sin->sin_port = udp_hdr(skb)->source; |
31296 |
- sin->sin_addr.s_addr = ip_hdr(skb)->saddr; |
31297 |
- memset(sin->sin_zero, 0, sizeof(sin->sin_zero)); |
31298 |
-- *addr_len = sizeof(*sin); |
31299 |
- } |
31300 |
- if (inet->cmsg_flags) |
31301 |
- ip_cmsg_recv(msg, skb); |
31302 |
-@@ -1567,7 +1593,7 @@ csum_error: |
31303 |
+@@ -1612,7 +1633,7 @@ csum_error: |
31304 |
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite); |
31305 |
drop: |
31306 |
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite); |
31307 |
@@ -100708,7 +108865,7 @@ index 54a5fe9..78fea00 100644 |
31308 |
kfree_skb(skb); |
31309 |
return -1; |
31310 |
} |
31311 |
-@@ -1586,7 +1612,7 @@ static void flush_stack(struct sock **stack, unsigned int count, |
31312 |
+@@ -1631,7 +1652,7 @@ static void flush_stack(struct sock **stack, unsigned int count, |
31313 |
skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC); |
31314 |
|
31315 |
if (!skb1) { |
31316 |
@@ -100717,7 +108874,7 @@ index 54a5fe9..78fea00 100644 |
31317 |
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS, |
31318 |
IS_UDPLITE(sk)); |
31319 |
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, |
31320 |
-@@ -1787,6 +1813,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, |
31321 |
+@@ -1817,6 +1838,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, |
31322 |
goto csum_error; |
31323 |
|
31324 |
UDP_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE); |
31325 |
@@ -100727,7 +108884,7 @@ index 54a5fe9..78fea00 100644 |
31326 |
icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0); |
31327 |
|
31328 |
/* |
31329 |
-@@ -2355,7 +2384,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f, |
31330 |
+@@ -2403,7 +2427,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f, |
31331 |
from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)), |
31332 |
0, sock_i_ino(sp), |
31333 |
atomic_read(&sp->sk_refcnt), sp, |
31334 |
@@ -100790,10 +108947,10 @@ index 6156f68..d6ab46d 100644 |
31335 |
return -ENOMEM; |
31336 |
} |
31337 |
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c |
31338 |
-index 6c7fa08..8a31430 100644 |
31339 |
+index 5667b30..9b1b876 100644 |
31340 |
--- a/net/ipv6/addrconf.c |
31341 |
+++ b/net/ipv6/addrconf.c |
31342 |
-@@ -598,7 +598,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb, |
31343 |
+@@ -593,7 +593,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb, |
31344 |
idx = 0; |
31345 |
head = &net->dev_index_head[h]; |
31346 |
rcu_read_lock(); |
31347 |
@@ -100802,7 +108959,7 @@ index 6c7fa08..8a31430 100644 |
31348 |
net->dev_base_seq; |
31349 |
hlist_for_each_entry_rcu(dev, head, index_hlist) { |
31350 |
if (idx < s_idx) |
31351 |
-@@ -2395,7 +2395,7 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg) |
31352 |
+@@ -2390,7 +2390,7 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg) |
31353 |
p.iph.ihl = 5; |
31354 |
p.iph.protocol = IPPROTO_IPV6; |
31355 |
p.iph.ttl = 64; |
31356 |
@@ -100811,7 +108968,7 @@ index 6c7fa08..8a31430 100644 |
31357 |
|
31358 |
if (ops->ndo_do_ioctl) { |
31359 |
mm_segment_t oldfs = get_fs(); |
31360 |
-@@ -3528,16 +3528,23 @@ static const struct file_operations if6_fops = { |
31361 |
+@@ -3516,16 +3516,23 @@ static const struct file_operations if6_fops = { |
31362 |
.release = seq_release_net, |
31363 |
}; |
31364 |
|
31365 |
@@ -100836,7 +108993,7 @@ index 6c7fa08..8a31430 100644 |
31366 |
} |
31367 |
|
31368 |
static struct pernet_operations if6_proc_net_ops = { |
31369 |
-@@ -4146,7 +4153,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb, |
31370 |
+@@ -4141,7 +4148,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb, |
31371 |
s_ip_idx = ip_idx = cb->args[2]; |
31372 |
|
31373 |
rcu_read_lock(); |
31374 |
@@ -100845,7 +109002,7 @@ index 6c7fa08..8a31430 100644 |
31375 |
for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) { |
31376 |
idx = 0; |
31377 |
head = &net->dev_index_head[h]; |
31378 |
-@@ -4758,7 +4765,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) |
31379 |
+@@ -4753,7 +4760,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) |
31380 |
dst_free(&ifp->rt->dst); |
31381 |
break; |
31382 |
} |
31383 |
@@ -100854,7 +109011,7 @@ index 6c7fa08..8a31430 100644 |
31384 |
rt_genid_bump_ipv6(net); |
31385 |
} |
31386 |
|
31387 |
-@@ -4779,7 +4786,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write, |
31388 |
+@@ -4774,7 +4781,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write, |
31389 |
int *valp = ctl->data; |
31390 |
int val = *valp; |
31391 |
loff_t pos = *ppos; |
31392 |
@@ -100863,7 +109020,7 @@ index 6c7fa08..8a31430 100644 |
31393 |
int ret; |
31394 |
|
31395 |
/* |
31396 |
-@@ -4864,7 +4871,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write, |
31397 |
+@@ -4859,7 +4866,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write, |
31398 |
int *valp = ctl->data; |
31399 |
int val = *valp; |
31400 |
loff_t pos = *ppos; |
31401 |
@@ -100873,10 +109030,10 @@ index 6c7fa08..8a31430 100644 |
31402 |
|
31403 |
/* |
31404 |
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c |
31405 |
-index d935889..2f64330 100644 |
31406 |
+index 7cb4392..dc96d28 100644 |
31407 |
--- a/net/ipv6/af_inet6.c |
31408 |
+++ b/net/ipv6/af_inet6.c |
31409 |
-@@ -776,7 +776,7 @@ static int __net_init inet6_net_init(struct net *net) |
31410 |
+@@ -765,7 +765,7 @@ static int __net_init inet6_net_init(struct net *net) |
31411 |
net->ipv6.sysctl.bindv6only = 0; |
31412 |
net->ipv6.sysctl.icmpv6_time = 1*HZ; |
31413 |
net->ipv6.sysctl.flowlabel_consistency = 1; |
31414 |
@@ -100897,10 +109054,10 @@ index c3bf2d2..1f00573 100644 |
31415 |
+ atomic_read_unchecked(&sp->sk_drops)); |
31416 |
} |
31417 |
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c |
31418 |
-index 7b32652..0bc348b 100644 |
31419 |
+index f6c84a6..9f2084e 100644 |
31420 |
--- a/net/ipv6/icmp.c |
31421 |
+++ b/net/ipv6/icmp.c |
31422 |
-@@ -1005,7 +1005,7 @@ static struct ctl_table ipv6_icmp_table_template[] = { |
31423 |
+@@ -990,7 +990,7 @@ static struct ctl_table ipv6_icmp_table_template[] = { |
31424 |
|
31425 |
struct ctl_table * __net_init ipv6_icmp_sysctl_init(struct net *net) |
31426 |
{ |
31427 |
@@ -100910,19 +109067,21 @@ index 7b32652..0bc348b 100644 |
31428 |
table = kmemdup(ipv6_icmp_table_template, |
31429 |
sizeof(ipv6_icmp_table_template), |
31430 |
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c |
31431 |
-index 9d92146..d986c6a 100644 |
31432 |
+index 3873181..220ad3f 100644 |
31433 |
--- a/net/ipv6/ip6_gre.c |
31434 |
+++ b/net/ipv6/ip6_gre.c |
31435 |
-@@ -71,7 +71,7 @@ struct ip6gre_net { |
31436 |
+@@ -71,8 +71,8 @@ struct ip6gre_net { |
31437 |
struct net_device *fb_tunnel_dev; |
31438 |
}; |
31439 |
|
31440 |
-static struct rtnl_link_ops ip6gre_link_ops __read_mostly; |
31441 |
+-static struct rtnl_link_ops ip6gre_tap_ops __read_mostly; |
31442 |
+static struct rtnl_link_ops ip6gre_link_ops; |
31443 |
++static struct rtnl_link_ops ip6gre_tap_ops; |
31444 |
static int ip6gre_tunnel_init(struct net_device *dev); |
31445 |
static void ip6gre_tunnel_setup(struct net_device *dev); |
31446 |
static void ip6gre_tunnel_link(struct ip6gre_net *ign, struct ip6_tnl *t); |
31447 |
-@@ -1291,7 +1291,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev) |
31448 |
+@@ -1280,7 +1280,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev) |
31449 |
} |
31450 |
|
31451 |
|
31452 |
@@ -100931,7 +109090,7 @@ index 9d92146..d986c6a 100644 |
31453 |
.handler = ip6gre_rcv, |
31454 |
.err_handler = ip6gre_err, |
31455 |
.flags = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL, |
31456 |
-@@ -1636,7 +1636,7 @@ static const struct nla_policy ip6gre_policy[IFLA_GRE_MAX + 1] = { |
31457 |
+@@ -1638,7 +1638,7 @@ static const struct nla_policy ip6gre_policy[IFLA_GRE_MAX + 1] = { |
31458 |
[IFLA_GRE_FLAGS] = { .type = NLA_U32 }, |
31459 |
}; |
31460 |
|
31461 |
@@ -100940,7 +109099,7 @@ index 9d92146..d986c6a 100644 |
31462 |
.kind = "ip6gre", |
31463 |
.maxtype = IFLA_GRE_MAX, |
31464 |
.policy = ip6gre_policy, |
31465 |
-@@ -1650,7 +1650,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = { |
31466 |
+@@ -1652,7 +1652,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = { |
31467 |
.fill_info = ip6gre_fill_info, |
31468 |
}; |
31469 |
|
31470 |
@@ -100972,7 +109131,7 @@ index afa0824..04ba530 100644 |
31471 |
.maxtype = IFLA_IPTUN_MAX, |
31472 |
.policy = ip6_tnl_policy, |
31473 |
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c |
31474 |
-index 6cc9f93..6e5bb7c 100644 |
31475 |
+index 9aaa6bb..5c13e57 100644 |
31476 |
--- a/net/ipv6/ip6_vti.c |
31477 |
+++ b/net/ipv6/ip6_vti.c |
31478 |
@@ -62,7 +62,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2) |
31479 |
@@ -100984,7 +109143,7 @@ index 6cc9f93..6e5bb7c 100644 |
31480 |
|
31481 |
static int vti6_net_id __read_mostly; |
31482 |
struct vti6_net { |
31483 |
-@@ -980,7 +980,7 @@ static const struct nla_policy vti6_policy[IFLA_VTI_MAX + 1] = { |
31484 |
+@@ -977,7 +977,7 @@ static const struct nla_policy vti6_policy[IFLA_VTI_MAX + 1] = { |
31485 |
[IFLA_VTI_OKEY] = { .type = NLA_U32 }, |
31486 |
}; |
31487 |
|
31488 |
@@ -101056,7 +109215,7 @@ index e080fbb..412b3cf 100644 |
31489 |
|
31490 |
case IP6T_SO_GET_ENTRIES: |
31491 |
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c |
31492 |
-index 767ab8d..c5ec70a 100644 |
31493 |
+index 0d5279f..89d9f6f 100644 |
31494 |
--- a/net/ipv6/netfilter/nf_conntrack_reasm.c |
31495 |
+++ b/net/ipv6/netfilter/nf_conntrack_reasm.c |
31496 |
@@ -90,12 +90,11 @@ static struct ctl_table nf_ct_frag6_sysctl_table[] = { |
31497 |
@@ -101097,23 +109256,11 @@ index 767ab8d..c5ec70a 100644 |
31498 |
err_alloc: |
31499 |
return -ENOMEM; |
31500 |
} |
31501 |
-diff --git a/net/ipv6/output_core.c b/net/ipv6/output_core.c |
31502 |
-index 6179ac1..ffa0293 100644 |
31503 |
---- a/net/ipv6/output_core.c |
31504 |
-+++ b/net/ipv6/output_core.c |
31505 |
-@@ -8,7 +8,6 @@ |
31506 |
- #include <net/addrconf.h> |
31507 |
- #include <net/secure_seq.h> |
31508 |
- |
31509 |
-- |
31510 |
- int ip6_find_1stfragopt(struct sk_buff *skb, u8 **nexthdr) |
31511 |
- { |
31512 |
- u16 offset = sizeof(struct ipv6hdr); |
31513 |
diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c |
31514 |
-index bda7429..469b26b 100644 |
31515 |
+index 5b7a1ed..d9da205 100644 |
31516 |
--- a/net/ipv6/ping.c |
31517 |
+++ b/net/ipv6/ping.c |
31518 |
-@@ -246,6 +246,24 @@ static struct pernet_operations ping_v6_net_ops = { |
31519 |
+@@ -240,6 +240,24 @@ static struct pernet_operations ping_v6_net_ops = { |
31520 |
}; |
31521 |
#endif |
31522 |
|
31523 |
@@ -101138,7 +109285,7 @@ index bda7429..469b26b 100644 |
31524 |
int __init pingv6_init(void) |
31525 |
{ |
31526 |
#ifdef CONFIG_PROC_FS |
31527 |
-@@ -253,13 +271,7 @@ int __init pingv6_init(void) |
31528 |
+@@ -247,13 +265,7 @@ int __init pingv6_init(void) |
31529 |
if (ret) |
31530 |
return ret; |
31531 |
#endif |
31532 |
@@ -101153,7 +109300,7 @@ index bda7429..469b26b 100644 |
31533 |
return inet6_register_protosw(&pingv6_protosw); |
31534 |
} |
31535 |
|
31536 |
-@@ -268,14 +280,9 @@ int __init pingv6_init(void) |
31537 |
+@@ -262,14 +274,9 @@ int __init pingv6_init(void) |
31538 |
*/ |
31539 |
void pingv6_exit(void) |
31540 |
{ |
31541 |
@@ -101170,7 +109317,7 @@ index bda7429..469b26b 100644 |
31542 |
inet6_unregister_protosw(&pingv6_protosw); |
31543 |
} |
31544 |
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c |
31545 |
-index 091d066..139d410 100644 |
31546 |
+index 3317440..201764e 100644 |
31547 |
--- a/net/ipv6/proc.c |
31548 |
+++ b/net/ipv6/proc.c |
31549 |
@@ -309,7 +309,7 @@ static int __net_init ipv6_proc_init_net(struct net *net) |
31550 |
@@ -101183,7 +109330,7 @@ index 091d066..139d410 100644 |
31551 |
goto proc_dev_snmp6_fail; |
31552 |
return 0; |
31553 |
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c |
31554 |
-index 1f29996..46fe0c7 100644 |
31555 |
+index b2dc60b..a6b6c10 100644 |
31556 |
--- a/net/ipv6/raw.c |
31557 |
+++ b/net/ipv6/raw.c |
31558 |
@@ -388,7 +388,7 @@ static inline int rawv6_rcv_skb(struct sock *sk, struct sk_buff *skb) |
31559 |
@@ -101213,25 +109360,7 @@ index 1f29996..46fe0c7 100644 |
31560 |
kfree_skb(skb); |
31561 |
return NET_RX_DROP; |
31562 |
} |
31563 |
-@@ -469,6 +469,9 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk, |
31564 |
- if (flags & MSG_OOB) |
31565 |
- return -EOPNOTSUPP; |
31566 |
- |
31567 |
-+ if (addr_len) |
31568 |
-+ *addr_len=sizeof(*sin6); |
31569 |
-+ |
31570 |
- if (flags & MSG_ERRQUEUE) |
31571 |
- return ipv6_recv_error(sk, msg, len, addr_len); |
31572 |
- |
31573 |
-@@ -507,7 +510,6 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk, |
31574 |
- sin6->sin6_flowinfo = 0; |
31575 |
- sin6->sin6_scope_id = ipv6_iface_scope_id(&sin6->sin6_addr, |
31576 |
- IP6CB(skb)->iif); |
31577 |
-- *addr_len = sizeof(*sin6); |
31578 |
- } |
31579 |
- |
31580 |
- sock_recv_ts_and_drops(msg, sk, skb); |
31581 |
-@@ -610,7 +612,7 @@ out: |
31582 |
+@@ -610,7 +610,7 @@ out: |
31583 |
return err; |
31584 |
} |
31585 |
|
31586 |
@@ -101240,7 +109369,7 @@ index 1f29996..46fe0c7 100644 |
31587 |
struct flowi6 *fl6, struct dst_entry **dstp, |
31588 |
unsigned int flags) |
31589 |
{ |
31590 |
-@@ -922,12 +924,15 @@ do_confirm: |
31591 |
+@@ -916,12 +916,15 @@ do_confirm: |
31592 |
static int rawv6_seticmpfilter(struct sock *sk, int level, int optname, |
31593 |
char __user *optval, int optlen) |
31594 |
{ |
31595 |
@@ -101257,7 +109386,7 @@ index 1f29996..46fe0c7 100644 |
31596 |
return 0; |
31597 |
default: |
31598 |
return -ENOPROTOOPT; |
31599 |
-@@ -940,6 +945,7 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname, |
31600 |
+@@ -934,6 +937,7 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname, |
31601 |
char __user *optval, int __user *optlen) |
31602 |
{ |
31603 |
int len; |
31604 |
@@ -101265,7 +109394,7 @@ index 1f29996..46fe0c7 100644 |
31605 |
|
31606 |
switch (optname) { |
31607 |
case ICMPV6_FILTER: |
31608 |
-@@ -951,7 +957,8 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname, |
31609 |
+@@ -945,7 +949,8 @@ static int rawv6_geticmpfilter(struct sock *sk, int level, int optname, |
31610 |
len = sizeof(struct icmp6_filter); |
31611 |
if (put_user(len, optlen)) |
31612 |
return -EFAULT; |
31613 |
@@ -101318,7 +109447,7 @@ index cc85a9b..526a133 100644 |
31614 |
return -ENOMEM; |
31615 |
} |
31616 |
diff --git a/net/ipv6/route.c b/net/ipv6/route.c |
31617 |
-index 6ebdb7b6..f225ab1 100644 |
31618 |
+index f23fbd2..7868241 100644 |
31619 |
--- a/net/ipv6/route.c |
31620 |
+++ b/net/ipv6/route.c |
31621 |
@@ -2971,7 +2971,7 @@ struct ctl_table ipv6_route_table_template[] = { |
31622 |
@@ -101353,10 +109482,10 @@ index 4f40817..54dcbef 100644 |
31623 |
.maxtype = IFLA_IPTUN_MAX, |
31624 |
.policy = ipip6_policy, |
31625 |
diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c |
31626 |
-index 7f405a1..eabef92 100644 |
31627 |
+index 058f3ec..dec973d 100644 |
31628 |
--- a/net/ipv6/sysctl_net_ipv6.c |
31629 |
+++ b/net/ipv6/sysctl_net_ipv6.c |
31630 |
-@@ -54,7 +54,7 @@ static struct ctl_table ipv6_rotable[] = { |
31631 |
+@@ -61,7 +61,7 @@ static struct ctl_table ipv6_rotable[] = { |
31632 |
|
31633 |
static int __net_init ipv6_sysctl_net_init(struct net *net) |
31634 |
{ |
31635 |
@@ -101366,7 +109495,7 @@ index 7f405a1..eabef92 100644 |
31636 |
struct ctl_table *ipv6_icmp_table; |
31637 |
int err; |
31638 |
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c |
31639 |
-index e289830..79a5718 100644 |
31640 |
+index 229239ad..ee2802f 100644 |
31641 |
--- a/net/ipv6/tcp_ipv6.c |
31642 |
+++ b/net/ipv6/tcp_ipv6.c |
31643 |
@@ -102,6 +102,10 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb) |
31644 |
@@ -101380,7 +109509,7 @@ index e289830..79a5718 100644 |
31645 |
static void tcp_v6_hash(struct sock *sk) |
31646 |
{ |
31647 |
if (sk->sk_state != TCP_CLOSE) { |
31648 |
-@@ -1416,6 +1420,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) |
31649 |
+@@ -1424,6 +1428,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) |
31650 |
return 0; |
31651 |
|
31652 |
reset: |
31653 |
@@ -101390,7 +109519,7 @@ index e289830..79a5718 100644 |
31654 |
tcp_v6_send_reset(sk, skb); |
31655 |
discard: |
31656 |
if (opt_skb) |
31657 |
-@@ -1500,12 +1507,20 @@ static int tcp_v6_rcv(struct sk_buff *skb) |
31658 |
+@@ -1508,12 +1515,20 @@ static int tcp_v6_rcv(struct sk_buff *skb) |
31659 |
TCP_SKB_CB(skb)->sacked = 0; |
31660 |
|
31661 |
sk = __inet6_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest); |
31662 |
@@ -101413,7 +109542,7 @@ index e289830..79a5718 100644 |
31663 |
|
31664 |
if (hdr->hop_limit < inet6_sk(sk)->min_hopcount) { |
31665 |
NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP); |
31666 |
-@@ -1557,6 +1572,10 @@ csum_error: |
31667 |
+@@ -1565,6 +1580,10 @@ csum_error: |
31668 |
bad_packet: |
31669 |
TCP_INC_STATS_BH(net, TCP_MIB_INERRS); |
31670 |
} else { |
31671 |
@@ -101425,7 +109554,7 @@ index e289830..79a5718 100644 |
31672 |
} |
31673 |
|
31674 |
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c |
31675 |
-index 20b63d2..13be908 100644 |
31676 |
+index 7092ff7..3fd0eb4 100644 |
31677 |
--- a/net/ipv6/udp.c |
31678 |
+++ b/net/ipv6/udp.c |
31679 |
@@ -76,6 +76,10 @@ static unsigned int udp6_ehashfn(struct net *net, |
31680 |
@@ -101439,17 +109568,7 @@ index 20b63d2..13be908 100644 |
31681 |
int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2) |
31682 |
{ |
31683 |
const struct in6_addr *sk2_rcv_saddr6 = inet6_rcv_saddr(sk2); |
31684 |
-@@ -392,6 +396,9 @@ int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk, |
31685 |
- int is_udp4; |
31686 |
- bool slow; |
31687 |
- |
31688 |
-+ if (addr_len) |
31689 |
-+ *addr_len = sizeof(struct sockaddr_in6); |
31690 |
-+ |
31691 |
- if (flags & MSG_ERRQUEUE) |
31692 |
- return ipv6_recv_error(sk, msg, len, addr_len); |
31693 |
- |
31694 |
-@@ -435,7 +442,7 @@ try_again: |
31695 |
+@@ -435,7 +439,7 @@ try_again: |
31696 |
if (unlikely(err)) { |
31697 |
trace_kfree_skb(skb, udpv6_recvmsg); |
31698 |
if (!peeked) { |
31699 |
@@ -101458,16 +109577,7 @@ index 20b63d2..13be908 100644 |
31700 |
if (is_udp4) |
31701 |
UDP_INC_STATS_USER(sock_net(sk), |
31702 |
UDP_MIB_INERRORS, |
31703 |
-@@ -475,7 +482,7 @@ try_again: |
31704 |
- ipv6_iface_scope_id(&sin6->sin6_addr, |
31705 |
- IP6CB(skb)->iif); |
31706 |
- } |
31707 |
-- *addr_len = sizeof(*sin6); |
31708 |
-+ |
31709 |
- } |
31710 |
- |
31711 |
- if (np->rxopt.all) |
31712 |
-@@ -690,7 +697,7 @@ csum_error: |
31713 |
+@@ -698,7 +702,7 @@ csum_error: |
31714 |
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite); |
31715 |
drop: |
31716 |
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite); |
31717 |
@@ -101476,7 +109586,7 @@ index 20b63d2..13be908 100644 |
31718 |
kfree_skb(skb); |
31719 |
return -1; |
31720 |
} |
31721 |
-@@ -747,7 +754,7 @@ static void flush_stack(struct sock **stack, unsigned int count, |
31722 |
+@@ -754,7 +758,7 @@ static void flush_stack(struct sock **stack, unsigned int count, |
31723 |
if (likely(skb1 == NULL)) |
31724 |
skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC); |
31725 |
if (!skb1) { |
31726 |
@@ -101485,7 +109595,7 @@ index 20b63d2..13be908 100644 |
31727 |
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS, |
31728 |
IS_UDPLITE(sk)); |
31729 |
UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, |
31730 |
-@@ -886,6 +893,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, |
31731 |
+@@ -920,6 +924,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, |
31732 |
goto csum_error; |
31733 |
|
31734 |
UDP6_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE); |
31735 |
@@ -101650,12 +109760,12 @@ index b9ac598..f88cc56 100644 |
31736 |
return; |
31737 |
|
31738 |
diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c |
31739 |
-index 8c9d730..66c6305 100644 |
31740 |
+index 7a95fa4..57be196 100644 |
31741 |
--- a/net/iucv/af_iucv.c |
31742 |
+++ b/net/iucv/af_iucv.c |
31743 |
-@@ -773,10 +773,10 @@ static int iucv_sock_autobind(struct sock *sk) |
31744 |
- |
31745 |
- write_lock_bh(&iucv_sk_list.lock); |
31746 |
+@@ -686,10 +686,10 @@ static void __iucv_auto_name(struct iucv_sock *iucv) |
31747 |
+ { |
31748 |
+ char name[12]; |
31749 |
|
31750 |
- sprintf(name, "%08x", atomic_inc_return(&iucv_sk_list.autobind_name)); |
31751 |
+ sprintf(name, "%08x", atomic_inc_return_unchecked(&iucv_sk_list.autobind_name)); |
31752 |
@@ -101664,8 +109774,8 @@ index 8c9d730..66c6305 100644 |
31753 |
- atomic_inc_return(&iucv_sk_list.autobind_name)); |
31754 |
+ atomic_inc_return_unchecked(&iucv_sk_list.autobind_name)); |
31755 |
} |
31756 |
- |
31757 |
- write_unlock_bh(&iucv_sk_list.lock); |
31758 |
+ memcpy(iucv->src_name, name, 8); |
31759 |
+ } |
31760 |
diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c |
31761 |
index da78793..bdd78cf 100644 |
31762 |
--- a/net/iucv/iucv.c |
31763 |
@@ -101680,10 +109790,10 @@ index da78793..bdd78cf 100644 |
31764 |
}; |
31765 |
|
31766 |
diff --git a/net/key/af_key.c b/net/key/af_key.c |
31767 |
-index f3c8307..7127791 100644 |
31768 |
+index ba2a2f9..b658bc3 100644 |
31769 |
--- a/net/key/af_key.c |
31770 |
+++ b/net/key/af_key.c |
31771 |
-@@ -3070,10 +3070,10 @@ static int pfkey_send_policy_notify(struct xfrm_policy *xp, int dir, const struc |
31772 |
+@@ -3052,10 +3052,10 @@ static int pfkey_send_policy_notify(struct xfrm_policy *xp, int dir, const struc |
31773 |
static u32 get_acqseq(void) |
31774 |
{ |
31775 |
u32 res; |
31776 |
@@ -101772,28 +109882,6 @@ index 76125c5..e474828 100644 |
31777 |
kfree_skb(skb); |
31778 |
} |
31779 |
|
31780 |
-diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c |
31781 |
-index 3397fe6..861fd1a 100644 |
31782 |
---- a/net/l2tp/l2tp_ip.c |
31783 |
-+++ b/net/l2tp/l2tp_ip.c |
31784 |
-@@ -518,6 +518,9 @@ static int l2tp_ip_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m |
31785 |
- if (flags & MSG_OOB) |
31786 |
- goto out; |
31787 |
- |
31788 |
-+ if (addr_len) |
31789 |
-+ *addr_len = sizeof(*sin); |
31790 |
-+ |
31791 |
- skb = skb_recv_datagram(sk, flags, noblock, &err); |
31792 |
- if (!skb) |
31793 |
- goto out; |
31794 |
-@@ -540,7 +543,6 @@ static int l2tp_ip_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m |
31795 |
- sin->sin_addr.s_addr = ip_hdr(skb)->saddr; |
31796 |
- sin->sin_port = 0; |
31797 |
- memset(&sin->sin_zero, 0, sizeof(sin->sin_zero)); |
31798 |
-- *addr_len = sizeof(*sin); |
31799 |
- } |
31800 |
- if (inet->cmsg_flags) |
31801 |
- ip_cmsg_recv(msg, skb); |
31802 |
diff --git a/net/llc/llc_proc.c b/net/llc/llc_proc.c |
31803 |
index 1a3c7e0..80f8b0c 100644 |
31804 |
--- a/net/llc/llc_proc.c |
31805 |
@@ -101808,10 +109896,10 @@ index 1a3c7e0..80f8b0c 100644 |
31806 |
goto out; |
31807 |
|
31808 |
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c |
31809 |
-index aaa59d7..21a2c4a 100644 |
31810 |
+index 592f4b1..efa7aa9 100644 |
31811 |
--- a/net/mac80211/cfg.c |
31812 |
+++ b/net/mac80211/cfg.c |
31813 |
-@@ -839,7 +839,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy, |
31814 |
+@@ -864,7 +864,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy, |
31815 |
ret = ieee80211_vif_use_channel(sdata, chandef, |
31816 |
IEEE80211_CHANCTX_EXCLUSIVE); |
31817 |
} |
31818 |
@@ -101820,7 +109908,7 @@ index aaa59d7..21a2c4a 100644 |
31819 |
local->_oper_chandef = *chandef; |
31820 |
ieee80211_hw_config(local, 0); |
31821 |
} |
31822 |
-@@ -3440,7 +3440,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy, |
31823 |
+@@ -3574,7 +3574,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy, |
31824 |
else |
31825 |
local->probe_req_reg--; |
31826 |
|
31827 |
@@ -101829,7 +109917,7 @@ index aaa59d7..21a2c4a 100644 |
31828 |
break; |
31829 |
|
31830 |
ieee80211_queue_work(&local->hw, &local->reconfig_filter); |
31831 |
-@@ -3903,8 +3903,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy, |
31832 |
+@@ -3723,8 +3723,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy, |
31833 |
if (chanctx_conf) { |
31834 |
*chandef = chanctx_conf->def; |
31835 |
ret = 0; |
31836 |
@@ -101841,7 +109929,7 @@ index aaa59d7..21a2c4a 100644 |
31837 |
if (local->use_chanctx) |
31838 |
*chandef = local->monitor_chandef; |
31839 |
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h |
31840 |
-index f169b6e..a5dc4eb 100644 |
31841 |
+index ac9836e..32613c1 100644 |
31842 |
--- a/net/mac80211/ieee80211_i.h |
31843 |
+++ b/net/mac80211/ieee80211_i.h |
31844 |
@@ -28,6 +28,7 @@ |
31845 |
@@ -101852,7 +109940,7 @@ index f169b6e..a5dc4eb 100644 |
31846 |
#include "key.h" |
31847 |
#include "sta_info.h" |
31848 |
#include "debug.h" |
31849 |
-@@ -999,7 +1000,7 @@ struct ieee80211_local { |
31850 |
+@@ -1011,7 +1012,7 @@ struct ieee80211_local { |
31851 |
/* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */ |
31852 |
spinlock_t queue_stop_reason_lock; |
31853 |
|
31854 |
@@ -101862,10 +109950,10 @@ index f169b6e..a5dc4eb 100644 |
31855 |
/* number of interfaces with corresponding FIF_ flags */ |
31856 |
int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll, |
31857 |
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c |
31858 |
-index 34799e0..b411290 100644 |
31859 |
+index 388b863..6575b55 100644 |
31860 |
--- a/net/mac80211/iface.c |
31861 |
+++ b/net/mac80211/iface.c |
31862 |
-@@ -524,7 +524,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) |
31863 |
+@@ -531,7 +531,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) |
31864 |
break; |
31865 |
} |
31866 |
|
31867 |
@@ -101874,7 +109962,7 @@ index 34799e0..b411290 100644 |
31868 |
res = drv_start(local); |
31869 |
if (res) |
31870 |
goto err_del_bss; |
31871 |
-@@ -571,7 +571,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) |
31872 |
+@@ -578,7 +578,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) |
31873 |
res = drv_add_interface(local, sdata); |
31874 |
if (res) |
31875 |
goto err_stop; |
31876 |
@@ -101883,7 +109971,7 @@ index 34799e0..b411290 100644 |
31877 |
res = ieee80211_add_virtual_monitor(local); |
31878 |
if (res) |
31879 |
goto err_stop; |
31880 |
-@@ -680,7 +680,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) |
31881 |
+@@ -687,7 +687,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) |
31882 |
atomic_inc(&local->iff_promiscs); |
31883 |
|
31884 |
if (coming_up) |
31885 |
@@ -101892,7 +109980,7 @@ index 34799e0..b411290 100644 |
31886 |
|
31887 |
if (hw_reconf_flags) |
31888 |
ieee80211_hw_config(local, hw_reconf_flags); |
31889 |
-@@ -718,7 +718,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) |
31890 |
+@@ -725,7 +725,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up) |
31891 |
err_del_interface: |
31892 |
drv_remove_interface(local, sdata); |
31893 |
err_stop: |
31894 |
@@ -101901,7 +109989,7 @@ index 34799e0..b411290 100644 |
31895 |
drv_stop(local); |
31896 |
err_del_bss: |
31897 |
sdata->bss = NULL; |
31898 |
-@@ -871,7 +871,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, |
31899 |
+@@ -888,7 +888,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, |
31900 |
} |
31901 |
|
31902 |
if (going_down) |
31903 |
@@ -101910,7 +109998,7 @@ index 34799e0..b411290 100644 |
31904 |
|
31905 |
switch (sdata->vif.type) { |
31906 |
case NL80211_IFTYPE_AP_VLAN: |
31907 |
-@@ -930,7 +930,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, |
31908 |
+@@ -949,7 +949,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, |
31909 |
} |
31910 |
spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); |
31911 |
|
31912 |
@@ -101919,7 +110007,7 @@ index 34799e0..b411290 100644 |
31913 |
ieee80211_clear_tx_pending(local); |
31914 |
|
31915 |
/* |
31916 |
-@@ -970,7 +970,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, |
31917 |
+@@ -989,7 +989,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, |
31918 |
|
31919 |
ieee80211_recalc_ps(local, -1); |
31920 |
|
31921 |
@@ -101928,7 +110016,7 @@ index 34799e0..b411290 100644 |
31922 |
ieee80211_stop_device(local); |
31923 |
|
31924 |
/* no reconfiguring after stop! */ |
31925 |
-@@ -981,7 +981,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, |
31926 |
+@@ -1000,7 +1000,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, |
31927 |
ieee80211_configure_filter(local); |
31928 |
ieee80211_hw_config(local, hw_reconf_flags); |
31929 |
|
31930 |
@@ -101938,7 +110026,7 @@ index 34799e0..b411290 100644 |
31931 |
} |
31932 |
|
31933 |
diff --git a/net/mac80211/main.c b/net/mac80211/main.c |
31934 |
-index 4c1bf61..00b449b 100644 |
31935 |
+index d17c26d..43d6bfb 100644 |
31936 |
--- a/net/mac80211/main.c |
31937 |
+++ b/net/mac80211/main.c |
31938 |
@@ -174,7 +174,7 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed) |
31939 |
@@ -102008,10 +110096,10 @@ index 6ff1346..936ca9a 100644 |
31940 |
|
31941 |
return p; |
31942 |
diff --git a/net/mac80211/util.c b/net/mac80211/util.c |
31943 |
-index 3c36583..12887fe 100644 |
31944 |
+index a6cda52..f3b6776 100644 |
31945 |
--- a/net/mac80211/util.c |
31946 |
+++ b/net/mac80211/util.c |
31947 |
-@@ -1509,7 +1509,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) |
31948 |
+@@ -1548,7 +1548,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) |
31949 |
} |
31950 |
#endif |
31951 |
/* everything else happens only if HW was up & running */ |
31952 |
@@ -102020,7 +110108,7 @@ index 3c36583..12887fe 100644 |
31953 |
goto wake_up; |
31954 |
|
31955 |
/* |
31956 |
-@@ -1734,7 +1734,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) |
31957 |
+@@ -1772,7 +1772,7 @@ int ieee80211_reconfig(struct ieee80211_local *local) |
31958 |
local->in_reconfig = false; |
31959 |
barrier(); |
31960 |
|
31961 |
@@ -102063,10 +110151,10 @@ index bffdad7..f9317d1 100644 |
31962 |
obj-$(CONFIG_NETFILTER_XT_MATCH_HELPER) += xt_helper.o |
31963 |
obj-$(CONFIG_NETFILTER_XT_MATCH_HL) += xt_hl.o |
31964 |
diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c |
31965 |
-index 1172083..986f1c1 100644 |
31966 |
+index ec8114f..6b2bfba 100644 |
31967 |
--- a/net/netfilter/ipset/ip_set_core.c |
31968 |
+++ b/net/netfilter/ipset/ip_set_core.c |
31969 |
-@@ -1924,7 +1924,7 @@ done: |
31970 |
+@@ -1921,7 +1921,7 @@ done: |
31971 |
return ret; |
31972 |
} |
31973 |
|
31974 |
@@ -102076,7 +110164,7 @@ index 1172083..986f1c1 100644 |
31975 |
.get_optmin = SO_IP_SET, |
31976 |
.get_optmax = SO_IP_SET + 1, |
31977 |
diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c |
31978 |
-index a8eb0a8..86f2de4 100644 |
31979 |
+index 610e19c..08d0c3f 100644 |
31980 |
--- a/net/netfilter/ipvs/ip_vs_conn.c |
31981 |
+++ b/net/netfilter/ipvs/ip_vs_conn.c |
31982 |
@@ -556,7 +556,7 @@ ip_vs_bind_dest(struct ip_vs_conn *cp, struct ip_vs_dest *dest) |
31983 |
@@ -102088,7 +110176,7 @@ index a8eb0a8..86f2de4 100644 |
31984 |
if (cp->protocol != IPPROTO_UDP) |
31985 |
conn_flags &= ~IP_VS_CONN_F_ONE_PACKET; |
31986 |
flags = cp->flags; |
31987 |
-@@ -900,7 +900,7 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p, |
31988 |
+@@ -899,7 +899,7 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p, |
31989 |
|
31990 |
cp->control = NULL; |
31991 |
atomic_set(&cp->n_control, 0); |
31992 |
@@ -102097,7 +110185,7 @@ index a8eb0a8..86f2de4 100644 |
31993 |
|
31994 |
cp->packet_xmit = NULL; |
31995 |
cp->app = NULL; |
31996 |
-@@ -1188,7 +1188,7 @@ static inline int todrop_entry(struct ip_vs_conn *cp) |
31997 |
+@@ -1187,7 +1187,7 @@ static inline int todrop_entry(struct ip_vs_conn *cp) |
31998 |
|
31999 |
/* Don't drop the entry if its number of incoming packets is not |
32000 |
located in [0, 8] */ |
32001 |
@@ -102107,7 +110195,7 @@ index a8eb0a8..86f2de4 100644 |
32002 |
|
32003 |
if (!todrop_rate[i]) return 0; |
32004 |
diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c |
32005 |
-index 3d2d2c8..c87e4d3 100644 |
32006 |
+index e683675..67cb16b 100644 |
32007 |
--- a/net/netfilter/ipvs/ip_vs_core.c |
32008 |
+++ b/net/netfilter/ipvs/ip_vs_core.c |
32009 |
@@ -567,7 +567,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb, |
32010 |
@@ -102129,7 +110217,7 @@ index 3d2d2c8..c87e4d3 100644 |
32011 |
if (ipvs->sync_state & IP_VS_STATE_MASTER) |
32012 |
ip_vs_sync_conn(net, cp, pkts); |
32013 |
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c |
32014 |
-index c42e83d..a6a3f8b 100644 |
32015 |
+index 581a658..910e112 100644 |
32016 |
--- a/net/netfilter/ipvs/ip_vs_ctl.c |
32017 |
+++ b/net/netfilter/ipvs/ip_vs_ctl.c |
32018 |
@@ -794,7 +794,7 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest, |
32019 |
@@ -102253,7 +110341,7 @@ index db80126..ef7110e 100644 |
32020 |
cp->old_state = cp->state; |
32021 |
/* |
32022 |
diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c |
32023 |
-index 7f0e1cf..e9a86e6 100644 |
32024 |
+index 73ba1cc..1adfc7a 100644 |
32025 |
--- a/net/netfilter/ipvs/ip_vs_xmit.c |
32026 |
+++ b/net/netfilter/ipvs/ip_vs_xmit.c |
32027 |
@@ -1102,7 +1102,7 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, |
32028 |
@@ -102288,7 +110376,7 @@ index a4b5e2a..13b1de3 100644 |
32029 |
table = kmemdup(acct_sysctl_table, sizeof(acct_sysctl_table), |
32030 |
GFP_KERNEL); |
32031 |
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c |
32032 |
-index 75421f2..0e69621 100644 |
32033 |
+index 1f4f954..e364ad7 100644 |
32034 |
--- a/net/netfilter/nf_conntrack_core.c |
32035 |
+++ b/net/netfilter/nf_conntrack_core.c |
32036 |
@@ -1789,6 +1789,10 @@ void nf_conntrack_init_end(void) |
32037 |
@@ -102457,10 +110545,10 @@ index d292c8d..9f1e166 100644 |
32038 |
|
32039 |
if (data_len) { |
32040 |
diff --git a/net/netfilter/nft_compat.c b/net/netfilter/nft_compat.c |
32041 |
-index 8a779be..1551d4c 100644 |
32042 |
+index 1840989..6895744 100644 |
32043 |
--- a/net/netfilter/nft_compat.c |
32044 |
+++ b/net/netfilter/nft_compat.c |
32045 |
-@@ -216,7 +216,7 @@ target_dump_info(struct sk_buff *skb, const struct xt_target *t, const void *in) |
32046 |
+@@ -225,7 +225,7 @@ target_dump_info(struct sk_buff *skb, const struct xt_target *t, const void *in) |
32047 |
/* We want to reuse existing compat_to_user */ |
32048 |
old_fs = get_fs(); |
32049 |
set_fs(KERNEL_DS); |
32050 |
@@ -102469,7 +110557,7 @@ index 8a779be..1551d4c 100644 |
32051 |
set_fs(old_fs); |
32052 |
ret = nla_put(skb, NFTA_TARGET_INFO, XT_ALIGN(t->targetsize), out); |
32053 |
kfree(out); |
32054 |
-@@ -403,7 +403,7 @@ match_dump_info(struct sk_buff *skb, const struct xt_match *m, const void *in) |
32055 |
+@@ -421,7 +421,7 @@ match_dump_info(struct sk_buff *skb, const struct xt_match *m, const void *in) |
32056 |
/* We want to reuse existing compat_to_user */ |
32057 |
old_fs = get_fs(); |
32058 |
set_fs(KERNEL_DS); |
32059 |
@@ -102478,6 +110566,24 @@ index 8a779be..1551d4c 100644 |
32060 |
set_fs(old_fs); |
32061 |
ret = nla_put(skb, NFTA_MATCH_INFO, XT_ALIGN(m->matchsize), out); |
32062 |
kfree(out); |
32063 |
+diff --git a/net/netfilter/xt_bpf.c b/net/netfilter/xt_bpf.c |
32064 |
+index bbffdbda..12d4da8 100644 |
32065 |
+--- a/net/netfilter/xt_bpf.c |
32066 |
++++ b/net/netfilter/xt_bpf.c |
32067 |
+@@ -23,11 +23,10 @@ MODULE_ALIAS("ip6t_bpf"); |
32068 |
+ static int bpf_mt_check(const struct xt_mtchk_param *par) |
32069 |
+ { |
32070 |
+ struct xt_bpf_info *info = par->matchinfo; |
32071 |
+- struct sock_fprog_kern program; |
32072 |
++ struct sock_fprog program; |
32073 |
+ |
32074 |
+ program.len = info->bpf_program_num_elem; |
32075 |
+- program.filter = info->bpf_program; |
32076 |
+- |
32077 |
++ program.filter = (struct sock_filter __user *) info->bpf_program; |
32078 |
+ if (sk_unattached_filter_create(&info->filter, &program)) { |
32079 |
+ pr_info("bpf: check failed: parse error\n"); |
32080 |
+ return -EINVAL; |
32081 |
diff --git a/net/netfilter/xt_gradm.c b/net/netfilter/xt_gradm.c |
32082 |
new file mode 100644 |
32083 |
index 0000000..c566332 |
32084 |
@@ -102554,10 +110660,10 @@ index a3910fc..2d2ba14 100644 |
32085 |
remove_proc_entry("ipt_hashlimit", net->proc_net); |
32086 |
return -ENOMEM; |
32087 |
diff --git a/net/netfilter/xt_recent.c b/net/netfilter/xt_recent.c |
32088 |
-index 1e657cf..1eb1c34 100644 |
32089 |
+index a9faae8..1ea30e0 100644 |
32090 |
--- a/net/netfilter/xt_recent.c |
32091 |
+++ b/net/netfilter/xt_recent.c |
32092 |
-@@ -618,7 +618,7 @@ static int __net_init recent_proc_net_init(struct net *net) |
32093 |
+@@ -615,7 +615,7 @@ static int __net_init recent_proc_net_init(struct net *net) |
32094 |
{ |
32095 |
struct recent_net *recent_net = recent_pernet(net); |
32096 |
|
32097 |
@@ -102601,7 +110707,7 @@ index 11de55e..f25e448 100644 |
32098 |
return 0; |
32099 |
} |
32100 |
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c |
32101 |
-index 6c0fe97..1d852df 100644 |
32102 |
+index e6fac7e..cdcd25e 100644 |
32103 |
--- a/net/netlink/af_netlink.c |
32104 |
+++ b/net/netlink/af_netlink.c |
32105 |
@@ -257,7 +257,7 @@ static void netlink_overrun(struct sock *sk) |
32106 |
@@ -102613,7 +110719,7 @@ index 6c0fe97..1d852df 100644 |
32107 |
} |
32108 |
|
32109 |
static void netlink_rcv_wake(struct sock *sk) |
32110 |
-@@ -3028,7 +3028,7 @@ static int netlink_seq_show(struct seq_file *seq, void *v) |
32111 |
+@@ -3058,7 +3058,7 @@ static int netlink_seq_show(struct seq_file *seq, void *v) |
32112 |
sk_wmem_alloc_get(s), |
32113 |
nlk->cb_running, |
32114 |
atomic_read(&s->sk_refcnt), |
32115 |
@@ -102622,18 +110728,6 @@ index 6c0fe97..1d852df 100644 |
32116 |
sock_i_ino(s) |
32117 |
); |
32118 |
|
32119 |
-diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c |
32120 |
-index ede50d1..d2468e6 100644 |
32121 |
---- a/net/netrom/af_netrom.c |
32122 |
-+++ b/net/netrom/af_netrom.c |
32123 |
-@@ -850,7 +850,6 @@ static int nr_getname(struct socket *sock, struct sockaddr *uaddr, |
32124 |
- *uaddr_len = sizeof(struct full_sockaddr_ax25); |
32125 |
- } else { |
32126 |
- sax->fsa_ax25.sax25_family = AF_NETROM; |
32127 |
-- sax->fsa_ax25.sax25_ndigis = 0; |
32128 |
- sax->fsa_ax25.sax25_call = nr->source_addr; |
32129 |
- *uaddr_len = sizeof(struct sockaddr_ax25); |
32130 |
- } |
32131 |
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c |
32132 |
index b85c67c..09705b7 100644 |
32133 |
--- a/net/packet/af_packet.c |
32134 |
@@ -102848,7 +110942,7 @@ index 31b74f5..dc1fbfa 100644 |
32135 |
ic->i_ack_next = 0; |
32136 |
#endif |
32137 |
diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c |
32138 |
-index b7ebe23..b6352f6 100644 |
32139 |
+index d67de45..73dbf51 100644 |
32140 |
--- a/net/rds/ib_recv.c |
32141 |
+++ b/net/rds/ib_recv.c |
32142 |
@@ -596,7 +596,7 @@ static u64 rds_ib_get_ack(struct rds_ib_connection *ic) |
32143 |
@@ -102858,11 +110952,11 @@ index b7ebe23..b6352f6 100644 |
32144 |
- atomic64_set(&ic->i_ack_next, seq); |
32145 |
+ atomic64_set_unchecked(&ic->i_ack_next, seq); |
32146 |
if (ack_required) { |
32147 |
- smp_mb__before_clear_bit(); |
32148 |
+ smp_mb__before_atomic(); |
32149 |
set_bit(IB_ACK_REQUESTED, &ic->i_ack_flags); |
32150 |
@@ -608,7 +608,7 @@ static u64 rds_ib_get_ack(struct rds_ib_connection *ic) |
32151 |
clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags); |
32152 |
- smp_mb__after_clear_bit(); |
32153 |
+ smp_mb__after_atomic(); |
32154 |
|
32155 |
- return atomic64_read(&ic->i_ack_next); |
32156 |
+ return atomic64_read_unchecked(&ic->i_ack_next); |
32157 |
@@ -102896,7 +110990,7 @@ index a91e1db..cf3053f 100644 |
32158 |
ic->i_ack_next = 0; |
32159 |
#endif |
32160 |
diff --git a/net/rds/iw_recv.c b/net/rds/iw_recv.c |
32161 |
-index 4503335..db566b4 100644 |
32162 |
+index aa8bf67..b70133c 100644 |
32163 |
--- a/net/rds/iw_recv.c |
32164 |
+++ b/net/rds/iw_recv.c |
32165 |
@@ -427,7 +427,7 @@ static u64 rds_iw_get_ack(struct rds_iw_connection *ic) |
32166 |
@@ -102906,11 +111000,11 @@ index 4503335..db566b4 100644 |
32167 |
- atomic64_set(&ic->i_ack_next, seq); |
32168 |
+ atomic64_set_unchecked(&ic->i_ack_next, seq); |
32169 |
if (ack_required) { |
32170 |
- smp_mb__before_clear_bit(); |
32171 |
+ smp_mb__before_atomic(); |
32172 |
set_bit(IB_ACK_REQUESTED, &ic->i_ack_flags); |
32173 |
@@ -439,7 +439,7 @@ static u64 rds_iw_get_ack(struct rds_iw_connection *ic) |
32174 |
clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags); |
32175 |
- smp_mb__after_clear_bit(); |
32176 |
+ smp_mb__after_atomic(); |
32177 |
|
32178 |
- return atomic64_read(&ic->i_ack_next); |
32179 |
+ return atomic64_read_unchecked(&ic->i_ack_next); |
32180 |
@@ -102944,7 +111038,7 @@ index edac9ef..16bcb98 100644 |
32181 |
set_fs(oldfs); |
32182 |
} |
32183 |
diff --git a/net/rds/tcp_send.c b/net/rds/tcp_send.c |
32184 |
-index 81cf5a4..b5826ff 100644 |
32185 |
+index 53b17ca..45463e7 100644 |
32186 |
--- a/net/rds/tcp_send.c |
32187 |
+++ b/net/rds/tcp_send.c |
32188 |
@@ -43,7 +43,7 @@ static void rds_tcp_cork(struct socket *sock, int val) |
32189 |
@@ -103221,6 +111315,28 @@ index f226709..0e735a8 100644 |
32190 |
_proto("Tx RESPONSE %%%u", ntohl(hdr->serial)); |
32191 |
|
32192 |
ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 3, len); |
32193 |
+diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c |
32194 |
+index 13f64df..1618696 100644 |
32195 |
+--- a/net/sched/cls_bpf.c |
32196 |
++++ b/net/sched/cls_bpf.c |
32197 |
+@@ -160,7 +160,7 @@ static int cls_bpf_modify_existing(struct net *net, struct tcf_proto *tp, |
32198 |
+ { |
32199 |
+ struct sock_filter *bpf_ops, *bpf_old; |
32200 |
+ struct tcf_exts exts; |
32201 |
+- struct sock_fprog_kern tmp; |
32202 |
++ struct sock_fprog tmp; |
32203 |
+ struct sk_filter *fp, *fp_old; |
32204 |
+ u16 bpf_size, bpf_len; |
32205 |
+ u32 classid; |
32206 |
+@@ -191,7 +191,7 @@ static int cls_bpf_modify_existing(struct net *net, struct tcf_proto *tp, |
32207 |
+ memcpy(bpf_ops, nla_data(tb[TCA_BPF_OPS]), bpf_size); |
32208 |
+ |
32209 |
+ tmp.len = bpf_len; |
32210 |
+- tmp.filter = bpf_ops; |
32211 |
++ tmp.filter = (struct sock_filter __user *) bpf_ops; |
32212 |
+ |
32213 |
+ ret = sk_unattached_filter_create(&fp, &tmp); |
32214 |
+ if (ret) |
32215 |
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c |
32216 |
index e1543b0..7ce8bd0 100644 |
32217 |
--- a/net/sched/sch_generic.c |
32218 |
@@ -103244,10 +111360,10 @@ index e1543b0..7ce8bd0 100644 |
32219 |
} |
32220 |
} |
32221 |
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c |
32222 |
-index 2b1738e..a9d0fc9 100644 |
32223 |
+index 1999592..6684af6 100644 |
32224 |
--- a/net/sctp/ipv6.c |
32225 |
+++ b/net/sctp/ipv6.c |
32226 |
-@@ -966,7 +966,7 @@ static const struct inet6_protocol sctpv6_protocol = { |
32227 |
+@@ -964,7 +964,7 @@ static const struct inet6_protocol sctpv6_protocol = { |
32228 |
.flags = INET6_PROTO_NOPOLICY | INET6_PROTO_FINAL, |
32229 |
}; |
32230 |
|
32231 |
@@ -103256,7 +111372,7 @@ index 2b1738e..a9d0fc9 100644 |
32232 |
.sa_family = AF_INET6, |
32233 |
.sctp_xmit = sctp_v6_xmit, |
32234 |
.setsockopt = ipv6_setsockopt, |
32235 |
-@@ -998,7 +998,7 @@ static struct sctp_af sctp_af_inet6 = { |
32236 |
+@@ -996,7 +996,7 @@ static struct sctp_af sctp_af_inet6 = { |
32237 |
#endif |
32238 |
}; |
32239 |
|
32240 |
@@ -103265,7 +111381,7 @@ index 2b1738e..a9d0fc9 100644 |
32241 |
.event_msgname = sctp_inet6_event_msgname, |
32242 |
.skb_msgname = sctp_inet6_skb_msgname, |
32243 |
.af_supported = sctp_inet6_af_supported, |
32244 |
-@@ -1023,7 +1023,7 @@ void sctp_v6_pf_init(void) |
32245 |
+@@ -1021,7 +1021,7 @@ void sctp_v6_pf_init(void) |
32246 |
|
32247 |
void sctp_v6_pf_exit(void) |
32248 |
{ |
32249 |
@@ -103275,7 +111391,7 @@ index 2b1738e..a9d0fc9 100644 |
32250 |
|
32251 |
/* Initialize IPv6 support and register with socket layer. */ |
32252 |
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c |
32253 |
-index 44cbb54..4c5dce6 100644 |
32254 |
+index 6789d785..0798d76 100644 |
32255 |
--- a/net/sctp/protocol.c |
32256 |
+++ b/net/sctp/protocol.c |
32257 |
@@ -836,8 +836,10 @@ int sctp_register_af(struct sctp_af *af) |
32258 |
@@ -103299,7 +111415,7 @@ index 44cbb54..4c5dce6 100644 |
32259 |
.event_msgname = sctp_inet_event_msgname, |
32260 |
.skb_msgname = sctp_inet_skb_msgname, |
32261 |
.af_supported = sctp_inet_af_supported, |
32262 |
-@@ -1039,7 +1041,7 @@ static const struct net_protocol sctp_protocol = { |
32263 |
+@@ -1037,7 +1039,7 @@ static const struct net_protocol sctp_protocol = { |
32264 |
}; |
32265 |
|
32266 |
/* IPv4 address related functions. */ |
32267 |
@@ -103308,7 +111424,7 @@ index 44cbb54..4c5dce6 100644 |
32268 |
.sa_family = AF_INET, |
32269 |
.sctp_xmit = sctp_v4_xmit, |
32270 |
.setsockopt = ip_setsockopt, |
32271 |
-@@ -1124,7 +1126,7 @@ static void sctp_v4_pf_init(void) |
32272 |
+@@ -1123,7 +1125,7 @@ static void sctp_v4_pf_init(void) |
32273 |
|
32274 |
static void sctp_v4_pf_exit(void) |
32275 |
{ |
32276 |
@@ -103331,10 +111447,10 @@ index fef2acd..c705c4f 100644 |
32277 |
sctp_generate_t1_cookie_event, |
32278 |
sctp_generate_t1_init_event, |
32279 |
diff --git a/net/sctp/socket.c b/net/sctp/socket.c |
32280 |
-index fee06b9..eabc613 100644 |
32281 |
+index 4298996..fa5f636 100644 |
32282 |
--- a/net/sctp/socket.c |
32283 |
+++ b/net/sctp/socket.c |
32284 |
-@@ -2175,11 +2175,13 @@ static int sctp_setsockopt_events(struct sock *sk, char __user *optval, |
32285 |
+@@ -2176,11 +2176,13 @@ static int sctp_setsockopt_events(struct sock *sk, char __user *optval, |
32286 |
{ |
32287 |
struct sctp_association *asoc; |
32288 |
struct sctp_ulpevent *event; |
32289 |
@@ -103349,7 +111465,7 @@ index fee06b9..eabc613 100644 |
32290 |
|
32291 |
/* |
32292 |
* At the time when a user app subscribes to SCTP_SENDER_DRY_EVENT, |
32293 |
-@@ -4259,13 +4261,16 @@ static int sctp_getsockopt_disable_fragments(struct sock *sk, int len, |
32294 |
+@@ -4260,13 +4262,16 @@ static int sctp_getsockopt_disable_fragments(struct sock *sk, int len, |
32295 |
static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval, |
32296 |
int __user *optlen) |
32297 |
{ |
32298 |
@@ -103367,7 +111483,7 @@ index fee06b9..eabc613 100644 |
32299 |
return -EFAULT; |
32300 |
return 0; |
32301 |
} |
32302 |
-@@ -4283,6 +4288,8 @@ static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval, |
32303 |
+@@ -4284,6 +4289,8 @@ static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval, |
32304 |
*/ |
32305 |
static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optval, int __user *optlen) |
32306 |
{ |
32307 |
@@ -103376,7 +111492,7 @@ index fee06b9..eabc613 100644 |
32308 |
/* Applicable to UDP-style socket only */ |
32309 |
if (sctp_style(sk, TCP)) |
32310 |
return -EOPNOTSUPP; |
32311 |
-@@ -4291,7 +4298,8 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv |
32312 |
+@@ -4292,7 +4299,8 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv |
32313 |
len = sizeof(int); |
32314 |
if (put_user(len, optlen)) |
32315 |
return -EFAULT; |
32316 |
@@ -103386,7 +111502,7 @@ index fee06b9..eabc613 100644 |
32317 |
return -EFAULT; |
32318 |
return 0; |
32319 |
} |
32320 |
-@@ -4666,12 +4674,15 @@ static int sctp_getsockopt_delayed_ack(struct sock *sk, int len, |
32321 |
+@@ -4667,12 +4675,15 @@ static int sctp_getsockopt_delayed_ack(struct sock *sk, int len, |
32322 |
*/ |
32323 |
static int sctp_getsockopt_initmsg(struct sock *sk, int len, char __user *optval, int __user *optlen) |
32324 |
{ |
32325 |
@@ -103403,7 +111519,7 @@ index fee06b9..eabc613 100644 |
32326 |
return -EFAULT; |
32327 |
return 0; |
32328 |
} |
32329 |
-@@ -4712,6 +4723,8 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len, |
32330 |
+@@ -4713,6 +4724,8 @@ static int sctp_getsockopt_peer_addrs(struct sock *sk, int len, |
32331 |
addrlen = sctp_get_af_specific(temp.sa.sa_family)->sockaddr_len; |
32332 |
if (space_left < addrlen) |
32333 |
return -ENOMEM; |
32334 |
@@ -103413,10 +111529,10 @@ index fee06b9..eabc613 100644 |
32335 |
return -EFAULT; |
32336 |
to += addrlen; |
32337 |
diff --git a/net/sctp/sysctl.c b/net/sctp/sysctl.c |
32338 |
-index dfa532f..1dcfb44 100644 |
32339 |
+index 12c7e01..a755b3e 100644 |
32340 |
--- a/net/sctp/sysctl.c |
32341 |
+++ b/net/sctp/sysctl.c |
32342 |
-@@ -307,7 +307,7 @@ static int proc_sctp_do_hmac_alg(struct ctl_table *ctl, int write, |
32343 |
+@@ -321,7 +321,7 @@ static int proc_sctp_do_hmac_alg(struct ctl_table *ctl, int write, |
32344 |
loff_t *ppos) |
32345 |
{ |
32346 |
struct net *net = current->nsproxy->net_ns; |
32347 |
@@ -103425,7 +111541,7 @@ index dfa532f..1dcfb44 100644 |
32348 |
bool changed = false; |
32349 |
char *none = "none"; |
32350 |
char tmp[8]; |
32351 |
-@@ -355,7 +355,7 @@ static int proc_sctp_do_rto_min(struct ctl_table *ctl, int write, |
32352 |
+@@ -369,7 +369,7 @@ static int proc_sctp_do_rto_min(struct ctl_table *ctl, int write, |
32353 |
struct net *net = current->nsproxy->net_ns; |
32354 |
unsigned int min = *(unsigned int *) ctl->extra1; |
32355 |
unsigned int max = *(unsigned int *) ctl->extra2; |
32356 |
@@ -103434,7 +111550,7 @@ index dfa532f..1dcfb44 100644 |
32357 |
int ret, new_value; |
32358 |
|
32359 |
memset(&tbl, 0, sizeof(struct ctl_table)); |
32360 |
-@@ -384,7 +384,7 @@ static int proc_sctp_do_rto_max(struct ctl_table *ctl, int write, |
32361 |
+@@ -398,7 +398,7 @@ static int proc_sctp_do_rto_max(struct ctl_table *ctl, int write, |
32362 |
struct net *net = current->nsproxy->net_ns; |
32363 |
unsigned int min = *(unsigned int *) ctl->extra1; |
32364 |
unsigned int max = *(unsigned int *) ctl->extra2; |
32365 |
@@ -103443,7 +111559,7 @@ index dfa532f..1dcfb44 100644 |
32366 |
int ret, new_value; |
32367 |
|
32368 |
memset(&tbl, 0, sizeof(struct ctl_table)); |
32369 |
-@@ -411,7 +411,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write, |
32370 |
+@@ -435,7 +435,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write, |
32371 |
loff_t *ppos) |
32372 |
{ |
32373 |
struct net *net = current->nsproxy->net_ns; |
32374 |
@@ -103452,32 +111568,28 @@ index dfa532f..1dcfb44 100644 |
32375 |
int new_value, ret; |
32376 |
|
32377 |
memset(&tbl, 0, sizeof(struct ctl_table)); |
32378 |
-@@ -438,7 +438,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write, |
32379 |
+@@ -462,7 +462,7 @@ static int proc_sctp_do_auth(struct ctl_table *ctl, int write, |
32380 |
|
32381 |
int sctp_sysctl_net_register(struct net *net) |
32382 |
{ |
32383 |
-- struct ctl_table *table = sctp_net_table; |
32384 |
-+ ctl_table_no_const *table = NULL; |
32385 |
- |
32386 |
- if (!net_eq(net, &init_net)) { |
32387 |
- int i; |
32388 |
-@@ -451,7 +451,10 @@ int sctp_sysctl_net_register(struct net *net) |
32389 |
- table[i].data += (char *)(&net->sctp) - (char *)&init_net.sctp; |
32390 |
- } |
32391 |
- |
32392 |
-- net->sctp.sysctl_header = register_net_sysctl(net, "net/sctp", table); |
32393 |
-+ if (!net_eq(net, &init_net)) |
32394 |
-+ net->sctp.sysctl_header = register_net_sysctl(net, "net/sctp", table); |
32395 |
-+ else |
32396 |
-+ net->sctp.sysctl_header = register_net_sysctl(net, "net/sctp", sctp_net_table); |
32397 |
- return 0; |
32398 |
- } |
32399 |
+- struct ctl_table *table; |
32400 |
++ ctl_table_no_const *table; |
32401 |
+ int i; |
32402 |
|
32403 |
+ table = kmemdup(sctp_net_table, sizeof(sctp_net_table), GFP_KERNEL); |
32404 |
diff --git a/net/socket.c b/net/socket.c |
32405 |
-index abf56b2..b8998bc 100644 |
32406 |
+index abf56b2..4cac767 100644 |
32407 |
--- a/net/socket.c |
32408 |
+++ b/net/socket.c |
32409 |
-@@ -89,6 +89,7 @@ |
32410 |
+@@ -72,7 +72,6 @@ |
32411 |
+ #include <linux/if_bridge.h> |
32412 |
+ #include <linux/if_frad.h> |
32413 |
+ #include <linux/if_vlan.h> |
32414 |
+-#include <linux/ptp_classify.h> |
32415 |
+ #include <linux/init.h> |
32416 |
+ #include <linux/poll.h> |
32417 |
+ #include <linux/cache.h> |
32418 |
+@@ -89,6 +88,7 @@ |
32419 |
#include <linux/magic.h> |
32420 |
#include <linux/slab.h> |
32421 |
#include <linux/xattr.h> |
32422 |
@@ -103485,7 +111597,7 @@ index abf56b2..b8998bc 100644 |
32423 |
|
32424 |
#include <asm/uaccess.h> |
32425 |
#include <asm/unistd.h> |
32426 |
-@@ -112,6 +113,8 @@ unsigned int sysctl_net_busy_read __read_mostly; |
32427 |
+@@ -112,6 +112,8 @@ unsigned int sysctl_net_busy_read __read_mostly; |
32428 |
unsigned int sysctl_net_busy_poll __read_mostly; |
32429 |
#endif |
32430 |
|
32431 |
@@ -103494,7 +111606,7 @@ index abf56b2..b8998bc 100644 |
32432 |
static int sock_no_open(struct inode *irrelevant, struct file *dontcare); |
32433 |
static ssize_t sock_aio_read(struct kiocb *iocb, const struct iovec *iov, |
32434 |
unsigned long nr_segs, loff_t pos); |
32435 |
-@@ -163,7 +166,7 @@ static const struct file_operations socket_file_ops = { |
32436 |
+@@ -163,7 +165,7 @@ static const struct file_operations socket_file_ops = { |
32437 |
*/ |
32438 |
|
32439 |
static DEFINE_SPINLOCK(net_family_lock); |
32440 |
@@ -103503,7 +111615,7 @@ index abf56b2..b8998bc 100644 |
32441 |
|
32442 |
/* |
32443 |
* Statistics counters of the socket lists |
32444 |
-@@ -329,7 +332,7 @@ static struct dentry *sockfs_mount(struct file_system_type *fs_type, |
32445 |
+@@ -329,7 +331,7 @@ static struct dentry *sockfs_mount(struct file_system_type *fs_type, |
32446 |
&sockfs_dentry_operations, SOCKFS_MAGIC); |
32447 |
} |
32448 |
|
32449 |
@@ -103512,7 +111624,7 @@ index abf56b2..b8998bc 100644 |
32450 |
|
32451 |
static struct file_system_type sock_fs_type = { |
32452 |
.name = "sockfs", |
32453 |
-@@ -1257,6 +1260,8 @@ int __sock_create(struct net *net, int family, int type, int protocol, |
32454 |
+@@ -1257,6 +1259,8 @@ int __sock_create(struct net *net, int family, int type, int protocol, |
32455 |
return -EAFNOSUPPORT; |
32456 |
if (type < 0 || type >= SOCK_MAX) |
32457 |
return -EINVAL; |
32458 |
@@ -103521,7 +111633,7 @@ index abf56b2..b8998bc 100644 |
32459 |
|
32460 |
/* Compatibility. |
32461 |
|
32462 |
-@@ -1277,6 +1282,20 @@ int __sock_create(struct net *net, int family, int type, int protocol, |
32463 |
+@@ -1277,6 +1281,20 @@ int __sock_create(struct net *net, int family, int type, int protocol, |
32464 |
if (err) |
32465 |
return err; |
32466 |
|
32467 |
@@ -103542,7 +111654,7 @@ index abf56b2..b8998bc 100644 |
32468 |
/* |
32469 |
* Allocate the socket and allow the family to set things up. if |
32470 |
* the protocol is 0, the family is instructed to select an appropriate |
32471 |
-@@ -1528,6 +1547,14 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) |
32472 |
+@@ -1528,6 +1546,14 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) |
32473 |
if (sock) { |
32474 |
err = move_addr_to_kernel(umyaddr, addrlen, &address); |
32475 |
if (err >= 0) { |
32476 |
@@ -103557,7 +111669,7 @@ index abf56b2..b8998bc 100644 |
32477 |
err = security_socket_bind(sock, |
32478 |
(struct sockaddr *)&address, |
32479 |
addrlen); |
32480 |
-@@ -1536,6 +1563,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) |
32481 |
+@@ -1536,6 +1562,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) |
32482 |
(struct sockaddr *) |
32483 |
&address, addrlen); |
32484 |
} |
32485 |
@@ -103565,7 +111677,7 @@ index abf56b2..b8998bc 100644 |
32486 |
fput_light(sock->file, fput_needed); |
32487 |
} |
32488 |
return err; |
32489 |
-@@ -1559,10 +1587,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog) |
32490 |
+@@ -1559,10 +1586,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog) |
32491 |
if ((unsigned int)backlog > somaxconn) |
32492 |
backlog = somaxconn; |
32493 |
|
32494 |
@@ -103586,7 +111698,7 @@ index abf56b2..b8998bc 100644 |
32495 |
fput_light(sock->file, fput_needed); |
32496 |
} |
32497 |
return err; |
32498 |
-@@ -1606,6 +1644,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, |
32499 |
+@@ -1606,6 +1643,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, |
32500 |
newsock->type = sock->type; |
32501 |
newsock->ops = sock->ops; |
32502 |
|
32503 |
@@ -103605,7 +111717,7 @@ index abf56b2..b8998bc 100644 |
32504 |
/* |
32505 |
* We don't need try_module_get here, as the listening socket (sock) |
32506 |
* has the protocol module (sock->ops->owner) held. |
32507 |
-@@ -1651,6 +1701,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, |
32508 |
+@@ -1651,6 +1700,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, |
32509 |
fd_install(newfd, newfile); |
32510 |
err = newfd; |
32511 |
|
32512 |
@@ -103614,7 +111726,7 @@ index abf56b2..b8998bc 100644 |
32513 |
out_put: |
32514 |
fput_light(sock->file, fput_needed); |
32515 |
out: |
32516 |
-@@ -1683,6 +1735,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, |
32517 |
+@@ -1683,6 +1734,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, |
32518 |
int, addrlen) |
32519 |
{ |
32520 |
struct socket *sock; |
32521 |
@@ -103622,7 +111734,7 @@ index abf56b2..b8998bc 100644 |
32522 |
struct sockaddr_storage address; |
32523 |
int err, fput_needed; |
32524 |
|
32525 |
-@@ -1693,6 +1746,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, |
32526 |
+@@ -1693,6 +1745,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, |
32527 |
if (err < 0) |
32528 |
goto out_put; |
32529 |
|
32530 |
@@ -103640,7 +111752,7 @@ index abf56b2..b8998bc 100644 |
32531 |
err = |
32532 |
security_socket_connect(sock, (struct sockaddr *)&address, addrlen); |
32533 |
if (err) |
32534 |
-@@ -1774,6 +1838,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr, |
32535 |
+@@ -1774,6 +1837,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr, |
32536 |
* the protocol. |
32537 |
*/ |
32538 |
|
32539 |
@@ -103649,7 +111761,7 @@ index abf56b2..b8998bc 100644 |
32540 |
SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len, |
32541 |
unsigned int, flags, struct sockaddr __user *, addr, |
32542 |
int, addr_len) |
32543 |
-@@ -1840,7 +1906,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size, |
32544 |
+@@ -1840,7 +1905,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size, |
32545 |
struct socket *sock; |
32546 |
struct iovec iov; |
32547 |
struct msghdr msg; |
32548 |
@@ -103658,7 +111770,7 @@ index abf56b2..b8998bc 100644 |
32549 |
int err, err2; |
32550 |
int fput_needed; |
32551 |
|
32552 |
-@@ -2066,7 +2132,7 @@ static int ___sys_sendmsg(struct socket *sock, struct msghdr __user *msg, |
32553 |
+@@ -2066,7 +2131,7 @@ static int ___sys_sendmsg(struct socket *sock, struct msghdr __user *msg, |
32554 |
* checking falls down on this. |
32555 |
*/ |
32556 |
if (copy_from_user(ctl_buf, |
32557 |
@@ -103667,7 +111779,7 @@ index abf56b2..b8998bc 100644 |
32558 |
ctl_len)) |
32559 |
goto out_freectl; |
32560 |
msg_sys->msg_control = ctl_buf; |
32561 |
-@@ -2217,7 +2283,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg, |
32562 |
+@@ -2217,7 +2282,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg, |
32563 |
int err, total_len, len; |
32564 |
|
32565 |
/* kernel mode address */ |
32566 |
@@ -103676,7 +111788,7 @@ index abf56b2..b8998bc 100644 |
32567 |
|
32568 |
/* user mode address pointers */ |
32569 |
struct sockaddr __user *uaddr; |
32570 |
-@@ -2246,7 +2312,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg, |
32571 |
+@@ -2246,7 +2311,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg, |
32572 |
/* Save the user-mode address (verify_iovec will change the |
32573 |
* kernel msghdr to use the kernel address space) |
32574 |
*/ |
32575 |
@@ -103685,7 +111797,18 @@ index abf56b2..b8998bc 100644 |
32576 |
uaddr_len = COMPAT_NAMELEN(msg); |
32577 |
if (MSG_CMSG_COMPAT & flags) |
32578 |
err = verify_compat_iovec(msg_sys, iov, &addr, VERIFY_WRITE); |
32579 |
-@@ -2887,7 +2953,7 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32) |
32580 |
+@@ -2686,7 +2751,9 @@ static int __init sock_init(void) |
32581 |
+ goto out; |
32582 |
+ #endif |
32583 |
+ |
32584 |
+- ptp_classifier_init(); |
32585 |
++#ifdef CONFIG_NETWORK_PHY_TIMESTAMPING |
32586 |
++ skb_timestamping_init(); |
32587 |
++#endif |
32588 |
+ |
32589 |
+ out: |
32590 |
+ return err; |
32591 |
+@@ -2887,7 +2954,7 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32) |
32592 |
ifr = compat_alloc_user_space(buf_size); |
32593 |
rxnfc = (void __user *)ifr + ALIGN(sizeof(struct ifreq), 8); |
32594 |
|
32595 |
@@ -103694,7 +111817,7 @@ index abf56b2..b8998bc 100644 |
32596 |
return -EFAULT; |
32597 |
|
32598 |
if (put_user(convert_in ? rxnfc : compat_ptr(data), |
32599 |
-@@ -2998,7 +3064,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd, |
32600 |
+@@ -2998,7 +3065,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd, |
32601 |
old_fs = get_fs(); |
32602 |
set_fs(KERNEL_DS); |
32603 |
err = dev_ioctl(net, cmd, |
32604 |
@@ -103703,7 +111826,7 @@ index abf56b2..b8998bc 100644 |
32605 |
set_fs(old_fs); |
32606 |
|
32607 |
return err; |
32608 |
-@@ -3091,7 +3157,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd, |
32609 |
+@@ -3091,7 +3158,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd, |
32610 |
|
32611 |
old_fs = get_fs(); |
32612 |
set_fs(KERNEL_DS); |
32613 |
@@ -103712,7 +111835,7 @@ index abf56b2..b8998bc 100644 |
32614 |
set_fs(old_fs); |
32615 |
|
32616 |
if (cmd == SIOCGIFMAP && !err) { |
32617 |
-@@ -3175,7 +3241,7 @@ static int routing_ioctl(struct net *net, struct socket *sock, |
32618 |
+@@ -3175,7 +3242,7 @@ static int routing_ioctl(struct net *net, struct socket *sock, |
32619 |
ret |= get_user(rtdev, &(ur4->rt_dev)); |
32620 |
if (rtdev) { |
32621 |
ret |= copy_from_user(devname, compat_ptr(rtdev), 15); |
32622 |
@@ -103721,7 +111844,7 @@ index abf56b2..b8998bc 100644 |
32623 |
devname[15] = 0; |
32624 |
} else |
32625 |
r4.rt_dev = NULL; |
32626 |
-@@ -3402,8 +3468,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname, |
32627 |
+@@ -3402,8 +3469,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname, |
32628 |
int __user *uoptlen; |
32629 |
int err; |
32630 |
|
32631 |
@@ -103732,7 +111855,7 @@ index abf56b2..b8998bc 100644 |
32632 |
|
32633 |
set_fs(KERNEL_DS); |
32634 |
if (level == SOL_SOCKET) |
32635 |
-@@ -3423,7 +3489,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname, |
32636 |
+@@ -3423,7 +3490,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname, |
32637 |
char __user *uoptval; |
32638 |
int err; |
32639 |
|
32640 |
@@ -103742,7 +111865,7 @@ index abf56b2..b8998bc 100644 |
32641 |
set_fs(KERNEL_DS); |
32642 |
if (level == SOL_SOCKET) |
32643 |
diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c |
32644 |
-index 0f73f45..a96aa52 100644 |
32645 |
+index 4ce5ecce..7bef300 100644 |
32646 |
--- a/net/sunrpc/auth_gss/svcauth_gss.c |
32647 |
+++ b/net/sunrpc/auth_gss/svcauth_gss.c |
32648 |
@@ -1140,7 +1140,7 @@ static int gss_proxy_save_rsc(struct cache_detail *cd, |
32649 |
@@ -103764,7 +111887,7 @@ index 0f73f45..a96aa52 100644 |
32650 |
/* make a copy for the caller */ |
32651 |
*handle = ctxh; |
32652 |
diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c |
32653 |
-index ae333c1..18521f0 100644 |
32654 |
+index 0663621..c4928d4 100644 |
32655 |
--- a/net/sunrpc/cache.c |
32656 |
+++ b/net/sunrpc/cache.c |
32657 |
@@ -1609,7 +1609,7 @@ static int create_cache_proc_entries(struct cache_detail *cd, struct net *net) |
32658 |
@@ -103792,7 +111915,7 @@ index 2e6ab10..3170800 100644 |
32659 |
task->tk_action = call_reserve; |
32660 |
} |
32661 |
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c |
32662 |
-index 25578af..a29298d 100644 |
32663 |
+index c0365c1..b7f02b3 100644 |
32664 |
--- a/net/sunrpc/sched.c |
32665 |
+++ b/net/sunrpc/sched.c |
32666 |
@@ -261,9 +261,9 @@ static int rpc_wait_bit_killable(void *word) |
32667 |
@@ -103969,19 +112092,28 @@ index c1b6270..05089c1 100644 |
32668 |
.proc_handler = read_reset_stat, |
32669 |
}, |
32670 |
diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c |
32671 |
-index 8d904e4..b2fc727 100644 |
32672 |
+index 8f92a61..eb13b74 100644 |
32673 |
--- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c |
32674 |
+++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c |
32675 |
-@@ -504,7 +504,7 @@ next_sge: |
32676 |
- svc_rdma_put_context(ctxt, 0); |
32677 |
- goto out; |
32678 |
- } |
32679 |
-- atomic_inc(&rdma_stat_read); |
32680 |
-+ atomic_inc_unchecked(&rdma_stat_read); |
32681 |
- |
32682 |
- if (read_wr.num_sge < chl_map->ch[ch_no].count) { |
32683 |
- chl_map->ch[ch_no].count -= read_wr.num_sge; |
32684 |
-@@ -607,7 +607,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) |
32685 |
+@@ -219,7 +219,7 @@ static int rdma_read_chunk_lcl(struct svcxprt_rdma *xprt, |
32686 |
+ *page_no = pg_no; |
32687 |
+ *page_offset = pg_off; |
32688 |
+ ret = read; |
32689 |
+- atomic_inc(&rdma_stat_read); |
32690 |
++ atomic_inc_unchecked(&rdma_stat_read); |
32691 |
+ return ret; |
32692 |
+ err: |
32693 |
+ svc_rdma_unmap_dma(ctxt); |
32694 |
+@@ -355,7 +355,7 @@ static int rdma_read_chunk_frmr(struct svcxprt_rdma *xprt, |
32695 |
+ *page_no = pg_no; |
32696 |
+ *page_offset = pg_off; |
32697 |
+ ret = read; |
32698 |
+- atomic_inc(&rdma_stat_read); |
32699 |
++ atomic_inc_unchecked(&rdma_stat_read); |
32700 |
+ return ret; |
32701 |
+ err: |
32702 |
+ svc_rdma_unmap_dma(ctxt); |
32703 |
+@@ -512,7 +512,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) |
32704 |
dto_q); |
32705 |
list_del_init(&ctxt->dto_q); |
32706 |
} else { |
32707 |
@@ -103990,7 +112122,7 @@ index 8d904e4..b2fc727 100644 |
32708 |
clear_bit(XPT_DATA, &xprt->xpt_flags); |
32709 |
ctxt = NULL; |
32710 |
} |
32711 |
-@@ -627,7 +627,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) |
32712 |
+@@ -531,7 +531,7 @@ int svc_rdma_recvfrom(struct svc_rqst *rqstp) |
32713 |
dprintk("svcrdma: processing ctxt=%p on xprt=%p, rqstp=%p, status=%d\n", |
32714 |
ctxt, rdma_xprt, rqstp, ctxt->wc_status); |
32715 |
BUG_ON(ctxt->wc_status != IB_WC_SUCCESS); |
32716 |
@@ -104000,10 +112132,10 @@ index 8d904e4..b2fc727 100644 |
32717 |
/* Build up the XDR from the receive buffers. */ |
32718 |
rdma_build_arg_xdr(rqstp, ctxt, ctxt->byte_len); |
32719 |
diff --git a/net/sunrpc/xprtrdma/svc_rdma_sendto.c b/net/sunrpc/xprtrdma/svc_rdma_sendto.c |
32720 |
-index 7e024a5..17f13d3 100644 |
32721 |
+index 49fd21a..4bc455b 100644 |
32722 |
--- a/net/sunrpc/xprtrdma/svc_rdma_sendto.c |
32723 |
+++ b/net/sunrpc/xprtrdma/svc_rdma_sendto.c |
32724 |
-@@ -363,7 +363,7 @@ static int send_write(struct svcxprt_rdma *xprt, struct svc_rqst *rqstp, |
32725 |
+@@ -206,7 +206,7 @@ static int send_write(struct svcxprt_rdma *xprt, struct svc_rqst *rqstp, |
32726 |
write_wr.wr.rdma.remote_addr = to; |
32727 |
|
32728 |
/* Post It */ |
32729 |
@@ -104013,10 +112145,10 @@ index 7e024a5..17f13d3 100644 |
32730 |
goto err; |
32731 |
return 0; |
32732 |
diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c |
32733 |
-index 25688fa..dc72003 100644 |
32734 |
+index e7323fb..5e892b3 100644 |
32735 |
--- a/net/sunrpc/xprtrdma/svc_rdma_transport.c |
32736 |
+++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c |
32737 |
-@@ -292,7 +292,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt) |
32738 |
+@@ -294,7 +294,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt) |
32739 |
return; |
32740 |
|
32741 |
ib_req_notify_cq(xprt->sc_rq_cq, IB_CQ_NEXT_COMP); |
32742 |
@@ -104025,7 +112157,7 @@ index 25688fa..dc72003 100644 |
32743 |
|
32744 |
while ((ret = ib_poll_cq(xprt->sc_rq_cq, 1, &wc)) > 0) { |
32745 |
ctxt = (struct svc_rdma_op_ctxt *)(unsigned long)wc.wr_id; |
32746 |
-@@ -314,7 +314,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt) |
32747 |
+@@ -316,7 +316,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt) |
32748 |
} |
32749 |
|
32750 |
if (ctxt) |
32751 |
@@ -104034,16 +112166,16 @@ index 25688fa..dc72003 100644 |
32752 |
|
32753 |
set_bit(XPT_DATA, &xprt->sc_xprt.xpt_flags); |
32754 |
/* |
32755 |
-@@ -386,7 +386,7 @@ static void sq_cq_reap(struct svcxprt_rdma *xprt) |
32756 |
+@@ -391,7 +391,7 @@ static void sq_cq_reap(struct svcxprt_rdma *xprt) |
32757 |
return; |
32758 |
|
32759 |
ib_req_notify_cq(xprt->sc_sq_cq, IB_CQ_NEXT_COMP); |
32760 |
- atomic_inc(&rdma_stat_sq_poll); |
32761 |
+ atomic_inc_unchecked(&rdma_stat_sq_poll); |
32762 |
- while ((ret = ib_poll_cq(cq, 1, &wc)) > 0) { |
32763 |
- if (wc.status != IB_WC_SUCCESS) |
32764 |
- /* Close the transport */ |
32765 |
-@@ -404,7 +404,7 @@ static void sq_cq_reap(struct svcxprt_rdma *xprt) |
32766 |
+ while ((ret = ib_poll_cq(cq, ARRAY_SIZE(wc_a), wc_a)) > 0) { |
32767 |
+ int i; |
32768 |
+ |
32769 |
+@@ -419,7 +419,7 @@ static void sq_cq_reap(struct svcxprt_rdma *xprt) |
32770 |
} |
32771 |
|
32772 |
if (ctxt) |
32773 |
@@ -104052,7 +112184,7 @@ index 25688fa..dc72003 100644 |
32774 |
} |
32775 |
|
32776 |
static void sq_comp_handler(struct ib_cq *cq, void *cq_context) |
32777 |
-@@ -1261,7 +1261,7 @@ int svc_rdma_send(struct svcxprt_rdma *xprt, struct ib_send_wr *wr) |
32778 |
+@@ -1278,7 +1278,7 @@ int svc_rdma_send(struct svcxprt_rdma *xprt, struct ib_send_wr *wr) |
32779 |
spin_lock_bh(&xprt->sc_lock); |
32780 |
if (xprt->sc_sq_depth < atomic_read(&xprt->sc_sq_count) + wr_count) { |
32781 |
spin_unlock_bh(&xprt->sc_lock); |
32782 |
@@ -104088,7 +112220,7 @@ index 6424372..afd36e9 100644 |
32783 |
sub->evt.event = htohl(event, sub->swap); |
32784 |
sub->evt.found_lower = htohl(found_lower, sub->swap); |
32785 |
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c |
32786 |
-index bb7e8ba..9f444c6 100644 |
32787 |
+index e968843..bc95776 100644 |
32788 |
--- a/net/unix/af_unix.c |
32789 |
+++ b/net/unix/af_unix.c |
32790 |
@@ -791,6 +791,12 @@ static struct sock *unix_find_other(struct net *net, |
32791 |
@@ -104137,7 +112269,7 @@ index bb7e8ba..9f444c6 100644 |
32792 |
done_path_create(&path, dentry); |
32793 |
return err; |
32794 |
} |
32795 |
-@@ -2344,9 +2363,13 @@ static int unix_seq_show(struct seq_file *seq, void *v) |
32796 |
+@@ -2350,9 +2369,13 @@ static int unix_seq_show(struct seq_file *seq, void *v) |
32797 |
seq_puts(seq, "Num RefCount Protocol Flags Type St " |
32798 |
"Inode Path\n"); |
32799 |
else { |
32800 |
@@ -104152,7 +112284,7 @@ index bb7e8ba..9f444c6 100644 |
32801 |
|
32802 |
seq_printf(seq, "%pK: %08X %08X %08X %04X %02X %5lu", |
32803 |
s, |
32804 |
-@@ -2373,8 +2396,10 @@ static int unix_seq_show(struct seq_file *seq, void *v) |
32805 |
+@@ -2379,8 +2402,10 @@ static int unix_seq_show(struct seq_file *seq, void *v) |
32806 |
} |
32807 |
for ( ; i < len; i++) |
32808 |
seq_putc(seq, u->addr->name->sun_path[i]); |
32809 |
@@ -104320,7 +112452,7 @@ index 0917f04..f4e3d8c 100644 |
32810 |
|
32811 |
if (!proc_create("x25/route", S_IRUGO, init_net.proc_net, |
32812 |
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c |
32813 |
-index ed60843..311e7c7 100644 |
32814 |
+index 0525d78..cccf7fd 100644 |
32815 |
--- a/net/xfrm/xfrm_policy.c |
32816 |
+++ b/net/xfrm/xfrm_policy.c |
32817 |
@@ -325,7 +325,7 @@ static void xfrm_policy_kill(struct xfrm_policy *policy) |
32818 |
@@ -104341,7 +112473,7 @@ index ed60843..311e7c7 100644 |
32819 |
|
32820 |
/* After previous checking, family can either be AF_INET or AF_INET6 */ |
32821 |
if (policy->family == AF_INET) |
32822 |
-@@ -1759,7 +1759,7 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols, |
32823 |
+@@ -1749,7 +1749,7 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols, |
32824 |
|
32825 |
xdst->num_pols = num_pols; |
32826 |
memcpy(xdst->pols, pols, sizeof(struct xfrm_policy *) * num_pols); |
32827 |
@@ -104350,7 +112482,7 @@ index ed60843..311e7c7 100644 |
32828 |
|
32829 |
return xdst; |
32830 |
} |
32831 |
-@@ -2548,10 +2548,11 @@ void xfrm_garbage_collect(struct net *net) |
32832 |
+@@ -2538,10 +2538,11 @@ void xfrm_garbage_collect(struct net *net) |
32833 |
} |
32834 |
EXPORT_SYMBOL(xfrm_garbage_collect); |
32835 |
|
32836 |
@@ -104363,7 +112495,7 @@ index ed60843..311e7c7 100644 |
32837 |
|
32838 |
static void xfrm_init_pmtu(struct dst_entry *dst) |
32839 |
{ |
32840 |
-@@ -2601,7 +2602,7 @@ static int xfrm_bundle_ok(struct xfrm_dst *first) |
32841 |
+@@ -2591,7 +2592,7 @@ static int xfrm_bundle_ok(struct xfrm_dst *first) |
32842 |
if (xdst->xfrm_genid != dst->xfrm->genid) |
32843 |
return 0; |
32844 |
if (xdst->num_pols > 0 && |
32845 |
@@ -104372,7 +112504,7 @@ index ed60843..311e7c7 100644 |
32846 |
return 0; |
32847 |
|
32848 |
mtu = dst_mtu(dst->child); |
32849 |
-@@ -2689,8 +2690,6 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo) |
32850 |
+@@ -2679,8 +2680,6 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo) |
32851 |
dst_ops->link_failure = xfrm_link_failure; |
32852 |
if (likely(dst_ops->neigh_lookup == NULL)) |
32853 |
dst_ops->neigh_lookup = xfrm_neigh_lookup; |
32854 |
@@ -104381,7 +112513,7 @@ index ed60843..311e7c7 100644 |
32855 |
rcu_assign_pointer(xfrm_policy_afinfo[afinfo->family], afinfo); |
32856 |
} |
32857 |
spin_unlock(&xfrm_policy_afinfo_lock); |
32858 |
-@@ -2744,7 +2743,6 @@ int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo) |
32859 |
+@@ -2734,7 +2733,6 @@ int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo) |
32860 |
dst_ops->check = NULL; |
32861 |
dst_ops->negative_advice = NULL; |
32862 |
dst_ops->link_failure = NULL; |
32863 |
@@ -104389,7 +112521,7 @@ index ed60843..311e7c7 100644 |
32864 |
} |
32865 |
return err; |
32866 |
} |
32867 |
-@@ -3139,7 +3137,7 @@ static int xfrm_policy_migrate(struct xfrm_policy *pol, |
32868 |
+@@ -3119,7 +3117,7 @@ static int xfrm_policy_migrate(struct xfrm_policy *pol, |
32869 |
sizeof(pol->xfrm_vec[i].saddr)); |
32870 |
pol->xfrm_vec[i].encap_family = mp->new_family; |
32871 |
/* flush bundles */ |
32872 |
@@ -104399,7 +112531,7 @@ index ed60843..311e7c7 100644 |
32873 |
} |
32874 |
|
32875 |
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c |
32876 |
-index 8e9c781..3972135 100644 |
32877 |
+index 0ab5413..73dd2cf 100644 |
32878 |
--- a/net/xfrm/xfrm_state.c |
32879 |
+++ b/net/xfrm/xfrm_state.c |
32880 |
@@ -173,12 +173,14 @@ int xfrm_register_type(const struct xfrm_type *type, unsigned short family) |
32881 |
@@ -104493,7 +112625,7 @@ index 8e9c781..3972135 100644 |
32882 |
module_put(mode->afinfo->owner); |
32883 |
err = 0; |
32884 |
} |
32885 |
-@@ -1519,10 +1526,10 @@ EXPORT_SYMBOL(xfrm_find_acq_byseq); |
32886 |
+@@ -1512,10 +1519,10 @@ EXPORT_SYMBOL(xfrm_find_acq_byseq); |
32887 |
u32 xfrm_get_acqseq(void) |
32888 |
{ |
32889 |
u32 res; |
32890 |
@@ -104519,21 +112651,11 @@ index 05a6e3d..6716ec9 100644 |
32891 |
|
32892 |
__xfrm_sysctl_init(net); |
32893 |
|
32894 |
-diff --git a/scripts/Makefile b/scripts/Makefile |
32895 |
-index 1d07860..f16fc22 100644 |
32896 |
---- a/scripts/Makefile |
32897 |
-+++ b/scripts/Makefile |
32898 |
-@@ -40,3 +40,5 @@ subdir-$(CONFIG_DTC) += dtc |
32899 |
- |
32900 |
- # Let clean descend into subdirs |
32901 |
- subdir- += basic kconfig package selinux |
32902 |
-+ |
32903 |
-+clean-files := randstruct.seed |
32904 |
diff --git a/scripts/Makefile.build b/scripts/Makefile.build |
32905 |
-index 003bc26..d5f02b0 100644 |
32906 |
+index bf3e677..c7d426e 100644 |
32907 |
--- a/scripts/Makefile.build |
32908 |
+++ b/scripts/Makefile.build |
32909 |
-@@ -121,7 +121,7 @@ endif |
32910 |
+@@ -60,7 +60,7 @@ endif |
32911 |
endif |
32912 |
|
32913 |
# Do not include host rules unless needed |
32914 |
@@ -104557,7 +112679,7 @@ index 686cb0d..9d653bf 100644 |
32915 |
__clean-files := $(filter-out $(no-clean-files), $(__clean-files)) |
32916 |
|
32917 |
diff --git a/scripts/Makefile.host b/scripts/Makefile.host |
32918 |
-index 1ac414f..38575f7 100644 |
32919 |
+index 6689364..e56dc6a 100644 |
32920 |
--- a/scripts/Makefile.host |
32921 |
+++ b/scripts/Makefile.host |
32922 |
@@ -31,6 +31,8 @@ |
32923 |
@@ -104610,7 +112732,7 @@ index 1ac414f..38575f7 100644 |
32924 |
# Link a shared library, based on position independent .o files |
32925 |
# *.o -> .so shared library (host-cshlib) |
32926 |
quiet_cmd_host-cshlib = HOSTLLD -shared $@ |
32927 |
-@@ -165,6 +180,15 @@ quiet_cmd_host-cshlib = HOSTLLD -shared $@ |
32928 |
+@@ -165,5 +180,14 @@ quiet_cmd_host-cshlib = HOSTLLD -shared $@ |
32929 |
$(host-cshlib): $(obj)/%: $(host-cshobjs) FORCE |
32930 |
$(call if_changed,host-cshlib) |
32931 |
|
32932 |
@@ -104624,11 +112746,10 @@ index 1ac414f..38575f7 100644 |
32933 |
+ $(call if_changed,host-cxxshlib) |
32934 |
+ |
32935 |
targets += $(host-csingle) $(host-cmulti) $(host-cobjs)\ |
32936 |
-- $(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs) |
32937 |
+- $(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs) |
32938 |
+ $(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs) $(host-cxxshlib) $(host-cxxshobjs) |
32939 |
- |
32940 |
diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c |
32941 |
-index 078fe1d..fbdb363 100644 |
32942 |
+index b304068..462d24e 100644 |
32943 |
--- a/scripts/basic/fixdep.c |
32944 |
+++ b/scripts/basic/fixdep.c |
32945 |
@@ -161,7 +161,7 @@ static unsigned int strhash(const char *str, unsigned int sz) |
32946 |
@@ -104749,7 +112870,7 @@ index 86a4fe7..99e91f9 100644 |
32947 |
kallsymso="" |
32948 |
kallsyms_vmlinux="" |
32949 |
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c |
32950 |
-index 1924990..3de7363 100644 |
32951 |
+index e614ef6..d9d2b01 100644 |
32952 |
--- a/scripts/mod/file2alias.c |
32953 |
+++ b/scripts/mod/file2alias.c |
32954 |
@@ -142,7 +142,7 @@ static void device_id_check(const char *modname, const char *device_id, |
32955 |
@@ -104806,7 +112927,7 @@ index 1924990..3de7363 100644 |
32956 |
|
32957 |
buf_printf(&mod->dev_table_buf, |
32958 |
"MODULE_ALIAS(\"pnp:d%s*\");\n", id); |
32959 |
-@@ -941,7 +941,7 @@ static void dmi_ascii_filter(char *d, const char *s) |
32960 |
+@@ -939,7 +939,7 @@ static void dmi_ascii_filter(char *d, const char *s) |
32961 |
static int do_dmi_entry(const char *filename, void *symval, |
32962 |
char *alias) |
32963 |
{ |
32964 |
@@ -104816,7 +112937,7 @@ index 1924990..3de7363 100644 |
32965 |
sprintf(alias, "dmi*"); |
32966 |
|
32967 |
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c |
32968 |
-index 0663556..d9494f0 100644 |
32969 |
+index 9d9c5b9..a3af177 100644 |
32970 |
--- a/scripts/mod/modpost.c |
32971 |
+++ b/scripts/mod/modpost.c |
32972 |
@@ -949,6 +949,7 @@ enum mismatch { |
32973 |
@@ -104870,7 +112991,7 @@ index 0663556..d9494f0 100644 |
32974 |
} |
32975 |
@@ -1687,7 +1702,7 @@ static void section_rel(const char *modname, struct elf_info *elf, |
32976 |
static void check_sec_ref(struct module *mod, const char *modname, |
32977 |
- struct elf_info *elf) |
32978 |
+ struct elf_info *elf) |
32979 |
{ |
32980 |
- int i; |
32981 |
+ unsigned int i; |
32982 |
@@ -104919,7 +113040,7 @@ index 168b43d..77914bf 100644 |
32983 |
struct module { |
32984 |
struct module *next; |
32985 |
diff --git a/scripts/mod/sumversion.c b/scripts/mod/sumversion.c |
32986 |
-index deb2994..af4f63e 100644 |
32987 |
+index 944418d..15291e4 100644 |
32988 |
--- a/scripts/mod/sumversion.c |
32989 |
+++ b/scripts/mod/sumversion.c |
32990 |
@@ -470,7 +470,7 @@ static void write_version(const char *filename, const char *sum, |
32991 |
@@ -104947,19 +113068,19 @@ index 0865b3e..7235dd4 100644 |
32992 |
__ksymtab_gpl : { *(SORT(___ksymtab_gpl+*)) } |
32993 |
__ksymtab_unused : { *(SORT(___ksymtab_unused+*)) } |
32994 |
diff --git a/scripts/package/builddeb b/scripts/package/builddeb |
32995 |
-index 152d4d2..791684c 100644 |
32996 |
+index 35d5a58..9e04789 100644 |
32997 |
--- a/scripts/package/builddeb |
32998 |
+++ b/scripts/package/builddeb |
32999 |
-@@ -291,6 +291,7 @@ fi |
33000 |
- (cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl > "$objtree/debian/hdrsrcfiles") |
33001 |
- (cd $srctree; find arch/$SRCARCH/include include scripts -type f >> "$objtree/debian/hdrsrcfiles") |
33002 |
- (cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f >> "$objtree/debian/hdrobjfiles") |
33003 |
+@@ -295,6 +295,7 @@ fi |
33004 |
+ (cd $srctree; find arch/$SRCARCH -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles" |
33005 |
+ (cd $srctree; find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles" |
33006 |
+ (cd $objtree; find arch/$SRCARCH/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" |
33007 |
+(cd $objtree; find tools/gcc -name \*.so >> "$objtree/debian/hdrobjfiles") |
33008 |
destdir=$kernel_headers_dir/usr/src/linux-headers-$version |
33009 |
mkdir -p "$destdir" |
33010 |
- (cd $srctree; tar -c -f - -T "$objtree/debian/hdrsrcfiles") | (cd $destdir; tar -xf -) |
33011 |
+ (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) |
33012 |
diff --git a/scripts/pnmtologo.c b/scripts/pnmtologo.c |
33013 |
-index 68bb4ef..2f419e1 100644 |
33014 |
+index 4718d78..9220d58 100644 |
33015 |
--- a/scripts/pnmtologo.c |
33016 |
+++ b/scripts/pnmtologo.c |
33017 |
@@ -244,14 +244,14 @@ static void write_header(void) |
33018 |
@@ -106154,10 +114275,10 @@ index 3478965..ec7bb9e 100644 |
33019 |
if (iov != iovstack) |
33020 |
kfree(iov); |
33021 |
diff --git a/security/keys/internal.h b/security/keys/internal.h |
33022 |
-index 80b2aac..bb7ee65 100644 |
33023 |
+index 5f20da0..444ccf1 100644 |
33024 |
--- a/security/keys/internal.h |
33025 |
+++ b/security/keys/internal.h |
33026 |
-@@ -253,7 +253,7 @@ extern long keyctl_instantiate_key_iov(key_serial_t, |
33027 |
+@@ -244,7 +244,7 @@ extern long keyctl_instantiate_key_iov(key_serial_t, |
33028 |
extern long keyctl_invalidate_key(key_serial_t); |
33029 |
|
33030 |
extern long keyctl_instantiate_key_common(key_serial_t, |
33031 |
@@ -106167,7 +114288,7 @@ index 80b2aac..bb7ee65 100644 |
33032 |
#ifdef CONFIG_PERSISTENT_KEYRINGS |
33033 |
extern long keyctl_get_persistent(uid_t, key_serial_t); |
33034 |
diff --git a/security/keys/key.c b/security/keys/key.c |
33035 |
-index 6e21c11..9ed67ca 100644 |
33036 |
+index 2048a11..101df4c 100644 |
33037 |
--- a/security/keys/key.c |
33038 |
+++ b/security/keys/key.c |
33039 |
@@ -285,7 +285,7 @@ struct key *key_alloc(struct key_type *type, const char *desc, |
33040 |
@@ -106224,7 +114345,7 @@ index 6e21c11..9ed67ca 100644 |
33041 |
/* record the root user tracking */ |
33042 |
rb_link_node(&root_key_user.node, |
33043 |
diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c |
33044 |
-index cee72ce..e46074a 100644 |
33045 |
+index cd5bd0c..acd0d5c 100644 |
33046 |
--- a/security/keys/keyctl.c |
33047 |
+++ b/security/keys/keyctl.c |
33048 |
@@ -987,7 +987,7 @@ static int keyctl_change_reqkey_auth(struct key *key) |
33049 |
@@ -106284,7 +114405,7 @@ index f728728..6457a0c 100644 |
33050 |
|
33051 |
/* |
33052 |
diff --git a/security/security.c b/security/security.c |
33053 |
-index 8b774f3..a396233 100644 |
33054 |
+index 31614e9..8b86b12 100644 |
33055 |
--- a/security/security.c |
33056 |
+++ b/security/security.c |
33057 |
@@ -33,8 +33,8 @@ |
33058 |
@@ -106311,7 +114432,7 @@ index 8b774f3..a396233 100644 |
33059 |
static int __init choose_lsm(char *str) |
33060 |
{ |
33061 |
diff --git a/security/selinux/avc.c b/security/selinux/avc.c |
33062 |
-index fc3e662..7844c60 100644 |
33063 |
+index a18f1fa..c9b9fc4 100644 |
33064 |
--- a/security/selinux/avc.c |
33065 |
+++ b/security/selinux/avc.c |
33066 |
@@ -59,7 +59,7 @@ struct avc_node { |
33067 |
@@ -106342,7 +114463,7 @@ index fc3e662..7844c60 100644 |
33068 |
lock = &avc_cache.slots_lock[hvalue]; |
33069 |
|
33070 |
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c |
33071 |
-index 2c7341d..1da068e 100644 |
33072 |
+index 83d06db..d4d6861 100644 |
33073 |
--- a/security/selinux/hooks.c |
33074 |
+++ b/security/selinux/hooks.c |
33075 |
@@ -95,8 +95,6 @@ |
33076 |
@@ -106354,7 +114475,7 @@ index 2c7341d..1da068e 100644 |
33077 |
/* SECMARK reference count */ |
33078 |
static atomic_t selinux_secmark_refcount = ATOMIC_INIT(0); |
33079 |
|
33080 |
-@@ -5758,7 +5756,7 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer) |
33081 |
+@@ -5761,7 +5759,7 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer) |
33082 |
|
33083 |
#endif |
33084 |
|
33085 |
@@ -106363,7 +114484,7 @@ index 2c7341d..1da068e 100644 |
33086 |
.name = "selinux", |
33087 |
|
33088 |
.ptrace_access_check = selinux_ptrace_access_check, |
33089 |
-@@ -6111,6 +6109,9 @@ static void selinux_nf_ip_exit(void) |
33090 |
+@@ -6114,6 +6112,9 @@ static void selinux_nf_ip_exit(void) |
33091 |
#ifdef CONFIG_SECURITY_SELINUX_DISABLE |
33092 |
static int selinux_disabled; |
33093 |
|
33094 |
@@ -106373,7 +114494,7 @@ index 2c7341d..1da068e 100644 |
33095 |
int selinux_disable(void) |
33096 |
{ |
33097 |
if (ss_initialized) { |
33098 |
-@@ -6128,7 +6129,9 @@ int selinux_disable(void) |
33099 |
+@@ -6131,7 +6132,9 @@ int selinux_disable(void) |
33100 |
selinux_disabled = 1; |
33101 |
selinux_enabled = 0; |
33102 |
|
33103 |
@@ -106398,10 +114519,10 @@ index 1450f85..a91e0bc 100644 |
33104 |
} |
33105 |
rtnl_unlock(); |
33106 |
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c |
33107 |
-index 14f52be..7352368 100644 |
33108 |
+index f2c3080..813c85e 100644 |
33109 |
--- a/security/smack/smack_lsm.c |
33110 |
+++ b/security/smack/smack_lsm.c |
33111 |
-@@ -3726,7 +3726,7 @@ static int smack_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) |
33112 |
+@@ -3849,7 +3849,7 @@ static int smack_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen) |
33113 |
return 0; |
33114 |
} |
33115 |
|
33116 |
@@ -106637,7 +114758,7 @@ index 13c88fbc..f8c115e 100644 |
33117 |
{ .procname = "kernel", }, |
33118 |
{ .procname = "yama", }, |
33119 |
diff --git a/sound/aoa/codecs/onyx.c b/sound/aoa/codecs/onyx.c |
33120 |
-index f01bffb..bdda392 100644 |
33121 |
+index 401107b..b9c47c6 100644 |
33122 |
--- a/sound/aoa/codecs/onyx.c |
33123 |
+++ b/sound/aoa/codecs/onyx.c |
33124 |
@@ -54,7 +54,7 @@ struct onyx { |
33125 |
@@ -106842,7 +114963,7 @@ index 91a786a..4c07ed4 100644 |
33126 |
dev->driver_data = NULL; |
33127 |
ops->num_init_devices--; |
33128 |
diff --git a/sound/core/seq/seq_midi.c b/sound/core/seq/seq_midi.c |
33129 |
-index 3e05c55..0f02efc 100644 |
33130 |
+index a1fd77a..69cd659 100644 |
33131 |
--- a/sound/core/seq/seq_midi.c |
33132 |
+++ b/sound/core/seq/seq_midi.c |
33133 |
@@ -462,8 +462,8 @@ snd_seq_midisynth_unregister_port(struct snd_seq_device *dev) |
33134 |
@@ -106994,39 +115115,48 @@ index 78ccfa4..7a0857b 100644 |
33135 |
struct snd_rawmidi_substream *midi_input[PORTMAN_NUM_INPUT_PORTS]; |
33136 |
}; |
33137 |
diff --git a/sound/firewire/amdtp.c b/sound/firewire/amdtp.c |
33138 |
-index 9048777..2d8b1fc 100644 |
33139 |
+index f96bf4c..f3bd1e0 100644 |
33140 |
--- a/sound/firewire/amdtp.c |
33141 |
+++ b/sound/firewire/amdtp.c |
33142 |
-@@ -488,7 +488,7 @@ static void queue_out_packet(struct amdtp_out_stream *s, unsigned int cycle) |
33143 |
- ptr = s->pcm_buffer_pointer + data_blocks; |
33144 |
- if (ptr >= pcm->runtime->buffer_size) |
33145 |
- ptr -= pcm->runtime->buffer_size; |
33146 |
-- ACCESS_ONCE(s->pcm_buffer_pointer) = ptr; |
33147 |
-+ ACCESS_ONCE_RW(s->pcm_buffer_pointer) = ptr; |
33148 |
- |
33149 |
- s->pcm_period_pointer += data_blocks; |
33150 |
- if (s->pcm_period_pointer >= pcm->runtime->period_size) { |
33151 |
-@@ -655,7 +655,7 @@ EXPORT_SYMBOL(amdtp_out_stream_pcm_pointer); |
33152 |
+@@ -512,7 +512,7 @@ static void update_pcm_pointers(struct amdtp_stream *s, |
33153 |
+ ptr = s->pcm_buffer_pointer + frames; |
33154 |
+ if (ptr >= pcm->runtime->buffer_size) |
33155 |
+ ptr -= pcm->runtime->buffer_size; |
33156 |
+- ACCESS_ONCE(s->pcm_buffer_pointer) = ptr; |
33157 |
++ ACCESS_ONCE_RW(s->pcm_buffer_pointer) = ptr; |
33158 |
+ |
33159 |
+ s->pcm_period_pointer += frames; |
33160 |
+ if (s->pcm_period_pointer >= pcm->runtime->period_size) { |
33161 |
+@@ -952,7 +952,7 @@ EXPORT_SYMBOL(amdtp_stream_pcm_pointer); |
33162 |
*/ |
33163 |
- void amdtp_out_stream_update(struct amdtp_out_stream *s) |
33164 |
+ void amdtp_stream_update(struct amdtp_stream *s) |
33165 |
{ |
33166 |
- ACCESS_ONCE(s->source_node_id_field) = |
33167 |
+ ACCESS_ONCE_RW(s->source_node_id_field) = |
33168 |
(fw_parent_device(s->unit)->card->node_id & 0x3f) << 24; |
33169 |
} |
33170 |
- EXPORT_SYMBOL(amdtp_out_stream_update); |
33171 |
+ EXPORT_SYMBOL(amdtp_stream_update); |
33172 |
diff --git a/sound/firewire/amdtp.h b/sound/firewire/amdtp.h |
33173 |
-index 2746ecd..c35dedd 100644 |
33174 |
+index d8ee7b0..79dfa2a 100644 |
33175 |
--- a/sound/firewire/amdtp.h |
33176 |
+++ b/sound/firewire/amdtp.h |
33177 |
-@@ -135,7 +135,7 @@ static inline bool amdtp_out_streaming_error(struct amdtp_out_stream *s) |
33178 |
- static inline void amdtp_out_stream_pcm_trigger(struct amdtp_out_stream *s, |
33179 |
- struct snd_pcm_substream *pcm) |
33180 |
+@@ -211,7 +211,7 @@ static inline bool amdtp_stream_pcm_running(struct amdtp_stream *s) |
33181 |
+ static inline void amdtp_stream_pcm_trigger(struct amdtp_stream *s, |
33182 |
+ struct snd_pcm_substream *pcm) |
33183 |
{ |
33184 |
- ACCESS_ONCE(s->pcm) = pcm; |
33185 |
+ ACCESS_ONCE_RW(s->pcm) = pcm; |
33186 |
} |
33187 |
|
33188 |
+ /** |
33189 |
+@@ -229,7 +229,7 @@ static inline void amdtp_stream_midi_trigger(struct amdtp_stream *s, |
33190 |
+ struct snd_rawmidi_substream *midi) |
33191 |
+ { |
33192 |
+ if (port < s->midi_ports) |
33193 |
+- ACCESS_ONCE(s->midi[port]) = midi; |
33194 |
++ ACCESS_ONCE_RW(s->midi[port]) = midi; |
33195 |
+ } |
33196 |
+ |
33197 |
static inline bool cip_sfc_is_base_44100(enum cip_sfc sfc) |
33198 |
diff --git a/sound/firewire/isight.c b/sound/firewire/isight.c |
33199 |
index 7ac9443..0ec6274 100644 |
33200 |
@@ -107134,7 +115264,7 @@ index 048439a..3be9f6f 100644 |
33201 |
userbuf+useroffs + p, |
33202 |
locallen)) |
33203 |
diff --git a/sound/oss/swarm_cs4297a.c b/sound/oss/swarm_cs4297a.c |
33204 |
-index f851fd0..92576fb 100644 |
33205 |
+index a33e8ce..2262303 100644 |
33206 |
--- a/sound/oss/swarm_cs4297a.c |
33207 |
+++ b/sound/oss/swarm_cs4297a.c |
33208 |
@@ -2623,7 +2623,6 @@ static int __init cs4297a_init(void) |
33209 |
@@ -107143,9 +115273,9 @@ index f851fd0..92576fb 100644 |
33210 |
u32 pwr, id; |
33211 |
- mm_segment_t fs; |
33212 |
int rval; |
33213 |
- #ifndef CONFIG_BCM_CS4297A_CSWARM |
33214 |
u64 cfg; |
33215 |
-@@ -2713,22 +2712,23 @@ static int __init cs4297a_init(void) |
33216 |
+ int mdio_val; |
33217 |
+@@ -2709,22 +2708,23 @@ static int __init cs4297a_init(void) |
33218 |
if (!rval) { |
33219 |
char *sb1250_duart_present; |
33220 |
|
33221 |
@@ -107273,42 +115403,11 @@ index 81c916a..516f0bf 100644 |
33222 |
chip->card = card; |
33223 |
chip->pci = pci; |
33224 |
chip->irq = -1; |
33225 |
-diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c |
33226 |
-index 5428a1f..474f651 100644 |
33227 |
---- a/sound/soc/fsl/fsl_ssi.c |
33228 |
-+++ b/sound/soc/fsl/fsl_ssi.c |
33229 |
-@@ -1255,7 +1255,6 @@ static int fsl_ssi_probe(struct platform_device *pdev) |
33230 |
- { |
33231 |
- struct fsl_ssi_private *ssi_private; |
33232 |
- int ret = 0; |
33233 |
-- struct device_attribute *dev_attr = NULL; |
33234 |
- struct device_node *np = pdev->dev.of_node; |
33235 |
- const struct of_device_id *of_id; |
33236 |
- enum fsl_ssi_type hw_type; |
33237 |
-@@ -1481,7 +1480,7 @@ static int fsl_ssi_probe(struct platform_device *pdev) |
33238 |
- &ssi_private->cpu_dai_drv, 1); |
33239 |
- if (ret) { |
33240 |
- dev_err(&pdev->dev, "failed to register DAI: %d\n", ret); |
33241 |
-- goto error_dev; |
33242 |
-+ goto error_clk; |
33243 |
- } |
33244 |
- |
33245 |
- ret = fsl_ssi_debugfs_create(ssi_private, &pdev->dev); |
33246 |
-@@ -1562,9 +1561,6 @@ error_pcm: |
33247 |
- error_dbgfs: |
33248 |
- snd_soc_unregister_component(&pdev->dev); |
33249 |
- |
33250 |
--error_dev: |
33251 |
-- device_remove_file(&pdev->dev, dev_attr); |
33252 |
-- |
33253 |
- error_clk: |
33254 |
- if (ssi_private->ssi_on_imx) { |
33255 |
- if (!IS_ERR(ssi_private->baudclk)) |
33256 |
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c |
33257 |
-index 051c006..70598e8 100644 |
33258 |
+index b87d7d8..0ccaac3 100644 |
33259 |
--- a/sound/soc/soc-core.c |
33260 |
+++ b/sound/soc/soc-core.c |
33261 |
-@@ -2255,8 +2255,10 @@ int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops, |
33262 |
+@@ -2279,8 +2279,10 @@ int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops, |
33263 |
if (ret) |
33264 |
return ret; |
33265 |
|
33266 |
@@ -115112,10 +123211,10 @@ index 0000000..4378111 |
33267 |
+} |
33268 |
diff --git a/tools/gcc/size_overflow_plugin/size_overflow_hash.data b/tools/gcc/size_overflow_plugin/size_overflow_hash.data |
33269 |
new file mode 100644 |
33270 |
-index 0000000..386792a |
33271 |
+index 0000000..b565921 |
33272 |
--- /dev/null |
33273 |
+++ b/tools/gcc/size_overflow_plugin/size_overflow_hash.data |
33274 |
-@@ -0,0 +1,5808 @@ |
33275 |
+@@ -0,0 +1,5510 @@ |
33276 |
+intel_fake_agp_alloc_by_type_1 intel_fake_agp_alloc_by_type 1 1 NULL |
33277 |
+storvsc_connect_to_vsp_22 storvsc_connect_to_vsp 2 22 NULL |
33278 |
+compat_sock_setsockopt_23 compat_sock_setsockopt 5 23 NULL |
33279 |
@@ -115130,12 +123229,11 @@ index 0000000..386792a |
33280 |
+init_q_132 init_q 4 132 NULL |
33281 |
+memstick_alloc_host_142 memstick_alloc_host 1 142 NULL |
33282 |
+hva_to_gfn_memslot_149 hva_to_gfn_memslot 0-1 149 NULL |
33283 |
-+ping_v6_sendmsg_152 ping_v6_sendmsg 4 152 NULL |
33284 |
+tracing_trace_options_write_153 tracing_trace_options_write 3 153 NULL nohasharray |
33285 |
+ext4_ext_get_actual_len_153 ext4_ext_get_actual_len 0 153 &tracing_trace_options_write_153 |
33286 |
-+pci_request_selected_regions_169 pci_request_selected_regions 0 169 NULL |
33287 |
+xfs_buf_item_get_format_189 xfs_buf_item_get_format 2 189 NULL |
33288 |
+iscsi_session_setup_196 iscsi_session_setup 4-5 196 NULL |
33289 |
++obd_proc_jobid_var_seq_write_199 obd_proc_jobid_var_seq_write 3 199 NULL |
33290 |
+ll_xattr_cache_seq_write_250 ll_xattr_cache_seq_write 3 250 NULL |
33291 |
+br_port_info_size_268 br_port_info_size 0 268 NULL |
33292 |
+read_file_war_stats_292 read_file_war_stats 3 292 NULL |
33293 |
@@ -115154,10 +123252,9 @@ index 0000000..386792a |
33294 |
+zlib_deflate_workspacesize_537 zlib_deflate_workspacesize 0-1-2 537 NULL |
33295 |
+iwl_dbgfs_wowlan_sram_read_540 iwl_dbgfs_wowlan_sram_read 3 540 NULL |
33296 |
+sco_sock_setsockopt_552 sco_sock_setsockopt 5 552 NULL |
33297 |
-+lpfc_nlp_state_name_556 lpfc_nlp_state_name 2 556 NULL |
33298 |
+snd_aw2_saa7146_get_hw_ptr_playback_558 snd_aw2_saa7146_get_hw_ptr_playback 0 558 NULL |
33299 |
-+start_isoc_chain_565 start_isoc_chain 2 565 NULL nohasharray |
33300 |
-+dev_hard_header_565 dev_hard_header 0 565 &start_isoc_chain_565 |
33301 |
++dev_hard_header_565 dev_hard_header 0 565 NULL nohasharray |
33302 |
++start_isoc_chain_565 start_isoc_chain 2 565 &dev_hard_header_565 |
33303 |
+smk_write_load_self2_591 smk_write_load_self2 3 591 NULL |
33304 |
+btrfs_stack_file_extent_offset_607 btrfs_stack_file_extent_offset 0 607 NULL |
33305 |
+ni_gpct_device_construct_610 ni_gpct_device_construct 5 610 NULL |
33306 |
@@ -115174,7 +123271,6 @@ index 0000000..386792a |
33307 |
+dvb_video_write_754 dvb_video_write 3 754 NULL |
33308 |
+cfs_trace_allocate_string_buffer_781 cfs_trace_allocate_string_buffer 2 781 NULL |
33309 |
+ath6kl_disconnect_timeout_write_794 ath6kl_disconnect_timeout_write 3 794 NULL |
33310 |
-+snd_pcm_drain_811 snd_pcm_drain 0 811 NULL |
33311 |
+if_writecmd_815 if_writecmd 2 815 NULL |
33312 |
+aac_change_queue_depth_825 aac_change_queue_depth 2 825 NULL |
33313 |
+error_state_read_859 error_state_read 6 859 NULL |
33314 |
@@ -115183,10 +123279,7 @@ index 0000000..386792a |
33315 |
+snd_pcm_action_single_905 snd_pcm_action_single 0 905 NULL |
33316 |
+carl9170_cmd_buf_950 carl9170_cmd_buf 3 950 NULL |
33317 |
+__nodes_weight_956 __nodes_weight 0 956 NULL |
33318 |
-+bnx2x_fill_fw_str_968 bnx2x_fill_fw_str 3 968 NULL |
33319 |
-+mnt_want_write_975 mnt_want_write 0 975 NULL |
33320 |
+usnic_ib_qp_grp_dump_hdr_989 usnic_ib_qp_grp_dump_hdr 2 989 NULL |
33321 |
-+memcmp_990 memcmp 0 990 NULL |
33322 |
+smk_write_cipso2_1021 smk_write_cipso2 3 1021 NULL |
33323 |
+gigaset_initdriver_1060 gigaset_initdriver 2 1060 NULL |
33324 |
+mce_request_packet_1073 mce_request_packet 3 1073 NULL |
33325 |
@@ -115203,7 +123296,6 @@ index 0000000..386792a |
33326 |
+dgrp_dpa_read_1204 dgrp_dpa_read 3 1204 NULL |
33327 |
+i2cdev_read_1206 i2cdev_read 3 1206 NULL |
33328 |
+lov_ost_pool_init_1215 lov_ost_pool_init 2 1215 NULL |
33329 |
-+fsync_buffers_list_1219 fsync_buffers_list 0 1219 NULL |
33330 |
+kernfs_file_direct_read_1238 kernfs_file_direct_read 3 1238 NULL |
33331 |
+acpi_battery_write_alarm_1240 acpi_battery_write_alarm 3 1240 NULL |
33332 |
+drm_primary_helper_create_plane_1262 drm_primary_helper_create_plane 3 1262 NULL |
33333 |
@@ -115220,6 +123312,7 @@ index 0000000..386792a |
33334 |
+ipx_sendmsg_1362 ipx_sendmsg 4 1362 NULL |
33335 |
+fw_stats_raw_read_1369 fw_stats_raw_read 3 1369 NULL |
33336 |
+ocfs2_prepare_inode_for_write_1372 ocfs2_prepare_inode_for_write 3 1372 NULL |
33337 |
++xpcs_reg_addr_read_1381 xpcs_reg_addr_read 3 1381 NULL |
33338 |
+sctp_setsockopt_initmsg_1383 sctp_setsockopt_initmsg 3 1383 NULL |
33339 |
+do_msgsnd_1387 do_msgsnd 4 1387 NULL |
33340 |
+SYSC_io_getevents_1392 SYSC_io_getevents 3 1392 NULL |
33341 |
@@ -115235,7 +123328,6 @@ index 0000000..386792a |
33342 |
+alloc_perm_bits_1532 alloc_perm_bits 2 1532 NULL |
33343 |
+ath6kl_init_get_fwcaps_1557 ath6kl_init_get_fwcaps 3 1557 NULL |
33344 |
+ieee80211_if_read_dot11MeshHWMPnetDiameterTraversalTime_1589 ieee80211_if_read_dot11MeshHWMPnetDiameterTraversalTime 3 1589 NULL |
33345 |
-+ipath_ht_handle_hwerrors_1592 ipath_ht_handle_hwerrors 3 1592 NULL |
33346 |
+packet_buffer_init_1607 packet_buffer_init 2 1607 NULL |
33347 |
+btmrvl_hscmd_read_1614 btmrvl_hscmd_read 3 1614 NULL |
33348 |
+v9fs_fid_xattr_get_1618 v9fs_fid_xattr_get 0 1618 NULL |
33349 |
@@ -115247,13 +123339,12 @@ index 0000000..386792a |
33350 |
+pdu_write_u_1710 pdu_write_u 3 1710 NULL |
33351 |
+coda_psdev_write_1711 coda_psdev_write 3 1711 NULL |
33352 |
+btrfs_dir_data_len_1714 btrfs_dir_data_len 0 1714 NULL |
33353 |
-+internal_create_group_1733 internal_create_group 0 1733 NULL |
33354 |
+dev_irnet_read_1741 dev_irnet_read 3 1741 NULL |
33355 |
+usb_ep_align_maybe_1743 usb_ep_align_maybe 0-3 1743 NULL |
33356 |
+tx_frag_called_read_1748 tx_frag_called_read 3 1748 NULL |
33357 |
+cosa_write_1774 cosa_write 3 1774 NULL |
33358 |
+fcoe_ctlr_device_add_1793 fcoe_ctlr_device_add 3 1793 NULL |
33359 |
-+__nodelist_scnprintf_1815 __nodelist_scnprintf 2-0 1815 NULL |
33360 |
++__nodelist_scnprintf_1815 __nodelist_scnprintf 2 1815 NULL |
33361 |
+sb_issue_zeroout_1884 sb_issue_zeroout 3 1884 NULL |
33362 |
+rx_defrag_called_read_1897 rx_defrag_called_read 3 1897 NULL |
33363 |
+nfs_parse_server_name_1899 nfs_parse_server_name 2 1899 NULL |
33364 |
@@ -115264,7 +123355,6 @@ index 0000000..386792a |
33365 |
+ext3_fiemap_1936 ext3_fiemap 4 1936 NULL |
33366 |
+cyttsp_probe_1940 cyttsp_probe 4 1940 NULL |
33367 |
+ieee80211_if_fmt_dot11MeshConfirmTimeout_1945 ieee80211_if_fmt_dot11MeshConfirmTimeout 3 1945 NULL |
33368 |
-+__assign_irq_vector_1961 __assign_irq_vector 0 1961 NULL |
33369 |
+ivtv_v4l2_read_1964 ivtv_v4l2_read 3 1964 NULL |
33370 |
+sel_read_avc_hash_stats_1984 sel_read_avc_hash_stats 3 1984 NULL |
33371 |
+gpio_power_write_1991 gpio_power_write 3 1991 NULL |
33372 |
@@ -115278,6 +123368,7 @@ index 0000000..386792a |
33373 |
+__generic_copy_from_user_intel_2073 __generic_copy_from_user_intel 0-3 2073 NULL |
33374 |
+diva_set_driver_dbg_mask_2077 diva_set_driver_dbg_mask 0 2077 NULL |
33375 |
+iwl_dbgfs_current_sleep_command_read_2081 iwl_dbgfs_current_sleep_command_read 3 2081 NULL |
33376 |
++xgmac_reg_value_read_2095 xgmac_reg_value_read 3 2095 NULL |
33377 |
+idetape_chrdev_read_2097 idetape_chrdev_read 3 2097 NULL |
33378 |
+__set_print_fmt_2106 __set_print_fmt 0 2106 NULL |
33379 |
+iwl_dbgfs_log_event_read_2107 iwl_dbgfs_log_event_read 3 2107 NULL |
33380 |
@@ -115302,19 +123393,18 @@ index 0000000..386792a |
33381 |
+sr_read_cmd_2299 sr_read_cmd 5 2299 NULL |
33382 |
+kvm_clear_guest_page_2308 kvm_clear_guest_page 4 2308 NULL |
33383 |
+intel_sdvo_set_value_2311 intel_sdvo_set_value 4 2311 NULL |
33384 |
-+picolcd_fb_write_2318 picolcd_fb_write 3 2318 NULL nohasharray |
33385 |
-+hfsplus_find_init_2318 hfsplus_find_init 0 2318 &picolcd_fb_write_2318 |
33386 |
++hfsplus_find_init_2318 hfsplus_find_init 0 2318 NULL nohasharray |
33387 |
++picolcd_fb_write_2318 picolcd_fb_write 3 2318 &hfsplus_find_init_2318 |
33388 |
+dice_hwdep_read_2326 dice_hwdep_read 3 2326 NULL |
33389 |
+__erst_read_to_erange_2341 __erst_read_to_erange 0 2341 NULL |
33390 |
+zr364xx_read_2354 zr364xx_read 3 2354 NULL |
33391 |
+viafb_iga2_odev_proc_write_2363 viafb_iga2_odev_proc_write 3 2363 NULL |
33392 |
-+xfs_buf_map_from_irec_2368 xfs_buf_map_from_irec 5 2368 NULL nohasharray |
33393 |
-+rose_recvmsg_2368 rose_recvmsg 4 2368 &xfs_buf_map_from_irec_2368 |
33394 |
++rose_recvmsg_2368 rose_recvmsg 4 2368 NULL nohasharray |
33395 |
++xfs_buf_map_from_irec_2368 xfs_buf_map_from_irec 5 2368 &rose_recvmsg_2368 |
33396 |
+il_dbgfs_sensitivity_read_2370 il_dbgfs_sensitivity_read 3 2370 NULL |
33397 |
+rxpipe_rx_prep_beacon_drop_read_2403 rxpipe_rx_prep_beacon_drop_read 3 2403 NULL |
33398 |
+isdn_v110_open_2418 isdn_v110_open 3 2418 NULL |
33399 |
+raid1_size_2419 raid1_size 0-2 2419 NULL |
33400 |
-+arch_msi_check_device_2449 arch_msi_check_device 0 2449 NULL |
33401 |
+b43legacy_debugfs_read_2473 b43legacy_debugfs_read 3 2473 NULL |
33402 |
+wiphy_new_2482 wiphy_new 2 2482 NULL |
33403 |
+bio_alloc_bioset_2484 bio_alloc_bioset 2 2484 NULL |
33404 |
@@ -115330,6 +123420,7 @@ index 0000000..386792a |
33405 |
+slot_bytes_2609 slot_bytes 0 2609 NULL |
33406 |
+smk_write_logging_2618 smk_write_logging 3 2618 NULL |
33407 |
+switch_status_2629 switch_status 5 2629 NULL |
33408 |
++_proc_do_string_2632 _proc_do_string 2 2632 NULL |
33409 |
+tcp_xmit_size_goal_2661 tcp_xmit_size_goal 2 2661 NULL |
33410 |
+osc_build_ppga_2670 osc_build_ppga 2 2670 NULL |
33411 |
+ffs_ep0_read_2672 ffs_ep0_read 3 2672 NULL |
33412 |
@@ -115341,11 +123432,10 @@ index 0000000..386792a |
33413 |
+fsl_edma_alloc_desc_2769 fsl_edma_alloc_desc 2 2769 NULL |
33414 |
+mon_bin_ioctl_2771 mon_bin_ioctl 3 2771 NULL |
33415 |
+set_msr_hyperv_pw_2785 set_msr_hyperv_pw 3 2785 NULL |
33416 |
-+device_add_attrs_2789 device_add_attrs 0 2789 NULL |
33417 |
+iwl_dbgfs_clear_ucode_statistics_write_2804 iwl_dbgfs_clear_ucode_statistics_write 3 2804 NULL |
33418 |
+sel_read_enforce_2828 sel_read_enforce 3 2828 NULL |
33419 |
-+vb2_dc_get_userptr_2829 vb2_dc_get_userptr 2-3 2829 NULL nohasharray |
33420 |
-+snd_pcm_reset_2829 snd_pcm_reset 0 2829 &vb2_dc_get_userptr_2829 |
33421 |
++vb2_dc_get_userptr_2829 vb2_dc_get_userptr 2-3 2829 NULL |
33422 |
++sock_create_2838 sock_create 0 2838 NULL |
33423 |
+wait_for_avail_2847 wait_for_avail 0 2847 NULL |
33424 |
+sfq_alloc_2861 sfq_alloc 1 2861 NULL |
33425 |
+irnet_ctrl_read_2863 irnet_ctrl_read 4 2863 NULL |
33426 |
@@ -115375,11 +123465,12 @@ index 0000000..386792a |
33427 |
+il3945_ucode_rx_stats_read_3048 il3945_ucode_rx_stats_read 3 3048 NULL |
33428 |
+qp_alloc_ppn_set_3068 qp_alloc_ppn_set 2-4 3068 NULL |
33429 |
+__blk_end_bidi_request_3070 __blk_end_bidi_request 3-4 3070 NULL |
33430 |
-+dac960_user_command_proc_write_3071 dac960_user_command_proc_write 3 3071 NULL |
33431 |
++dac960_user_command_proc_write_3071 dac960_user_command_proc_write 3 3071 NULL nohasharray |
33432 |
++hfsplus_asc2uni_3071 hfsplus_asc2uni 0 3071 &dac960_user_command_proc_write_3071 |
33433 |
+read_file_antenna_diversity_3077 read_file_antenna_diversity 3 3077 NULL |
33434 |
+ttusb2_msg_3100 ttusb2_msg 4 3100 NULL |
33435 |
+rb_alloc_3102 rb_alloc 1 3102 NULL |
33436 |
-+simple_write_to_buffer_3122 simple_write_to_buffer 5-2 3122 NULL |
33437 |
++simple_write_to_buffer_3122 simple_write_to_buffer 2-5 3122 NULL |
33438 |
+print_time_3132 print_time 0 3132 NULL |
33439 |
+fill_write_buffer_3142 fill_write_buffer 3 3142 NULL |
33440 |
+CIFSSMBSetPosixACL_3154 CIFSSMBSetPosixACL 5 3154 NULL |
33441 |
@@ -115393,19 +123484,14 @@ index 0000000..386792a |
33442 |
+codec_reg_write_file_3204 codec_reg_write_file 3 3204 NULL |
33443 |
+SyS_sendto_3219 SyS_sendto 6 3219 NULL |
33444 |
+btrfs_prealloc_file_range_3227 btrfs_prealloc_file_range 3 3227 NULL |
33445 |
-+kimage_crash_alloc_3233 kimage_crash_alloc 3 3233 NULL |
33446 |
+do_read_log_to_user_3236 do_read_log_to_user 4 3236 NULL |
33447 |
+ext3_xattr_find_entry_3237 ext3_xattr_find_entry 0 3237 NULL |
33448 |
+key_key_read_3241 key_key_read 3 3241 NULL |
33449 |
+__ilog2_u64_3284 __ilog2_u64 0 3284 NULL |
33450 |
+ieee80211_if_write_beacon_loss_3296 ieee80211_if_write_beacon_loss 3 3296 NULL |
33451 |
-+cgroup_name_3300 cgroup_name 3 3300 NULL |
33452 |
-+__set_extent_bit_3305 __set_extent_bit 0 3305 NULL |
33453 |
-+__iovec_copy_from_user_inatomic_3314 __iovec_copy_from_user_inatomic 4-3-0 3314 NULL |
33454 |
++__iovec_copy_from_user_inatomic_3314 __iovec_copy_from_user_inatomic 0-4-3 3314 NULL |
33455 |
+_iwl_dbgfs_d3_sram_write_3315 _iwl_dbgfs_d3_sram_write 3 3315 NULL |
33456 |
+dbDiscardAG_3322 dbDiscardAG 3 3322 NULL |
33457 |
-+read_from_oldmem_3337 read_from_oldmem 2 3337 NULL |
33458 |
-+sysfs_create_group_3339 sysfs_create_group 0 3339 NULL |
33459 |
+tty_port_register_device_attr_3341 tty_port_register_device_attr 3 3341 NULL |
33460 |
+il_dbgfs_interrupt_read_3351 il_dbgfs_interrupt_read 3 3351 NULL |
33461 |
+gsm_control_rls_3353 gsm_control_rls 3 3353 NULL |
33462 |
@@ -115439,10 +123525,10 @@ index 0000000..386792a |
33463 |
+_iwl_dbgfs_tx_flush_write_3675 _iwl_dbgfs_tx_flush_write 3 3675 NULL |
33464 |
+snd_m3_assp_read_3703 snd_m3_assp_read 0 3703 NULL |
33465 |
+ci_ll_write_3740 ci_ll_write 4 3740 NULL |
33466 |
++msm_otg_mode_write_3788 msm_otg_mode_write 3 3788 NULL |
33467 |
+sctp_setsockopt_auth_key_3793 sctp_setsockopt_auth_key 3 3793 NULL |
33468 |
+ncp_file_write_3813 ncp_file_write 3 3813 NULL |
33469 |
+llc_ui_recvmsg_3826 llc_ui_recvmsg 4 3826 NULL |
33470 |
-+hfsplus_direct_IO_3835 hfsplus_direct_IO 4 3835 NULL |
33471 |
+create_one_cdev_3852 create_one_cdev 2 3852 NULL |
33472 |
+smk_read_onlycap_3855 smk_read_onlycap 3 3855 NULL |
33473 |
+get_fd_set_3866 get_fd_set 1 3866 NULL |
33474 |
@@ -115454,9 +123540,8 @@ index 0000000..386792a |
33475 |
+vcs_write_3910 vcs_write 3 3910 NULL |
33476 |
+SyS_move_pages_3920 SyS_move_pages 2 3920 NULL |
33477 |
+brcmf_debugfs_fws_stats_read_3947 brcmf_debugfs_fws_stats_read 3 3947 NULL |
33478 |
-+mite_bytes_written_to_memory_lb_3987 mite_bytes_written_to_memory_lb 0 3987 NULL |
33479 |
++copy_from_user_atomic_iovec_3990 copy_from_user_atomic_iovec 0-4 3990 NULL |
33480 |
+do_add_counters_3992 do_add_counters 3 3992 NULL |
33481 |
-+obd_alloc_memmd_4002 obd_alloc_memmd 0 4002 NULL |
33482 |
+userspace_status_4004 userspace_status 4 4004 NULL |
33483 |
+mei_write_4005 mei_write 3 4005 NULL nohasharray |
33484 |
+xfs_check_block_4005 xfs_check_block 4 4005 &mei_write_4005 |
33485 |
@@ -115484,10 +123569,10 @@ index 0000000..386792a |
33486 |
+nouveau_fifo_create__4327 nouveau_fifo_create_ 5-6 4327 NULL |
33487 |
+snd_rawmidi_kernel_read_4328 snd_rawmidi_kernel_read 3 4328 NULL |
33488 |
+ima_eventdigest_init_common_4338 ima_eventdigest_init_common 2 4338 NULL |
33489 |
-+__copy_from_user_inatomic_4365 __copy_from_user_inatomic 3-0 4365 NULL |
33490 |
++__copy_from_user_inatomic_4365 __copy_from_user_inatomic 0-3 4365 NULL |
33491 |
+irda_sendmsg_4388 irda_sendmsg 4 4388 NULL |
33492 |
-+cxacru_cm_get_array_4412 cxacru_cm_get_array 4 4412 NULL nohasharray |
33493 |
-+access_process_vm_4412 access_process_vm 0 4412 &cxacru_cm_get_array_4412 |
33494 |
++access_process_vm_4412 access_process_vm 0 4412 NULL nohasharray |
33495 |
++cxacru_cm_get_array_4412 cxacru_cm_get_array 4 4412 &access_process_vm_4412 |
33496 |
+libfc_vport_create_4415 libfc_vport_create 2 4415 NULL |
33497 |
+rtw_android_get_rssi_4421 rtw_android_get_rssi 0 4421 NULL |
33498 |
+do_pages_stat_4437 do_pages_stat 2 4437 NULL |
33499 |
@@ -115519,7 +123604,6 @@ index 0000000..386792a |
33500 |
+ncp__vol2io_4804 ncp__vol2io 5 4804 NULL |
33501 |
+C_SYSC_setsockopt_4806 C_SYSC_setsockopt 5 4806 NULL |
33502 |
+repair_io_failure_4815 repair_io_failure 4-3 4815 NULL |
33503 |
-+comedi_buf_write_free_4847 comedi_buf_write_free 2 4847 NULL |
33504 |
+gigaset_if_receive_4861 gigaset_if_receive 3 4861 NULL |
33505 |
+key_tx_spec_read_4862 key_tx_spec_read 3 4862 NULL |
33506 |
+ocfs2_defrag_extent_4873 ocfs2_defrag_extent 2 4873 NULL |
33507 |
@@ -115532,17 +123616,15 @@ index 0000000..386792a |
33508 |
+ieee80211_if_fmt_dot11MeshHWMPconfirmationInterval_4976 ieee80211_if_fmt_dot11MeshHWMPconfirmationInterval 3 4976 NULL |
33509 |
+compat_SyS_ipc_5000 compat_SyS_ipc 3 5000 NULL |
33510 |
+do_mincore_5018 do_mincore 0-2-1 5018 NULL |
33511 |
-+btrfs_punch_hole_5041 btrfs_punch_hole 2 5041 NULL |
33512 |
+cfg80211_rx_mgmt_5056 cfg80211_rx_mgmt 5 5056 NULL |
33513 |
+ocfs2_check_range_for_holes_5066 ocfs2_check_range_for_holes 2-3 5066 NULL |
33514 |
+snd_mixart_BA1_read_5082 snd_mixart_BA1_read 5 5082 NULL |
33515 |
+snd_emu10k1_ptr20_read_5087 snd_emu10k1_ptr20_read 0 5087 NULL |
33516 |
-+kfifo_copy_from_user_5091 kfifo_copy_from_user 3-4-0 5091 NULL nohasharray |
33517 |
++kfifo_copy_from_user_5091 kfifo_copy_from_user 4-3-0 5091 NULL nohasharray |
33518 |
+get_random_bytes_5091 get_random_bytes 2 5091 &kfifo_copy_from_user_5091 nohasharray |
33519 |
+blk_rq_sectors_5091 blk_rq_sectors 0 5091 &get_random_bytes_5091 |
33520 |
+sound_write_5102 sound_write 3 5102 NULL |
33521 |
+i40e_dbg_netdev_ops_write_5117 i40e_dbg_netdev_ops_write 3 5117 NULL |
33522 |
-+qib_7220_handle_hwerrors_5142 qib_7220_handle_hwerrors 3 5142 NULL |
33523 |
+__uwb_addr_print_5161 __uwb_addr_print 2 5161 NULL |
33524 |
+iwl_dbgfs_status_read_5171 iwl_dbgfs_status_read 3 5171 NULL |
33525 |
+acpi_pcc_get_sqty_5176 acpi_pcc_get_sqty 0 5176 NULL |
33526 |
@@ -115550,6 +123632,7 @@ index 0000000..386792a |
33527 |
+ppp_cp_parse_cr_5214 ppp_cp_parse_cr 4 5214 NULL |
33528 |
+dwc2_hcd_urb_alloc_5217 dwc2_hcd_urb_alloc 2 5217 NULL |
33529 |
+ath6kl_debug_roam_tbl_event_5224 ath6kl_debug_roam_tbl_event 3 5224 NULL |
33530 |
++xgmac_reg_addr_read_5278 xgmac_reg_addr_read 3 5278 NULL |
33531 |
+r592_write_fifo_pio_5315 r592_write_fifo_pio 3 5315 NULL |
33532 |
+sbc_get_write_same_sectors_5317 sbc_get_write_same_sectors 0 5317 NULL |
33533 |
+pwr_elp_enter_read_5324 pwr_elp_enter_read 3 5324 NULL |
33534 |
@@ -115561,11 +123644,10 @@ index 0000000..386792a |
33535 |
+ll_xattr_cache_refill_5468 ll_xattr_cache_refill 0 5468 NULL |
33536 |
+kernfs_fop_write_5471 kernfs_fop_write 3 5471 NULL |
33537 |
+xfs_efi_init_5476 xfs_efi_init 2 5476 NULL |
33538 |
-+pci_enable_msix_exact_5482 pci_enable_msix_exact 3-0 5482 NULL |
33539 |
+cifs_security_flags_proc_write_5484 cifs_security_flags_proc_write 3 5484 NULL |
33540 |
+tty_write_5494 tty_write 3 5494 NULL |
33541 |
-+tomoyo_update_domain_5498 tomoyo_update_domain 2 5498 NULL nohasharray |
33542 |
-+ieee80211_if_fmt_last_beacon_5498 ieee80211_if_fmt_last_beacon 3 5498 &tomoyo_update_domain_5498 |
33543 |
++ieee80211_if_fmt_last_beacon_5498 ieee80211_if_fmt_last_beacon 3 5498 NULL nohasharray |
33544 |
++tomoyo_update_domain_5498 tomoyo_update_domain 2 5498 &ieee80211_if_fmt_last_beacon_5498 |
33545 |
+__max_nr_grant_frames_5505 __max_nr_grant_frames 0 5505 NULL |
33546 |
+ieee80211_if_fmt_auto_open_plinks_5534 ieee80211_if_fmt_auto_open_plinks 3 5534 NULL |
33547 |
+get_entry_msg_len_5552 get_entry_msg_len 0 5552 NULL |
33548 |
@@ -115573,14 +123655,12 @@ index 0000000..386792a |
33549 |
+inw_5558 inw 0 5558 NULL |
33550 |
+bioset_create_5580 bioset_create 1 5580 NULL |
33551 |
+oz_ep_alloc_5587 oz_ep_alloc 1 5587 NULL |
33552 |
-+__remove_suid_5618 __remove_suid 0 5618 NULL |
33553 |
+SYSC_fsetxattr_5639 SYSC_fsetxattr 4 5639 NULL |
33554 |
+ext4_xattr_get_5661 ext4_xattr_get 0 5661 NULL |
33555 |
+posix_clock_register_5662 posix_clock_register 2 5662 NULL |
33556 |
+get_arg_5694 get_arg 3 5694 NULL |
33557 |
+subbuf_read_actor_5708 subbuf_read_actor 3 5708 NULL |
33558 |
+vmw_kms_readback_5727 vmw_kms_readback 6 5727 NULL |
33559 |
-+rts51x_transfer_data_partial_5735 rts51x_transfer_data_partial 6 5735 NULL |
33560 |
+sctp_setsockopt_autoclose_5775 sctp_setsockopt_autoclose 3 5775 NULL |
33561 |
+__vxge_hw_blockpool_malloc_5786 __vxge_hw_blockpool_malloc 2 5786 NULL |
33562 |
+nvme_trans_bdev_char_page_5797 nvme_trans_bdev_char_page 3 5797 NULL |
33563 |
@@ -115602,13 +123682,11 @@ index 0000000..386792a |
33564 |
+ll_statahead_one_5962 ll_statahead_one 3 5962 NULL |
33565 |
+__apu_get_register_5967 __apu_get_register 0 5967 NULL |
33566 |
+ieee80211_if_fmt_rc_rateidx_mask_5ghz_5971 ieee80211_if_fmt_rc_rateidx_mask_5ghz 3 5971 NULL |
33567 |
-+SyS_semop_5980 SyS_semop 3 5980 NULL |
33568 |
++btrfs_item_offset_6019 btrfs_item_offset 0 6019 NULL |
33569 |
+alloc_msg_6072 alloc_msg 1 6072 NULL |
33570 |
+sctp_setsockopt_connectx_6073 sctp_setsockopt_connectx 3 6073 NULL |
33571 |
-+rts51x_ms_rw_multi_sector_6076 rts51x_ms_rw_multi_sector 3-4 6076 NULL |
33572 |
-+__mnt_want_write_6091 __mnt_want_write 0 6091 NULL |
33573 |
-+ipmi_addr_length_6110 ipmi_addr_length 0 6110 NULL nohasharray |
33574 |
-+force_static_address_read_6110 force_static_address_read 3 6110 &ipmi_addr_length_6110 |
33575 |
++force_static_address_read_6110 force_static_address_read 3 6110 NULL nohasharray |
33576 |
++ipmi_addr_length_6110 ipmi_addr_length 0 6110 &force_static_address_read_6110 |
33577 |
+dfs_global_file_write_6112 dfs_global_file_write 3 6112 NULL |
33578 |
+nouveau_parent_create__6131 nouveau_parent_create_ 7 6131 NULL |
33579 |
+ieee80211_if_fmt_beacon_timeout_6153 ieee80211_if_fmt_beacon_timeout 3 6153 NULL |
33580 |
@@ -115616,6 +123694,7 @@ index 0000000..386792a |
33581 |
+maybe_insert_hole_6167 maybe_insert_hole 3 6167 NULL |
33582 |
+wl1251_cmd_template_set_6172 wl1251_cmd_template_set 4 6172 NULL |
33583 |
+SyS_setgroups_6182 SyS_setgroups 1 6182 NULL |
33584 |
++snd_efw_command_get_phys_meters_6190 snd_efw_command_get_phys_meters 3 6190 NULL |
33585 |
+mxt_show_instance_6207 mxt_show_instance 2-0 6207 NULL |
33586 |
+v4l2_ctrl_new_std_menu_6221 v4l2_ctrl_new_std_menu 4 6221 NULL |
33587 |
+mqueue_read_file_6228 mqueue_read_file 3 6228 NULL |
33588 |
@@ -115628,13 +123707,14 @@ index 0000000..386792a |
33589 |
+posix_acl_fix_xattr_to_user_6283 posix_acl_fix_xattr_to_user 2 6283 NULL |
33590 |
+serial_port_in_6291 serial_port_in 0 6291 NULL |
33591 |
+qlcnic_sriov_alloc_bc_msg_6309 qlcnic_sriov_alloc_bc_msg 2 6309 NULL |
33592 |
++hfsplus_direct_IO_6313 hfsplus_direct_IO 4 6313 NULL |
33593 |
+hfa384x_inw_6329 hfa384x_inw 0 6329 NULL nohasharray |
33594 |
+SyS_mincore_6329 SyS_mincore 1-2 6329 &hfa384x_inw_6329 |
33595 |
+fuse_get_req_for_background_6337 fuse_get_req_for_background 2 6337 NULL |
33596 |
+ucs2_strnlen_6342 ucs2_strnlen 0 6342 NULL |
33597 |
+regcache_sync_block_raw_6350 regcache_sync_block_raw 5-4 6350 NULL |
33598 |
+mei_dbgfs_read_devstate_6352 mei_dbgfs_read_devstate 3 6352 NULL |
33599 |
-+_proc_do_string_6376 _proc_do_string 2 6376 NULL |
33600 |
++arch_gnttab_valloc_6372 arch_gnttab_valloc 2 6372 NULL |
33601 |
+osd_req_read_sg_kern_6378 osd_req_read_sg_kern 5 6378 NULL |
33602 |
+posix_acl_fix_xattr_userns_6420 posix_acl_fix_xattr_userns 4 6420 NULL |
33603 |
+add_transaction_credits_6422 add_transaction_credits 2-3 6422 NULL |
33604 |
@@ -115650,18 +123730,16 @@ index 0000000..386792a |
33605 |
+dm_stats_create_6551 dm_stats_create 4-2-3 6551 NULL |
33606 |
+fb_alloc_cmap_6554 fb_alloc_cmap 2 6554 NULL |
33607 |
+SyS_semtimedop_6563 SyS_semtimedop 3 6563 NULL |
33608 |
-+snd_pcm_hw_refine_old_user_6586 snd_pcm_hw_refine_old_user 0 6586 NULL |
33609 |
+ecryptfs_filldir_6622 ecryptfs_filldir 3 6622 NULL |
33610 |
+process_rcvd_data_6679 process_rcvd_data 3 6679 NULL |
33611 |
-+pvscsi_allocate_rings_6689 pvscsi_allocate_rings 0 6689 NULL |
33612 |
+btrfs_lookup_csums_range_6696 btrfs_lookup_csums_range 2-3 6696 NULL |
33613 |
+ps_pspoll_max_apturn_read_6699 ps_pspoll_max_apturn_read 3 6699 NULL |
33614 |
+bnad_debugfs_write_regrd_6706 bnad_debugfs_write_regrd 3 6706 NULL |
33615 |
+mpeg_read_6708 mpeg_read 3 6708 NULL |
33616 |
+ibmpex_query_sensor_count_6709 ibmpex_query_sensor_count 0 6709 NULL |
33617 |
++check_clk_sync_6717 check_clk_sync 2 6717 NULL |
33618 |
+video_proc_write_6724 video_proc_write 3 6724 NULL |
33619 |
+posix_acl_xattr_count_6725 posix_acl_xattr_count 0-1 6725 NULL |
33620 |
-+kobject_add_varg_6781 kobject_add_varg 0 6781 NULL |
33621 |
+iwl_dbgfs_channels_read_6784 iwl_dbgfs_channels_read 3 6784 NULL |
33622 |
+ieee80211_if_read_6785 ieee80211_if_read 3 6785 NULL |
33623 |
+zone_spanned_pages_in_node_6787 zone_spanned_pages_in_node 0-3-4 6787 NULL |
33624 |
@@ -115690,7 +123768,6 @@ index 0000000..386792a |
33625 |
+rsa_extract_mpi_6973 rsa_extract_mpi 5 6973 &i40e_dbg_dump_write_6973 |
33626 |
+request_key_async_6990 request_key_async 4 6990 NULL |
33627 |
+tpl_write_6998 tpl_write 3 6998 NULL |
33628 |
-+r871x_set_wpa_ie_7000 r871x_set_wpa_ie 3 7000 NULL |
33629 |
+cipso_v4_gentag_enum_7006 cipso_v4_gentag_enum 0 7006 NULL |
33630 |
+tracing_cpumask_read_7010 tracing_cpumask_read 3 7010 NULL |
33631 |
+ld_usb_write_7022 ld_usb_write 3 7022 NULL |
33632 |
@@ -115701,16 +123778,13 @@ index 0000000..386792a |
33633 |
+nouveau_device_create__7063 nouveau_device_create_ 7 7063 NULL |
33634 |
+hci_sock_recvmsg_7072 hci_sock_recvmsg 4 7072 NULL |
33635 |
+event_enable_read_7074 event_enable_read 3 7074 NULL |
33636 |
-+tipc_send_packet_7091 tipc_send_packet 4 7091 NULL nohasharray |
33637 |
-+beacon_interval_read_7091 beacon_interval_read 3 7091 &tipc_send_packet_7091 |
33638 |
++beacon_interval_read_7091 beacon_interval_read 3 7091 NULL nohasharray |
33639 |
++tipc_send_packet_7091 tipc_send_packet 4 7091 &beacon_interval_read_7091 |
33640 |
+pipeline_enc_rx_stat_fifo_int_read_7107 pipeline_enc_rx_stat_fifo_int_read 3 7107 NULL |
33641 |
+osc_resend_count_seq_write_7120 osc_resend_count_seq_write 3 7120 NULL |
33642 |
-+qib_format_hwerrors_7133 qib_format_hwerrors 5 7133 NULL |
33643 |
+kvm_mmu_notifier_test_young_7139 kvm_mmu_notifier_test_young 3 7139 NULL |
33644 |
-+qlcnic_enable_msix_7144 qlcnic_enable_msix 2 7144 NULL |
33645 |
+__alloc_objio_seg_7203 __alloc_objio_seg 1 7203 NULL |
33646 |
+rx_rate_rx_frames_per_rates_read_7282 rx_rate_rx_frames_per_rates_read 3 7282 NULL |
33647 |
-+security_inode_need_killpriv_7322 security_inode_need_killpriv 0 7322 NULL |
33648 |
+pci_vpd_info_field_size_7324 pci_vpd_info_field_size 0 7324 NULL |
33649 |
+mgmt_control_7349 mgmt_control 3 7349 NULL |
33650 |
+at_est2timeout_7365 at_est2timeout 0-1 7365 NULL |
33651 |
@@ -115727,45 +123801,41 @@ index 0000000..386792a |
33652 |
+ip_options_get_alloc_7448 ip_options_get_alloc 1 7448 NULL |
33653 |
+SYSC_setgroups_7454 SYSC_setgroups 1 7454 NULL |
33654 |
+rt2x00debug_read_queue_stats_7455 rt2x00debug_read_queue_stats 3 7455 NULL |
33655 |
-+l2tp_ip6_sendmsg_7461 l2tp_ip6_sendmsg 4 7461 NULL |
33656 |
+garp_request_join_7471 garp_request_join 4 7471 NULL |
33657 |
+snd_pcm_lib_read1_7491 snd_pcm_lib_read1 0-3 7491 NULL |
33658 |
+ahash_instance_headroom_7509 ahash_instance_headroom 0 7509 NULL nohasharray |
33659 |
+sdhci_alloc_host_7509 sdhci_alloc_host 2 7509 &ahash_instance_headroom_7509 |
33660 |
+array_zalloc_7519 array_zalloc 1-2 7519 NULL |
33661 |
-+sk_convert_filter_7541 sk_convert_filter 2 7541 NULL |
33662 |
+ath10k_read_htt_stats_mask_7557 ath10k_read_htt_stats_mask 3 7557 NULL |
33663 |
+smk_read_mapped_7562 smk_read_mapped 3 7562 NULL |
33664 |
+netvsc_get_slots_7565 netvsc_get_slots 0 7565 NULL |
33665 |
+cfs_cpt_num_estimate_7571 cfs_cpt_num_estimate 0 7571 NULL |
33666 |
-+groups_alloc_7614 groups_alloc 1 7614 NULL nohasharray |
33667 |
-+create_dir_7614 create_dir 0 7614 &groups_alloc_7614 |
33668 |
++groups_alloc_7614 groups_alloc 1 7614 NULL |
33669 |
+_rtw_zmalloc_7636 _rtw_zmalloc 1 7636 NULL |
33670 |
+fault_inject_write_7662 fault_inject_write 3 7662 NULL |
33671 |
+acpi_ex_allocate_name_string_7685 acpi_ex_allocate_name_string 2-1 7685 NULL |
33672 |
+acpi_ns_get_pathname_length_7699 acpi_ns_get_pathname_length 0 7699 NULL |
33673 |
+dev_write_7708 dev_write 3 7708 NULL |
33674 |
-+pci_raw_set_power_state_7729 pci_raw_set_power_state 0 7729 NULL |
33675 |
+vxge_device_register_7752 vxge_device_register 4 7752 NULL |
33676 |
+ubi_io_read_vid_hdr_7766 ubi_io_read_vid_hdr 0 7766 NULL |
33677 |
+iwl_dbgfs_bt_cmd_read_7770 iwl_dbgfs_bt_cmd_read 3 7770 NULL |
33678 |
+alloc_candev_7776 alloc_candev 1-2 7776 NULL |
33679 |
+dfs_global_file_read_7787 dfs_global_file_read 3 7787 NULL |
33680 |
+bnx2_nvram_write_7790 bnx2_nvram_write 4-2 7790 NULL |
33681 |
-+lustre_packed_msg_size_7792 lustre_packed_msg_size 0 7792 NULL nohasharray |
33682 |
-+diva_os_copy_from_user_7792 diva_os_copy_from_user 4 7792 &lustre_packed_msg_size_7792 |
33683 |
++diva_os_copy_from_user_7792 diva_os_copy_from_user 4 7792 NULL nohasharray |
33684 |
++lustre_packed_msg_size_7792 lustre_packed_msg_size 0 7792 &diva_os_copy_from_user_7792 |
33685 |
++seq_buf_alloc_7828 seq_buf_alloc 1 7828 NULL |
33686 |
+cfs_trace_dump_debug_buffer_usrstr_7861 cfs_trace_dump_debug_buffer_usrstr 2 7861 NULL |
33687 |
+tipc_alloc_entry_7875 tipc_alloc_entry 2 7875 NULL |
33688 |
+dvb_dmxdev_read_sec_7892 dvb_dmxdev_read_sec 4 7892 NULL |
33689 |
+xfs_trans_get_efi_7898 xfs_trans_get_efi 2 7898 NULL |
33690 |
+libfc_host_alloc_7917 libfc_host_alloc 2 7917 NULL |
33691 |
+f_hidg_write_7932 f_hidg_write 3 7932 NULL |
33692 |
-+integrity_digsig_verify_7956 integrity_digsig_verify 3-0 7956 NULL |
33693 |
++integrity_digsig_verify_7956 integrity_digsig_verify 3 7956 NULL |
33694 |
+smk_write_load_self_7958 smk_write_load_self 3 7958 NULL |
33695 |
+tt3650_ci_msg_locked_8013 tt3650_ci_msg_locked 4 8013 NULL |
33696 |
+vcs_read_8017 vcs_read 3 8017 NULL |
33697 |
+vhost_add_used_and_signal_n_8038 vhost_add_used_and_signal_n 4 8038 NULL |
33698 |
-+ms_read_multiple_pages_8052 ms_read_multiple_pages 5-4 8052 NULL |
33699 |
+dgrp_mon_read_8065 dgrp_mon_read 3 8065 NULL |
33700 |
+spi_write_then_read_8073 spi_write_then_read 5-3 8073 NULL |
33701 |
+qla4xxx_post_ping_evt_work_8074 qla4xxx_post_ping_evt_work 4 8074 NULL |
33702 |
@@ -115784,7 +123854,6 @@ index 0000000..386792a |
33703 |
+init_cdev_8274 init_cdev 1 8274 NULL |
33704 |
+rproc_recovery_write_8281 rproc_recovery_write 3 8281 NULL |
33705 |
+qib_decode_7220_err_8315 qib_decode_7220_err 3 8315 NULL |
33706 |
-+snd_pcm_update_state_8320 snd_pcm_update_state 0 8320 NULL |
33707 |
+ipwireless_send_packet_8328 ipwireless_send_packet 4 8328 NULL |
33708 |
+rtw_cfg80211_rx_action_8329 rtw_cfg80211_rx_action 3 8329 NULL |
33709 |
+tracing_entries_read_8345 tracing_entries_read 3 8345 NULL |
33710 |
@@ -115805,8 +123874,7 @@ index 0000000..386792a |
33711 |
+opticon_process_data_packet_8524 opticon_process_data_packet 3 8524 NULL |
33712 |
+user_on_off_8552 user_on_off 2 8552 NULL |
33713 |
+profile_remove_8556 profile_remove 3 8556 NULL |
33714 |
-+cache_slow_downcall_8570 cache_slow_downcall 2 8570 NULL nohasharray |
33715 |
-+pci_msi_check_device_8570 pci_msi_check_device 0 8570 &cache_slow_downcall_8570 |
33716 |
++cache_slow_downcall_8570 cache_slow_downcall 2 8570 NULL |
33717 |
+isr_dma0_done_read_8574 isr_dma0_done_read 3 8574 NULL |
33718 |
+tower_write_8580 tower_write 3 8580 NULL |
33719 |
+cfs_cpt_number_8618 cfs_cpt_number 0 8618 NULL |
33720 |
@@ -115820,23 +123888,20 @@ index 0000000..386792a |
33721 |
+rproc_trace_read_8686 rproc_trace_read 3 8686 NULL |
33722 |
+skb_frag_size_8695 skb_frag_size 0 8695 NULL |
33723 |
+arcfb_write_8702 arcfb_write 3 8702 NULL |
33724 |
-+i_size_read_8703 i_size_read 0 8703 NULL nohasharray |
33725 |
-+init_header_8703 init_header 0 8703 &i_size_read_8703 |
33726 |
++i_size_read_8703 i_size_read 0 8703 NULL |
33727 |
+ctrl_out_8712 ctrl_out 3-5 8712 NULL |
33728 |
+tracing_max_lat_write_8728 tracing_max_lat_write 3 8728 NULL |
33729 |
+jffs2_acl_count_8729 jffs2_acl_count 0-1 8729 NULL |
33730 |
-+__create_irqs_8733 __create_irqs 2 8733 NULL |
33731 |
+tx_tx_exch_expiry_read_8749 tx_tx_exch_expiry_read 3 8749 NULL |
33732 |
+compound_order_8750 compound_order 0 8750 NULL |
33733 |
+yurex_write_8761 yurex_write 3 8761 NULL |
33734 |
+joydev_compat_ioctl_8765 joydev_compat_ioctl 2 8765 NULL |
33735 |
+kstrtoint_from_user_8778 kstrtoint_from_user 2 8778 NULL |
33736 |
+paging32_prefetch_gpte_8783 paging32_prefetch_gpte 4 8783 NULL |
33737 |
-+ext4_try_to_write_inline_data_8785 ext4_try_to_write_inline_data 3-4 8785 NULL |
33738 |
++ext4_try_to_write_inline_data_8785 ext4_try_to_write_inline_data 4-3 8785 NULL |
33739 |
+__bitmap_weight_8796 __bitmap_weight 0 8796 NULL |
33740 |
+metronomefb_write_8823 metronomefb_write 3 8823 NULL |
33741 |
+SyS_llistxattr_8824 SyS_llistxattr 3 8824 NULL |
33742 |
-+extent_read_full_page_8826 extent_read_full_page 0 8826 NULL |
33743 |
+ll_xattr_cache_get_8829 ll_xattr_cache_get 0 8829 NULL |
33744 |
+get_queue_depth_8833 get_queue_depth 0 8833 NULL |
33745 |
+dvb_ringbuffer_pkt_next_8834 dvb_ringbuffer_pkt_next 0-2 8834 NULL |
33746 |
@@ -115844,12 +123909,12 @@ index 0000000..386792a |
33747 |
+iwl_rx_packet_len_8854 iwl_rx_packet_len 0 8854 NULL |
33748 |
+debug_debug1_read_8856 debug_debug1_read 3 8856 NULL |
33749 |
+wa_nep_queue_8858 wa_nep_queue 2 8858 NULL |
33750 |
++xgmac_reg_value_write_8860 xgmac_reg_value_write 3 8860 NULL |
33751 |
+radeon_drm_ioctl_8875 radeon_drm_ioctl 2 8875 NULL |
33752 |
+compressed_bio_size_8887 compressed_bio_size 0-2 8887 NULL |
33753 |
-+ab3100_get_set_reg_8890 ab3100_get_set_reg 3 8890 NULL nohasharray |
33754 |
-+tracing_max_lat_read_8890 tracing_max_lat_read 3 8890 &ab3100_get_set_reg_8890 |
33755 |
++tracing_max_lat_read_8890 tracing_max_lat_read 3 8890 NULL nohasharray |
33756 |
++ab3100_get_set_reg_8890 ab3100_get_set_reg 3 8890 &tracing_max_lat_read_8890 |
33757 |
+sdio_max_byte_size_8907 sdio_max_byte_size 0 8907 NULL |
33758 |
-+sysfs_merge_group_8917 sysfs_merge_group 0 8917 NULL |
33759 |
+write_file_ani_8918 write_file_ani 3 8918 NULL |
33760 |
+layout_commit_8926 layout_commit 3 8926 NULL |
33761 |
+cp2112_hid_get_8933 cp2112_hid_get 4 8933 NULL |
33762 |
@@ -115867,16 +123932,16 @@ index 0000000..386792a |
33763 |
+il_dbgfs_clear_ucode_stats_write_9016 il_dbgfs_clear_ucode_stats_write 3 9016 NULL |
33764 |
+snd_emu10k1_ptr_read_9026 snd_emu10k1_ptr_read 0-2 9026 NULL |
33765 |
+nla_put_9042 nla_put 3 9042 NULL |
33766 |
-+sta_tx_latency_stat_header_9050 sta_tx_latency_stat_header 0-3-4 9050 NULL |
33767 |
++sta_tx_latency_stat_header_9050 sta_tx_latency_stat_header 4-3-0 9050 NULL |
33768 |
+snd_emu10k1_synth_copy_from_user_9061 snd_emu10k1_synth_copy_from_user 3-5 9061 NULL |
33769 |
+snd_gus_dram_peek_9062 snd_gus_dram_peek 4 9062 NULL |
33770 |
+fib_info_hash_alloc_9075 fib_info_hash_alloc 1 9075 NULL |
33771 |
+create_queues_9088 create_queues 2-3 9088 NULL |
33772 |
++nvkm_output_create__9091 nvkm_output_create_ 6 9091 NULL |
33773 |
+ftdi_prepare_write_buffer_9093 ftdi_prepare_write_buffer 3 9093 NULL |
33774 |
+adxl34x_spi_read_block_9108 adxl34x_spi_read_block 3 9108 NULL |
33775 |
-+caif_stream_sendmsg_9110 caif_stream_sendmsg 4 9110 NULL nohasharray |
33776 |
-+gfn_to_rmap_9110 gfn_to_rmap 2-3 9110 &caif_stream_sendmsg_9110 |
33777 |
-+udf_direct_IO_9111 udf_direct_IO 4 9111 NULL |
33778 |
++gfn_to_rmap_9110 gfn_to_rmap 3-2 9110 NULL nohasharray |
33779 |
++caif_stream_sendmsg_9110 caif_stream_sendmsg 4 9110 &gfn_to_rmap_9110 |
33780 |
+pmcraid_change_queue_depth_9116 pmcraid_change_queue_depth 2 9116 NULL |
33781 |
+vb2_dma_sg_alloc_9157 vb2_dma_sg_alloc 2 9157 NULL |
33782 |
+dbg_command_buf_9165 dbg_command_buf 2 9165 NULL |
33783 |
@@ -115893,6 +123958,7 @@ index 0000000..386792a |
33784 |
+flakey_status_9274 flakey_status 5 9274 NULL |
33785 |
+iwl_dbgfs_stations_read_9309 iwl_dbgfs_stations_read 3 9309 NULL |
33786 |
+ceph_sync_setxattr_9310 ceph_sync_setxattr 4 9310 NULL |
33787 |
++__blockdev_direct_IO_9321 __blockdev_direct_IO 0-6 9321 NULL |
33788 |
+ieee80211_if_fmt_txpower_9334 ieee80211_if_fmt_txpower 3 9334 NULL |
33789 |
+nvme_trans_fmt_get_parm_header_9340 nvme_trans_fmt_get_parm_header 2 9340 NULL |
33790 |
+ocfs2_orphan_for_truncate_9342 ocfs2_orphan_for_truncate 4 9342 NULL |
33791 |
@@ -115905,12 +123971,11 @@ index 0000000..386792a |
33792 |
+bm_realloc_pages_9431 bm_realloc_pages 2 9431 NULL |
33793 |
+ffs_ep0_write_9438 ffs_ep0_write 3 9438 NULL |
33794 |
+ieee80211_if_fmt_fwded_unicast_9454 ieee80211_if_fmt_fwded_unicast 3 9454 NULL |
33795 |
-+get_registers_9470 get_registers 4 9470 NULL nohasharray |
33796 |
-+agp_generic_alloc_user_9470 agp_generic_alloc_user 1 9470 &get_registers_9470 |
33797 |
++agp_generic_alloc_user_9470 agp_generic_alloc_user 1 9470 NULL nohasharray |
33798 |
++get_registers_9470 get_registers 4 9470 &agp_generic_alloc_user_9470 |
33799 |
+crypt_status_9492 crypt_status 5 9492 NULL |
33800 |
+lbs_threshold_write_9502 lbs_threshold_write 5 9502 NULL |
33801 |
+lp_write_9511 lp_write 3 9511 NULL |
33802 |
-+mext_calc_swap_extents_9517 mext_calc_swap_extents 4 9517 NULL |
33803 |
+scsi_tgt_kspace_exec_9522 scsi_tgt_kspace_exec 8 9522 NULL |
33804 |
+ll_max_read_ahead_whole_mb_seq_write_9528 ll_max_read_ahead_whole_mb_seq_write 3 9528 NULL |
33805 |
+read_file_dma_9530 read_file_dma 3 9530 NULL |
33806 |
@@ -115946,19 +124011,19 @@ index 0000000..386792a |
33807 |
+regmap_multi_reg_write_bypassed_9751 regmap_multi_reg_write_bypassed 3 9751 NULL nohasharray |
33808 |
+sta_last_ack_signal_read_9751 sta_last_ack_signal_read 3 9751 ®map_multi_reg_write_bypassed_9751 |
33809 |
+btrfs_super_root_9763 btrfs_super_root 0 9763 NULL |
33810 |
++copy_page_from_iter_bvec_9767 copy_page_from_iter_bvec 0-3 9767 NULL |
33811 |
+__blk_queue_init_tags_9778 __blk_queue_init_tags 2 9778 NULL |
33812 |
+kvm_age_hva_9795 kvm_age_hva 2 9795 NULL |
33813 |
++bio_alloc_map_data_9798 bio_alloc_map_data 1 9798 NULL |
33814 |
+udpv6_recvmsg_9813 udpv6_recvmsg 4 9813 NULL nohasharray |
33815 |
+ieee80211_if_read_state_9813 ieee80211_if_read_state 3 9813 &udpv6_recvmsg_9813 |
33816 |
+pmcraid_alloc_sglist_9864 pmcraid_alloc_sglist 1 9864 NULL |
33817 |
-+btrfs_free_reserved_extent_9867 btrfs_free_reserved_extent 2 9867 NULL |
33818 |
+wil_read_file_ioblob_9878 wil_read_file_ioblob 3 9878 NULL |
33819 |
-+snd_midi_event_new_9893 snd_midi_event_new 1 9893 NULL nohasharray |
33820 |
-+bm_register_write_9893 bm_register_write 3 9893 &snd_midi_event_new_9893 |
33821 |
++bm_register_write_9893 bm_register_write 3 9893 NULL nohasharray |
33822 |
++snd_midi_event_new_9893 snd_midi_event_new 1 9893 &bm_register_write_9893 |
33823 |
+snd_gf1_pcm_playback_copy_9895 snd_gf1_pcm_playback_copy 3-5 9895 NULL |
33824 |
+nonpaging_page_fault_9908 nonpaging_page_fault 2 9908 NULL |
33825 |
+iwl_dbgfs_prph_reg_read_9928 iwl_dbgfs_prph_reg_read 3 9928 NULL |
33826 |
-+root_nfs_parse_options_9937 root_nfs_parse_options 3 9937 NULL |
33827 |
+pstore_ftrace_knob_read_9947 pstore_ftrace_knob_read 3 9947 NULL |
33828 |
+read_file_misc_9948 read_file_misc 3 9948 NULL |
33829 |
+csum_partial_copy_fromiovecend_9957 csum_partial_copy_fromiovecend 3-4 9957 NULL |
33830 |
@@ -115990,10 +124055,8 @@ index 0000000..386792a |
33831 |
+ufx_alloc_urb_list_10349 ufx_alloc_urb_list 3 10349 NULL |
33832 |
+dbAllocAny_10354 dbAllocAny 0 10354 NULL |
33833 |
+ath6kl_listen_int_read_10355 ath6kl_listen_int_read 3 10355 NULL |
33834 |
-+ms_write_multiple_pages_10362 ms_write_multiple_pages 6-5 10362 NULL |
33835 |
+sta_ht_capa_read_10366 sta_ht_capa_read 3 10366 NULL |
33836 |
+ecryptfs_decode_and_decrypt_filename_10379 ecryptfs_decode_and_decrypt_filename 5 10379 NULL |
33837 |
-+led_classdev_register_10384 led_classdev_register 0 10384 NULL |
33838 |
+do_compat_pselect_10398 do_compat_pselect 1 10398 NULL |
33839 |
+fwtty_rx_10434 fwtty_rx 3 10434 NULL |
33840 |
+event_phy_transmit_error_read_10471 event_phy_transmit_error_read 3 10471 NULL |
33841 |
@@ -116005,7 +124068,6 @@ index 0000000..386792a |
33842 |
+osd_req_write_sg_kern_10514 osd_req_write_sg_kern 5 10514 NULL |
33843 |
+rds_message_alloc_10517 rds_message_alloc 1 10517 NULL |
33844 |
+qlcnic_pci_sriov_enable_10519 qlcnic_pci_sriov_enable 2 10519 NULL |
33845 |
-+snd_pcm_hw_params_user_10520 snd_pcm_hw_params_user 0 10520 NULL |
33846 |
+kstrtouint_from_user_10536 kstrtouint_from_user 2 10536 NULL nohasharray |
33847 |
+snd_pcm_lib_read_10536 snd_pcm_lib_read 0-3 10536 &kstrtouint_from_user_10536 |
33848 |
+ext4_write_begin_10576 ext4_write_begin 3-4 10576 NULL |
33849 |
@@ -116034,6 +124096,7 @@ index 0000000..386792a |
33850 |
+__qp_memcpy_to_queue_10779 __qp_memcpy_to_queue 2-4 10779 NULL |
33851 |
+diva_set_trace_filter_10820 diva_set_trace_filter 0-1 10820 NULL |
33852 |
+lbs_sleepparams_read_10840 lbs_sleepparams_read 3 10840 NULL |
33853 |
++ext4_direct_IO_10843 ext4_direct_IO 4 10843 NULL |
33854 |
+ida_get_new_above_10853 ida_get_new_above 0 10853 NULL |
33855 |
+fuse_conn_max_background_read_10855 fuse_conn_max_background_read 3 10855 NULL |
33856 |
+snd_pcm_oss_write1_10872 snd_pcm_oss_write1 3 10872 NULL |
33857 |
@@ -116041,8 +124104,7 @@ index 0000000..386792a |
33858 |
+get_scq_10897 get_scq 2 10897 NULL |
33859 |
+tifm_alloc_adapter_10903 tifm_alloc_adapter 1 10903 NULL |
33860 |
+lprocfs_wr_atomic_10912 lprocfs_wr_atomic 3 10912 NULL |
33861 |
-+__copy_from_user_10918 __copy_from_user 0-3 10918 NULL |
33862 |
-+kobject_add_10919 kobject_add 0 10919 NULL |
33863 |
++__copy_from_user_10918 __copy_from_user 3-0 10918 NULL |
33864 |
+ar9003_dump_modal_eeprom_10959 ar9003_dump_modal_eeprom 3-2-0 10959 NULL |
33865 |
+ci_port_test_write_10962 ci_port_test_write 3 10962 NULL |
33866 |
+bm_entry_read_10976 bm_entry_read 3 10976 NULL |
33867 |
@@ -116050,19 +124112,15 @@ index 0000000..386792a |
33868 |
+xfrm_hash_alloc_10997 xfrm_hash_alloc 1 10997 NULL |
33869 |
+rx_filter_accum_arp_pend_requests_read_11003 rx_filter_accum_arp_pend_requests_read 3 11003 NULL |
33870 |
+SetLineNumber_11023 SetLineNumber 0 11023 NULL |
33871 |
-+pci_msi_vec_count_11046 pci_msi_vec_count 0 11046 NULL |
33872 |
++nouveau_gpio_create__11048 nouveau_gpio_create_ 4 11048 NULL |
33873 |
+tda10048_writeregbulk_11050 tda10048_writeregbulk 4 11050 NULL |
33874 |
-+qlcnic_83xx_calculate_msix_vector_11063 qlcnic_83xx_calculate_msix_vector 0 11063 NULL nohasharray |
33875 |
-+insert_inline_extent_backref_11063 insert_inline_extent_backref 8 11063 &qlcnic_83xx_calculate_msix_vector_11063 |
33876 |
++insert_inline_extent_backref_11063 insert_inline_extent_backref 8 11063 NULL |
33877 |
+tcp_send_mss_11079 tcp_send_mss 0 11079 NULL |
33878 |
-+snd_pcm_delay_11081 snd_pcm_delay 0 11081 NULL |
33879 |
+count_argc_11083 count_argc 0 11083 NULL |
33880 |
+kvm_write_guest_cached_11106 kvm_write_guest_cached 4 11106 NULL |
33881 |
+tw_change_queue_depth_11116 tw_change_queue_depth 2 11116 NULL |
33882 |
+page_offset_11120 page_offset 0 11120 NULL |
33883 |
-+cea_db_payload_len_11124 cea_db_payload_len 0 11124 NULL nohasharray |
33884 |
-+tracing_buffers_read_11124 tracing_buffers_read 3 11124 &cea_db_payload_len_11124 |
33885 |
-+alloc_alien_cache_11127 alloc_alien_cache 2 11127 NULL |
33886 |
++tracing_buffers_read_11124 tracing_buffers_read 3 11124 NULL |
33887 |
+snd_gf1_pcm_playback_silence_11172 snd_gf1_pcm_playback_silence 3-4 11172 NULL |
33888 |
+il_dbgfs_rx_queue_read_11221 il_dbgfs_rx_queue_read 3 11221 NULL |
33889 |
+comedi_alloc_spriv_11234 comedi_alloc_spriv 2 11234 NULL |
33890 |
@@ -116083,8 +124141,8 @@ index 0000000..386792a |
33891 |
+nl80211_send_mgmt_11353 nl80211_send_mgmt 7 11353 &sel_write_create_11353 |
33892 |
+of_get_available_child_count_11361 of_get_available_child_count 0 11361 NULL |
33893 |
+qib_get_base_info_11369 qib_get_base_info 3 11369 NULL |
33894 |
-+tcf_register_action_11381 tcf_register_action 2 11381 NULL nohasharray |
33895 |
-+nft_value_dump_11381 nft_value_dump 3 11381 &tcf_register_action_11381 |
33896 |
++nft_value_dump_11381 nft_value_dump 3 11381 NULL nohasharray |
33897 |
++tcf_register_action_11381 tcf_register_action 2 11381 &nft_value_dump_11381 |
33898 |
+isku_sysfs_read_keys_capslock_11392 isku_sysfs_read_keys_capslock 6 11392 NULL |
33899 |
+dev_irnet_write_11398 dev_irnet_write 3 11398 NULL |
33900 |
+lprocfs_wr_evict_client_11402 lprocfs_wr_evict_client 3 11402 NULL |
33901 |
@@ -116095,13 +124153,9 @@ index 0000000..386792a |
33902 |
+adis16480_show_firmware_revision_11417 adis16480_show_firmware_revision 3 11417 NULL |
33903 |
+trace_options_read_11419 trace_options_read 3 11419 NULL |
33904 |
+i40e_dbg_command_write_11421 i40e_dbg_command_write 3 11421 NULL |
33905 |
-+xd_read_multiple_pages_11422 xd_read_multiple_pages 5-4 11422 NULL |
33906 |
+bttv_read_11432 bttv_read 3 11432 NULL |
33907 |
+create_zero_mask_11453 create_zero_mask 0-1 11453 NULL |
33908 |
-+do_blockdev_direct_IO_11455 do_blockdev_direct_IO 0-6 11455 NULL |
33909 |
-+sca3000_read_first_n_hw_rb_11479 sca3000_read_first_n_hw_rb 2 11479 NULL nohasharray |
33910 |
-+pci_set_power_state_11479 pci_set_power_state 0 11479 &sca3000_read_first_n_hw_rb_11479 |
33911 |
-+xfs_file_buffered_aio_write_11492 xfs_file_buffered_aio_write 4 11492 NULL |
33912 |
++sca3000_read_first_n_hw_rb_11479 sca3000_read_first_n_hw_rb 2 11479 NULL |
33913 |
+sd_do_mode_sense_11507 sd_do_mode_sense 5 11507 NULL |
33914 |
+kmem_zalloc_11510 kmem_zalloc 1 11510 NULL |
33915 |
+ll_direct_IO_26_seg_11518 ll_direct_IO_26_seg 0 11518 NULL |
33916 |
@@ -116116,7 +124170,7 @@ index 0000000..386792a |
33917 |
+SYSC_mq_timedsend_11607 SYSC_mq_timedsend 3 11607 NULL |
33918 |
+C_SYSC_migrate_pages_11618 C_SYSC_migrate_pages 2 11618 NULL |
33919 |
+sisusb_send_bridge_packet_11649 sisusb_send_bridge_packet 2 11649 NULL |
33920 |
-+nla_total_size_11658 nla_total_size 1-0 11658 NULL |
33921 |
++nla_total_size_11658 nla_total_size 0-1 11658 NULL |
33922 |
+slab_ksize_11664 slab_ksize 0 11664 NULL |
33923 |
+ide_queue_pc_tail_11673 ide_queue_pc_tail 5 11673 NULL |
33924 |
+compat_SyS_msgsnd_11675 compat_SyS_msgsnd 3 11675 NULL |
33925 |
@@ -116137,7 +124191,6 @@ index 0000000..386792a |
33926 |
+sctp_setsockopt_maxseg_11829 sctp_setsockopt_maxseg 3 11829 NULL |
33927 |
+rts51x_read_status_11830 rts51x_read_status 4 11830 NULL |
33928 |
+unix_stream_connect_11844 unix_stream_connect 3 11844 NULL |
33929 |
-+pci_enable_msix_range_11852 pci_enable_msix_range 0-4 11852 NULL |
33930 |
+ecryptfs_copy_filename_11868 ecryptfs_copy_filename 4 11868 NULL |
33931 |
+ieee80211_rx_bss_info_11887 ieee80211_rx_bss_info 3 11887 NULL |
33932 |
+mdc_rename_11899 mdc_rename 4-6 11899 NULL |
33933 |
@@ -116175,7 +124228,6 @@ index 0000000..386792a |
33934 |
+ib_uverbs_unmarshall_recv_12251 ib_uverbs_unmarshall_recv 5 12251 NULL |
33935 |
+shash_compat_setkey_12267 shash_compat_setkey 3 12267 NULL |
33936 |
+add_sctp_bind_addr_12269 add_sctp_bind_addr 3 12269 NULL |
33937 |
-+SYSC_vm86_12279 SYSC_vm86 2 12279 NULL |
33938 |
+note_last_dentry_12285 note_last_dentry 3 12285 NULL |
33939 |
+roundup_to_multiple_of_64_12288 roundup_to_multiple_of_64 0-1 12288 NULL nohasharray |
33940 |
+il_dbgfs_nvm_read_12288 il_dbgfs_nvm_read 3 12288 &roundup_to_multiple_of_64_12288 |
33941 |
@@ -116185,8 +124237,8 @@ index 0000000..386792a |
33942 |
+mptctl_ioctl_12355 mptctl_ioctl 2 12355 NULL |
33943 |
+__nf_ct_ext_add_length_12364 __nf_ct_ext_add_length 3 12364 NULL |
33944 |
+xfs_iext_inline_to_direct_12384 xfs_iext_inline_to_direct 2 12384 NULL |
33945 |
-+write_file_dump_12391 write_file_dump 3 12391 NULL nohasharray |
33946 |
-+populate_dir_12391 populate_dir 0 12391 &write_file_dump_12391 |
33947 |
++btrfs_file_extent_ram_bytes_12391 btrfs_file_extent_ram_bytes 0 12391 NULL nohasharray |
33948 |
++write_file_dump_12391 write_file_dump 3 12391 &btrfs_file_extent_ram_bytes_12391 |
33949 |
+hbucket_elem_add_12416 hbucket_elem_add 3 12416 NULL |
33950 |
+ieee80211_if_read_num_mcast_sta_12419 ieee80211_if_read_num_mcast_sta 3 12419 NULL |
33951 |
+cfs_array_alloc_12441 cfs_array_alloc 2 12441 NULL |
33952 |
@@ -116194,7 +124246,6 @@ index 0000000..386792a |
33953 |
+x25_sendmsg_12487 x25_sendmsg 4 12487 NULL |
33954 |
+fnic_trace_ctrl_read_12497 fnic_trace_ctrl_read 3 12497 NULL |
33955 |
+qib_alloc_fast_reg_mr_12526 qib_alloc_fast_reg_mr 2 12526 NULL |
33956 |
-+write_inode_now_12565 write_inode_now 0 12565 NULL |
33957 |
+hvc_alloc_12579 hvc_alloc 4 12579 NULL |
33958 |
+pcpu_extend_area_map_12589 pcpu_extend_area_map 2 12589 NULL |
33959 |
+_iwl_dbgfs_prph_reg_write_12597 _iwl_dbgfs_prph_reg_write 3 12597 NULL |
33960 |
@@ -116207,8 +124258,8 @@ index 0000000..386792a |
33961 |
+nr_recvmsg_12649 nr_recvmsg 4 12649 NULL |
33962 |
+rtw_android_get_link_speed_12655 rtw_android_get_link_speed 0 12655 NULL |
33963 |
+ocfs2_read_block_12659 ocfs2_read_block 0 12659 NULL |
33964 |
-+sel_read_class_12669 sel_read_class 3 12669 NULL nohasharray |
33965 |
-+sparse_mem_maps_populate_node_12669 sparse_mem_maps_populate_node 4 12669 &sel_read_class_12669 |
33966 |
++sparse_mem_maps_populate_node_12669 sparse_mem_maps_populate_node 4 12669 NULL nohasharray |
33967 |
++sel_read_class_12669 sel_read_class 3 12669 &sparse_mem_maps_populate_node_12669 |
33968 |
+ext4_writepage_trans_blocks_12674 ext4_writepage_trans_blocks 0 12674 NULL |
33969 |
+iwl_dbgfs_calib_disabled_write_12707 iwl_dbgfs_calib_disabled_write 3 12707 NULL |
33970 |
+ieee80211_if_read_num_buffered_multicast_12716 ieee80211_if_read_num_buffered_multicast 3 12716 NULL |
33971 |
@@ -116233,14 +124284,11 @@ index 0000000..386792a |
33972 |
+raid56_parity_recover_12987 raid56_parity_recover 5 12987 NULL |
33973 |
+TransmitTcb_12989 TransmitTcb 4 12989 NULL |
33974 |
+sk_peek_offset_12991 sk_peek_offset 0 12991 NULL |
33975 |
-+__btrfs_direct_write_13007 __btrfs_direct_write 4-0 13007 NULL |
33976 |
+bset_prev_bytes_13020 bset_prev_bytes 0 13020 NULL |
33977 |
+subsystem_filter_write_13022 subsystem_filter_write 3 13022 NULL |
33978 |
-+generic_segment_checks_13041 generic_segment_checks 0 13041 NULL |
33979 |
+ocfs2_write_begin_13045 ocfs2_write_begin 3-4 13045 NULL |
33980 |
+__dn_setsockopt_13060 __dn_setsockopt 5 13060 NULL nohasharray |
33981 |
+ptlrpc_lprocfs_threads_min_seq_write_13060 ptlrpc_lprocfs_threads_min_seq_write 3 13060 &__dn_setsockopt_13060 |
33982 |
-+biovec_create_pool_13079 biovec_create_pool 2 13079 NULL |
33983 |
+xattr_getsecurity_13090 xattr_getsecurity 0 13090 NULL |
33984 |
+ttm_dma_pool_alloc_new_pages_13105 ttm_dma_pool_alloc_new_pages 3 13105 NULL |
33985 |
+snd_rme96_playback_copy_13111 snd_rme96_playback_copy 5 13111 NULL |
33986 |
@@ -116262,8 +124310,9 @@ index 0000000..386792a |
33987 |
+bio_integrity_trim_13259 bio_integrity_trim 3-2 13259 NULL |
33988 |
+simple_attr_write_13260 simple_attr_write 3 13260 NULL |
33989 |
+pmcraid_notify_aen_13274 pmcraid_notify_aen 3 13274 NULL |
33990 |
-+il4965_stats_flag_13281 il4965_stats_flag 0-3 13281 NULL |
33991 |
++il4965_stats_flag_13281 il4965_stats_flag 3-0 13281 NULL |
33992 |
+lpfc_idiag_mbxacc_get_setup_13282 lpfc_idiag_mbxacc_get_setup 0 13282 NULL |
33993 |
++nvkm_i2c_pad_create__13292 nvkm_i2c_pad_create_ 5 13292 NULL |
33994 |
+sd_major_13294 sd_major 0-1 13294 NULL |
33995 |
+read_file_phy_err_13318 read_file_phy_err 3 13318 NULL |
33996 |
+kvm_read_nested_guest_page_13337 kvm_read_nested_guest_page 5 13337 NULL |
33997 |
@@ -116277,16 +124326,14 @@ index 0000000..386792a |
33998 |
+sctp_setsockopt_peer_primary_addr_13440 sctp_setsockopt_peer_primary_addr 3 13440 NULL |
33999 |
+ath6kl_cfg80211_connect_event_13443 ath6kl_cfg80211_connect_event 7-8-9 13443 NULL |
34000 |
+sb_init_dio_done_wq_13482 sb_init_dio_done_wq 0 13482 NULL |
34001 |
-+data_read_13494 data_read 3 13494 NULL |
34002 |
++data_read_13494 data_read 3 13494 NULL nohasharray |
34003 |
++ext_prop_data_store_13494 ext_prop_data_store 3 13494 &data_read_13494 |
34004 |
+core_status_13515 core_status 4 13515 NULL |
34005 |
+smk_write_mapped_13519 smk_write_mapped 3 13519 NULL |
34006 |
+bm_init_13529 bm_init 2 13529 NULL |
34007 |
-+request_any_context_irq_13530 request_any_context_irq 0 13530 NULL |
34008 |
+llcp_sock_recvmsg_13556 llcp_sock_recvmsg 4 13556 NULL |
34009 |
-+SyS_vm86_13557 SyS_vm86 2 13557 NULL |
34010 |
+ieee80211_if_read_ap_power_level_13558 ieee80211_if_read_ap_power_level 3 13558 NULL |
34011 |
+hash_net4_expire_13559 hash_net4_expire 4 13559 NULL |
34012 |
-+ubifs_get_idx_gc_leb_13566 ubifs_get_idx_gc_leb 0 13566 NULL |
34013 |
+read_file_antenna_13574 read_file_antenna 3 13574 NULL |
34014 |
+cache_write_13589 cache_write 3 13589 NULL |
34015 |
+Rd_Indx_13602 Rd_Indx 3-2 13602 NULL |
34016 |
@@ -116295,9 +124342,9 @@ index 0000000..386792a |
34017 |
+packet_snd_13634 packet_snd 3 13634 NULL |
34018 |
+blk_msg_write_13655 blk_msg_write 3 13655 NULL |
34019 |
+cache_downcall_13666 cache_downcall 3 13666 NULL |
34020 |
-+ext3_xattr_list_entries_13682 ext3_xattr_list_entries 0 13682 NULL |
34021 |
+fw_iso_buffer_alloc_13704 fw_iso_buffer_alloc 2 13704 NULL |
34022 |
+audit_unpack_string_13748 audit_unpack_string 3 13748 NULL |
34023 |
++udf_direct_IO_13765 udf_direct_IO 4 13765 NULL |
34024 |
+ieee802154_alloc_device_13767 ieee802154_alloc_device 1 13767 NULL |
34025 |
+fb_sys_read_13778 fb_sys_read 3 13778 NULL |
34026 |
+ath6kl_mgmt_powersave_ap_13791 ath6kl_mgmt_powersave_ap 6 13791 NULL |
34027 |
@@ -116316,8 +124363,7 @@ index 0000000..386792a |
34028 |
+ocfs2_xa_value_truncate_13940 ocfs2_xa_value_truncate 2 13940 &ieee80211_if_read_dot11MeshForwarding_13940 |
34029 |
+iwl_dbgfs_protection_mode_read_13943 iwl_dbgfs_protection_mode_read 3 13943 NULL |
34030 |
+ieee80211_if_read_min_discovery_timeout_13946 ieee80211_if_read_min_discovery_timeout 3 13946 NULL |
34031 |
-+lpfc_idiag_queacc_read_13950 lpfc_idiag_queacc_read 3 13950 NULL nohasharray |
34032 |
-+pagecache_write_end_13950 pagecache_write_end 0 13950 &lpfc_idiag_queacc_read_13950 |
34033 |
++lpfc_idiag_queacc_read_13950 lpfc_idiag_queacc_read 3 13950 NULL |
34034 |
+osc_grant_shrink_interval_seq_write_13952 osc_grant_shrink_interval_seq_write 3 13952 NULL |
34035 |
+snd_pcm_plug_slave_size_13967 snd_pcm_plug_slave_size 0-2 13967 NULL |
34036 |
+qcam_read_13977 qcam_read 3 13977 NULL |
34037 |
@@ -116329,7 +124375,6 @@ index 0000000..386792a |
34038 |
+iscsi_create_flashnode_conn_14022 iscsi_create_flashnode_conn 4 14022 NULL |
34039 |
+pci_add_ext_cap_save_buffer_14032 pci_add_ext_cap_save_buffer 3 14032 NULL |
34040 |
+dvb_usercopy_14036 dvb_usercopy 2 14036 NULL |
34041 |
-+read_def_modal_eeprom_14041 read_def_modal_eeprom 3 14041 NULL |
34042 |
+ieee80211_if_fmt_aid_14055 ieee80211_if_fmt_aid 3 14055 NULL |
34043 |
+ovs_nla_alloc_flow_actions_14056 ovs_nla_alloc_flow_actions 1 14056 NULL |
34044 |
+sta_agg_status_read_14058 sta_agg_status_read 3 14058 NULL |
34045 |
@@ -116353,7 +124398,6 @@ index 0000000..386792a |
34046 |
+rr_status_14293 rr_status 5 14293 NULL |
34047 |
+read_default_ldt_14302 read_default_ldt 2 14302 NULL |
34048 |
+oo_objects_14319 oo_objects 0 14319 NULL |
34049 |
-+ll_get_user_pages_14328 ll_get_user_pages 3-2-0 14328 NULL |
34050 |
+p9_client_zc_rpc_14345 p9_client_zc_rpc 7 14345 NULL |
34051 |
+alloc_tx_struct_14349 alloc_tx_struct 1 14349 NULL |
34052 |
+hash_ipportnet4_expire_14354 hash_ipportnet4_expire 4 14354 NULL |
34053 |
@@ -116362,17 +124406,14 @@ index 0000000..386792a |
34054 |
+ath6kl_regdump_read_14393 ath6kl_regdump_read 3 14393 NULL |
34055 |
+smk_write_onlycap_14400 smk_write_onlycap 3 14400 NULL |
34056 |
+mtd_concat_create_14416 mtd_concat_create 2 14416 NULL |
34057 |
-+get_kcore_size_14425 get_kcore_size 0 14425 NULL |
34058 |
+_iwl_dbgfs_sram_write_14439 _iwl_dbgfs_sram_write 3 14439 NULL |
34059 |
+block_size_14443 block_size 0 14443 NULL |
34060 |
+lmv_user_md_size_14456 lmv_user_md_size 0-1 14456 NULL |
34061 |
+snd_emu10k1_proc_spdif_status_14457 snd_emu10k1_proc_spdif_status 4-5 14457 NULL |
34062 |
+ath10k_write_htt_stats_mask_14458 ath10k_write_htt_stats_mask 3 14458 NULL |
34063 |
+lustre_msg_size_v2_14470 lustre_msg_size_v2 0 14470 NULL |
34064 |
-+dma_transfer_size_14473 dma_transfer_size 0 14473 NULL |
34065 |
+udplite_getfrag_14479 udplite_getfrag 3-4 14479 NULL |
34066 |
+ieee80211_if_read_dot11MeshGateAnnouncementProtocol_14486 ieee80211_if_read_dot11MeshGateAnnouncementProtocol 3 14486 NULL |
34067 |
-+split_state_14491 split_state 0 14491 NULL |
34068 |
+ocfs2_debug_read_14507 ocfs2_debug_read 3 14507 NULL |
34069 |
+dataflash_read_user_otp_14536 dataflash_read_user_otp 3-2 14536 NULL nohasharray |
34070 |
+ep0_write_14536 ep0_write 3 14536 &dataflash_read_user_otp_14536 |
34071 |
@@ -116405,11 +124446,9 @@ index 0000000..386792a |
34072 |
+__kfifo_in_14797 __kfifo_in 3-0 14797 NULL |
34073 |
+hpet_readl_14801 hpet_readl 0 14801 NULL nohasharray |
34074 |
+snd_als300_gcr_read_14801 snd_als300_gcr_read 0 14801 &hpet_readl_14801 |
34075 |
-+do_tune_cpucache_14828 do_tune_cpucache 2 14828 NULL |
34076 |
+mrp_attr_create_14853 mrp_attr_create 3 14853 NULL |
34077 |
+lcd_write_14857 lcd_write 3 14857 NULL |
34078 |
+get_user_cpu_mask_14861 get_user_cpu_mask 2 14861 NULL |
34079 |
-+gmux_index_read8_14890 gmux_index_read8 0 14890 NULL |
34080 |
+acpi_os_allocate_14892 acpi_os_allocate 1 14892 NULL |
34081 |
+SYSC_readv_14901 SYSC_readv 3 14901 NULL |
34082 |
+__arch_hweight64_14923 __arch_hweight64 0 14923 NULL nohasharray |
34083 |
@@ -116426,10 +124465,9 @@ index 0000000..386792a |
34084 |
+cld_pipe_downcall_15058 cld_pipe_downcall 3 15058 NULL |
34085 |
+ieee80211_if_read_uapsd_max_sp_len_15067 ieee80211_if_read_uapsd_max_sp_len 3 15067 NULL |
34086 |
+nfs4_write_cached_acl_15070 nfs4_write_cached_acl 4 15070 NULL |
34087 |
-+ntfs_copy_from_user_15072 ntfs_copy_from_user 0-5-3 15072 NULL |
34088 |
++ntfs_copy_from_user_15072 ntfs_copy_from_user 3-5-0 15072 NULL |
34089 |
+pppoe_recvmsg_15073 pppoe_recvmsg 4 15073 NULL |
34090 |
+smscore_load_firmware_family2_15086 smscore_load_firmware_family2 3 15086 NULL |
34091 |
-+btrfs_readpage_15094 btrfs_readpage 0 15094 NULL |
34092 |
+compat_SyS_pwritev_15118 compat_SyS_pwritev 3 15118 NULL |
34093 |
+hex_dump_to_buffer_15121 hex_dump_to_buffer 6 15121 NULL |
34094 |
+start_port_15124 start_port 0 15124 NULL |
34095 |
@@ -116447,23 +124485,20 @@ index 0000000..386792a |
34096 |
+ioread16_15342 ioread16 0 15342 NULL |
34097 |
+ept_prefetch_gpte_15348 ept_prefetch_gpte 4 15348 NULL |
34098 |
+acpi_ut_create_string_object_15360 acpi_ut_create_string_object 1 15360 NULL |
34099 |
-+ext4_direct_IO_15369 ext4_direct_IO 4 15369 NULL |
34100 |
+graph_depth_read_15371 graph_depth_read 3 15371 NULL |
34101 |
+fq_codel_zalloc_15378 fq_codel_zalloc 1 15378 NULL |
34102 |
+alloc_fddidev_15382 alloc_fddidev 1 15382 NULL |
34103 |
+pipeline_csum_to_rx_xfer_swi_read_15403 pipeline_csum_to_rx_xfer_swi_read 3 15403 NULL |
34104 |
+get_modalias_15406 get_modalias 2 15406 NULL |
34105 |
-+blockdev_direct_IO_15408 blockdev_direct_IO 5 15408 NULL |
34106 |
+__videobuf_copy_to_user_15423 __videobuf_copy_to_user 4-0 15423 NULL |
34107 |
-+rtw_cfg80211_rx_action_p2p_15432 rtw_cfg80211_rx_action_p2p 3 15432 NULL |
34108 |
-+tcp_mtu_to_mss_15438 tcp_mtu_to_mss 2-0 15438 NULL |
34109 |
++tcp_mtu_to_mss_15438 tcp_mtu_to_mss 0-2 15438 NULL |
34110 |
+hpsa_change_queue_depth_15449 hpsa_change_queue_depth 2 15449 NULL |
34111 |
++__clone_and_map_data_bio_15498 __clone_and_map_data_bio 3 15498 NULL |
34112 |
+insert_old_idx_znode_15500 insert_old_idx_znode 0 15500 NULL |
34113 |
+zd_chip_is_zd1211b_15518 zd_chip_is_zd1211b 0 15518 NULL |
34114 |
+ifx_spi_write_15531 ifx_spi_write 3 15531 NULL |
34115 |
+p9_check_zc_errors_15534 p9_check_zc_errors 4 15534 NULL |
34116 |
+xfrm_state_mtu_15548 xfrm_state_mtu 0-2 15548 NULL |
34117 |
-+snd_pcm_channel_info_15572 snd_pcm_channel_info 0 15572 NULL |
34118 |
+persistent_status_15574 persistent_status 4 15574 NULL |
34119 |
+bnx2fc_process_unsol_compl_15576 bnx2fc_process_unsol_compl 2 15576 NULL |
34120 |
+vme_user_write_15587 vme_user_write 3 15587 NULL |
34121 |
@@ -116474,11 +124509,10 @@ index 0000000..386792a |
34122 |
+sk_memory_allocated_add_15642 sk_memory_allocated_add 2 15642 &pipeline_hs_tx_stat_fifo_int_read_15642 |
34123 |
+joydev_handle_JSIOCSBTNMAP_15643 joydev_handle_JSIOCSBTNMAP 3 15643 NULL |
34124 |
+fs_path_add_15648 fs_path_add 3 15648 NULL |
34125 |
-+__do_readpage_15652 __do_readpage 0 15652 NULL |
34126 |
+xsd_read_15653 xsd_read 3 15653 NULL |
34127 |
+unix_bind_15668 unix_bind 3 15668 NULL |
34128 |
-+dm_read_15674 dm_read 3 15674 NULL nohasharray |
34129 |
-+SyS_connect_15674 SyS_connect 3 15674 &dm_read_15674 |
34130 |
++SyS_connect_15674 SyS_connect 3 15674 NULL nohasharray |
34131 |
++dm_read_15674 dm_read 3 15674 &SyS_connect_15674 |
34132 |
+uinput_str_to_user_15695 uinput_str_to_user 3 15695 NULL |
34133 |
+__sk_migrate_realloc_15709 __sk_migrate_realloc 3 15709 NULL |
34134 |
+tracing_snapshot_write_15719 tracing_snapshot_write 3 15719 NULL |
34135 |
@@ -116497,6 +124531,7 @@ index 0000000..386792a |
34136 |
+lpfc_idiag_drbacc_read_15948 lpfc_idiag_drbacc_read 3 15948 NULL |
34137 |
+snd_pcm_lib_read_transfer_15952 snd_pcm_lib_read_transfer 5-2-4 15952 NULL |
34138 |
+memblock_virt_alloc_try_nid_15954 memblock_virt_alloc_try_nid 1 15954 NULL |
34139 |
++smk_read_ptrace_15974 smk_read_ptrace 3 15974 NULL |
34140 |
+viafb_vt1636_proc_write_16018 viafb_vt1636_proc_write 3 16018 NULL |
34141 |
+dccp_recvmsg_16056 dccp_recvmsg 4 16056 NULL |
34142 |
+read_file_spectral_period_16057 read_file_spectral_period 3 16057 NULL |
34143 |
@@ -116508,7 +124543,7 @@ index 0000000..386792a |
34144 |
+fsm_init_16134 fsm_init 2 16134 NULL |
34145 |
+ext4_xattr_block_get_16148 ext4_xattr_block_get 0 16148 NULL |
34146 |
+optimal_reclaimed_pages_16172 optimal_reclaimed_pages 0 16172 NULL |
34147 |
-+mapping_level_16188 mapping_level 2-0 16188 NULL |
34148 |
++mapping_level_16188 mapping_level 0-2 16188 NULL |
34149 |
+i40e_allocate_virt_mem_d_16191 i40e_allocate_virt_mem_d 3 16191 NULL |
34150 |
+ath10k_htt_rx_ring_size_16201 ath10k_htt_rx_ring_size 0 16201 NULL |
34151 |
+cipso_v4_map_cat_rng_hton_16203 cipso_v4_map_cat_rng_hton 0 16203 NULL |
34152 |
@@ -116523,8 +124558,8 @@ index 0000000..386792a |
34153 |
+SyS_fgetxattr_16254 SyS_fgetxattr 4 16254 NULL |
34154 |
+reiserfs_acl_count_16265 reiserfs_acl_count 0-1 16265 NULL |
34155 |
+ocfs2_xattr_bucket_value_truncate_16279 ocfs2_xattr_bucket_value_truncate 4 16279 NULL |
34156 |
-+nand_bch_init_16280 nand_bch_init 3-2 16280 NULL nohasharray |
34157 |
-+drbd_setsockopt_16280 drbd_setsockopt 5 16280 &nand_bch_init_16280 |
34158 |
++drbd_setsockopt_16280 drbd_setsockopt 5 16280 NULL nohasharray |
34159 |
++nand_bch_init_16280 nand_bch_init 3-2 16280 &drbd_setsockopt_16280 |
34160 |
+account_16283 account 0-4-2 16283 NULL nohasharray |
34161 |
+mirror_status_16283 mirror_status 5 16283 &account_16283 |
34162 |
+jumpshot_read_data_16287 jumpshot_read_data 4 16287 NULL |
34163 |
@@ -116533,14 +124568,13 @@ index 0000000..386792a |
34164 |
+rbd_segment_offset_16293 rbd_segment_offset 0-2 16293 NULL |
34165 |
+rsc_mgr_init_16299 rsc_mgr_init 3 16299 NULL |
34166 |
+kvm_handle_hva_range_16312 kvm_handle_hva_range 3-2 16312 NULL |
34167 |
-+sysfs_create_groups_16360 sysfs_create_groups 0 16360 NULL |
34168 |
+total_ps_buffered_read_16365 total_ps_buffered_read 3 16365 NULL |
34169 |
+iscsi_tcp_conn_setup_16376 iscsi_tcp_conn_setup 2 16376 NULL |
34170 |
-+i8042_create_kbd_port_16379 i8042_create_kbd_port 0 16379 NULL |
34171 |
+ieee80211_if_read_tsf_16420 ieee80211_if_read_tsf 3 16420 NULL |
34172 |
+rxrpc_server_keyring_16431 rxrpc_server_keyring 3 16431 NULL |
34173 |
+__bio_add_page_16435 __bio_add_page 0-4 16435 NULL |
34174 |
+cmdline_store_16442 cmdline_store 4 16442 NULL |
34175 |
++copy_from_user_bvec_16447 copy_from_user_bvec 0-4 16447 NULL |
34176 |
+btrfs_truncate_inode_items_16452 btrfs_truncate_inode_items 4 16452 NULL |
34177 |
+netlink_change_ngroups_16457 netlink_change_ngroups 2 16457 NULL |
34178 |
+req_capsule_get_size_16467 req_capsule_get_size 0 16467 NULL |
34179 |
@@ -116551,7 +124585,6 @@ index 0000000..386792a |
34180 |
+lpfc_debugfs_read_16566 lpfc_debugfs_read 3 16566 NULL |
34181 |
+agp_allocate_memory_wrap_16576 agp_allocate_memory_wrap 1 16576 NULL |
34182 |
+lustre_msg_hdr_size_v2_16589 lustre_msg_hdr_size_v2 0 16589 NULL |
34183 |
-+gmux_index_read32_16604 gmux_index_read32 0 16604 NULL |
34184 |
+compat_SyS_migrate_pages_16618 compat_SyS_migrate_pages 2 16618 NULL |
34185 |
+rtw_set_wpa_ie_16633 rtw_set_wpa_ie 3 16633 NULL |
34186 |
+btrfs_get_token_32_16651 btrfs_get_token_32 0 16651 NULL |
34187 |
@@ -116586,6 +124619,7 @@ index 0000000..386792a |
34188 |
+entry_length_17093 entry_length 0 17093 NULL |
34189 |
+write_mem_17114 write_mem 3 17114 NULL |
34190 |
+pvr2_hdw_state_report_17121 pvr2_hdw_state_report 3 17121 NULL |
34191 |
++do_blockdev_direct_IO_17143 do_blockdev_direct_IO 0-6 17143 NULL |
34192 |
+nouveau_instobj_create__17144 nouveau_instobj_create_ 4 17144 NULL |
34193 |
+jumpshot_write_data_17151 jumpshot_write_data 4 17151 NULL |
34194 |
+sep_read_17161 sep_read 3 17161 NULL |
34195 |
@@ -116594,8 +124628,8 @@ index 0000000..386792a |
34196 |
+UniStrnlen_17169 UniStrnlen 0 17169 NULL |
34197 |
+access_remote_vm_17189 access_remote_vm 0 17189 NULL nohasharray |
34198 |
+iwl_dbgfs_txfifo_flush_write_17189 iwl_dbgfs_txfifo_flush_write 3 17189 &access_remote_vm_17189 |
34199 |
-+iscsit_find_cmd_from_itt_or_dump_17194 iscsit_find_cmd_from_itt_or_dump 3 17194 NULL nohasharray |
34200 |
-+driver_state_read_17194 driver_state_read 3 17194 &iscsit_find_cmd_from_itt_or_dump_17194 |
34201 |
++driver_state_read_17194 driver_state_read 3 17194 NULL nohasharray |
34202 |
++iscsit_find_cmd_from_itt_or_dump_17194 iscsit_find_cmd_from_itt_or_dump 3 17194 &driver_state_read_17194 |
34203 |
+sync_request_17208 sync_request 2 17208 NULL |
34204 |
+dn_recvmsg_17213 dn_recvmsg 4 17213 NULL |
34205 |
+lprocfs_read_frac_helper_17261 lprocfs_read_frac_helper 0 17261 NULL |
34206 |
@@ -116619,11 +124653,12 @@ index 0000000..386792a |
34207 |
+__ref_totlen_17461 __ref_totlen 0 17461 NULL |
34208 |
+probe_kernel_write_17481 probe_kernel_write 3 17481 NULL |
34209 |
+TSS_rawhmac_17486 TSS_rawhmac 3 17486 NULL |
34210 |
++copy_page_from_iter_17512 copy_page_from_iter 3-0 17512 NULL |
34211 |
++reiserfs_direct_IO_17513 reiserfs_direct_IO 4 17513 NULL |
34212 |
+lbs_highrssi_write_17515 lbs_highrssi_write 3 17515 NULL |
34213 |
+qp_free_res_17541 qp_free_res 5 17541 NULL |
34214 |
+__copy_to_user_17551 __copy_to_user 0-3 17551 NULL |
34215 |
+copy_from_user_17559 copy_from_user 3-0 17559 NULL |
34216 |
-+snd_pcm_action_lock_irq_17569 snd_pcm_action_lock_irq 0 17569 NULL |
34217 |
+hash_netport4_expire_17573 hash_netport4_expire 4 17573 NULL |
34218 |
+acpi_ut_create_package_object_17594 acpi_ut_create_package_object 1 17594 NULL |
34219 |
+neigh_hash_alloc_17595 neigh_hash_alloc 1 17595 NULL |
34220 |
@@ -116635,7 +124670,6 @@ index 0000000..386792a |
34221 |
+packet_setsockopt_17662 packet_setsockopt 5 17662 NULL nohasharray |
34222 |
+ubi_io_read_data_17662 ubi_io_read_data 0 17662 &packet_setsockopt_17662 |
34223 |
+pwr_enable_ps_read_17686 pwr_enable_ps_read 3 17686 NULL |
34224 |
-+filemap_fdatawait_17688 filemap_fdatawait 0 17688 NULL |
34225 |
+venus_rename_17707 venus_rename 4-5 17707 NULL |
34226 |
+exofs_read_lookup_dev_table_17733 exofs_read_lookup_dev_table 3 17733 NULL |
34227 |
+sctpprobe_read_17741 sctpprobe_read 3 17741 NULL |
34228 |
@@ -116666,7 +124700,6 @@ index 0000000..386792a |
34229 |
+smk_write_cipso_17989 smk_write_cipso 3 17989 NULL |
34230 |
+gnttab_max_grant_frames_17993 gnttab_max_grant_frames 0 17993 NULL |
34231 |
+pvr2_v4l2_read_18006 pvr2_v4l2_read 3 18006 NULL |
34232 |
-+cpufreq_add_dev_symlink_18028 cpufreq_add_dev_symlink 0 18028 NULL |
34233 |
+o2hb_highest_node_18034 o2hb_highest_node 0 18034 NULL |
34234 |
+cryptd_alloc_instance_18048 cryptd_alloc_instance 2-3 18048 NULL |
34235 |
+__btrfs_drop_extents_18049 __btrfs_drop_extents 5 18049 NULL |
34236 |
@@ -116677,14 +124710,12 @@ index 0000000..386792a |
34237 |
+SYSC_pselect6_18076 SYSC_pselect6 1 18076 NULL |
34238 |
+SYSC_semtimedop_18091 SYSC_semtimedop 3 18091 NULL |
34239 |
+mpi_alloc_18094 mpi_alloc 1 18094 NULL |
34240 |
-+hfs_direct_IO_18104 hfs_direct_IO 4 18104 NULL |
34241 |
+dfs_file_read_18116 dfs_file_read 3 18116 NULL |
34242 |
+svc_getnl_18120 svc_getnl 0 18120 NULL |
34243 |
+paging32_gpte_to_gfn_lvl_18131 paging32_gpte_to_gfn_lvl 0-2-1 18131 NULL |
34244 |
+selinux_inode_setsecurity_18148 selinux_inode_setsecurity 4 18148 NULL |
34245 |
+is_idx_node_in_use_18165 is_idx_node_in_use 0 18165 NULL |
34246 |
+pccard_store_cis_18176 pccard_store_cis 6 18176 NULL |
34247 |
-+snd_pcm_hw_refine_user_18204 snd_pcm_hw_refine_user 0 18204 NULL |
34248 |
+orinoco_add_extscan_result_18207 orinoco_add_extscan_result 3 18207 NULL |
34249 |
+gsm_control_message_18209 gsm_control_message 4 18209 NULL |
34250 |
+do_ipv6_setsockopt_18215 do_ipv6_setsockopt 5 18215 NULL |
34251 |
@@ -116701,7 +124732,6 @@ index 0000000..386792a |
34252 |
+mmc_send_bus_test_18285 mmc_send_bus_test 4 18285 NULL |
34253 |
+um_idi_write_18293 um_idi_write 3 18293 NULL |
34254 |
+nouveau_disp_create__18305 nouveau_disp_create_ 4-7 18305 NULL |
34255 |
-+vga_r_18310 vga_r 0 18310 NULL |
34256 |
+class_add_profile_18315 class_add_profile 1-3-5 18315 NULL |
34257 |
+csio_mem_read_18319 csio_mem_read 3 18319 NULL |
34258 |
+alloc_and_copy_string_18321 alloc_and_copy_string 2 18321 NULL |
34259 |
@@ -116716,14 +124746,12 @@ index 0000000..386792a |
34260 |
+__ceph_getxattr_18386 __ceph_getxattr 0 18386 NULL |
34261 |
+ci_role_write_18388 ci_role_write 3 18388 NULL |
34262 |
+adis16136_show_serial_18402 adis16136_show_serial 3 18402 NULL |
34263 |
-+rtl8169_rx_fill_18416 rtl8169_rx_fill 0 18416 NULL |
34264 |
+memblock_virt_alloc_node_nopanic_18431 memblock_virt_alloc_node_nopanic 1 18431 NULL |
34265 |
+iscsi_create_flashnode_sess_18433 iscsi_create_flashnode_sess 4 18433 NULL |
34266 |
+snd_hda_get_connections_18437 snd_hda_get_connections 0 18437 NULL |
34267 |
+fuse_perform_write_18457 fuse_perform_write 4 18457 NULL |
34268 |
+regset_tls_set_18459 regset_tls_set 4 18459 NULL |
34269 |
-+pci_vpd_lrdt_size_18479 pci_vpd_lrdt_size 0 18479 NULL nohasharray |
34270 |
-+mite_bytes_in_transit_18479 mite_bytes_in_transit 0 18479 &pci_vpd_lrdt_size_18479 |
34271 |
++pci_vpd_lrdt_size_18479 pci_vpd_lrdt_size 0 18479 NULL |
34272 |
+udpv6_setsockopt_18487 udpv6_setsockopt 5 18487 NULL |
34273 |
+btrfs_fiemap_18501 btrfs_fiemap 3 18501 NULL |
34274 |
+__copy_user_zeroing_intel_18510 __copy_user_zeroing_intel 0-3 18510 NULL |
34275 |
@@ -116735,8 +124763,7 @@ index 0000000..386792a |
34276 |
+sas_change_queue_depth_18555 sas_change_queue_depth 2 18555 NULL |
34277 |
+smk_write_rules_list_18565 smk_write_rules_list 3 18565 NULL |
34278 |
+debug_output_18575 debug_output 3 18575 NULL |
34279 |
-+filemap_fdatawait_range_18600 filemap_fdatawait_range 0 18600 NULL nohasharray |
34280 |
-+slabinfo_write_18600 slabinfo_write 3 18600 &filemap_fdatawait_range_18600 |
34281 |
++filemap_fdatawait_range_18600 filemap_fdatawait_range 0 18600 NULL |
34282 |
+iowarrior_write_18604 iowarrior_write 3 18604 NULL |
34283 |
+from_buffer_18625 from_buffer 3 18625 NULL |
34284 |
+snd_pcm_oss_write3_18657 snd_pcm_oss_write3 0-3 18657 NULL |
34285 |
@@ -116761,20 +124788,17 @@ index 0000000..386792a |
34286 |
+sctp_setsockopt_events_18862 sctp_setsockopt_events 3 18862 NULL |
34287 |
+ieee80211_if_read_element_ttl_18869 ieee80211_if_read_element_ttl 3 18869 NULL |
34288 |
+xlog_find_verify_log_record_18870 xlog_find_verify_log_record 2 18870 NULL |
34289 |
++devm_mdiobus_alloc_size_18902 devm_mdiobus_alloc_size 2 18902 NULL |
34290 |
+ceph_setxattr_18913 ceph_setxattr 4 18913 NULL |
34291 |
+ieee80211_rx_mgmt_disassoc_18927 ieee80211_rx_mgmt_disassoc 3 18927 NULL |
34292 |
-+snapshot_write_next_18937 snapshot_write_next 0 18937 NULL |
34293 |
+__nla_reserve_18974 __nla_reserve 3 18974 NULL |
34294 |
-+__blockdev_direct_IO_18977 __blockdev_direct_IO 0-6 18977 NULL |
34295 |
+find_dirtiest_idx_leb_19001 find_dirtiest_idx_leb 0 19001 NULL |
34296 |
+layout_in_gaps_19006 layout_in_gaps 2 19006 NULL |
34297 |
+huge_page_size_19008 huge_page_size 0 19008 NULL |
34298 |
+hash_netport6_expire_19013 hash_netport6_expire 4 19013 NULL |
34299 |
-+sysfs_create_dir_ns_19033 sysfs_create_dir_ns 0 19033 NULL |
34300 |
+revalidate_19043 revalidate 2 19043 NULL |
34301 |
+afs_vnode_store_data_19048 afs_vnode_store_data 2-3-4-5 19048 NULL |
34302 |
-+osc_pinger_recov_seq_write_19056 osc_pinger_recov_seq_write 3 19056 NULL nohasharray |
34303 |
-+do_vm86_irq_handling_19056 do_vm86_irq_handling 2 19056 &osc_pinger_recov_seq_write_19056 |
34304 |
++osc_pinger_recov_seq_write_19056 osc_pinger_recov_seq_write 3 19056 NULL |
34305 |
+create_gpadl_header_19064 create_gpadl_header 2 19064 NULL |
34306 |
+ceph_create_snap_context_19082 ceph_create_snap_context 1 19082 NULL |
34307 |
+sta_last_seq_ctrl_read_19106 sta_last_seq_ctrl_read 3 19106 NULL |
34308 |
@@ -116784,12 +124808,12 @@ index 0000000..386792a |
34309 |
+alloc_irdadev_19140 alloc_irdadev 1 19140 NULL |
34310 |
+sleep_auth_read_19159 sleep_auth_read 3 19159 NULL |
34311 |
+smk_write_access2_19170 smk_write_access2 3 19170 NULL |
34312 |
++read_extent_buffer_to_user_19189 read_extent_buffer_to_user 4-3 19189 NULL |
34313 |
+iwl_dbgfs_reply_tx_error_read_19205 iwl_dbgfs_reply_tx_error_read 3 19205 NULL |
34314 |
-+__copy_to_user_inatomic_19214 __copy_to_user_inatomic 3-0 19214 NULL |
34315 |
++__copy_to_user_inatomic_19214 __copy_to_user_inatomic 0-3 19214 NULL |
34316 |
+dev_counters_read_19216 dev_counters_read 3 19216 NULL |
34317 |
+wbcir_tx_19219 wbcir_tx 3 19219 NULL |
34318 |
+snd_mask_max_19224 snd_mask_max 0 19224 NULL |
34319 |
-+snd_pcm_capture_rewind_19229 snd_pcm_capture_rewind 0-2 19229 NULL |
34320 |
+bio_alloc_mddev_19238 bio_alloc_mddev 2 19238 NULL |
34321 |
+ucma_query_19260 ucma_query 4 19260 NULL |
34322 |
+il_dbgfs_rxon_filter_flags_read_19281 il_dbgfs_rxon_filter_flags_read 3 19281 NULL |
34323 |
@@ -116799,8 +124823,8 @@ index 0000000..386792a |
34324 |
+ocfs2_prepare_inode_for_refcount_19303 ocfs2_prepare_inode_for_refcount 3-4 19303 NULL |
34325 |
+event_tx_stuck_read_19305 event_tx_stuck_read 3 19305 NULL |
34326 |
+debug_read_19322 debug_read 3 19322 NULL |
34327 |
-+cfg80211_inform_bss_19332 cfg80211_inform_bss 8 19332 NULL nohasharray |
34328 |
-+lbs_host_sleep_write_19332 lbs_host_sleep_write 3 19332 &cfg80211_inform_bss_19332 |
34329 |
++lbs_host_sleep_write_19332 lbs_host_sleep_write 3 19332 NULL nohasharray |
34330 |
++cfg80211_inform_bss_19332 cfg80211_inform_bss 8 19332 &lbs_host_sleep_write_19332 |
34331 |
+closure_sub_19359 closure_sub 2 19359 NULL |
34332 |
+firmware_data_write_19360 firmware_data_write 6-5 19360 NULL |
34333 |
+read_zero_19366 read_zero 3 19366 NULL |
34334 |
@@ -116817,19 +124841,16 @@ index 0000000..386792a |
34335 |
+kstrtoll_from_user_19500 kstrtoll_from_user 2 19500 NULL |
34336 |
+ext4_add_new_descs_19509 ext4_add_new_descs 3 19509 NULL |
34337 |
+batadv_tvlv_container_register_19520 batadv_tvlv_container_register 5 19520 NULL |
34338 |
-+cfc_write_array_to_buffer_19529 cfc_write_array_to_buffer 3 19529 NULL |
34339 |
+nfc_llcp_build_tlv_19536 nfc_llcp_build_tlv 3 19536 NULL |
34340 |
+gfn_to_index_19558 gfn_to_index 0-1-3-2 19558 NULL |
34341 |
+ocfs2_control_message_19564 ocfs2_control_message 3 19564 NULL |
34342 |
+nfsd_read_19568 nfsd_read 5 19568 NULL |
34343 |
+ieee80211_key_alloc_19575 ieee80211_key_alloc 3 19575 NULL |
34344 |
-+mnt_want_write_file_19579 mnt_want_write_file 0 19579 NULL |
34345 |
+bm_status_read_19583 bm_status_read 3 19583 NULL |
34346 |
+load_xattr_datum_19594 load_xattr_datum 0 19594 NULL |
34347 |
+__mei_cl_recv_19636 __mei_cl_recv 3 19636 NULL |
34348 |
+LoadBitmap_19658 LoadBitmap 2 19658 NULL |
34349 |
+memblock_virt_alloc_low_nopanic_19714 memblock_virt_alloc_low_nopanic 1 19714 NULL |
34350 |
-+ocfs2_control_get_this_node_19721 ocfs2_control_get_this_node 0 19721 NULL |
34351 |
+read_reg_19723 read_reg 0 19723 NULL |
34352 |
+wm8350_block_write_19727 wm8350_block_write 2-3 19727 NULL |
34353 |
+memcpy_toiovecend_19736 memcpy_toiovecend 4-3 19736 NULL |
34354 |
@@ -116852,26 +124873,23 @@ index 0000000..386792a |
34355 |
+iwl_dbgfs_rx_queue_read_19943 iwl_dbgfs_rx_queue_read 3 19943 NULL |
34356 |
+cfg80211_rx_assoc_resp_19944 cfg80211_rx_assoc_resp 4 19944 NULL |
34357 |
+ll_xattr_cache_list_19954 ll_xattr_cache_list 0 19954 NULL |
34358 |
-+get_jack_mode_name_19976 get_jack_mode_name 4 19976 NULL |
34359 |
+attach_hdlc_protocol_19986 attach_hdlc_protocol 3 19986 NULL |
34360 |
-+rtw_set_wps_probe_resp_19989 rtw_set_wps_probe_resp 3 19989 NULL nohasharray |
34361 |
-+i40e_reserve_msix_vectors_19989 i40e_reserve_msix_vectors 2 19989 &rtw_set_wps_probe_resp_19989 |
34362 |
++rtw_set_wps_probe_resp_19989 rtw_set_wps_probe_resp 3 19989 NULL |
34363 |
+diva_um_idi_read_20003 diva_um_idi_read 0 20003 NULL |
34364 |
-+lov_stripe_md_size_20009 lov_stripe_md_size 0-1 20009 NULL nohasharray |
34365 |
-+event_trigger_write_20009 event_trigger_write 3 20009 &lov_stripe_md_size_20009 |
34366 |
++event_trigger_write_20009 event_trigger_write 3 20009 NULL nohasharray |
34367 |
++lov_stripe_md_size_20009 lov_stripe_md_size 0-1 20009 &event_trigger_write_20009 |
34368 |
+tree_mod_log_eb_move_20011 tree_mod_log_eb_move 5 20011 NULL |
34369 |
+SYSC_fgetxattr_20027 SYSC_fgetxattr 4 20027 NULL |
34370 |
+split_scan_timeout_read_20029 split_scan_timeout_read 3 20029 NULL |
34371 |
-+iwl_mvm_power_mac_dbgfs_read_20067 iwl_mvm_power_mac_dbgfs_read 0-4 20067 NULL |
34372 |
-+target_message_20072 target_message 2 20072 NULL |
34373 |
++iwl_mvm_power_mac_dbgfs_read_20067 iwl_mvm_power_mac_dbgfs_read 4-0 20067 NULL |
34374 |
+rawv6_sendmsg_20080 rawv6_sendmsg 4 20080 NULL |
34375 |
+fuse_conn_limit_read_20084 fuse_conn_limit_read 3 20084 NULL |
34376 |
+aat2870_reg_write_file_20086 aat2870_reg_write_file 3 20086 NULL |
34377 |
+team_options_register_20091 team_options_register 3 20091 NULL |
34378 |
+qla2x00_adjust_sdev_qdepth_up_20097 qla2x00_adjust_sdev_qdepth_up 2 20097 NULL |
34379 |
-+root_nfs_copy_20111 root_nfs_copy 3 20111 NULL |
34380 |
+hptiop_adjust_disk_queue_depth_20122 hptiop_adjust_disk_queue_depth 2 20122 NULL |
34381 |
+self_check_vid_hdr_20131 self_check_vid_hdr 0 20131 NULL |
34382 |
++ext4_ext_direct_IO_20165 ext4_ext_direct_IO 4 20165 NULL |
34383 |
+tomoyo_commit_ok_20167 tomoyo_commit_ok 2 20167 NULL |
34384 |
+read_flush_pipefs_20171 read_flush_pipefs 3 20171 NULL |
34385 |
+wep_addr_key_count_read_20174 wep_addr_key_count_read 3 20174 NULL |
34386 |
@@ -116887,11 +124905,10 @@ index 0000000..386792a |
34387 |
+snd_cs4281_BA1_read_20323 snd_cs4281_BA1_read 5 20323 NULL |
34388 |
+gfs2_glock_nq_m_20347 gfs2_glock_nq_m 1 20347 NULL |
34389 |
+handle_arr_calc_size_20355 handle_arr_calc_size 0-1 20355 NULL |
34390 |
-+snd_pcm_stop_20376 snd_pcm_stop 0 20376 NULL |
34391 |
+smk_set_cipso_20379 smk_set_cipso 3 20379 NULL |
34392 |
+snd_nm256_readl_20394 snd_nm256_readl 0 20394 NULL |
34393 |
-+SyS_get_mempolicy_20399 SyS_get_mempolicy 3 20399 NULL nohasharray |
34394 |
-+__kfifo_from_user_20399 __kfifo_from_user 3 20399 &SyS_get_mempolicy_20399 |
34395 |
++__kfifo_from_user_20399 __kfifo_from_user 3 20399 NULL nohasharray |
34396 |
++SyS_get_mempolicy_20399 SyS_get_mempolicy 3 20399 &__kfifo_from_user_20399 |
34397 |
+compat_ipv6_setsockopt_20468 compat_ipv6_setsockopt 5 20468 NULL |
34398 |
+read_buf_20469 read_buf 2 20469 NULL |
34399 |
+bio_trim_20472 bio_trim 2 20472 NULL |
34400 |
@@ -116907,29 +124924,29 @@ index 0000000..386792a |
34401 |
+set_secure_conn_20596 set_secure_conn 4 20596 NULL |
34402 |
+sync_timeline_create_20601 sync_timeline_create 2 20601 NULL |
34403 |
+lirc_write_20604 lirc_write 3 20604 NULL |
34404 |
-+qib_qsfp_write_20614 qib_qsfp_write 0-2-4 20614 NULL |
34405 |
++qib_qsfp_write_20614 qib_qsfp_write 0-4-2 20614 NULL |
34406 |
+snd_pcm_oss_prepare_20641 snd_pcm_oss_prepare 0 20641 NULL |
34407 |
+get_extent_skip_holes_20642 get_extent_skip_holes 2 20642 NULL |
34408 |
-+kfifo_copy_to_user_20646 kfifo_copy_to_user 3-4 20646 NULL |
34409 |
-+cpulist_scnprintf_20648 cpulist_scnprintf 2-0 20648 NULL |
34410 |
++kfifo_copy_to_user_20646 kfifo_copy_to_user 4-3 20646 NULL |
34411 |
++cpulist_scnprintf_20648 cpulist_scnprintf 2 20648 NULL |
34412 |
+oz_add_farewell_20652 oz_add_farewell 5 20652 NULL |
34413 |
+oz_cdev_read_20659 oz_cdev_read 3 20659 NULL |
34414 |
-+snd_hdsp_playback_copy_20676 snd_hdsp_playback_copy 5 20676 NULL nohasharray |
34415 |
-+btrfs_qgroup_reserve_20676 btrfs_qgroup_reserve 0 20676 &snd_hdsp_playback_copy_20676 |
34416 |
++snd_hdsp_playback_copy_20676 snd_hdsp_playback_copy 5 20676 NULL |
34417 |
+dvb_dmxdev_buffer_read_20682 dvb_dmxdev_buffer_read 0-4 20682 NULL |
34418 |
+cpumask_size_20683 cpumask_size 0 20683 NULL |
34419 |
+btrfs_node_blockptr_20685 btrfs_node_blockptr 0 20685 NULL |
34420 |
++xpcs_reg_addr_write_20694 xpcs_reg_addr_write 3 20694 NULL |
34421 |
+read_file_tgt_int_stats_20697 read_file_tgt_int_stats 3 20697 NULL |
34422 |
+__maestro_read_20700 __maestro_read 0 20700 NULL |
34423 |
+cipso_v4_gentag_rng_20703 cipso_v4_gentag_rng 0 20703 NULL |
34424 |
+pcpu_page_first_chunk_20712 pcpu_page_first_chunk 1 20712 NULL |
34425 |
++hfs_direct_IO_20714 hfs_direct_IO 4 20714 NULL |
34426 |
+ocfs2_read_xattr_bucket_20722 ocfs2_read_xattr_bucket 0 20722 NULL |
34427 |
+security_context_to_sid_force_20724 security_context_to_sid_force 2 20724 NULL |
34428 |
+fb_prepare_logo_20743 fb_prepare_logo 0 20743 NULL |
34429 |
+vol_cdev_direct_write_20751 vol_cdev_direct_write 3 20751 NULL |
34430 |
+ocfs2_align_bytes_to_clusters_20754 ocfs2_align_bytes_to_clusters 2 20754 NULL |
34431 |
-+brcmf_p2p_escan_20763 brcmf_p2p_escan 2 20763 NULL nohasharray |
34432 |
-+mnt_clone_write_20763 mnt_clone_write 0 20763 &brcmf_p2p_escan_20763 |
34433 |
++brcmf_p2p_escan_20763 brcmf_p2p_escan 2 20763 NULL |
34434 |
+ubi_io_read_20767 ubi_io_read 0 20767 NULL |
34435 |
+fb_alloc_cmap_gfp_20792 fb_alloc_cmap_gfp 2 20792 NULL |
34436 |
+iwl_dbgfs_rxon_flags_read_20795 iwl_dbgfs_rxon_flags_read 3 20795 NULL |
34437 |
@@ -116940,7 +124957,6 @@ index 0000000..386792a |
34438 |
+uvc_alloc_entity_20836 uvc_alloc_entity 4-3 20836 NULL |
34439 |
+p9_tag_alloc_20845 p9_tag_alloc 3 20845 NULL |
34440 |
+nvme_trans_supported_vpd_pages_20847 nvme_trans_supported_vpd_pages 4 20847 NULL |
34441 |
-+get_name_20855 get_name 4 20855 NULL |
34442 |
+iwl_dbgfs_pm_params_read_20866 iwl_dbgfs_pm_params_read 3 20866 NULL |
34443 |
+snd_pcm_capture_avail_20867 snd_pcm_capture_avail 0 20867 NULL |
34444 |
+srq_free_res_20868 srq_free_res 5 20868 NULL |
34445 |
@@ -116958,15 +124974,12 @@ index 0000000..386792a |
34446 |
+snd_rme9652_playback_copy_20970 snd_rme9652_playback_copy 5 20970 NULL |
34447 |
+alg_setsockopt_20985 alg_setsockopt 5 20985 NULL |
34448 |
+qib_verbs_send_20999 qib_verbs_send 5-3 20999 NULL |
34449 |
-+btrfs_dirty_pages_21019 btrfs_dirty_pages 0 21019 NULL |
34450 |
+btrfs_inode_ref_name_len_21024 btrfs_inode_ref_name_len 0 21024 NULL |
34451 |
+rx_defrag_tkip_called_read_21031 rx_defrag_tkip_called_read 3 21031 NULL |
34452 |
+srp_change_queue_depth_21038 srp_change_queue_depth 2 21038 NULL |
34453 |
+fsl_edma_prep_dma_cyclic_21042 fsl_edma_prep_dma_cyclic 4-3 21042 NULL |
34454 |
+lbs_threshold_read_21046 lbs_threshold_read 5 21046 NULL |
34455 |
-+reiserfs_direct_IO_21051 reiserfs_direct_IO 4 21051 NULL |
34456 |
+proc_fault_inject_write_21058 proc_fault_inject_write 3 21058 NULL |
34457 |
-+qdisc_get_default_21072 qdisc_get_default 2 21072 NULL |
34458 |
+event_calibration_read_21083 event_calibration_read 3 21083 NULL |
34459 |
+bl_add_page_to_bio_21094 bl_add_page_to_bio 2 21094 NULL nohasharray |
34460 |
+multipath_status_21094 multipath_status 5 21094 &bl_add_page_to_bio_21094 |
34461 |
@@ -116976,10 +124989,9 @@ index 0000000..386792a |
34462 |
+i2400m_rx_trace_21127 i2400m_rx_trace 3 21127 NULL |
34463 |
+mei_dbgfs_read_active_21172 mei_dbgfs_read_active 3 21172 NULL |
34464 |
+cx18_v4l2_read_21196 cx18_v4l2_read 3 21196 NULL |
34465 |
-+__generic_file_aio_write_21201 __generic_file_aio_write 0 21201 NULL |
34466 |
+ipc_rcu_alloc_21208 ipc_rcu_alloc 1 21208 NULL |
34467 |
+scsi_execute_req_flags_21215 scsi_execute_req_flags 5 21215 NULL |
34468 |
-+get_numpages_21227 get_numpages 0-2-1 21227 NULL |
34469 |
++get_numpages_21227 get_numpages 0-1-2 21227 NULL |
34470 |
+input_ff_create_21240 input_ff_create 2 21240 NULL |
34471 |
+cfg80211_notify_new_peer_candidate_21242 cfg80211_notify_new_peer_candidate 4 21242 NULL |
34472 |
+fru_length_21257 fru_length 0 21257 NULL |
34473 |
@@ -116991,23 +125003,20 @@ index 0000000..386792a |
34474 |
+ftrace_profile_read_21327 ftrace_profile_read 3 21327 NULL |
34475 |
+read_file_bool_bmps_21344 read_file_bool_bmps 3 21344 NULL |
34476 |
+gfs2_ea_get_copy_21353 gfs2_ea_get_copy 0 21353 NULL |
34477 |
++allocate_cmdlines_buffer_21355 allocate_cmdlines_buffer 1 21355 NULL |
34478 |
+alloc_orinocodev_21371 alloc_orinocodev 1 21371 NULL |
34479 |
+SYSC_rt_sigpending_21379 SYSC_rt_sigpending 2 21379 NULL |
34480 |
+video_ioctl2_21380 video_ioctl2 2 21380 NULL |
34481 |
+insert_ptr_21386 insert_ptr 6 21386 NULL |
34482 |
+diva_get_driver_dbg_mask_21399 diva_get_driver_dbg_mask 0 21399 NULL |
34483 |
-+__clone_and_map_simple_bio_21404 __clone_and_map_simple_bio 4 21404 NULL |
34484 |
+snd_m3_inw_21406 snd_m3_inw 0 21406 NULL |
34485 |
+usnic_ib_dump_vf_hdr_21423 usnic_ib_dump_vf_hdr 3 21423 NULL |
34486 |
-+snapshot_read_next_21426 snapshot_read_next 0 21426 NULL |
34487 |
+tcp_bound_to_half_wnd_21429 tcp_bound_to_half_wnd 0-2 21429 NULL |
34488 |
-+tracing_saved_cmdlines_read_21434 tracing_saved_cmdlines_read 3 21434 NULL |
34489 |
+aggr_size_tx_agg_vs_rate_read_21438 aggr_size_tx_agg_vs_rate_read 3 21438 NULL |
34490 |
+__ertm_hdr_size_21450 __ertm_hdr_size 0 21450 NULL |
34491 |
+mei_nfc_send_21477 mei_nfc_send 3 21477 NULL |
34492 |
+read_file_xmit_21487 read_file_xmit 3 21487 NULL |
34493 |
+mmc_alloc_sg_21504 mmc_alloc_sg 1 21504 NULL |
34494 |
-+btrfs_file_aio_write_21520 btrfs_file_aio_write 4 21520 NULL |
34495 |
+il_dbgfs_stations_read_21532 il_dbgfs_stations_read 3 21532 NULL |
34496 |
+cipso_v4_map_cat_enum_hton_21540 cipso_v4_map_cat_enum_hton 0 21540 NULL |
34497 |
+rxrpc_send_data_21553 rxrpc_send_data 5 21553 NULL |
34498 |
@@ -117022,7 +125031,6 @@ index 0000000..386792a |
34499 |
+regmap_register_patch_21681 regmap_register_patch 3 21681 NULL |
34500 |
+rtllib_alloc_txb_21687 rtllib_alloc_txb 1 21687 NULL |
34501 |
+evdev_ioctl_handler_21705 evdev_ioctl_handler 2 21705 NULL |
34502 |
-+update_time_21719 update_time 0 21719 NULL |
34503 |
+unix_skb_len_21722 unix_skb_len 0 21722 NULL |
34504 |
+lprocfs_wr_import_21728 lprocfs_wr_import 3 21728 NULL |
34505 |
+mthca_alloc_init_21754 mthca_alloc_init 2 21754 NULL |
34506 |
@@ -117034,9 +125042,9 @@ index 0000000..386792a |
34507 |
+oom_adj_read_21847 oom_adj_read 3 21847 NULL |
34508 |
+lpfc_idiag_extacc_avail_get_21865 lpfc_idiag_extacc_avail_get 0-3 21865 NULL |
34509 |
+brcms_debugfs_hardware_read_21867 brcms_debugfs_hardware_read 3 21867 NULL |
34510 |
-+msix_capability_init_21870 msix_capability_init 0 21870 NULL |
34511 |
+sisusbcon_bmove_21873 sisusbcon_bmove 6-5-7 21873 NULL |
34512 |
+ldlm_lock_create_21888 ldlm_lock_create 7 21888 NULL |
34513 |
++__btrfs_direct_write_21894 __btrfs_direct_write 3 21894 NULL |
34514 |
+dbAllocCtl_21911 dbAllocCtl 0 21911 NULL |
34515 |
+qsfp_1_read_21915 qsfp_1_read 3 21915 NULL |
34516 |
+twl_i2c_write_u16_21953 twl_i2c_write_u16 3 21953 NULL |
34517 |
@@ -117052,12 +125060,10 @@ index 0000000..386792a |
34518 |
+btrfs_reloc_clone_csums_22077 btrfs_reloc_clone_csums 2-3 22077 NULL |
34519 |
+mem_rw_22085 mem_rw 3 22085 NULL |
34520 |
+kstrtos32_from_user_22087 kstrtos32_from_user 2 22087 NULL |
34521 |
-+snd_pcm_xrun_22088 snd_pcm_xrun 0 22088 NULL |
34522 |
+rt2x00debug_read_crypto_stats_22109 rt2x00debug_read_crypto_stats 3 22109 NULL |
34523 |
+snd_hda_codec_read_22130 snd_hda_codec_read 0 22130 NULL |
34524 |
+SyS_sched_setaffinity_22148 SyS_sched_setaffinity 2 22148 NULL |
34525 |
+do_tcp_sendpages_22155 do_tcp_sendpages 4 22155 NULL |
34526 |
-+pci_request_region_22164 pci_request_region 0 22164 NULL |
34527 |
+__kfifo_alloc_22173 __kfifo_alloc 3 22173 NULL |
34528 |
+rfcomm_sock_recvmsg_22227 rfcomm_sock_recvmsg 4 22227 NULL |
34529 |
+mem_write_22232 mem_write 3 22232 NULL |
34530 |
@@ -117067,11 +125073,10 @@ index 0000000..386792a |
34531 |
+ping_common_sendmsg_22261 ping_common_sendmsg 5 22261 NULL |
34532 |
+add_res_tree_22263 add_res_tree 7 22263 NULL |
34533 |
+queue_max_sectors_22280 queue_max_sectors 0 22280 NULL |
34534 |
-+pci_vpd_srdt_size_22300 pci_vpd_srdt_size 0 22300 NULL nohasharray |
34535 |
-+__tun_chr_ioctl_22300 __tun_chr_ioctl 4 22300 &pci_vpd_srdt_size_22300 |
34536 |
++__tun_chr_ioctl_22300 __tun_chr_ioctl 4 22300 NULL nohasharray |
34537 |
++pci_vpd_srdt_size_22300 pci_vpd_srdt_size 0 22300 &__tun_chr_ioctl_22300 |
34538 |
+mesh_table_alloc_22305 mesh_table_alloc 1 22305 NULL |
34539 |
+lov_setstripe_22307 lov_setstripe 2 22307 NULL |
34540 |
-+udpv6_sendmsg_22316 udpv6_sendmsg 4 22316 NULL |
34541 |
+atomic_read_22342 atomic_read 0 22342 NULL |
34542 |
+ll_lazystatfs_seq_write_22353 ll_lazystatfs_seq_write 3 22353 NULL |
34543 |
+snd_pcm_alsa_frames_22363 snd_pcm_alsa_frames 2 22363 NULL |
34544 |
@@ -117086,42 +125091,37 @@ index 0000000..386792a |
34545 |
+qib_user_sdma_alloc_header_22490 qib_user_sdma_alloc_header 2 22490 NULL |
34546 |
+cache_write_procfs_22491 cache_write_procfs 3 22491 NULL |
34547 |
+trim_no_bitmap_22524 trim_no_bitmap 4-3 22524 NULL |
34548 |
-+ntb_setup_bwd_msix_22549 ntb_setup_bwd_msix 2-0 22549 NULL |
34549 |
+ocfs2_read_extent_block_22550 ocfs2_read_extent_block 0 22550 NULL |
34550 |
+agp_alloc_page_array_22554 agp_alloc_page_array 1 22554 NULL |
34551 |
+dbFindCtl_22587 dbFindCtl 0 22587 NULL |
34552 |
-+snapshot_read_22601 snapshot_read 3 22601 NULL |
34553 |
+sctp_setsockopt_connectx_old_22631 sctp_setsockopt_connectx_old 3 22631 NULL |
34554 |
+ide_core_cp_entry_22636 ide_core_cp_entry 3 22636 NULL |
34555 |
+wl1271_rx_filter_get_fields_size_22638 wl1271_rx_filter_get_fields_size 0 22638 NULL |
34556 |
+pwr_wake_on_timer_exp_read_22640 pwr_wake_on_timer_exp_read 3 22640 NULL |
34557 |
+iwl_dbgfs_calib_disabled_read_22649 iwl_dbgfs_calib_disabled_read 3 22649 NULL |
34558 |
-+ext4_ext_direct_IO_22679 ext4_ext_direct_IO 4 22679 NULL |
34559 |
-+fill_gap_22681 fill_gap 0 22681 NULL nohasharray |
34560 |
-+l2tp_ip_recvmsg_22681 l2tp_ip_recvmsg 4 22681 &fill_gap_22681 |
34561 |
++l2tp_ip_recvmsg_22681 l2tp_ip_recvmsg 4 22681 NULL nohasharray |
34562 |
++fill_gap_22681 fill_gap 0 22681 &l2tp_ip_recvmsg_22681 |
34563 |
+bch_dump_read_22685 bch_dump_read 3 22685 NULL |
34564 |
+reg_umr_22686 reg_umr 5 22686 NULL |
34565 |
+SYSC_vmsplice_22697 SYSC_vmsplice 3 22697 NULL |
34566 |
++nr_cpusets_22705 nr_cpusets 0 22705 NULL |
34567 |
+alloc_libipw_22708 alloc_libipw 1 22708 NULL |
34568 |
+cx18_copy_buf_to_user_22735 cx18_copy_buf_to_user 4-0 22735 NULL |
34569 |
+ceph_decode_32_22738 ceph_decode_32 0 22738 NULL nohasharray |
34570 |
+__mei_cl_send_22738 __mei_cl_send 3 22738 &ceph_decode_32_22738 |
34571 |
-+__writeback_single_inode_22739 __writeback_single_inode 0 22739 NULL |
34572 |
+iio_debugfs_write_reg_22742 iio_debugfs_write_reg 3 22742 NULL |
34573 |
+qlcnic_sriov_init_22762 qlcnic_sriov_init 2 22762 NULL |
34574 |
+print_frame_22769 print_frame 0 22769 NULL |
34575 |
+ftrace_arch_read_dyn_info_22773 ftrace_arch_read_dyn_info 0 22773 NULL |
34576 |
-+__break_lease_22777 __break_lease 0 22777 NULL |
34577 |
+vnic_dev_get_res_count_22791 vnic_dev_get_res_count 0 22791 NULL |
34578 |
-+pla_ocp_write_22802 pla_ocp_write 4 22802 NULL |
34579 |
+__generic_copy_to_user_intel_22806 __generic_copy_to_user_intel 0-3 22806 NULL |
34580 |
+create_attr_set_22861 create_attr_set 1 22861 NULL |
34581 |
+hash_ip6_expire_22867 hash_ip6_expire 4 22867 NULL |
34582 |
+vmw_execbuf_process_22885 vmw_execbuf_process 5 22885 NULL |
34583 |
+usblp_new_writeurb_22894 usblp_new_writeurb 2 22894 NULL |
34584 |
+mdc800_device_read_22896 mdc800_device_read 3 22896 NULL |
34585 |
-+ion_handle_test_kernel_22900 ion_handle_test_kernel 4-3 22900 NULL nohasharray |
34586 |
-+policy_emit_config_values_22900 policy_emit_config_values 3 22900 &ion_handle_test_kernel_22900 |
34587 |
++policy_emit_config_values_22900 policy_emit_config_values 3 22900 NULL nohasharray |
34588 |
++ion_handle_test_kernel_22900 ion_handle_test_kernel 4-3 22900 &policy_emit_config_values_22900 |
34589 |
+__set_xattr_22923 __set_xattr 0 22923 NULL |
34590 |
+xstateregs_set_22932 xstateregs_set 4 22932 NULL |
34591 |
+pcpu_mem_zalloc_22948 pcpu_mem_zalloc 1 22948 NULL |
34592 |
@@ -117136,17 +125136,14 @@ index 0000000..386792a |
34593 |
+cifs_local_to_utf16_bytes_23025 cifs_local_to_utf16_bytes 0 23025 NULL |
34594 |
+st_status_23032 st_status 5 23032 NULL |
34595 |
+nv50_disp_chan_create__23056 nv50_disp_chan_create_ 5 23056 NULL |
34596 |
-+comedi_buf_write_n_available_23057 comedi_buf_write_n_available 0 23057 NULL |
34597 |
-+security_inode_killpriv_23060 security_inode_killpriv 0 23060 NULL |
34598 |
-+reiserfs_add_entry_23062 reiserfs_add_entry 4 23062 NULL nohasharray |
34599 |
-+unix_seqpacket_recvmsg_23062 unix_seqpacket_recvmsg 4 23062 &reiserfs_add_entry_23062 |
34600 |
++unix_seqpacket_recvmsg_23062 unix_seqpacket_recvmsg 4 23062 NULL nohasharray |
34601 |
++reiserfs_add_entry_23062 reiserfs_add_entry 4 23062 &unix_seqpacket_recvmsg_23062 |
34602 |
+mei_cl_send_23068 mei_cl_send 3 23068 NULL |
34603 |
+raw_sendmsg_23078 raw_sendmsg 4 23078 NULL |
34604 |
+get_user_hdr_len_23079 get_user_hdr_len 0 23079 NULL |
34605 |
+isr_tx_procs_read_23084 isr_tx_procs_read 3 23084 NULL |
34606 |
+rt2x00debug_write_eeprom_23091 rt2x00debug_write_eeprom 3 23091 NULL |
34607 |
+ntfs_ucstonls_23097 ntfs_ucstonls 3-5 23097 NULL |
34608 |
-+pipe_iov_copy_from_user_23102 pipe_iov_copy_from_user 3 23102 NULL |
34609 |
+dgram_recvmsg_23104 dgram_recvmsg 4 23104 NULL |
34610 |
+mwl8k_cmd_set_beacon_23110 mwl8k_cmd_set_beacon 4 23110 NULL |
34611 |
+bset_tree_bytes_23111 bset_tree_bytes 0 23111 NULL nohasharray |
34612 |
@@ -117167,21 +125164,19 @@ index 0000000..386792a |
34613 |
+nv50_ram_create__23241 nv50_ram_create_ 4 23241 NULL |
34614 |
+sctp_recvmsg_23265 sctp_recvmsg 4 23265 NULL |
34615 |
+uwb_dev_addr_print_23282 uwb_dev_addr_print 2 23282 NULL |
34616 |
++ec_i2c_count_message_23285 ec_i2c_count_message 0-2 23285 NULL |
34617 |
+diva_get_trace_filter_23286 diva_get_trace_filter 0 23286 NULL |
34618 |
+i2cdev_write_23310 i2cdev_write 3 23310 NULL |
34619 |
+__aa_kvmalloc_23320 __aa_kvmalloc 1 23320 NULL |
34620 |
+page_readlink_23346 page_readlink 3 23346 NULL |
34621 |
+kmem_zalloc_large_23351 kmem_zalloc_large 1 23351 NULL |
34622 |
-+get_dst_timing_23358 get_dst_timing 0 23358 NULL nohasharray |
34623 |
-+write_inode_23358 write_inode 0 23358 &get_dst_timing_23358 |
34624 |
++get_dst_timing_23358 get_dst_timing 0 23358 NULL |
34625 |
+fd_setup_write_same_buf_23369 fd_setup_write_same_buf 3 23369 NULL |
34626 |
+iscsi_change_queue_depth_23416 iscsi_change_queue_depth 2 23416 NULL |
34627 |
-+vga_mm_r_23419 vga_mm_r 0 23419 NULL |
34628 |
+ocfs2_zero_tail_23447 ocfs2_zero_tail 3 23447 NULL |
34629 |
+hidraw_send_report_23449 hidraw_send_report 3 23449 NULL |
34630 |
+__ata_change_queue_depth_23484 __ata_change_queue_depth 3 23484 NULL |
34631 |
-+linear_conf_23485 linear_conf 2 23485 NULL nohasharray |
34632 |
-+sync_mapping_buffers_23485 sync_mapping_buffers 0 23485 &linear_conf_23485 |
34633 |
++linear_conf_23485 linear_conf 2 23485 NULL |
34634 |
+event_filter_read_23494 event_filter_read 3 23494 NULL |
34635 |
+lustre_acl_xattr_merge2ext_23502 lustre_acl_xattr_merge2ext 2 23502 NULL |
34636 |
+devm_iio_device_alloc_23511 devm_iio_device_alloc 2 23511 NULL |
34637 |
@@ -117201,9 +125196,10 @@ index 0000000..386792a |
34638 |
+SyS_connect_23669 SyS_connect 3 23669 NULL |
34639 |
+cx18_read_23699 cx18_read 3 23699 NULL |
34640 |
+at_get_23708 at_get 0 23708 NULL |
34641 |
++get_conn_info_23723 get_conn_info 4 23723 NULL |
34642 |
+rx_rx_dropped_frame_read_23748 rx_rx_dropped_frame_read 3 23748 NULL |
34643 |
+__kfifo_max_r_23768 __kfifo_max_r 0-2-1 23768 NULL |
34644 |
-+__build_packet_message_23778 __build_packet_message 4-10 23778 NULL |
34645 |
++__build_packet_message_23778 __build_packet_message 10-4 23778 NULL |
34646 |
+security_inode_getxattr_23781 security_inode_getxattr 0 23781 NULL |
34647 |
+cfg80211_inform_bss_width_frame_23782 cfg80211_inform_bss_width_frame 5 23782 NULL |
34648 |
+mpt_free_res_23793 mpt_free_res 5 23793 NULL |
34649 |
@@ -117211,16 +125207,14 @@ index 0000000..386792a |
34650 |
+rx_path_reset_read_23801 rx_path_reset_read 3 23801 NULL |
34651 |
+__earlyonly_bootmem_alloc_23824 __earlyonly_bootmem_alloc 2 23824 NULL |
34652 |
+lustre_msg_buflen_23827 lustre_msg_buflen 0 23827 NULL |
34653 |
-+ceph_copy_page_vector_to_user_23829 ceph_copy_page_vector_to_user 0-3-4 23829 NULL |
34654 |
+pgdat_end_pfn_23842 pgdat_end_pfn 0 23842 NULL |
34655 |
+iwl_dbgfs_nvm_read_23845 iwl_dbgfs_nvm_read 3 23845 NULL |
34656 |
+p54_init_common_23850 p54_init_common 1 23850 NULL |
34657 |
+bin_to_hex_dup_23853 bin_to_hex_dup 2 23853 NULL |
34658 |
+ocfs2_xattr_get_clusters_23857 ocfs2_xattr_get_clusters 0 23857 NULL |
34659 |
+ieee80211_if_read_dot11MeshMaxPeerLinks_23878 ieee80211_if_read_dot11MeshMaxPeerLinks 3 23878 NULL |
34660 |
-+nouveau_clock_create__23881 nouveau_clock_create_ 5 23881 NULL nohasharray |
34661 |
-+writeback_single_inode_23881 writeback_single_inode 0 23881 &nouveau_clock_create__23881 |
34662 |
+tipc_snprintf_23893 tipc_snprintf 2-0 23893 NULL |
34663 |
++iov_iter_get_pages_alloc_23903 iov_iter_get_pages_alloc 3-0 23903 NULL |
34664 |
+add_new_gdb_meta_bg_23911 add_new_gdb_meta_bg 3 23911 NULL nohasharray |
34665 |
+ieee80211_if_read_hw_queues_23911 ieee80211_if_read_hw_queues 3 23911 &add_new_gdb_meta_bg_23911 |
34666 |
+f2fs_getxattr_23917 f2fs_getxattr 0 23917 NULL |
34667 |
@@ -117250,12 +125244,10 @@ index 0000000..386792a |
34668 |
+trim_bitmaps_24158 trim_bitmaps 3 24158 NULL |
34669 |
+adu_read_24177 adu_read 3 24177 NULL |
34670 |
+safe_prepare_write_buffer_24187 safe_prepare_write_buffer 3 24187 NULL |
34671 |
-+irq_remapping_setup_msi_irqs_24194 irq_remapping_setup_msi_irqs 2 24194 NULL |
34672 |
+ieee80211_if_read_dot11MeshHWMPpreqMinInterval_24208 ieee80211_if_read_dot11MeshHWMPpreqMinInterval 3 24208 NULL |
34673 |
-+efx_vf_size_24213 efx_vf_size 0 24213 NULL |
34674 |
-+tcpprobe_sprint_24222 tcpprobe_sprint 0-2 24222 NULL |
34675 |
-+mei_amthif_read_24224 mei_amthif_read 4 24224 NULL nohasharray |
34676 |
-+pcpu_embed_first_chunk_24224 pcpu_embed_first_chunk 3-2-1 24224 &mei_amthif_read_24224 |
34677 |
++tcpprobe_sprint_24222 tcpprobe_sprint 2-0 24222 NULL |
34678 |
++pcpu_embed_first_chunk_24224 pcpu_embed_first_chunk 3-2-1 24224 NULL nohasharray |
34679 |
++mei_amthif_read_24224 mei_amthif_read 4 24224 &pcpu_embed_first_chunk_24224 |
34680 |
+pci_num_vf_24235 pci_num_vf 0 24235 NULL |
34681 |
+sel_read_bool_24236 sel_read_bool 3 24236 NULL |
34682 |
+em28xx_alloc_urbs_24260 em28xx_alloc_urbs 4-6 24260 NULL |
34683 |
@@ -117263,23 +125255,18 @@ index 0000000..386792a |
34684 |
+thin_status_24278 thin_status 5 24278 NULL |
34685 |
+msg_size_24288 msg_size 0 24288 NULL |
34686 |
+btmrvl_pscmd_read_24308 btmrvl_pscmd_read 3 24308 NULL |
34687 |
-+reserve_metadata_bytes_24313 reserve_metadata_bytes 0 24313 NULL |
34688 |
+ath6kl_add_bss_if_needed_24317 ath6kl_add_bss_if_needed 6 24317 NULL |
34689 |
+si476x_radio_read_acf_blob_24336 si476x_radio_read_acf_blob 3 24336 NULL |
34690 |
+C_SYSC_pwritev_24345 C_SYSC_pwritev 3 24345 NULL |
34691 |
-+prepare_pages_24349 prepare_pages 0 24349 NULL |
34692 |
+kzalloc_node_24352 kzalloc_node 1 24352 NULL |
34693 |
+qla2x00_handle_queue_full_24365 qla2x00_handle_queue_full 2 24365 NULL |
34694 |
+cfi_read_pri_24366 cfi_read_pri 3 24366 NULL |
34695 |
+btrfs_item_size_nr_24367 btrfs_item_size_nr 0 24367 NULL |
34696 |
-+igetword_24373 igetword 0 24373 NULL nohasharray |
34697 |
-+break_deleg_24373 break_deleg 0 24373 &igetword_24373 |
34698 |
-+max_io_len_24384 max_io_len 0-1 24384 NULL |
34699 |
++igetword_24373 igetword 0 24373 NULL |
34700 |
+mpt_alloc_res_24387 mpt_alloc_res 5 24387 NULL |
34701 |
+osc_cur_grant_bytes_seq_write_24396 osc_cur_grant_bytes_seq_write 3 24396 NULL |
34702 |
+getxattr_24398 getxattr 4 24398 NULL nohasharray |
34703 |
+pvr2_v4l2_ioctl_24398 pvr2_v4l2_ioctl 2 24398 &getxattr_24398 |
34704 |
-+populate_msi_sysfs_24399 populate_msi_sysfs 0 24399 NULL |
34705 |
+blk_update_bidi_request_24415 blk_update_bidi_request 3-4 24415 NULL |
34706 |
+nvme_trans_log_supp_pages_24418 nvme_trans_log_supp_pages 3 24418 NULL |
34707 |
+b43_debugfs_read_24425 b43_debugfs_read 3 24425 NULL |
34708 |
@@ -117287,8 +125274,8 @@ index 0000000..386792a |
34709 |
+ieee80211_rx_mgmt_beacon_24430 ieee80211_rx_mgmt_beacon 3 24430 NULL |
34710 |
+copy_and_ioctl_24434 copy_and_ioctl 4 24434 NULL |
34711 |
+ixgbe_alloc_q_vector_24439 ixgbe_alloc_q_vector 4-6 24439 NULL |
34712 |
-+rtw_set_wps_assoc_resp_24440 rtw_set_wps_assoc_resp 3 24440 NULL nohasharray |
34713 |
-+smk_user_access_24440 smk_user_access 3 24440 &rtw_set_wps_assoc_resp_24440 |
34714 |
++smk_user_access_24440 smk_user_access 3 24440 NULL nohasharray |
34715 |
++rtw_set_wps_assoc_resp_24440 rtw_set_wps_assoc_resp 3 24440 &smk_user_access_24440 |
34716 |
+evdev_do_ioctl_24459 evdev_do_ioctl 2 24459 NULL |
34717 |
+lbs_highsnr_write_24460 lbs_highsnr_write 3 24460 NULL |
34718 |
+skb_copy_and_csum_datagram_iovec_24466 skb_copy_and_csum_datagram_iovec 2 24466 NULL |
34719 |
@@ -117306,7 +125293,6 @@ index 0000000..386792a |
34720 |
+SyS_poll_24620 SyS_poll 2 24620 NULL |
34721 |
+context_alloc_24645 context_alloc 3 24645 NULL |
34722 |
+blk_rq_err_bytes_24650 blk_rq_err_bytes 0 24650 NULL |
34723 |
-+btrfs_check_data_free_space_24692 btrfs_check_data_free_space 0 24692 NULL |
34724 |
+datafab_write_data_24696 datafab_write_data 4 24696 NULL |
34725 |
+intelfbhw_get_p1p2_24703 intelfbhw_get_p1p2 2 24703 NULL |
34726 |
+simple_attr_read_24738 simple_attr_read 3 24738 NULL |
34727 |
@@ -117324,12 +125310,12 @@ index 0000000..386792a |
34728 |
+pnp_alloc_24869 pnp_alloc 1 24869 NULL nohasharray |
34729 |
+l2cap_create_basic_pdu_24869 l2cap_create_basic_pdu 3 24869 &pnp_alloc_24869 |
34730 |
+queues_read_24877 queues_read 3 24877 NULL |
34731 |
++iov_iter_npages_bvec_24905 iov_iter_npages_bvec 0-2 24905 NULL |
34732 |
+codec_list_read_file_24910 codec_list_read_file 3 24910 NULL |
34733 |
-+v4l2_ctrl_new_24927 v4l2_ctrl_new 7 24927 NULL nohasharray |
34734 |
-+__btrfs_free_extent_24927 __btrfs_free_extent 7 24927 &v4l2_ctrl_new_24927 |
34735 |
++xpcs_reg_value_write_24922 xpcs_reg_value_write 3 24922 NULL |
34736 |
++v4l2_ctrl_new_24927 v4l2_ctrl_new 7 24927 NULL |
34737 |
+ocfs2_fiemap_24949 ocfs2_fiemap 3-4 24949 NULL |
34738 |
+packet_sendmsg_24954 packet_sendmsg 4 24954 NULL |
34739 |
-+security_inode_rename_24971 security_inode_rename 0 24971 NULL |
34740 |
+twl_i2c_write_u8_24976 twl_i2c_write_u8 3 24976 NULL |
34741 |
+llc_ui_sendmsg_24987 llc_ui_sendmsg 4 24987 NULL |
34742 |
+key_conf_hw_key_idx_read_25003 key_conf_hw_key_idx_read 3 25003 NULL |
34743 |
@@ -117343,9 +125329,9 @@ index 0000000..386792a |
34744 |
+ima_appraise_measurement_25093 ima_appraise_measurement 6 25093 NULL |
34745 |
+snd_rawmidi_kernel_write_25106 snd_rawmidi_kernel_write 3 25106 NULL |
34746 |
+ipath_init_qp_table_25167 ipath_init_qp_table 2 25167 NULL |
34747 |
-+_iwl_dbgfs_reduced_txp_write_25169 _iwl_dbgfs_reduced_txp_write 3 25169 NULL nohasharray |
34748 |
-+kvm_mmu_notifier_change_pte_25169 kvm_mmu_notifier_change_pte 3 25169 &_iwl_dbgfs_reduced_txp_write_25169 |
34749 |
++kvm_mmu_notifier_change_pte_25169 kvm_mmu_notifier_change_pte 3 25169 NULL |
34750 |
+sctp_getsockopt_local_addrs_25178 sctp_getsockopt_local_addrs 2 25178 NULL |
34751 |
++security_socket_post_create_25221 security_socket_post_create 0 25221 NULL |
34752 |
+mon_stat_read_25238 mon_stat_read 3 25238 NULL |
34753 |
+stripe_status_25259 stripe_status 5 25259 NULL |
34754 |
+snd_pcm_start_25273 snd_pcm_start 0 25273 NULL |
34755 |
@@ -117354,27 +125340,27 @@ index 0000000..386792a |
34756 |
+l2tp_session_create_25286 l2tp_session_create 1 25286 NULL |
34757 |
+ath9k_debugfs_read_buf_25316 ath9k_debugfs_read_buf 3 25316 NULL |
34758 |
+rng_buffer_size_25348 rng_buffer_size 0 25348 NULL |
34759 |
-+SYSC_kexec_load_25361 SYSC_kexec_load 2 25361 NULL |
34760 |
+unix_mkname_25368 unix_mkname 0-2 25368 NULL |
34761 |
+sel_read_mls_25369 sel_read_mls 3 25369 NULL |
34762 |
+vsp1_entity_init_25407 vsp1_entity_init 3 25407 NULL |
34763 |
++mcp795_rtcc_read_25415 mcp795_rtcc_read 4 25415 NULL |
34764 |
+dai_list_read_file_25421 dai_list_read_file 3 25421 NULL |
34765 |
-+ipath_decode_err_25468 ipath_decode_err 3 25468 NULL |
34766 |
+crypto_hash_digestsize_25469 crypto_hash_digestsize 0 25469 NULL |
34767 |
+ivtv_buf_copy_from_user_25502 ivtv_buf_copy_from_user 4-0 25502 NULL |
34768 |
+snd_pcm_plugin_build_25505 snd_pcm_plugin_build 5 25505 NULL |
34769 |
++mxt_obj_size_25510 mxt_obj_size 0 25510 NULL |
34770 |
+sb_permission_25523 sb_permission 0 25523 NULL |
34771 |
+ext3_get_inode_loc_25542 ext3_get_inode_loc 0 25542 NULL |
34772 |
+ieee80211_if_read_path_refresh_time_25545 ieee80211_if_read_path_refresh_time 3 25545 NULL |
34773 |
+wimax_addr_scnprint_25548 wimax_addr_scnprint 2 25548 NULL |
34774 |
-+ht_print_chan_25556 ht_print_chan 0-3-4 25556 NULL |
34775 |
++ht_print_chan_25556 ht_print_chan 3-4-0 25556 NULL |
34776 |
+skb_tailroom_25567 skb_tailroom 0 25567 NULL |
34777 |
+ping_recvmsg_25597 ping_recvmsg 4 25597 NULL |
34778 |
+copy_user_generic_25611 copy_user_generic 0 25611 NULL |
34779 |
+proc_coredump_filter_write_25625 proc_coredump_filter_write 3 25625 NULL |
34780 |
+befs_utf2nls_25628 befs_utf2nls 3 25628 NULL nohasharray |
34781 |
+__get_user_pages_25628 __get_user_pages 0 25628 &befs_utf2nls_25628 |
34782 |
-+__direct_map_25647 __direct_map 5-6 25647 NULL |
34783 |
++__direct_map_25647 __direct_map 6-5 25647 NULL |
34784 |
+aircable_prepare_write_buffer_25669 aircable_prepare_write_buffer 3 25669 NULL |
34785 |
+lpfc_idiag_cmd_get_25672 lpfc_idiag_cmd_get 2 25672 NULL |
34786 |
+sta_inactive_ms_read_25690 sta_inactive_ms_read 3 25690 NULL |
34787 |
@@ -117383,6 +125369,7 @@ index 0000000..386792a |
34788 |
+ibmasm_new_command_25714 ibmasm_new_command 2 25714 NULL |
34789 |
+__alloc_bootmem_low_node_25726 __alloc_bootmem_low_node 2 25726 NULL nohasharray |
34790 |
+sel_write_context_25726 sel_write_context 3 25726 &__alloc_bootmem_low_node_25726 |
34791 |
++xgbe_common_read_25743 xgbe_common_read 2 25743 NULL |
34792 |
+cxgbi_device_portmap_create_25747 cxgbi_device_portmap_create 3 25747 NULL |
34793 |
+event_rx_pool_read_25792 event_rx_pool_read 3 25792 NULL |
34794 |
+sg_read_25799 sg_read 3 25799 NULL |
34795 |
@@ -117412,7 +125399,6 @@ index 0000000..386792a |
34796 |
+keyctl_update_key_26061 keyctl_update_key 3 26061 NULL |
34797 |
+pri_wm_latency_write_26063 pri_wm_latency_write 3 26063 NULL |
34798 |
+rx_rx_wa_density_dropped_frame_read_26095 rx_rx_wa_density_dropped_frame_read 3 26095 NULL |
34799 |
-+i8042_pnp_id_to_string_26108 i8042_pnp_id_to_string 3 26108 NULL |
34800 |
+read_sb_page_26119 read_sb_page 5 26119 NULL |
34801 |
+ath9k_hw_name_26146 ath9k_hw_name 3 26146 NULL |
34802 |
+copy_oldmem_page_26164 copy_oldmem_page 3 26164 NULL |
34803 |
@@ -117425,7 +125411,6 @@ index 0000000..386792a |
34804 |
+mwifiex_regrdwr_write_26225 mwifiex_regrdwr_write 3 26225 NULL |
34805 |
+_scsih_change_queue_depth_26230 _scsih_change_queue_depth 2 26230 NULL |
34806 |
+rxrpc_recvmsg_26233 rxrpc_recvmsg 4 26233 NULL |
34807 |
-+simple_setattr_26234 simple_setattr 0 26234 NULL |
34808 |
+genwqe_ffdc_buff_size_26263 genwqe_ffdc_buff_size 0 26263 NULL |
34809 |
+crypto_ctxsize_26278 crypto_ctxsize 0 26278 NULL |
34810 |
+wacom_set_device_mode_26280 wacom_set_device_mode 3 26280 NULL |
34811 |
@@ -117438,13 +125423,11 @@ index 0000000..386792a |
34812 |
+invalidate_inode_pages2_range_26403 invalidate_inode_pages2_range 0 26403 NULL |
34813 |
+ntty_write_26404 ntty_write 3 26404 NULL |
34814 |
+firmware_store_26408 firmware_store 4 26408 NULL |
34815 |
-+pagemap_read_26441 pagemap_read 3 26441 NULL |
34816 |
-+enc_pools_add_pages_26461 enc_pools_add_pages 1 26461 NULL nohasharray |
34817 |
-+tower_read_26461 tower_read 3 26461 &enc_pools_add_pages_26461 |
34818 |
++tower_read_26461 tower_read 3 26461 NULL nohasharray |
34819 |
++enc_pools_add_pages_26461 enc_pools_add_pages 1 26461 &tower_read_26461 |
34820 |
+ib_alloc_device_26483 ib_alloc_device 1 26483 NULL |
34821 |
+ulong_write_file_26485 ulong_write_file 3 26485 NULL |
34822 |
+dvb_ca_en50221_io_ioctl_26490 dvb_ca_en50221_io_ioctl 2 26490 NULL |
34823 |
-+read_vmcore_26501 read_vmcore 3 26501 NULL |
34824 |
+uhid_char_write_26502 uhid_char_write 3 26502 NULL |
34825 |
+vfio_pci_set_msi_trigger_26507 vfio_pci_set_msi_trigger 4-3 26507 NULL |
34826 |
+iwl_dbgfs_rf_reset_read_26512 iwl_dbgfs_rf_reset_read 3 26512 NULL |
34827 |
@@ -117453,14 +125436,12 @@ index 0000000..386792a |
34828 |
+__vhost_add_used_n_26554 __vhost_add_used_n 3 26554 NULL |
34829 |
+dio_new_bio_26562 dio_new_bio 0 26562 NULL |
34830 |
+rts51x_read_mem_26577 rts51x_read_mem 4 26577 NULL |
34831 |
-+kernfs_name_locked_26617 kernfs_name_locked 3 26617 NULL |
34832 |
+pwr_fix_tsf_ps_read_26627 pwr_fix_tsf_ps_read 3 26627 NULL |
34833 |
-+irq_alloc_generic_chip_26650 irq_alloc_generic_chip 2 26650 NULL nohasharray |
34834 |
-+inb_p_26650 inb_p 0 26650 &irq_alloc_generic_chip_26650 |
34835 |
++amdtp_stream_get_max_payload_26645 amdtp_stream_get_max_payload 0 26645 NULL |
34836 |
++irq_alloc_generic_chip_26650 irq_alloc_generic_chip 2 26650 NULL |
34837 |
+nouveau_volt_create__26654 nouveau_volt_create_ 4 26654 NULL |
34838 |
+cipso_v4_map_cat_rbm_hton_26680 cipso_v4_map_cat_rbm_hton 0 26680 NULL |
34839 |
+flowinfo_read_26683 flowinfo_read 3 26683 NULL |
34840 |
-+sysfs_add_file_26716 sysfs_add_file 0 26716 NULL |
34841 |
+nouveau_namedb_create__26732 nouveau_namedb_create_ 7 26732 NULL |
34842 |
+pipeline_tcp_rx_stat_fifo_int_read_26745 pipeline_tcp_rx_stat_fifo_int_read 3 26745 NULL |
34843 |
+snd_hda_get_raw_connections_26762 snd_hda_get_raw_connections 0 26762 NULL |
34844 |
@@ -117483,28 +125464,28 @@ index 0000000..386792a |
34845 |
+sctp_setsockopt_adaptation_layer_26935 sctp_setsockopt_adaptation_layer 3 26935 NULL nohasharray |
34846 |
+pwr_ps_enter_read_26935 pwr_ps_enter_read 3 26935 &sctp_setsockopt_adaptation_layer_26935 |
34847 |
+hecubafb_write_26942 hecubafb_write 3 26942 NULL |
34848 |
-+extract_entropy_user_26952 extract_entropy_user 3 26952 NULL nohasharray |
34849 |
-+do_trimming_26952 do_trimming 3 26952 &extract_entropy_user_26952 |
34850 |
++do_trimming_26952 do_trimming 3 26952 NULL nohasharray |
34851 |
++extract_entropy_user_26952 extract_entropy_user 3 26952 &do_trimming_26952 |
34852 |
+do_direct_IO_26979 do_direct_IO 0 26979 NULL |
34853 |
++sc16is7xx_port_read_27051 sc16is7xx_port_read 0 27051 NULL |
34854 |
+__videobuf_alloc_vb_27062 __videobuf_alloc_vb 1 27062 NULL |
34855 |
-+ext4_convert_unwritten_extents_27064 ext4_convert_unwritten_extents 4-3-0 27064 NULL |
34856 |
++ext4_convert_unwritten_extents_27064 ext4_convert_unwritten_extents 4-3 27064 NULL |
34857 |
+snd_pcm_lib_period_bytes_27071 snd_pcm_lib_period_bytes 0 27071 NULL |
34858 |
+paravirt_read_msr_27077 paravirt_read_msr 0 27077 NULL |
34859 |
+alloc_fdmem_27083 alloc_fdmem 1 27083 NULL |
34860 |
+btmrvl_hscmd_write_27089 btmrvl_hscmd_write 3 27089 NULL nohasharray |
34861 |
+ath9k_hw_4k_dump_eeprom_27089 ath9k_hw_4k_dump_eeprom 5-4 27089 &btmrvl_hscmd_write_27089 |
34862 |
+__devcgroup_inode_permission_27108 __devcgroup_inode_permission 0 27108 NULL |
34863 |
-+get_kernel_page_27133 get_kernel_page 0 27133 NULL |
34864 |
+drbd_get_capacity_27141 drbd_get_capacity 0 27141 NULL |
34865 |
+pms_capture_27142 pms_capture 4 27142 NULL |
34866 |
+btmrvl_hscfgcmd_write_27143 btmrvl_hscfgcmd_write 3 27143 NULL |
34867 |
+snd_compr_calc_avail_27165 snd_compr_calc_avail 0 27165 NULL |
34868 |
+ieee80211_if_read_rc_rateidx_mask_5ghz_27183 ieee80211_if_read_rc_rateidx_mask_5ghz 3 27183 NULL |
34869 |
-+write_kmem_27225 write_kmem 3 27225 NULL |
34870 |
+dbAllocAG_27228 dbAllocAG 0 27228 NULL |
34871 |
+rxrpc_request_key_27235 rxrpc_request_key 3 27235 NULL |
34872 |
+ll_track_gid_seq_write_27267 ll_track_gid_seq_write 3 27267 NULL |
34873 |
+comedi_alloc_devpriv_27272 comedi_alloc_devpriv 2 27272 NULL |
34874 |
++get_rx_fifo_content_27283 get_rx_fifo_content 0 27283 NULL |
34875 |
+copy_from_buf_27308 copy_from_buf 4-2 27308 NULL |
34876 |
+virtqueue_add_inbuf_27312 virtqueue_add_inbuf 3 27312 NULL |
34877 |
+snd_pcm_oss_write2_27332 snd_pcm_oss_write2 3-0 27332 NULL |
34878 |
@@ -117528,10 +125509,9 @@ index 0000000..386792a |
34879 |
+sco_sock_recvmsg_27572 sco_sock_recvmsg 4 27572 NULL |
34880 |
+libipw_alloc_txb_27579 libipw_alloc_txb 1 27579 NULL |
34881 |
+C_SYSC_mbind_27636 C_SYSC_mbind 5 27636 NULL |
34882 |
-+ocfs2_xattr_ibody_get_27642 ocfs2_xattr_ibody_get 0 27642 NULL nohasharray |
34883 |
-+read_flush_procfs_27642 read_flush_procfs 3 27642 &ocfs2_xattr_ibody_get_27642 nohasharray |
34884 |
++read_flush_procfs_27642 read_flush_procfs 3 27642 NULL nohasharray |
34885 |
+nl80211_send_connect_result_27642 nl80211_send_connect_result 5-7 27642 &read_flush_procfs_27642 nohasharray |
34886 |
-+ocfs2_direct_IO_27642 ocfs2_direct_IO 4 27642 &nl80211_send_connect_result_27642 |
34887 |
++ocfs2_xattr_ibody_get_27642 ocfs2_xattr_ibody_get 0 27642 &nl80211_send_connect_result_27642 |
34888 |
+add_new_gdb_27643 add_new_gdb 3 27643 NULL |
34889 |
+btrfs_fallocate_27647 btrfs_fallocate 3-4 27647 NULL |
34890 |
+qnx6_readpages_27657 qnx6_readpages 4 27657 NULL |
34891 |
@@ -117548,27 +125528,21 @@ index 0000000..386792a |
34892 |
+SyS_readv_27804 SyS_readv 3 27804 NULL |
34893 |
+mpihelp_mul_27805 mpihelp_mul 5-3 27805 NULL |
34894 |
+hpt374_read_freq_27828 hpt374_read_freq 0 27828 NULL |
34895 |
-+init_header_complete_27833 init_header_complete 0 27833 NULL |
34896 |
+read_profile_27859 read_profile 3 27859 NULL |
34897 |
+sky2_pci_read16_27863 sky2_pci_read16 0 27863 NULL |
34898 |
+ieee80211_if_read_dot11MeshHWMProotInterval_27873 ieee80211_if_read_dot11MeshHWMProotInterval 3 27873 NULL |
34899 |
+unix_seqpacket_sendmsg_27893 unix_seqpacket_sendmsg 4 27893 NULL |
34900 |
+i915_error_object_create_sized_27919 i915_error_object_create_sized 4 27919 NULL |
34901 |
-+check_mapped_name_27943 check_mapped_name 3 27943 NULL |
34902 |
+tracing_clock_write_27961 tracing_clock_write 3 27961 NULL nohasharray |
34903 |
+bio_next_split_27961 bio_next_split 2 27961 &tracing_clock_write_27961 |
34904 |
-+security_path_chown_27966 security_path_chown 0 27966 NULL |
34905 |
+tipc_media_addr_printf_27971 tipc_media_addr_printf 2 27971 NULL |
34906 |
-+mic_rx_pkts_read_27972 mic_rx_pkts_read 3 27972 NULL nohasharray |
34907 |
-+device_register_27972 device_register 0 27972 &mic_rx_pkts_read_27972 |
34908 |
++mic_rx_pkts_read_27972 mic_rx_pkts_read 3 27972 NULL |
34909 |
+compat_SyS_set_mempolicy_27975 compat_SyS_set_mempolicy 3 27975 NULL |
34910 |
-+pci_enable_device_flags_27977 pci_enable_device_flags 0 27977 NULL |
34911 |
+edt_ft5x06_debugfs_raw_data_read_28002 edt_ft5x06_debugfs_raw_data_read 3 28002 NULL |
34912 |
+seq_get_buf_28006 seq_get_buf 0 28006 NULL |
34913 |
+snd_rawmidi_write_28008 snd_rawmidi_write 3 28008 NULL |
34914 |
+powercap_register_zone_28028 powercap_register_zone 6 28028 NULL |
34915 |
+sctp_setsockopt_maxburst_28041 sctp_setsockopt_maxburst 3 28041 NULL |
34916 |
-+rts51x_xd_rw_28046 rts51x_xd_rw 3-4 28046 NULL |
34917 |
+cx231xx_init_vbi_isoc_28053 cx231xx_init_vbi_isoc 3-2-4 28053 NULL |
34918 |
+pool_status_28055 pool_status 5 28055 NULL |
34919 |
+init_rs_non_canonical_28059 init_rs_non_canonical 1 28059 NULL |
34920 |
@@ -117577,18 +125551,18 @@ index 0000000..386792a |
34921 |
+mmc_test_alloc_mem_28102 mmc_test_alloc_mem 3-2 28102 NULL |
34922 |
+rx_defrag_need_defrag_read_28117 rx_defrag_need_defrag_read 3 28117 NULL |
34923 |
+vgacon_adjust_height_28124 vgacon_adjust_height 2 28124 NULL |
34924 |
++m25p80_read_reg_28132 m25p80_read_reg 4 28132 NULL |
34925 |
+video_read_28148 video_read 3 28148 NULL |
34926 |
+snd_midi_channel_alloc_set_28153 snd_midi_channel_alloc_set 1 28153 NULL |
34927 |
+stats_dot11FCSErrorCount_read_28154 stats_dot11FCSErrorCount_read 3 28154 NULL |
34928 |
-+vread_28173 vread 0-3 28173 NULL |
34929 |
+macvtap_get_user_28185 macvtap_get_user 4 28185 NULL |
34930 |
+counter_free_res_28187 counter_free_res 5 28187 NULL |
34931 |
+read_disk_sb_28188 read_disk_sb 2 28188 NULL |
34932 |
++nvkm_output_dp_create__28192 nvkm_output_dp_create_ 6 28192 NULL |
34933 |
+nouveau_mxm_create__28200 nouveau_mxm_create_ 4 28200 NULL |
34934 |
+__qp_memcpy_from_queue_28220 __qp_memcpy_from_queue 3-4 28220 NULL |
34935 |
+line6_alloc_sysex_buffer_28225 line6_alloc_sysex_buffer 4 28225 NULL |
34936 |
+amd_nb_num_28228 amd_nb_num 0 28228 NULL |
34937 |
-+fuse_direct_IO_28275 fuse_direct_IO 4 28275 NULL |
34938 |
+usemap_size_28281 usemap_size 0 28281 NULL |
34939 |
+inline_xattr_size_28285 inline_xattr_size 0 28285 NULL |
34940 |
+dma_map_sg_attrs_28289 dma_map_sg_attrs 0 28289 NULL |
34941 |
@@ -117596,11 +125570,9 @@ index 0000000..386792a |
34942 |
+kstrtos16_from_user_28300 kstrtos16_from_user 2 28300 NULL |
34943 |
+nouveau_compat_ioctl_28305 nouveau_compat_ioctl 2 28305 NULL |
34944 |
+snd_pcm_oss_read_28317 snd_pcm_oss_read 3 28317 NULL |
34945 |
-+security_inode_link_28327 security_inode_link 0 28327 NULL |
34946 |
-+generic_write_checks_28329 generic_write_checks 0 28329 NULL |
34947 |
++xpcs_mmd_read_28331 xpcs_mmd_read 3 28331 NULL |
34948 |
+bm_entry_write_28338 bm_entry_write 3 28338 NULL |
34949 |
+tcp_copy_to_iovec_28344 tcp_copy_to_iovec 3 28344 NULL |
34950 |
-+snapshot_write_28351 snapshot_write 3 28351 NULL |
34951 |
+xfs_iomap_write_unwritten_28365 xfs_iomap_write_unwritten 3-2 28365 NULL |
34952 |
+batadv_handle_tt_response_28370 batadv_handle_tt_response 4 28370 NULL |
34953 |
+dlmfs_file_read_28385 dlmfs_file_read 3 28385 NULL |
34954 |
@@ -117613,24 +125585,22 @@ index 0000000..386792a |
34955 |
+key_mic_failures_read_28457 key_mic_failures_read 3 28457 NULL |
34956 |
+alloc_irq_cpu_rmap_28459 alloc_irq_cpu_rmap 1 28459 NULL |
34957 |
+ps_poll_upsd_utilization_read_28519 ps_poll_upsd_utilization_read 3 28519 NULL |
34958 |
-+i2400m_tx_stats_read_28527 i2400m_tx_stats_read 3 28527 NULL |
34959 |
++sh_irda_init_iobuf_28527 sh_irda_init_iobuf 2 28527 NULL nohasharray |
34960 |
++i2400m_tx_stats_read_28527 i2400m_tx_stats_read 3 28527 &sh_irda_init_iobuf_28527 |
34961 |
+early_init_dt_alloc_memory_arch_28528 early_init_dt_alloc_memory_arch 1 28528 NULL |
34962 |
+sel_read_policycap_28544 sel_read_policycap 3 28544 NULL |
34963 |
+mptctl_getiocinfo_28545 mptctl_getiocinfo 2 28545 NULL nohasharray |
34964 |
-+aio_read_events_28545 aio_read_events 3 28545 &mptctl_getiocinfo_28545 nohasharray |
34965 |
-+run_delalloc_range_28545 run_delalloc_range 3-4 28545 &aio_read_events_28545 |
34966 |
-+sysfs_create_bin_file_28551 sysfs_create_bin_file 0 28551 NULL |
34967 |
++run_delalloc_range_28545 run_delalloc_range 3-4 28545 &mptctl_getiocinfo_28545 nohasharray |
34968 |
++aio_read_events_28545 aio_read_events 3 28545 &run_delalloc_range_28545 |
34969 |
+b43legacy_debugfs_write_28556 b43legacy_debugfs_write 3 28556 NULL |
34970 |
+asymmetric_verify_28567 asymmetric_verify 3 28567 NULL |
34971 |
+oxygen_read32_28582 oxygen_read32 0 28582 NULL |
34972 |
-+task_cgroup_path_28599 task_cgroup_path 3 28599 NULL |
34973 |
+extract_entropy_28604 extract_entropy 5-3 28604 NULL |
34974 |
++xgbe_common_write_28609 xgbe_common_write 2 28609 NULL |
34975 |
+kfifo_unused_28612 kfifo_unused 0 28612 NULL |
34976 |
+snd_nm256_capture_copy_28622 snd_nm256_capture_copy 3-5 28622 NULL |
34977 |
+setup_usemap_28636 setup_usemap 3-4 28636 NULL |
34978 |
-+qib_handle_6120_hwerrors_28642 qib_handle_6120_hwerrors 3 28642 NULL |
34979 |
+p9_fcall_alloc_28652 p9_fcall_alloc 1 28652 NULL |
34980 |
-+read_nic_io_byte_28654 read_nic_io_byte 0 28654 NULL |
34981 |
+blk_queue_resize_tags_28670 blk_queue_resize_tags 2 28670 NULL |
34982 |
+SyS_setgroups16_28686 SyS_setgroups16 1 28686 NULL |
34983 |
+kvm_mmu_get_page_28692 kvm_mmu_get_page 2 28692 NULL |
34984 |
@@ -117646,7 +125616,6 @@ index 0000000..386792a |
34985 |
+kernel_tree_alloc_28833 kernel_tree_alloc 1 28833 NULL |
34986 |
+vp_request_msix_vectors_28849 vp_request_msix_vectors 2 28849 NULL |
34987 |
+ipv6_renew_options_28867 ipv6_renew_options 5 28867 NULL |
34988 |
-+max_io_len_target_boundary_28879 max_io_len_target_boundary 0-1 28879 NULL |
34989 |
+packet_sendmsg_spkt_28885 packet_sendmsg_spkt 4 28885 NULL |
34990 |
+da9055_group_write_28904 da9055_group_write 2-3 28904 NULL |
34991 |
+ps_upsd_timeouts_read_28924 ps_upsd_timeouts_read 3 28924 NULL |
34992 |
@@ -117688,6 +125657,7 @@ index 0000000..386792a |
34993 |
+__fuse_get_req_29315 __fuse_get_req 2 29315 NULL |
34994 |
+lprocfs_write_helper_29323 lprocfs_write_helper 2 29323 NULL |
34995 |
+kvm_handle_hva_29326 kvm_handle_hva 2 29326 NULL |
34996 |
++obd_proc_jobid_name_seq_write_29332 obd_proc_jobid_name_seq_write 3 29332 NULL |
34997 |
+tun_put_user_29337 tun_put_user 5 29337 NULL |
34998 |
+__alloc_ei_netdev_29338 __alloc_ei_netdev 1 29338 NULL |
34999 |
+l2cap_sock_setsockopt_old_29346 l2cap_sock_setsockopt_old 4 29346 NULL |
35000 |
@@ -117701,17 +125671,14 @@ index 0000000..386792a |
35001 |
+simple_strtoul_29480 simple_strtoul 0 29480 NULL |
35002 |
+btmrvl_pscmd_write_29504 btmrvl_pscmd_write 3 29504 NULL |
35003 |
+btrfs_file_extent_disk_bytenr_29505 btrfs_file_extent_disk_bytenr 0 29505 NULL |
35004 |
-+i2c_add_adapter_29507 i2c_add_adapter 0 29507 NULL |
35005 |
+usnic_vnic_spec_dump_29508 usnic_vnic_spec_dump 2 29508 NULL |
35006 |
+write_file_regidx_29517 write_file_regidx 3 29517 NULL |
35007 |
+atk_debugfs_ggrp_read_29522 atk_debugfs_ggrp_read 3 29522 NULL |
35008 |
-+pci_enable_msix_29524 pci_enable_msix 0 29524 NULL |
35009 |
+ftrace_write_29551 ftrace_write 3 29551 NULL |
35010 |
+idetape_queue_rw_tail_29562 idetape_queue_rw_tail 3 29562 NULL |
35011 |
+leaf_dealloc_29566 leaf_dealloc 3 29566 NULL |
35012 |
+kvm_read_guest_virt_system_29569 kvm_read_guest_virt_system 4-2 29569 NULL |
35013 |
+lbs_lowsnr_read_29571 lbs_lowsnr_read 3 29571 NULL |
35014 |
-+security_path_chmod_29578 security_path_chmod 0 29578 NULL |
35015 |
+iwl_dbgfs_missed_beacon_write_29586 iwl_dbgfs_missed_beacon_write 3 29586 NULL |
35016 |
+pvr2_hdw_report_unlocked_29589 pvr2_hdw_report_unlocked 4-0 29589 NULL |
35017 |
+dio_set_defer_completion_29599 dio_set_defer_completion 0 29599 NULL |
35018 |
@@ -117728,65 +125695,51 @@ index 0000000..386792a |
35019 |
+read_cis_cache_29735 read_cis_cache 4 29735 NULL |
35020 |
+xfs_new_eof_29737 xfs_new_eof 2 29737 NULL |
35021 |
+std_nic_write_29752 std_nic_write 3 29752 NULL |
35022 |
-+tg3_irq_count_29786 tg3_irq_count 0 29786 NULL |
35023 |
++static_key_count_29771 static_key_count 0 29771 NULL |
35024 |
+dbAlloc_29794 dbAlloc 0 29794 NULL |
35025 |
+tcp_sendpage_29829 tcp_sendpage 4 29829 NULL |
35026 |
+__probe_kernel_write_29842 __probe_kernel_write 3 29842 NULL |
35027 |
+kvm_read_hva_atomic_29848 kvm_read_hva_atomic 3 29848 NULL |
35028 |
-+count_partial_29850 count_partial 0 29850 NULL |
35029 |
+write_file_bool_bmps_29870 write_file_bool_bmps 3 29870 NULL |
35030 |
+ipv6_setsockopt_29871 ipv6_setsockopt 5 29871 NULL |
35031 |
-+scsi_end_request_29876 scsi_end_request 3 29876 NULL |
35032 |
+crypto_aead_alignmask_29885 crypto_aead_alignmask 0 29885 NULL |
35033 |
+rtw_cfg80211_indicate_sta_assoc_29897 rtw_cfg80211_indicate_sta_assoc 3 29897 NULL |
35034 |
+lov_ost_pool_extend_29914 lov_ost_pool_extend 2 29914 NULL |
35035 |
+write_file_queue_29922 write_file_queue 3 29922 NULL |
35036 |
+__btrfs_getxattr_29947 __btrfs_getxattr 0 29947 NULL nohasharray |
35037 |
+ipv6_recv_error_29947 ipv6_recv_error 3 29947 &__btrfs_getxattr_29947 |
35038 |
-+arch_setup_dmar_msi_29992 arch_setup_dmar_msi 0 29992 NULL |
35039 |
+dev_mem_write_30028 dev_mem_write 3 30028 NULL |
35040 |
+alloc_netdev_mqs_30030 alloc_netdev_mqs 1 30030 NULL |
35041 |
-+sysfs_add_file_mode_ns_30038 sysfs_add_file_mode_ns 0 30038 NULL |
35042 |
+scsi_vpd_inquiry_30040 scsi_vpd_inquiry 0-4 30040 NULL |
35043 |
+drp_wmove_30043 drp_wmove 4 30043 NULL |
35044 |
-+__pci_request_selected_regions_30058 __pci_request_selected_regions 0 30058 NULL |
35045 |
+cxgbi_ddp_reserve_30091 cxgbi_ddp_reserve 4 30091 NULL |
35046 |
+snd_midi_channel_init_set_30092 snd_midi_channel_init_set 1 30092 NULL |
35047 |
+rx_filter_data_filter_read_30098 rx_filter_data_filter_read 3 30098 NULL |
35048 |
-+defragment_dma_buffer_30113 defragment_dma_buffer 0 30113 NULL |
35049 |
+spi_async_locked_30117 spi_async_locked 0 30117 NULL |
35050 |
+u_memcpya_30139 u_memcpya 3-2 30139 NULL |
35051 |
+dbg_port_buf_30145 dbg_port_buf 2 30145 NULL |
35052 |
-+elfcorehdr_read_30159 elfcorehdr_read 2 30159 NULL |
35053 |
+alloc_switch_ctx_30165 alloc_switch_ctx 2 30165 NULL |
35054 |
+expand_inode_data_30169 expand_inode_data 3-2 30169 NULL |
35055 |
+mempool_create_page_pool_30189 mempool_create_page_pool 1 30189 NULL |
35056 |
+drm_property_create_bitmask_30195 drm_property_create_bitmask 5 30195 NULL |
35057 |
+__genwqe_readq_30197 __genwqe_readq 0 30197 NULL |
35058 |
-+snd_pcm_playback_forward_30201 snd_pcm_playback_forward 0-2 30201 NULL |
35059 |
+usblp_ioctl_30203 usblp_ioctl 2 30203 NULL |
35060 |
-+read_4k_modal_eeprom_30212 read_4k_modal_eeprom 3 30212 NULL |
35061 |
-+SyS_semop_30227 SyS_semop 3 30227 NULL |
35062 |
+bitmap_file_set_bit_30228 bitmap_file_set_bit 2 30228 NULL |
35063 |
+rawv6_recvmsg_30265 rawv6_recvmsg 4 30265 NULL |
35064 |
-+isr_pci_pm_read_30271 isr_pci_pm_read 3 30271 NULL nohasharray |
35065 |
-+try_break_deleg_30271 try_break_deleg 0 30271 &isr_pci_pm_read_30271 |
35066 |
++isr_pci_pm_read_30271 isr_pci_pm_read 3 30271 NULL |
35067 |
+compat_readv_30273 compat_readv 3 30273 NULL |
35068 |
+skcipher_sendmsg_30290 skcipher_sendmsg 4 30290 NULL |
35069 |
+pipeline_sec_frag_swi_read_30294 pipeline_sec_frag_swi_read 3 30294 NULL |
35070 |
+tcp_sendmsg_30296 tcp_sendmsg 4 30296 NULL |
35071 |
+osc_contention_seconds_seq_write_30305 osc_contention_seconds_seq_write 3 30305 NULL |
35072 |
+ext4_acl_from_disk_30320 ext4_acl_from_disk 2 30320 NULL |
35073 |
-+i8254_read_30330 i8254_read 0 30330 NULL |
35074 |
+resource_from_user_30341 resource_from_user 3 30341 NULL |
35075 |
+o2nm_this_node_30342 o2nm_this_node 0 30342 NULL |
35076 |
+kstrtou32_from_user_30361 kstrtou32_from_user 2 30361 NULL |
35077 |
-+pagecache_write_begin_30364 pagecache_write_begin 0 30364 NULL |
35078 |
+pvscsi_change_queue_depth_30365 pvscsi_change_queue_depth 2 30365 NULL |
35079 |
+C_SYSC_readv_30369 C_SYSC_readv 3 30369 NULL |
35080 |
+blkdev_issue_zeroout_30392 blkdev_issue_zeroout 3 30392 NULL |
35081 |
+c4iw_init_resource_30393 c4iw_init_resource 2-3 30393 NULL |
35082 |
-+get_kernel_pages_30397 get_kernel_pages 0 30397 NULL |
35083 |
+vb2_fop_write_30420 vb2_fop_write 3 30420 NULL |
35084 |
+tx_tx_template_prepared_read_30424 tx_tx_template_prepared_read 3 30424 NULL |
35085 |
+lstcon_session_info_30425 lstcon_session_info 6 30425 NULL |
35086 |
@@ -117794,15 +125747,12 @@ index 0000000..386792a |
35087 |
+tx_tx_template_programmed_read_30461 tx_tx_template_programmed_read 3 30461 NULL |
35088 |
+urandom_read_30462 urandom_read 3 30462 NULL |
35089 |
+zoran_ioctl_30465 zoran_ioctl 2 30465 NULL |
35090 |
-+i2c_ctrl_read_30467 i2c_ctrl_read 0 30467 NULL |
35091 |
+adu_write_30487 adu_write 3 30487 NULL |
35092 |
+dtim_interval_write_30489 dtim_interval_write 3 30489 NULL |
35093 |
+batadv_send_tt_request_30493 batadv_send_tt_request 5 30493 NULL |
35094 |
-+__send_duplicate_bios_30498 __send_duplicate_bios 4 30498 NULL |
35095 |
+memblock_virt_alloc_node_30515 memblock_virt_alloc_node 1 30515 NULL |
35096 |
+dwc3_testmode_write_30516 dwc3_testmode_write 3 30516 NULL |
35097 |
+debug_debug2_read_30526 debug_debug2_read 3 30526 NULL |
35098 |
-+ixgbevf_acquire_msix_vectors_30559 ixgbevf_acquire_msix_vectors 2 30559 NULL |
35099 |
+disk_expand_part_tbl_30561 disk_expand_part_tbl 2 30561 NULL |
35100 |
+set_le_30581 set_le 4 30581 NULL |
35101 |
+blk_init_tags_30592 blk_init_tags 1 30592 NULL |
35102 |
@@ -117813,13 +125763,14 @@ index 0000000..386792a |
35103 |
+mlx5_ib_alloc_fast_reg_page_list_30638 mlx5_ib_alloc_fast_reg_page_list 2 30638 NULL |
35104 |
+SyS_listxattr_30647 SyS_listxattr 3 30647 NULL |
35105 |
+jffs2_flash_read_30667 jffs2_flash_read 0 30667 NULL |
35106 |
-+ni_ai_fifo_read_30681 ni_ai_fifo_read 3 30681 NULL |
35107 |
+sst_hsw_get_dsp_position_30691 sst_hsw_get_dsp_position 0 30691 NULL |
35108 |
++get_pages_alloc_iovec_30699 get_pages_alloc_iovec 3-0 30699 NULL |
35109 |
+dccp_setsockopt_ccid_30701 dccp_setsockopt_ccid 4 30701 NULL |
35110 |
+lbs_wrbbp_write_30712 lbs_wrbbp_write 3 30712 NULL |
35111 |
+lbs_debugfs_read_30721 lbs_debugfs_read 3 30721 NULL |
35112 |
+snd_nm256_playback_silence_30727 snd_nm256_playback_silence 3-4 30727 NULL |
35113 |
+snapshot_status_30744 snapshot_status 5 30744 NULL |
35114 |
++fuse_direct_IO_30753 fuse_direct_IO 4 30753 NULL |
35115 |
+fuse_conn_limit_write_30777 fuse_conn_limit_write 3 30777 NULL |
35116 |
+__bio_alloc_30787 __bio_alloc 3 30787 NULL |
35117 |
+smk_read_doi_30813 smk_read_doi 3 30813 NULL |
35118 |
@@ -117838,20 +125789,17 @@ index 0000000..386792a |
35119 |
+lbs_host_sleep_read_31013 lbs_host_sleep_read 3 31013 NULL |
35120 |
+ima_eventsig_init_31022 ima_eventsig_init 5 31022 NULL |
35121 |
+template_fmt_size_31033 template_fmt_size 0 31033 NULL |
35122 |
-+do_setup_msi_irqs_31043 do_setup_msi_irqs 2 31043 NULL |
35123 |
+stride_pg_count_31053 stride_pg_count 0-3-2-1-4-5 31053 NULL |
35124 |
+lbs_failcount_read_31063 lbs_failcount_read 3 31063 NULL |
35125 |
+sctp_setsockopt_context_31091 sctp_setsockopt_context 3 31091 NULL |
35126 |
+proc_gid_map_write_31093 proc_gid_map_write 3 31093 NULL |
35127 |
+depth_read_31112 depth_read 3 31112 NULL |
35128 |
+hash_ipportnet6_expire_31118 hash_ipportnet6_expire 4 31118 NULL |
35129 |
-+kimage_normal_alloc_31140 kimage_normal_alloc 3 31140 NULL |
35130 |
+size_inside_page_31141 size_inside_page 0 31141 NULL |
35131 |
+w9966_v4l_read_31148 w9966_v4l_read 3 31148 NULL |
35132 |
+ch_do_scsi_31171 ch_do_scsi 4 31171 NULL |
35133 |
+r592_read_fifo_pio_31198 r592_read_fifo_pio 3 31198 NULL |
35134 |
+mtdchar_readoob_31200 mtdchar_readoob 4 31200 NULL |
35135 |
-+__btrfs_free_reserved_extent_31207 __btrfs_free_reserved_extent 2 31207 NULL |
35136 |
+cpumask_weight_31215 cpumask_weight 0 31215 NULL |
35137 |
+__read_reg_31216 __read_reg 0 31216 NULL |
35138 |
+atm_get_addr_31221 atm_get_addr 3 31221 NULL |
35139 |
@@ -117863,7 +125811,6 @@ index 0000000..386792a |
35140 |
+uvc_simplify_fraction_31303 uvc_simplify_fraction 3 31303 NULL |
35141 |
+sisusbcon_scroll_31315 sisusbcon_scroll 5-2-3 31315 NULL |
35142 |
+command_file_write_31318 command_file_write 3 31318 NULL |
35143 |
-+hwerr_crcbits_31334 hwerr_crcbits 4 31334 NULL |
35144 |
+_regmap_raw_multi_reg_write_31336 _regmap_raw_multi_reg_write 3 31336 NULL |
35145 |
+em28xx_init_usb_xfer_31337 em28xx_init_usb_xfer 4-6 31337 NULL |
35146 |
+outlen_write_31358 outlen_write 3 31358 NULL |
35147 |
@@ -117890,8 +125837,8 @@ index 0000000..386792a |
35148 |
+osst_write_31581 osst_write 3 31581 NULL |
35149 |
+snd_compr_get_avail_31584 snd_compr_get_avail 0 31584 NULL |
35150 |
+iwl_dbgfs_ucode_tx_stats_read_31611 iwl_dbgfs_ucode_tx_stats_read 3 31611 NULL |
35151 |
-+arvo_sysfs_read_31617 arvo_sysfs_read 6 31617 NULL nohasharray |
35152 |
-+memblock_virt_alloc_nopanic_31617 memblock_virt_alloc_nopanic 1 31617 &arvo_sysfs_read_31617 |
35153 |
++memblock_virt_alloc_nopanic_31617 memblock_virt_alloc_nopanic 1 31617 NULL nohasharray |
35154 |
++arvo_sysfs_read_31617 arvo_sysfs_read 6 31617 &memblock_virt_alloc_nopanic_31617 |
35155 |
+usnic_ib_dump_vf_31623 usnic_ib_dump_vf 3 31623 NULL |
35156 |
+videobuf_read_one_31637 videobuf_read_one 3 31637 NULL |
35157 |
+pod_alloc_sysex_buffer_31651 pod_alloc_sysex_buffer 3 31651 NULL |
35158 |
@@ -117901,16 +125848,16 @@ index 0000000..386792a |
35159 |
+forced_ps_read_31685 forced_ps_read 3 31685 NULL |
35160 |
+fst_recover_rx_error_31687 fst_recover_rx_error 3 31687 NULL |
35161 |
+rs_pretty_print_rate_31727 rs_pretty_print_rate 0 31727 NULL |
35162 |
-+lu_buf_check_and_grow_31735 lu_buf_check_and_grow 2 31735 NULL nohasharray |
35163 |
-+utf16s_to_utf8s_31735 utf16s_to_utf8s 0 31735 &lu_buf_check_and_grow_31735 |
35164 |
++utf16s_to_utf8s_31735 utf16s_to_utf8s 0 31735 NULL nohasharray |
35165 |
++lu_buf_check_and_grow_31735 lu_buf_check_and_grow 2 31735 &utf16s_to_utf8s_31735 |
35166 |
+shmem_pwrite_slow_31741 shmem_pwrite_slow 3-2 31741 NULL |
35167 |
+input_abs_get_max_31742 input_abs_get_max 0 31742 NULL nohasharray |
35168 |
+NCR_700_change_queue_depth_31742 NCR_700_change_queue_depth 2 31742 &input_abs_get_max_31742 |
35169 |
+bcm_char_read_31750 bcm_char_read 3 31750 NULL |
35170 |
+snd_seq_device_new_31753 snd_seq_device_new 4 31753 NULL |
35171 |
+SyS_lsetxattr_31766 SyS_lsetxattr 4 31766 NULL |
35172 |
-+osync_buffers_list_31789 osync_buffers_list 0 31789 NULL |
35173 |
+usblp_cache_device_id_string_31790 usblp_cache_device_id_string 0 31790 NULL |
35174 |
++get_count_order_31800 get_count_order 0 31800 NULL |
35175 |
+ecryptfs_send_message_locked_31801 ecryptfs_send_message_locked 2 31801 NULL |
35176 |
+isr_rx_procs_read_31804 isr_rx_procs_read 3 31804 NULL |
35177 |
+data_write_31805 data_write 3 31805 NULL |
35178 |
@@ -117928,8 +125875,7 @@ index 0000000..386792a |
35179 |
+kmem_alloc_31920 kmem_alloc 1 31920 NULL |
35180 |
+era_status_31934 era_status 5 31934 NULL |
35181 |
+SYSC_sethostname_31940 SYSC_sethostname 2 31940 NULL |
35182 |
-+read_mem_31942 read_mem 3 31942 NULL nohasharray |
35183 |
-+iov_iter_copy_from_user_31942 iov_iter_copy_from_user 4-0 31942 &read_mem_31942 |
35184 |
++read_mem_31942 read_mem 3 31942 NULL |
35185 |
+ext4_zero_range_31944 ext4_zero_range 3-2 31944 NULL |
35186 |
+vb2_write_31948 vb2_write 3 31948 NULL |
35187 |
+pvr2_ctrl_get_valname_31951 pvr2_ctrl_get_valname 4 31951 NULL |
35188 |
@@ -117940,10 +125886,9 @@ index 0000000..386792a |
35189 |
+vx_read_status_31982 vx_read_status 0 31982 &iblock_execute_rw_31982 |
35190 |
+find_next_zero_bit_31990 find_next_zero_bit 0 31990 NULL |
35191 |
+lustre_acl_xattr_merge2posix_31992 lustre_acl_xattr_merge2posix 2 31992 NULL |
35192 |
-+sysfs_create_file_31996 sysfs_create_file 0 31996 NULL |
35193 |
+calc_hmac_32010 calc_hmac 3 32010 NULL |
35194 |
-+aead_len_32021 aead_len 0 32021 NULL nohasharray |
35195 |
-+aer_init_32021 aer_init 0 32021 &aead_len_32021 |
35196 |
++aead_len_32021 aead_len 0 32021 NULL |
35197 |
++sci_dma_rx_push_32029 sci_dma_rx_push 2 32029 NULL |
35198 |
+stk_read_32038 stk_read 3 32038 NULL |
35199 |
+SYSC_llistxattr_32061 SYSC_llistxattr 3 32061 NULL |
35200 |
+proc_scsi_devinfo_write_32064 proc_scsi_devinfo_write 3 32064 NULL |
35201 |
@@ -117951,8 +125896,8 @@ index 0000000..386792a |
35202 |
+bio_alloc_32095 bio_alloc 2 32095 NULL |
35203 |
+ath6kl_fwlog_read_32101 ath6kl_fwlog_read 3 32101 NULL |
35204 |
+disk_status_32120 disk_status 4 32120 NULL |
35205 |
-+kobject_add_internal_32133 kobject_add_internal 0 32133 NULL |
35206 |
+venus_link_32165 venus_link 5 32165 NULL |
35207 |
++ocfs2_direct_IO_32168 ocfs2_direct_IO 4 32168 NULL |
35208 |
+do_writepages_32173 do_writepages 0 32173 NULL |
35209 |
+del_ptr_32197 del_ptr 4 32197 NULL |
35210 |
+wusb_ccm_mac_32199 wusb_ccm_mac 7 32199 NULL |
35211 |
@@ -117972,7 +125917,6 @@ index 0000000..386792a |
35212 |
+ll_setxattr_common_32398 ll_setxattr_common 4 32398 NULL |
35213 |
+xfs_iext_add_indirect_multi_32400 xfs_iext_add_indirect_multi 3 32400 NULL |
35214 |
+vmci_qp_alloc_32405 vmci_qp_alloc 5-3 32405 NULL |
35215 |
-+snd_pcm_sync_ptr_32461 snd_pcm_sync_ptr 0 32461 NULL |
35216 |
+cache_status_32462 cache_status 5 32462 NULL |
35217 |
+fill_readbuf_32464 fill_readbuf 3 32464 NULL |
35218 |
+ide_driver_proc_write_32493 ide_driver_proc_write 3 32493 NULL |
35219 |
@@ -117990,9 +125934,9 @@ index 0000000..386792a |
35220 |
+pipeline_tcp_tx_stat_fifo_int_read_32589 pipeline_tcp_tx_stat_fifo_int_read 3 32589 NULL |
35221 |
+read_file_beacon_32595 read_file_beacon 3 32595 NULL |
35222 |
+ieee80211_if_read_dropped_frames_congestion_32603 ieee80211_if_read_dropped_frames_congestion 3 32603 NULL |
35223 |
-+__pci_request_region_32618 __pci_request_region 0 32618 NULL |
35224 |
+irda_recvmsg_dgram_32631 irda_recvmsg_dgram 4 32631 NULL |
35225 |
+cfg80211_roamed_32632 cfg80211_roamed 5-7 32632 NULL |
35226 |
++xpcs_reg_value_read_32644 xpcs_reg_value_read 3 32644 NULL |
35227 |
+kvmalloc_32646 kvmalloc 1 32646 NULL |
35228 |
+ib_sg_dma_len_32649 ib_sg_dma_len 0 32649 NULL |
35229 |
+generic_readlink_32654 generic_readlink 3 32654 NULL |
35230 |
@@ -118000,6 +125944,7 @@ index 0000000..386792a |
35231 |
+compat_SyS_preadv_32679 compat_SyS_preadv 3 32679 NULL |
35232 |
+jfs_readpages_32702 jfs_readpages 4 32702 NULL |
35233 |
+rt2x00debug_read_queue_dump_32712 rt2x00debug_read_queue_dump 3 32712 NULL |
35234 |
++_xfs_buf_get_pages_32715 _xfs_buf_get_pages 2 32715 NULL |
35235 |
+megasas_change_queue_depth_32747 megasas_change_queue_depth 2 32747 NULL |
35236 |
+stats_read_ul_32751 stats_read_ul 3 32751 NULL |
35237 |
+vmci_transport_dgram_dequeue_32775 vmci_transport_dgram_dequeue 4 32775 NULL |
35238 |
@@ -118007,8 +125952,8 @@ index 0000000..386792a |
35239 |
+rproc_name_read_32805 rproc_name_read 3 32805 NULL |
35240 |
+sta_tx_latency_stat_read_32862 sta_tx_latency_stat_read 3 32862 NULL |
35241 |
+new_tape_buffer_32866 new_tape_buffer 2 32866 NULL |
35242 |
-+ath6kl_usb_submit_ctrl_in_32880 ath6kl_usb_submit_ctrl_in 6 32880 NULL nohasharray |
35243 |
-+cifs_writedata_alloc_32880 cifs_writedata_alloc 1 32880 &ath6kl_usb_submit_ctrl_in_32880 |
35244 |
++cifs_writedata_alloc_32880 cifs_writedata_alloc 1 32880 NULL nohasharray |
35245 |
++ath6kl_usb_submit_ctrl_in_32880 ath6kl_usb_submit_ctrl_in 6 32880 &cifs_writedata_alloc_32880 |
35246 |
+vp702x_usb_inout_cmd_32884 vp702x_usb_inout_cmd 4-6 32884 NULL |
35247 |
+tipc_link_iovec_xmit_fast_32913 tipc_link_iovec_xmit_fast 3 32913 NULL nohasharray |
35248 |
+il_dbgfs_tx_stats_read_32913 il_dbgfs_tx_stats_read 3 32913 &tipc_link_iovec_xmit_fast_32913 |
35249 |
@@ -118018,7 +125963,6 @@ index 0000000..386792a |
35250 |
+SyS_syslog_33007 SyS_syslog 3 33007 NULL |
35251 |
+br_multicast_set_hash_max_33012 br_multicast_set_hash_max 2 33012 NULL |
35252 |
+write_file_bt_ant_diversity_33019 write_file_bt_ant_diversity 3 33019 NULL |
35253 |
-+snd_pcm_prepare_33036 snd_pcm_prepare 0 33036 NULL |
35254 |
+mic_virtio_copy_to_user_33048 mic_virtio_copy_to_user 3 33048 NULL |
35255 |
+SYSC_lgetxattr_33049 SYSC_lgetxattr 4 33049 NULL |
35256 |
+pipeline_dec_packet_in_fifo_full_read_33052 pipeline_dec_packet_in_fifo_full_read 3 33052 NULL |
35257 |
@@ -118028,14 +125972,13 @@ index 0000000..386792a |
35258 |
+sel_read_checkreqprot_33068 sel_read_checkreqprot 3 33068 NULL |
35259 |
+alloc_tio_33077 alloc_tio 3 33077 NULL |
35260 |
+acl_permission_check_33083 acl_permission_check 0 33083 NULL |
35261 |
++f2fs_llseek_33098 f2fs_llseek 2 33098 NULL |
35262 |
+fb_sys_write_33130 fb_sys_write 3 33130 NULL |
35263 |
-+notify_change_33143 notify_change 0 33143 NULL |
35264 |
+SyS_poll_33152 SyS_poll 2 33152 NULL |
35265 |
+_pci_add_cap_save_buffer_33153 _pci_add_cap_save_buffer 4 33153 NULL |
35266 |
+debug_debug6_read_33168 debug_debug6_read 3 33168 NULL |
35267 |
+dataflash_read_fact_otp_33204 dataflash_read_fact_otp 3-2 33204 NULL |
35268 |
+pp_read_33210 pp_read 3 33210 NULL |
35269 |
-+xfs_file_aio_write_33234 xfs_file_aio_write 4 33234 NULL |
35270 |
+snd_pcm_plug_client_size_33267 snd_pcm_plug_client_size 0-2 33267 NULL |
35271 |
+cachefiles_cook_key_33274 cachefiles_cook_key 2 33274 NULL |
35272 |
+sync_pt_create_33282 sync_pt_create 2 33282 NULL |
35273 |
@@ -118046,7 +125989,6 @@ index 0000000..386792a |
35274 |
+lov_stripesize_seq_write_33353 lov_stripesize_seq_write 3 33353 NULL |
35275 |
+create_xattr_datum_33356 create_xattr_datum 5 33356 NULL nohasharray |
35276 |
+irq_pkt_threshold_read_33356 irq_pkt_threshold_read 3 33356 &create_xattr_datum_33356 |
35277 |
-+pvscsi_allocate_sg_33357 pvscsi_allocate_sg 0 33357 NULL |
35278 |
+read_file_regidx_33370 read_file_regidx 3 33370 NULL |
35279 |
+ieee80211_if_read_dropped_frames_no_route_33383 ieee80211_if_read_dropped_frames_no_route 3 33383 NULL |
35280 |
+scsi_varlen_cdb_length_33385 scsi_varlen_cdb_length 0 33385 NULL |
35281 |
@@ -118073,30 +126015,27 @@ index 0000000..386792a |
35282 |
+scsi_execute_33596 scsi_execute 5 33596 NULL |
35283 |
+comedi_buf_write_n_allocated_33604 comedi_buf_write_n_allocated 0 33604 NULL |
35284 |
+xt_compat_target_offset_33608 xt_compat_target_offset 0 33608 NULL |
35285 |
-+usb_gstrings_attach_33615 usb_gstrings_attach 3 33615 NULL nohasharray |
35286 |
-+il_dbgfs_qos_read_33615 il_dbgfs_qos_read 3 33615 &usb_gstrings_attach_33615 |
35287 |
++il_dbgfs_qos_read_33615 il_dbgfs_qos_read 3 33615 NULL nohasharray |
35288 |
++usb_gstrings_attach_33615 usb_gstrings_attach 3 33615 &il_dbgfs_qos_read_33615 |
35289 |
+stride_page_count_33641 stride_page_count 2 33641 NULL |
35290 |
+irq_blk_threshold_read_33666 irq_blk_threshold_read 3 33666 NULL |
35291 |
+inw_p_33668 inw_p 0 33668 NULL |
35292 |
+arp_hdr_len_33671 arp_hdr_len 0 33671 NULL |
35293 |
+i2c_hid_alloc_buffers_33673 i2c_hid_alloc_buffers 2 33673 NULL |
35294 |
-+submit_one_bio_33683 submit_one_bio 0 33683 NULL |
35295 |
+nv50_disp_dmac_create__33696 nv50_disp_dmac_create_ 6 33696 NULL |
35296 |
+netlink_sendmsg_33708 netlink_sendmsg 4 33708 NULL |
35297 |
+tipc_link_stats_33716 tipc_link_stats 3 33716 NULL |
35298 |
+pvr2_stream_buffer_count_33719 pvr2_stream_buffer_count 2 33719 NULL |
35299 |
+write_file_spectral_count_33723 write_file_spectral_count 3 33723 NULL |
35300 |
+read_file_node_recv_33729 read_file_node_recv 3 33729 NULL |
35301 |
-+rtw_cbuf_alloc23a_33740 rtw_cbuf_alloc23a 1 33740 NULL |
35302 |
+vifs_state_read_33762 vifs_state_read 3 33762 NULL |
35303 |
+hashtab_create_33769 hashtab_create 3 33769 NULL |
35304 |
-+i8042_create_aux_port_33777 i8042_create_aux_port 0 33777 NULL |
35305 |
++__btrfs_free_reserved_extent_33782 __btrfs_free_reserved_extent 2 33782 NULL |
35306 |
+if_sdio_read_rx_len_33800 if_sdio_read_rx_len 0 33800 NULL |
35307 |
+filter_write_33819 filter_write 3 33819 NULL |
35308 |
+sep_create_msgarea_context_33829 sep_create_msgarea_context 4 33829 NULL |
35309 |
+scrub_setup_recheck_block_33831 scrub_setup_recheck_block 5-4 33831 NULL |
35310 |
+ext4_journal_extend_33835 ext4_journal_extend 2 33835 NULL |
35311 |
-+snd_pcm_action_nonatomic_33844 snd_pcm_action_nonatomic 0 33844 NULL |
35312 |
+oz_cdev_write_33852 oz_cdev_write 3 33852 NULL |
35313 |
+get_user_pages_33908 get_user_pages 0 33908 NULL |
35314 |
+sg_nents_33909 sg_nents 0 33909 NULL |
35315 |
@@ -118105,8 +126044,8 @@ index 0000000..386792a |
35316 |
+sel_read_avc_cache_threshold_33942 sel_read_avc_cache_threshold 3 33942 NULL |
35317 |
+lpfc_idiag_ctlacc_read_33943 lpfc_idiag_ctlacc_read 3 33943 NULL |
35318 |
+read_file_tgt_rx_stats_33944 read_file_tgt_rx_stats 3 33944 NULL |
35319 |
++rs_sta_dbgfs_drv_tx_stats_read_33946 rs_sta_dbgfs_drv_tx_stats_read 3 33946 NULL |
35320 |
+__proc_dump_kernel_33954 __proc_dump_kernel 5 33954 NULL |
35321 |
-+btrfs_delalloc_reserve_metadata_33963 btrfs_delalloc_reserve_metadata 0 33963 NULL |
35322 |
+vga_switcheroo_debugfs_write_33984 vga_switcheroo_debugfs_write 3 33984 NULL |
35323 |
+lbs_lowrssi_write_34025 lbs_lowrssi_write 3 34025 NULL |
35324 |
+ppp_write_34034 ppp_write 3 34034 NULL |
35325 |
@@ -118124,7 +126063,7 @@ index 0000000..386792a |
35326 |
+rsi_debug_zone_write_34206 rsi_debug_zone_write 3 34206 NULL |
35327 |
+ext4_da_write_begin_34215 ext4_da_write_begin 3-4 34215 NULL |
35328 |
+bl_pipe_downcall_34264 bl_pipe_downcall 3 34264 NULL |
35329 |
-+device_private_init_34279 device_private_init 0 34279 NULL |
35330 |
++xgmac_reg_addr_write_34284 xgmac_reg_addr_write 3 34284 NULL |
35331 |
+ext4_get_groups_count_34324 ext4_get_groups_count 0 34324 NULL |
35332 |
+pcpu_need_to_extend_34326 pcpu_need_to_extend 0 34326 NULL nohasharray |
35333 |
+iov_iter_single_seg_count_34326 iov_iter_single_seg_count 0 34326 &pcpu_need_to_extend_34326 |
35334 |
@@ -118133,15 +126072,15 @@ index 0000000..386792a |
35335 |
+rngapi_reset_34366 rngapi_reset 3 34366 NULL |
35336 |
+_iwl_dbgfs_low_latency_write_34378 _iwl_dbgfs_low_latency_write 3 34378 NULL nohasharray |
35337 |
+ea_read_34378 ea_read 0 34378 &_iwl_dbgfs_low_latency_write_34378 |
35338 |
-+fuse_send_read_34379 fuse_send_read 4 34379 NULL |
35339 |
++fuse_send_read_34379 fuse_send_read 4-0 34379 NULL |
35340 |
+av7110_vbi_write_34384 av7110_vbi_write 3 34384 NULL |
35341 |
+usbvision_v4l2_read_34386 usbvision_v4l2_read 3 34386 NULL |
35342 |
+read_rbu_image_type_34387 read_rbu_image_type 6 34387 NULL |
35343 |
-+iwl_calib_set_34400 iwl_calib_set 3 34400 NULL nohasharray |
35344 |
-+ivtv_read_pos_34400 ivtv_read_pos 3 34400 &iwl_calib_set_34400 |
35345 |
++ivtv_read_pos_34400 ivtv_read_pos 3 34400 NULL nohasharray |
35346 |
++iwl_calib_set_34400 iwl_calib_set 3 34400 &ivtv_read_pos_34400 |
35347 |
+wd_exp_mode_write_34407 wd_exp_mode_write 3 34407 NULL |
35348 |
+nl80211_send_disassoc_34424 nl80211_send_disassoc 4 34424 NULL |
35349 |
-+__extent_read_full_page_34437 __extent_read_full_page 0 34437 NULL |
35350 |
++security_socket_create_34439 security_socket_create 0 34439 NULL |
35351 |
+usbtest_alloc_urb_34446 usbtest_alloc_urb 3-5 34446 NULL |
35352 |
+mwifiex_regrdwr_read_34472 mwifiex_regrdwr_read 3 34472 NULL |
35353 |
+skcipher_sndbuf_34476 skcipher_sndbuf 0 34476 NULL |
35354 |
@@ -118156,6 +126095,7 @@ index 0000000..386792a |
35355 |
+dbBackSplit_34561 dbBackSplit 0 34561 NULL |
35356 |
+alloc_ieee80211_rsl_34564 alloc_ieee80211_rsl 1 34564 NULL nohasharray |
35357 |
+self_check_peb_ec_hdr_34564 self_check_peb_ec_hdr 0 34564 &alloc_ieee80211_rsl_34564 |
35358 |
++ext4_ind_direct_IO_34574 ext4_ind_direct_IO 4 34574 NULL |
35359 |
+lov_stripecount_seq_write_34582 lov_stripecount_seq_write 3 34582 NULL |
35360 |
+init_send_hfcd_34586 init_send_hfcd 1 34586 NULL |
35361 |
+inet6_ifla6_size_34591 inet6_ifla6_size 0 34591 NULL |
35362 |
@@ -118168,6 +126108,7 @@ index 0000000..386792a |
35363 |
+cnic_alloc_dma_34641 cnic_alloc_dma 3 34641 NULL |
35364 |
+kvm_set_spte_hva_34671 kvm_set_spte_hva 2 34671 NULL |
35365 |
+sleep_auth_write_34676 sleep_auth_write 3 34676 NULL |
35366 |
++f2fs_direct_IO_34685 f2fs_direct_IO 4 34685 NULL |
35367 |
+isr_fiqs_read_34687 isr_fiqs_read 3 34687 NULL |
35368 |
+batadv_tvlv_realloc_packet_buff_34688 batadv_tvlv_realloc_packet_buff 3-4 34688 NULL |
35369 |
+port_print_34704 port_print 3 34704 NULL |
35370 |
@@ -118176,8 +126117,8 @@ index 0000000..386792a |
35371 |
+reg_w_ixbuf_34736 reg_w_ixbuf 4 34736 NULL |
35372 |
+lsm_alloc_plain_34755 lsm_alloc_plain 1 34755 NULL |
35373 |
+bootmode_store_34762 bootmode_store 4 34762 NULL |
35374 |
-+device_add_34766 device_add 0 34766 NULL |
35375 |
+qib_cdev_init_34778 qib_cdev_init 1 34778 NULL |
35376 |
++ext3_direct_IO_34798 ext3_direct_IO 4 34798 NULL |
35377 |
+SYSC_keyctl_34800 SYSC_keyctl 4 34800 NULL |
35378 |
+can_nocow_extent_34801 can_nocow_extent 2 34801 NULL |
35379 |
+drbd_get_max_capacity_34804 drbd_get_max_capacity 0 34804 NULL |
35380 |
@@ -118194,21 +126135,20 @@ index 0000000..386792a |
35381 |
+si476x_radio_read_rsq_primary_blob_34916 si476x_radio_read_rsq_primary_blob 3 34916 NULL |
35382 |
+__inode_permission_34925 __inode_permission 0 34925 NULL nohasharray |
35383 |
+btrfs_super_chunk_root_34925 btrfs_super_chunk_root 0 34925 &__inode_permission_34925 |
35384 |
-+ceph_aio_write_34930 ceph_aio_write 4 34930 NULL |
35385 |
-+sec_flags2str_34933 sec_flags2str 3 34933 NULL |
35386 |
+snd_info_entry_read_34938 snd_info_entry_read 3 34938 NULL |
35387 |
-+do_add_page_to_bio_34974 do_add_page_to_bio 2-10 34974 NULL |
35388 |
++do_add_page_to_bio_34974 do_add_page_to_bio 10-2 34974 NULL |
35389 |
+schedule_erase_34996 schedule_erase 0 34996 NULL |
35390 |
+rx_rx_hdr_overflow_read_35002 rx_rx_hdr_overflow_read 3 35002 NULL |
35391 |
+l2cap_skbuff_fromiovec_35003 l2cap_skbuff_fromiovec 4-3 35003 NULL |
35392 |
-+rtw_cfg80211_rx_p2p_action_public_35010 rtw_cfg80211_rx_p2p_action_public 3 35010 NULL |
35393 |
+sisusb_copy_memory_35016 sisusb_copy_memory 4 35016 NULL |
35394 |
+coda_psdev_read_35029 coda_psdev_read 3 35029 NULL |
35395 |
++hwdep_read_locked_35037 hwdep_read_locked 3 35037 NULL |
35396 |
+pwr_connection_out_of_sync_read_35061 pwr_connection_out_of_sync_read 3 35061 NULL |
35397 |
+__kfifo_uint_must_check_helper_35097 __kfifo_uint_must_check_helper 0-1 35097 NULL |
35398 |
+capi_write_35104 capi_write 3 35104 NULL nohasharray |
35399 |
+tx_tx_done_template_read_35104 tx_tx_done_template_read 3 35104 &capi_write_35104 |
35400 |
+ide_settings_proc_write_35110 ide_settings_proc_write 3 35110 NULL |
35401 |
++addrs_per_inode_35151 addrs_per_inode 0 35151 NULL |
35402 |
+message_stats_print_35158 message_stats_print 6 35158 NULL |
35403 |
+iscsi_conn_setup_35159 iscsi_conn_setup 2 35159 NULL |
35404 |
+ieee80211_if_read_bssid_35161 ieee80211_if_read_bssid 3 35161 NULL |
35405 |
@@ -118224,7 +126164,7 @@ index 0000000..386792a |
35406 |
+irda_recvmsg_stream_35280 irda_recvmsg_stream 4 35280 NULL |
35407 |
+i2o_block_end_request_35282 i2o_block_end_request 3 35282 NULL |
35408 |
+isr_rx_rdys_read_35283 isr_rx_rdys_read 3 35283 NULL |
35409 |
-+__btrfs_buffered_write_35311 __btrfs_buffered_write 3-0 35311 NULL nohasharray |
35410 |
++__btrfs_buffered_write_35311 __btrfs_buffered_write 3 35311 NULL nohasharray |
35411 |
+brcmf_sdio_forensic_read_35311 brcmf_sdio_forensic_read 3 35311 &__btrfs_buffered_write_35311 |
35412 |
+tracing_read_pipe_35312 tracing_read_pipe 3 35312 NULL |
35413 |
+sta_tx_latency_stat_write_35323 sta_tx_latency_stat_write 3 35323 NULL |
35414 |
@@ -118232,7 +126172,6 @@ index 0000000..386792a |
35415 |
+nouveau_devinit_create__35348 nouveau_devinit_create_ 4 35348 NULL |
35416 |
+ieee80211_rx_mgmt_deauth_35351 ieee80211_rx_mgmt_deauth 3 35351 NULL |
35417 |
+compat_filldir64_35354 compat_filldir64 3 35354 NULL |
35418 |
-+read_kmem_35372 read_kmem 3 35372 NULL |
35419 |
+SyS_getxattr_35408 SyS_getxattr 4 35408 NULL |
35420 |
+rawv6_send_hdrinc_35425 rawv6_send_hdrinc 3 35425 NULL |
35421 |
+iwl_dbgfs_drv_rx_stats_read_35430 iwl_dbgfs_drv_rx_stats_read 3 35430 NULL |
35422 |
@@ -118254,7 +126193,6 @@ index 0000000..386792a |
35423 |
+spk_msg_set_35586 spk_msg_set 3 35586 NULL |
35424 |
+kernel_readv_35617 kernel_readv 3 35617 NULL |
35425 |
+reiserfs_readpages_35629 reiserfs_readpages 4 35629 NULL |
35426 |
-+pci_request_regions_35635 pci_request_regions 0 35635 NULL |
35427 |
+ptlrpcd_steal_rqset_35637 ptlrpcd_steal_rqset 0 35637 NULL |
35428 |
+spi_register_board_info_35651 spi_register_board_info 2 35651 NULL |
35429 |
+rdmaltWithLock_35669 rdmaltWithLock 0 35669 NULL |
35430 |
@@ -118267,7 +126205,6 @@ index 0000000..386792a |
35431 |
+tx_tx_cmplt_read_35854 tx_tx_cmplt_read 3 35854 NULL |
35432 |
+vx_query_hbuffer_size_35859 vx_query_hbuffer_size 0 35859 NULL |
35433 |
+mthca_buf_alloc_35861 mthca_buf_alloc 2 35861 NULL |
35434 |
-+fls64_35862 fls64 0 35862 NULL |
35435 |
+kvm_dirty_bitmap_bytes_35886 kvm_dirty_bitmap_bytes 0 35886 NULL |
35436 |
+ieee80211_if_fmt_dot11MeshRetryTimeout_35890 ieee80211_if_fmt_dot11MeshRetryTimeout 3 35890 NULL |
35437 |
+uwb_rc_cmd_done_35892 uwb_rc_cmd_done 4 35892 NULL |
35438 |
@@ -118276,20 +126213,17 @@ index 0000000..386792a |
35439 |
+sctp_tsnmap_mark_35929 sctp_tsnmap_mark 2 35929 NULL |
35440 |
+rx_defrag_init_called_read_35935 rx_defrag_init_called_read 3 35935 NULL |
35441 |
+put_cmsg_compat_35937 put_cmsg_compat 4 35937 NULL |
35442 |
-+ext_rts51x_sd_execute_write_data_35971 ext_rts51x_sd_execute_write_data 9 35971 NULL |
35443 |
+generic_ocp_read_35974 generic_ocp_read 3 35974 NULL nohasharray |
35444 |
+ceph_buffer_new_35974 ceph_buffer_new 1 35974 &generic_ocp_read_35974 |
35445 |
+acl_alloc_35979 acl_alloc 1 35979 NULL |
35446 |
-+device_add_class_symlinks_35985 device_add_class_symlinks 0 35985 NULL |
35447 |
-+kuc_alloc_35998 kuc_alloc 1 35998 NULL nohasharray |
35448 |
-+write_file_antenna_35998 write_file_antenna 3 35998 &kuc_alloc_35998 |
35449 |
-+scsi_transfer_length_36011 scsi_transfer_length 0 36011 NULL |
35450 |
++write_file_antenna_35998 write_file_antenna 3 35998 NULL nohasharray |
35451 |
++kuc_alloc_35998 kuc_alloc 1 35998 &write_file_antenna_35998 |
35452 |
++lov_mds_md_max_stripe_count_36008 lov_mds_md_max_stripe_count 0-1 36008 NULL |
35453 |
+il3945_ucode_tx_stats_read_36016 il3945_ucode_tx_stats_read 3 36016 NULL |
35454 |
+ubi_eba_write_leb_36029 ubi_eba_write_leb 0 36029 NULL |
35455 |
+__videobuf_alloc_36031 __videobuf_alloc 1 36031 NULL |
35456 |
+account_shadowed_36048 account_shadowed 2 36048 NULL |
35457 |
+gpio_power_read_36059 gpio_power_read 3 36059 NULL |
35458 |
-+snd_pcm_playback_hw_avail_36061 snd_pcm_playback_hw_avail 0 36061 NULL |
35459 |
+write_emulate_36065 write_emulate 2-4 36065 NULL |
35460 |
+stack_max_size_write_36068 stack_max_size_write 3 36068 NULL |
35461 |
+radeon_vm_num_pdes_36070 radeon_vm_num_pdes 0 36070 NULL |
35462 |
@@ -118303,18 +126237,15 @@ index 0000000..386792a |
35463 |
+twl_set_36154 twl_set 2 36154 NULL |
35464 |
+b1_alloc_card_36155 b1_alloc_card 1 36155 NULL |
35465 |
+snd_korg1212_copy_from_36169 snd_korg1212_copy_from 6 36169 NULL |
35466 |
-+SyS_kexec_load_36176 SyS_kexec_load 2 36176 NULL |
35467 |
+ramoops_init_przs_36199 ramoops_init_przs 4 36199 NULL |
35468 |
+SYSC_sched_getaffinity_36208 SYSC_sched_getaffinity 2 36208 NULL |
35469 |
+SYSC_process_vm_readv_36216 SYSC_process_vm_readv 3-5 36216 NULL |
35470 |
+atomic_stats_read_36228 atomic_stats_read 3 36228 NULL |
35471 |
-+rtw_cfg80211_set_wpa_ie_36236 rtw_cfg80211_set_wpa_ie 3 36236 NULL |
35472 |
+viafb_iga1_odev_proc_write_36241 viafb_iga1_odev_proc_write 3 36241 NULL |
35473 |
+SYSC_getxattr_36242 SYSC_getxattr 4 36242 NULL |
35474 |
+vmsplice_to_user_36245 vmsplice_to_user 3 36245 NULL nohasharray |
35475 |
+rproc_recovery_read_36245 rproc_recovery_read 3 36245 &vmsplice_to_user_36245 |
35476 |
-+cfs_hash_buckets_realloc_36276 cfs_hash_buckets_realloc 4 36276 NULL nohasharray |
35477 |
-+usb_buffer_alloc_36276 usb_buffer_alloc 2 36276 &cfs_hash_buckets_realloc_36276 |
35478 |
++cfs_hash_buckets_realloc_36276 cfs_hash_buckets_realloc 4 36276 NULL |
35479 |
+codec_reg_read_file_36280 codec_reg_read_file 3 36280 NULL |
35480 |
+crypto_shash_digestsize_36284 crypto_shash_digestsize 0 36284 NULL |
35481 |
+lpfc_debugfs_dif_err_read_36303 lpfc_debugfs_dif_err_read 3 36303 NULL |
35482 |
@@ -118335,10 +126266,8 @@ index 0000000..386792a |
35483 |
+sctp_tsnmap_init_36446 sctp_tsnmap_init 2 36446 NULL |
35484 |
+alloc_etherdev_mqs_36450 alloc_etherdev_mqs 1 36450 NULL |
35485 |
+SyS_process_vm_writev_36476 SyS_process_vm_writev 3-5 36476 NULL |
35486 |
-+lock_and_cleanup_extent_if_need_36480 lock_and_cleanup_extent_if_need 0 36480 NULL |
35487 |
+b43_nphy_load_samples_36481 b43_nphy_load_samples 3 36481 NULL |
35488 |
-+tx_tx_checksum_result_read_36490 tx_tx_checksum_result_read 3 36490 NULL nohasharray |
35489 |
-+ip6_append_data_36490 ip6_append_data 4 36490 &tx_tx_checksum_result_read_36490 |
35490 |
++tx_tx_checksum_result_read_36490 tx_tx_checksum_result_read 3 36490 NULL |
35491 |
+__hwahc_op_set_ptk_36510 __hwahc_op_set_ptk 5 36510 NULL |
35492 |
+mcam_v4l_read_36513 mcam_v4l_read 3 36513 NULL |
35493 |
+_iwl_dbgfs_fw_nmi_write_36515 _iwl_dbgfs_fw_nmi_write 3 36515 NULL |
35494 |
@@ -118362,13 +126291,13 @@ index 0000000..386792a |
35495 |
+snd_rawmidi_kernel_read1_36740 snd_rawmidi_kernel_read1 4-0 36740 NULL |
35496 |
+cxgbi_device_register_36746 cxgbi_device_register 1-2 36746 NULL |
35497 |
+ps_poll_upsd_timeouts_read_36755 ps_poll_upsd_timeouts_read 3 36755 NULL |
35498 |
++ptp_filter_init_36780 ptp_filter_init 2 36780 NULL |
35499 |
+i40e_init_lan_hmc_36796 i40e_init_lan_hmc 5-4-3-2 36796 NULL |
35500 |
+proc_fault_inject_read_36802 proc_fault_inject_read 3 36802 NULL |
35501 |
+hiddev_ioctl_36816 hiddev_ioctl 2 36816 NULL |
35502 |
+int_hardware_entry_36833 int_hardware_entry 3 36833 NULL |
35503 |
+fc_change_queue_depth_36841 fc_change_queue_depth 2 36841 NULL |
35504 |
+keyctl_describe_key_36853 keyctl_describe_key 3 36853 NULL |
35505 |
-+cm_write_36858 cm_write 3 36858 NULL |
35506 |
+tipc_link_iovec_long_xmit_36871 tipc_link_iovec_long_xmit 3 36871 NULL nohasharray |
35507 |
+tx_tx_data_programmed_read_36871 tx_tx_data_programmed_read 3 36871 &tipc_link_iovec_long_xmit_36871 |
35508 |
+svc_setsockopt_36876 svc_setsockopt 5 36876 NULL |
35509 |
@@ -118376,11 +126305,11 @@ index 0000000..386792a |
35510 |
+__btrfs_map_block_36883 __btrfs_map_block 3 36883 NULL |
35511 |
+ib_ucm_alloc_data_36885 ib_ucm_alloc_data 3 36885 NULL |
35512 |
+selinux_inode_notifysecctx_36896 selinux_inode_notifysecctx 3 36896 NULL |
35513 |
-+OS_kmalloc_36909 OS_kmalloc 1 36909 NULL |
35514 |
+il4965_rs_sta_dbgfs_scale_table_write_36979 il4965_rs_sta_dbgfs_scale_table_write 3 36979 NULL |
35515 |
+drbd_new_dev_size_36998 drbd_new_dev_size 0-3 36998 NULL |
35516 |
+auok190xfb_write_37001 auok190xfb_write 3 37001 NULL |
35517 |
+setxattr_37006 setxattr 4 37006 NULL |
35518 |
++ec_i2c_xfer_37029 ec_i2c_xfer 3 37029 NULL |
35519 |
+command_file_read_37038 command_file_read 3 37038 NULL |
35520 |
+figure_loop_size_37051 figure_loop_size 2-3 37051 NULL |
35521 |
+qp_broker_create_37053 qp_broker_create 6-5 37053 NULL nohasharray |
35522 |
@@ -118390,36 +126319,33 @@ index 0000000..386792a |
35523 |
+parse_command_37079 parse_command 2 37079 NULL |
35524 |
+pipeline_cs_rx_packet_in_read_37089 pipeline_cs_rx_packet_in_read 3 37089 NULL |
35525 |
+tun_get_user_37094 tun_get_user 5 37094 NULL |
35526 |
-+has_wrprotected_page_37123 has_wrprotected_page 2-3 37123 NULL |
35527 |
++has_wrprotected_page_37123 has_wrprotected_page 3-2 37123 NULL |
35528 |
+snd_hda_get_conn_list_37132 snd_hda_get_conn_list 0 37132 NULL |
35529 |
+mtt_free_res_37144 mtt_free_res 5 37144 NULL |
35530 |
+msg_word_37164 msg_word 0 37164 NULL |
35531 |
-+f2fs_direct_IO_37167 f2fs_direct_IO 4 37167 NULL |
35532 |
+vcc_recvmsg_37198 vcc_recvmsg 4 37198 NULL |
35533 |
+forced_ps_write_37209 forced_ps_write 3 37209 NULL |
35534 |
-+crypto_shash_descsize_37212 crypto_shash_descsize 0 37212 NULL nohasharray |
35535 |
-+ext4_ind_direct_IO_37212 ext4_ind_direct_IO 4-0 37212 &crypto_shash_descsize_37212 |
35536 |
++crypto_shash_descsize_37212 crypto_shash_descsize 0 37212 NULL |
35537 |
+regmap_access_read_file_37223 regmap_access_read_file 3 37223 NULL |
35538 |
+__do_replace_37227 __do_replace 5 37227 NULL |
35539 |
+iwl_dbgfs_d3_sram_read_37237 iwl_dbgfs_d3_sram_read 3 37237 NULL |
35540 |
-+rx_filter_dup_filter_read_37238 rx_filter_dup_filter_read 3 37238 NULL |
35541 |
++__btrfs_inc_extent_ref_37238 __btrfs_inc_extent_ref 7 37238 NULL nohasharray |
35542 |
++rx_filter_dup_filter_read_37238 rx_filter_dup_filter_read 3 37238 &__btrfs_inc_extent_ref_37238 |
35543 |
+prot_queue_del_37258 prot_queue_del 0 37258 NULL |
35544 |
+exofs_max_io_pages_37263 exofs_max_io_pages 0-2 37263 NULL |
35545 |
+_iwl_dbgfs_fw_restart_write_37270 _iwl_dbgfs_fw_restart_write 3 37270 NULL |
35546 |
-+request_threaded_irq_37303 request_threaded_irq 0 37303 NULL |
35547 |
+ieee80211_if_read_power_mode_37305 ieee80211_if_read_power_mode 3 37305 NULL |
35548 |
-+ext3_direct_IO_37308 ext3_direct_IO 4 37308 NULL |
35549 |
+jffs2_write_dirent_37311 jffs2_write_dirent 5 37311 NULL |
35550 |
+tipc_send_37315 tipc_send 3 37315 NULL |
35551 |
-+l2cap_create_connless_pdu_37327 l2cap_create_connless_pdu 3 37327 NULL nohasharray |
35552 |
-+bnx2x_vf_fill_fw_str_37327 bnx2x_vf_fill_fw_str 3 37327 &l2cap_create_connless_pdu_37327 |
35553 |
++l2cap_create_connless_pdu_37327 l2cap_create_connless_pdu 3 37327 NULL |
35554 |
+scsi_mode_select_37330 scsi_mode_select 6 37330 NULL |
35555 |
+rxrpc_server_sendmsg_37331 rxrpc_server_sendmsg 4 37331 NULL |
35556 |
+security_inode_getsecurity_37354 security_inode_getsecurity 0 37354 NULL |
35557 |
+hci_sock_sendmsg_37420 hci_sock_sendmsg 4 37420 NULL |
35558 |
-+acpi_os_allocate_zeroed_37422 acpi_os_allocate_zeroed 1 37422 NULL |
35559 |
++acpi_os_allocate_zeroed_37422 acpi_os_allocate_zeroed 1 37422 NULL nohasharray |
35560 |
++find_next_bit_37422 find_next_bit 0 37422 &acpi_os_allocate_zeroed_37422 |
35561 |
+tty_insert_flip_string_fixed_flag_37428 tty_insert_flip_string_fixed_flag 4-0 37428 NULL |
35562 |
-+iwl_print_last_event_logs_37433 iwl_print_last_event_logs 0-7-9 37433 NULL |
35563 |
++iwl_print_last_event_logs_37433 iwl_print_last_event_logs 7-9-0 37433 NULL |
35564 |
+fru_alloc_37442 fru_alloc 1 37442 NULL |
35565 |
+tcp_established_options_37450 tcp_established_options 0 37450 NULL |
35566 |
+brcmf_sdio_dump_console_37455 brcmf_sdio_dump_console 4 37455 NULL |
35567 |
@@ -118433,19 +126359,18 @@ index 0000000..386792a |
35568 |
+hdr_size_37536 hdr_size 0 37536 NULL |
35569 |
+extent_map_end_37550 extent_map_end 0 37550 NULL |
35570 |
+sep_create_dcb_dmatables_context_37551 sep_create_dcb_dmatables_context 6 37551 NULL |
35571 |
-+fat_cont_expand_37552 fat_cont_expand 0 37552 NULL |
35572 |
+xhci_alloc_streams_37586 xhci_alloc_streams 5 37586 NULL |
35573 |
+qla2x00_debounce_register_37597 qla2x00_debounce_register 0 37597 NULL |
35574 |
+kvm_read_guest_page_mmu_37611 kvm_read_guest_page_mmu 6 37611 NULL |
35575 |
+SYSC_mbind_37622 SYSC_mbind 5 37622 NULL |
35576 |
+SyS_mbind_37638 SyS_mbind 5 37638 NULL |
35577 |
-+may_delete_37656 may_delete 0 37656 NULL |
35578 |
+bio_copy_user_iov_37660 bio_copy_user_iov 4 37660 NULL |
35579 |
-+vmw_framebuffer_dmabuf_dirty_37661 vmw_framebuffer_dmabuf_dirty 6 37661 NULL nohasharray |
35580 |
-+rfcomm_sock_sendmsg_37661 rfcomm_sock_sendmsg 4 37661 &vmw_framebuffer_dmabuf_dirty_37661 |
35581 |
++rfcomm_sock_sendmsg_37661 rfcomm_sock_sendmsg 4 37661 NULL nohasharray |
35582 |
++vmw_framebuffer_dmabuf_dirty_37661 vmw_framebuffer_dmabuf_dirty 6 37661 &rfcomm_sock_sendmsg_37661 |
35583 |
+SYSC_get_mempolicy_37664 SYSC_get_mempolicy 3 37664 NULL |
35584 |
+__wa_seg_calculate_isoc_frame_count_37672 __wa_seg_calculate_isoc_frame_count 0 37672 NULL |
35585 |
+ieee80211_if_read_rc_rateidx_mcs_mask_2ghz_37675 ieee80211_if_read_rc_rateidx_mcs_mask_2ghz 3 37675 NULL |
35586 |
++tracing_saved_cmdlines_size_write_37684 tracing_saved_cmdlines_size_write 3 37684 NULL |
35587 |
+regmap_map_read_file_37685 regmap_map_read_file 3 37685 NULL |
35588 |
+nametbl_header_37698 nametbl_header 2-0 37698 NULL |
35589 |
+__le32_to_cpup_37702 __le32_to_cpup 0 37702 NULL |
35590 |
@@ -118461,10 +126386,10 @@ index 0000000..386792a |
35591 |
+android_get_p2p_addr_37832 android_get_p2p_addr 0 37832 NULL |
35592 |
+o2hb_debug_read_37851 o2hb_debug_read 3 37851 NULL |
35593 |
+xfs_dir2_block_to_sf_37868 xfs_dir2_block_to_sf 3 37868 NULL |
35594 |
-+set_registers_37883 set_registers 4 37883 NULL |
35595 |
++btrfs_leaf_data_37869 btrfs_leaf_data 0 37869 NULL |
35596 |
+btrfs_stack_file_extent_disk_bytenr_37888 btrfs_stack_file_extent_disk_bytenr 0 37888 NULL |
35597 |
-+_rtw_malloc_37928 _rtw_malloc 1 37928 NULL nohasharray |
35598 |
-+pkt_alloc_packet_data_37928 pkt_alloc_packet_data 1 37928 &_rtw_malloc_37928 |
35599 |
++pkt_alloc_packet_data_37928 pkt_alloc_packet_data 1 37928 NULL nohasharray |
35600 |
++_rtw_malloc_37928 _rtw_malloc 1 37928 &pkt_alloc_packet_data_37928 |
35601 |
+read_rbu_packet_size_37939 read_rbu_packet_size 6 37939 NULL |
35602 |
+write_file_bool_37957 write_file_bool 3 37957 NULL |
35603 |
+fifo_alloc_37961 fifo_alloc 1 37961 NULL |
35604 |
@@ -118475,12 +126400,10 @@ index 0000000..386792a |
35605 |
+il_dbgfs_chain_noise_read_38044 il_dbgfs_chain_noise_read 3 38044 NULL nohasharray |
35606 |
+klsi_105_prepare_write_buffer_38044 klsi_105_prepare_write_buffer 3 38044 &il_dbgfs_chain_noise_read_38044 |
35607 |
+SyS_llistxattr_38048 SyS_llistxattr 3 38048 NULL |
35608 |
-+sysfs_do_create_link_38051 sysfs_do_create_link 0 38051 NULL |
35609 |
+_xfs_buf_alloc_38058 _xfs_buf_alloc 3 38058 NULL |
35610 |
+nsm_create_handle_38060 nsm_create_handle 4 38060 NULL |
35611 |
+alloc_ltalkdev_38071 alloc_ltalkdev 1 38071 NULL |
35612 |
-+wcn36xx_smd_rsp_process_38081 wcn36xx_smd_rsp_process 3 38081 NULL nohasharray |
35613 |
-+xfs_buf_readahead_map_38081 xfs_buf_readahead_map 3 38081 &wcn36xx_smd_rsp_process_38081 |
35614 |
++xfs_buf_readahead_map_38081 xfs_buf_readahead_map 3 38081 NULL |
35615 |
+uwb_mac_addr_print_38085 uwb_mac_addr_print 2 38085 NULL |
35616 |
+request_key_auth_new_38092 request_key_auth_new 3 38092 NULL |
35617 |
+proc_self_readlink_38094 proc_self_readlink 3 38094 NULL |
35618 |
@@ -118490,8 +126413,8 @@ index 0000000..386792a |
35619 |
+o2hb_read_slots_38105 o2hb_read_slots 2 38105 NULL |
35620 |
+snd_pcm_oss_write_38108 snd_pcm_oss_write 3 38108 NULL |
35621 |
+vmw_kms_present_38130 vmw_kms_present 9 38130 NULL |
35622 |
-+__ntfs_copy_from_user_iovec_inatomic_38153 __ntfs_copy_from_user_iovec_inatomic 4-3-0 38153 NULL |
35623 |
-+btrfs_extent_same_38163 btrfs_extent_same 3-2 38163 NULL |
35624 |
++__ntfs_copy_from_user_iovec_inatomic_38153 __ntfs_copy_from_user_iovec_inatomic 3-4-0 38153 NULL |
35625 |
++btrfs_extent_same_38163 btrfs_extent_same 3-2-5 38163 NULL |
35626 |
+kvm_clear_guest_38164 kvm_clear_guest 3-2 38164 NULL |
35627 |
+cdev_add_38176 cdev_add 2-3 38176 NULL |
35628 |
+rt2x00debug_write_rf_38195 rt2x00debug_write_rf 3 38195 NULL |
35629 |
@@ -118499,11 +126422,10 @@ index 0000000..386792a |
35630 |
+osd_req_list_partition_collections_38223 osd_req_list_partition_collections 5 38223 NULL |
35631 |
+ceph_decode_16_38239 ceph_decode_16 0 38239 NULL |
35632 |
+_ipw_read_reg32_38245 _ipw_read_reg32 0 38245 NULL |
35633 |
-+snd_pcm_playback_rewind_38249 snd_pcm_playback_rewind 0-2 38249 NULL |
35634 |
+mthca_alloc_icm_table_38268 mthca_alloc_icm_table 4-3 38268 NULL nohasharray |
35635 |
+ieee80211_if_read_auto_open_plinks_38268 ieee80211_if_read_auto_open_plinks 3 38268 &mthca_alloc_icm_table_38268 |
35636 |
-+xfs_bmbt_to_bmdr_38275 xfs_bmbt_to_bmdr 3 38275 NULL nohasharray |
35637 |
-+xfs_bmdr_to_bmbt_38275 xfs_bmdr_to_bmbt 5 38275 &xfs_bmbt_to_bmdr_38275 |
35638 |
++xfs_bmdr_to_bmbt_38275 xfs_bmdr_to_bmbt 5 38275 NULL nohasharray |
35639 |
++xfs_bmbt_to_bmdr_38275 xfs_bmbt_to_bmdr 3 38275 &xfs_bmdr_to_bmbt_38275 |
35640 |
+ftdi_process_packet_38281 ftdi_process_packet 4 38281 NULL |
35641 |
+C_SYSC_pselect6_38296 C_SYSC_pselect6 1 38296 NULL |
35642 |
+ucma_query_path_38305 ucma_query_path 3 38305 NULL |
35643 |
@@ -118514,13 +126436,13 @@ index 0000000..386792a |
35644 |
+dn_sendmsg_38390 dn_sendmsg 4 38390 NULL |
35645 |
+ieee80211_if_read_dtim_count_38419 ieee80211_if_read_dtim_count 3 38419 NULL |
35646 |
+pmcraid_copy_sglist_38431 pmcraid_copy_sglist 3 38431 NULL |
35647 |
++iov_iter_npages_iovec_38448 iov_iter_npages_iovec 0-2 38448 NULL |
35648 |
+kvm_write_guest_38454 kvm_write_guest 4-2 38454 NULL |
35649 |
+_iwl_dbgfs_scan_ant_rxchain_write_38479 _iwl_dbgfs_scan_ant_rxchain_write 3 38479 NULL |
35650 |
+blk_end_bidi_request_38482 blk_end_bidi_request 3-4 38482 NULL |
35651 |
+dev_names_read_38509 dev_names_read 3 38509 NULL |
35652 |
+iscsi_create_iface_38510 iscsi_create_iface 5 38510 NULL |
35653 |
+event_rx_mismatch_read_38518 event_rx_mismatch_read 3 38518 NULL |
35654 |
-+set_queue_count_38519 set_queue_count 0 38519 NULL |
35655 |
+ubifs_idx_node_sz_38546 ubifs_idx_node_sz 0-2 38546 NULL |
35656 |
+btrfs_discard_extent_38547 btrfs_discard_extent 2 38547 NULL |
35657 |
+kuc_len_38557 kuc_len 0-1 38557 NULL |
35658 |
@@ -118537,7 +126459,6 @@ index 0000000..386792a |
35659 |
+qp_broker_alloc_38646 qp_broker_alloc 6-5 38646 NULL |
35660 |
+mmc_send_cxd_data_38655 mmc_send_cxd_data 5 38655 NULL |
35661 |
+nouveau_instmem_create__38664 nouveau_instmem_create_ 4 38664 NULL |
35662 |
-+snd_es1371_wait_src_ready_38673 snd_es1371_wait_src_ready 0 38673 NULL |
35663 |
+iscsit_dump_data_payload_38683 iscsit_dump_data_payload 2 38683 NULL |
35664 |
+validate_vid_hdr_38699 validate_vid_hdr 0 38699 NULL |
35665 |
+rbio_add_io_page_38700 rbio_add_io_page 6 38700 NULL |
35666 |
@@ -118545,18 +126466,16 @@ index 0000000..386792a |
35667 |
+iwl_dbgfs_thermal_throttling_read_38779 iwl_dbgfs_thermal_throttling_read 3 38779 NULL |
35668 |
+bcache_device_init_38781 bcache_device_init 3 38781 NULL |
35669 |
+snd_gus_dram_write_38784 snd_gus_dram_write 4 38784 NULL |
35670 |
-+do_pci_enable_device_38802 do_pci_enable_device 0 38802 NULL |
35671 |
+err_decode_38804 err_decode 2 38804 NULL |
35672 |
+ipv6_renew_option_38813 ipv6_renew_option 3 38813 NULL |
35673 |
+direct_entry_38836 direct_entry 3 38836 NULL |
35674 |
+compat_udp_setsockopt_38840 compat_udp_setsockopt 5 38840 NULL |
35675 |
-+read_nic_io_word_38853 read_nic_io_word 0 38853 NULL |
35676 |
+interfaces_38859 interfaces 2 38859 NULL |
35677 |
+dbgfs_state_38894 dbgfs_state 3 38894 NULL |
35678 |
+il_dbgfs_sram_write_38942 il_dbgfs_sram_write 3 38942 NULL |
35679 |
+__ath6kl_wmi_send_mgmt_cmd_38971 __ath6kl_wmi_send_mgmt_cmd 7 38971 NULL |
35680 |
-+usb_maxpacket_38977 usb_maxpacket 0 38977 NULL nohasharray |
35681 |
-+C_SYSC_preadv64_38977 C_SYSC_preadv64 3 38977 &usb_maxpacket_38977 |
35682 |
++C_SYSC_preadv64_38977 C_SYSC_preadv64 3 38977 NULL nohasharray |
35683 |
++usb_maxpacket_38977 usb_maxpacket 0 38977 &C_SYSC_preadv64_38977 |
35684 |
+OSDSetBlock_38986 OSDSetBlock 2-4 38986 NULL |
35685 |
+bio_clone_range_38997 bio_clone_range 2 38997 NULL |
35686 |
+lpfc_idiag_extacc_write_38998 lpfc_idiag_extacc_write 3 38998 NULL |
35687 |
@@ -118565,7 +126484,6 @@ index 0000000..386792a |
35688 |
+force_sc_support_read_39014 force_sc_support_read 3 39014 NULL |
35689 |
+__blkdev_issue_zeroout_39020 __blkdev_issue_zeroout 3 39020 NULL |
35690 |
+_zd_iowrite32v_async_locked_39034 _zd_iowrite32v_async_locked 3 39034 NULL |
35691 |
-+do_write_kmem_39051 do_write_kmem 0-1-3 39051 NULL |
35692 |
+tomoyo_truncate_39105 tomoyo_truncate 0 39105 NULL |
35693 |
+leb_write_lock_39111 leb_write_lock 0 39111 NULL |
35694 |
+__kfifo_to_user_r_39123 __kfifo_to_user_r 5-3 39123 NULL |
35695 |
@@ -118579,7 +126497,6 @@ index 0000000..386792a |
35696 |
+qcam_read_bytes_39205 qcam_read_bytes 0 39205 NULL |
35697 |
+ivtv_v4l2_write_39226 ivtv_v4l2_write 3 39226 NULL |
35698 |
+posix_acl_to_xattr_39237 posix_acl_to_xattr 0 39237 NULL |
35699 |
-+snd_pcm_capture_forward_39248 snd_pcm_capture_forward 0-2 39248 NULL |
35700 |
+r128_compat_ioctl_39250 r128_compat_ioctl 2 39250 NULL nohasharray |
35701 |
+pwr_cont_miss_bcns_spread_read_39250 pwr_cont_miss_bcns_spread_read 3 39250 &r128_compat_ioctl_39250 |
35702 |
+i915_error_state_read_39254 i915_error_state_read 3 39254 NULL |
35703 |
@@ -118612,7 +126529,6 @@ index 0000000..386792a |
35704 |
+batadv_tt_tvlv_generate_39615 batadv_tt_tvlv_generate 4 39615 NULL |
35705 |
+nfs_idmap_get_key_39616 nfs_idmap_get_key 2 39616 NULL |
35706 |
+sdio_readb_39618 sdio_readb 0 39618 NULL |
35707 |
-+prepare_uptodate_page_39622 prepare_uptodate_page 0 39622 NULL |
35708 |
+set_dev_class_39645 set_dev_class 4 39645 NULL |
35709 |
+snd_rme32_capture_copy_39653 snd_rme32_capture_copy 5 39653 NULL |
35710 |
+tcp_try_rmem_schedule_39657 tcp_try_rmem_schedule 3 39657 NULL |
35711 |
@@ -118620,7 +126536,6 @@ index 0000000..386792a |
35712 |
+v4l_stk_read_39672 v4l_stk_read 3 39672 NULL |
35713 |
+hsc_msg_len_get_39673 hsc_msg_len_get 0 39673 NULL |
35714 |
+do_surface_dirty_sou_39678 do_surface_dirty_sou 7 39678 NULL |
35715 |
-+sd_completed_bytes_39705 sd_completed_bytes 0 39705 NULL |
35716 |
+ftrace_pid_write_39710 ftrace_pid_write 3 39710 NULL |
35717 |
+adt7316_spi_multi_read_39765 adt7316_spi_multi_read 3 39765 NULL |
35718 |
+security_inode_listsecurity_39812 security_inode_listsecurity 0 39812 NULL |
35719 |
@@ -118630,10 +126545,9 @@ index 0000000..386792a |
35720 |
+read_file_modal_eeprom_39909 read_file_modal_eeprom 3 39909 NULL |
35721 |
+gen_pool_add_virt_39913 gen_pool_add_virt 4 39913 NULL |
35722 |
+dw210x_op_rw_39915 dw210x_op_rw 6 39915 NULL |
35723 |
-+__mnt_want_write_file_39917 __mnt_want_write_file 0 39917 NULL |
35724 |
+aes_encrypt_interrupt_read_39919 aes_encrypt_interrupt_read 3 39919 NULL |
35725 |
-+exofs_read_kern_39921 exofs_read_kern 6 39921 NULL nohasharray |
35726 |
-+oom_score_adj_read_39921 oom_score_adj_read 3 39921 &exofs_read_kern_39921 |
35727 |
++oom_score_adj_read_39921 oom_score_adj_read 3 39921 NULL nohasharray |
35728 |
++exofs_read_kern_39921 exofs_read_kern 6 39921 &oom_score_adj_read_39921 |
35729 |
+__spi_async_39932 __spi_async 0 39932 NULL |
35730 |
+__get_order_39935 __get_order 0 39935 NULL |
35731 |
+error_error_frame_read_39947 error_error_frame_read 3 39947 NULL |
35732 |
@@ -118644,7 +126558,6 @@ index 0000000..386792a |
35733 |
+broadsheetfb_write_39976 broadsheetfb_write 3 39976 NULL |
35734 |
+mthca_array_init_39987 mthca_array_init 2 39987 NULL |
35735 |
+fw_device_op_read_39990 fw_device_op_read 3 39990 NULL |
35736 |
-+server_name2svname_39998 server_name2svname 4 39998 NULL |
35737 |
+xen_hvm_config_40018 xen_hvm_config 2 40018 NULL |
35738 |
+ivtvfb_write_40023 ivtvfb_write 3 40023 NULL |
35739 |
+disc_pwup_write_40027 disc_pwup_write 3 40027 NULL |
35740 |
@@ -118653,7 +126566,6 @@ index 0000000..386792a |
35741 |
+l2cap_create_iframe_pdu_40055 l2cap_create_iframe_pdu 3 40055 NULL nohasharray |
35742 |
+add_tty_40055 add_tty 1 40055 &l2cap_create_iframe_pdu_40055 |
35743 |
+atomic_xchg_40070 atomic_xchg 0 40070 NULL |
35744 |
-+snd_pcm_sw_params_user_40095 snd_pcm_sw_params_user 0 40095 NULL |
35745 |
+sctp_setsockopt_delayed_ack_40129 sctp_setsockopt_delayed_ack 3 40129 NULL |
35746 |
+dwc2_max_desc_num_40132 dwc2_max_desc_num 0 40132 NULL |
35747 |
+rx_rx_frame_checksum_read_40140 rx_rx_frame_checksum_read 3 40140 NULL |
35748 |
@@ -118696,7 +126608,6 @@ index 0000000..386792a |
35749 |
+ima_write_policy_40548 ima_write_policy 3 40548 NULL |
35750 |
+esp_alloc_tmp_40558 esp_alloc_tmp 3-2 40558 NULL |
35751 |
+get_priv_descr_and_size_40612 get_priv_descr_and_size 0 40612 NULL |
35752 |
-+i2c_register_adapter_40660 i2c_register_adapter 0 40660 NULL |
35753 |
+twl4030_kpwrite_u8_40665 twl4030_kpwrite_u8 3 40665 NULL |
35754 |
+__cfg80211_roamed_40668 __cfg80211_roamed 4-6 40668 NULL |
35755 |
+pipeline_rx_complete_stat_fifo_int_read_40671 pipeline_rx_complete_stat_fifo_int_read 3 40671 NULL |
35756 |
@@ -118704,10 +126615,8 @@ index 0000000..386792a |
35757 |
+idr_get_empty_slot_40674 idr_get_empty_slot 0 40674 NULL |
35758 |
+alloc_rbio_40676 alloc_rbio 4 40676 NULL |
35759 |
+videobuf_dma_init_user_locked_40678 videobuf_dma_init_user_locked 4-3 40678 NULL |
35760 |
-+pci_enable_resources_40680 pci_enable_resources 0 40680 NULL |
35761 |
+nfc_hci_set_param_40697 nfc_hci_set_param 5 40697 NULL |
35762 |
+__seq_open_private_40715 __seq_open_private 3 40715 NULL |
35763 |
-+set_extent_bit_40719 set_extent_bit 0 40719 NULL |
35764 |
+of_pdt_build_one_prop_40735 of_pdt_build_one_prop 5 40735 NULL |
35765 |
+fuse_readpages_40737 fuse_readpages 4 40737 NULL |
35766 |
+xfs_iext_remove_direct_40744 xfs_iext_remove_direct 3 40744 NULL |
35767 |
@@ -118736,6 +126645,7 @@ index 0000000..386792a |
35768 |
+il_dbgfs_fh_reg_read_40993 il_dbgfs_fh_reg_read 3 40993 NULL |
35769 |
+iwl_dbgfs_scan_ant_rxchain_read_40999 iwl_dbgfs_scan_ant_rxchain_read 3 40999 NULL |
35770 |
+mac80211_format_buffer_41010 mac80211_format_buffer 2 41010 NULL |
35771 |
++get_pages_alloc_bvec_41012 get_pages_alloc_bvec 0-3 41012 NULL |
35772 |
+mtd_block_isbad_41015 mtd_block_isbad 0 41015 NULL |
35773 |
+__proc_dobitmasks_41029 __proc_dobitmasks 5 41029 NULL |
35774 |
+_req_append_segment_41031 _req_append_segment 2 41031 NULL |
35775 |
@@ -118755,8 +126665,6 @@ index 0000000..386792a |
35776 |
+v4l2_ctrl_new_int_menu_41151 v4l2_ctrl_new_int_menu 4 41151 NULL |
35777 |
+tx_frag_mpdu_alloc_failed_read_41167 tx_frag_mpdu_alloc_failed_read 3 41167 NULL |
35778 |
+dvb_ca_write_41171 dvb_ca_write 3 41171 NULL |
35779 |
-+netif_get_num_default_rss_queues_41187 netif_get_num_default_rss_queues 0 41187 NULL |
35780 |
-+request_irq_41192 request_irq 0 41192 NULL |
35781 |
+dfs_file_write_41196 dfs_file_write 3 41196 NULL |
35782 |
+nfs_page_array_len_41219 nfs_page_array_len 0-2-1 41219 NULL |
35783 |
+cfg80211_process_disassoc_41231 cfg80211_process_disassoc 3 41231 NULL |
35784 |
@@ -118780,7 +126688,6 @@ index 0000000..386792a |
35785 |
+pcpu_build_alloc_info_41443 pcpu_build_alloc_info 1-2-3 41443 NULL |
35786 |
+se_io_cb_41461 se_io_cb 3 41461 NULL |
35787 |
+layout_leb_in_gaps_41470 layout_leb_in_gaps 0 41470 NULL |
35788 |
-+snd_pcm_status_41472 snd_pcm_status 0 41472 NULL |
35789 |
+rt2x00debug_write_rfcsr_41473 rt2x00debug_write_rfcsr 3 41473 NULL |
35790 |
+bl_alloc_init_bio_41478 bl_alloc_init_bio 1 41478 NULL |
35791 |
+kvm_unmap_hva_range_41484 kvm_unmap_hva_range 3-2 41484 NULL |
35792 |
@@ -118791,11 +126698,11 @@ index 0000000..386792a |
35793 |
+dm_get_reserved_rq_based_ios_41529 dm_get_reserved_rq_based_ios 0 41529 NULL |
35794 |
+tx_tx_frame_checksum_read_41553 tx_tx_frame_checksum_read 3 41553 NULL |
35795 |
+ath6kl_endpoint_stats_read_41554 ath6kl_endpoint_stats_read 3 41554 NULL |
35796 |
-+nr_status_frames_41559 nr_status_frames 0-1 41559 NULL nohasharray |
35797 |
-+si476x_radio_fops_read_41559 si476x_radio_fops_read 3 41559 &nr_status_frames_41559 |
35798 |
++si476x_radio_fops_read_41559 si476x_radio_fops_read 3 41559 NULL nohasharray |
35799 |
++nr_status_frames_41559 nr_status_frames 0-1 41559 &si476x_radio_fops_read_41559 |
35800 |
+rng_dev_read_41581 rng_dev_read 3 41581 NULL |
35801 |
++nfsd_readv_41585 nfsd_readv 4 41585 NULL |
35802 |
+batadv_tvlv_container_ogm_append_41588 batadv_tvlv_container_ogm_append 4 41588 NULL |
35803 |
-+vga_io_r_41609 vga_io_r 0 41609 NULL |
35804 |
+tcp_hdrlen_41610 tcp_hdrlen 0 41610 NULL |
35805 |
+usb_endpoint_maxp_41613 usb_endpoint_maxp 0 41613 NULL nohasharray |
35806 |
+lbs_bcnmiss_write_41613 lbs_bcnmiss_write 3 41613 &usb_endpoint_maxp_41613 |
35807 |
@@ -118805,20 +126712,19 @@ index 0000000..386792a |
35808 |
+rx_rx_pre_complt_read_41653 rx_rx_pre_complt_read 3 41653 NULL |
35809 |
+get_std_timing_41654 get_std_timing 0 41654 NULL |
35810 |
+ieee80211_if_fmt_bssid_41677 ieee80211_if_fmt_bssid 3 41677 NULL |
35811 |
-+fill_pcm_stream_name_41685 fill_pcm_stream_name 2 41685 NULL |
35812 |
+lov_unpackmd_41701 lov_unpackmd 4 41701 NULL |
35813 |
+fillonedir_41746 fillonedir 3 41746 NULL |
35814 |
+iwl_dbgfs_bt_notif_read_41794 iwl_dbgfs_bt_notif_read 3 41794 NULL |
35815 |
+hsi_alloc_controller_41802 hsi_alloc_controller 1 41802 NULL |
35816 |
+rtw_android_get_macaddr_41812 rtw_android_get_macaddr 0 41812 NULL |
35817 |
+sco_send_frame_41815 sco_send_frame 3 41815 NULL |
35818 |
++copy_page_to_iter_bvec_41830 copy_page_to_iter_bvec 0-3 41830 NULL |
35819 |
+ixgbe_dbg_netdev_ops_read_41839 ixgbe_dbg_netdev_ops_read 3 41839 NULL |
35820 |
+do_ip_setsockopt_41852 do_ip_setsockopt 5 41852 NULL |
35821 |
+keyctl_instantiate_key_41855 keyctl_instantiate_key 3 41855 NULL |
35822 |
+pci_map_single_41869 pci_map_single 0 41869 NULL |
35823 |
-+v_APCI3120_InterruptDmaMoveBlock16bit_41914 v_APCI3120_InterruptDmaMoveBlock16bit 4 41914 NULL |
35824 |
+get_fdb_entries_41916 get_fdb_entries 3 41916 NULL |
35825 |
-+ext4_da_write_inline_data_begin_41935 ext4_da_write_inline_data_begin 3-4 41935 NULL |
35826 |
++ext4_da_write_inline_data_begin_41935 ext4_da_write_inline_data_begin 4-3 41935 NULL |
35827 |
+sci_rxfill_41945 sci_rxfill 0 41945 NULL |
35828 |
+read_gssp_41947 read_gssp 3 41947 NULL |
35829 |
+ocfs2_xattr_bucket_get_name_value_41949 ocfs2_xattr_bucket_get_name_value 0 41949 NULL |
35830 |
@@ -118847,7 +126753,8 @@ index 0000000..386792a |
35831 |
+oprofilefs_str_to_user_42182 oprofilefs_str_to_user 3 42182 NULL |
35832 |
+write_file_beacon_42185 write_file_beacon 3 42185 NULL |
35833 |
+get_znodes_to_commit_42201 get_znodes_to_commit 0 42201 NULL |
35834 |
-+pla_ocp_read_42235 pla_ocp_read 3 42235 NULL |
35835 |
++pla_ocp_read_42235 pla_ocp_read 3 42235 NULL nohasharray |
35836 |
++blockdev_direct_IO_42235 blockdev_direct_IO 5 42235 &pla_ocp_read_42235 |
35837 |
+rx_defrag_need_decrypt_read_42253 rx_defrag_need_decrypt_read 3 42253 NULL |
35838 |
+find_last_bit_42260 find_last_bit 0 42260 NULL |
35839 |
+__pcpu_size_to_slot_42271 __pcpu_size_to_slot 0 42271 NULL |
35840 |
@@ -118859,7 +126766,7 @@ index 0000000..386792a |
35841 |
+ulong_read_file_42304 ulong_read_file 3 42304 &sctp_setsockopt_del_key_42304 |
35842 |
+xfs_vm_readpages_42308 xfs_vm_readpages 4 42308 NULL |
35843 |
+hysdn_conf_read_42324 hysdn_conf_read 3 42324 NULL |
35844 |
-+tcp_sync_mss_42330 tcp_sync_mss 2-0 42330 NULL |
35845 |
++tcp_sync_mss_42330 tcp_sync_mss 0-2 42330 NULL |
35846 |
+ide_raw_taskfile_42355 ide_raw_taskfile 4 42355 NULL |
35847 |
+drbd_md_last_sector_42378 drbd_md_last_sector 0 42378 NULL |
35848 |
+il_dbgfs_disable_ht40_read_42386 il_dbgfs_disable_ht40_read 3 42386 NULL |
35849 |
@@ -118894,12 +126801,10 @@ index 0000000..386792a |
35850 |
+dvb_demux_ioctl_42733 dvb_demux_ioctl 2 42733 NULL |
35851 |
+set_aoe_iflist_42737 set_aoe_iflist 2 42737 NULL |
35852 |
+ax25_setsockopt_42740 ax25_setsockopt 5 42740 NULL |
35853 |
-+dpm_sysfs_add_42756 dpm_sysfs_add 0 42756 NULL |
35854 |
+x25_recvmsg_42777 x25_recvmsg 4 42777 NULL |
35855 |
+snd_midi_event_decode_42780 snd_midi_event_decode 0 42780 NULL |
35856 |
+cryptd_hash_setkey_42781 cryptd_hash_setkey 3 42781 NULL nohasharray |
35857 |
+isku_sysfs_read_info_42781 isku_sysfs_read_info 6 42781 &cryptd_hash_setkey_42781 |
35858 |
-+elfcorehdr_read_notes_42786 elfcorehdr_read_notes 2 42786 NULL |
35859 |
+koneplus_sysfs_read_42792 koneplus_sysfs_read 6 42792 NULL |
35860 |
+ntfs_attr_extend_allocation_42796 ntfs_attr_extend_allocation 0 42796 NULL |
35861 |
+fw_device_op_compat_ioctl_42804 fw_device_op_compat_ioctl 2 42804 NULL |
35862 |
@@ -118914,8 +126819,6 @@ index 0000000..386792a |
35863 |
+sta_last_rx_rate_read_42909 sta_last_rx_rate_read 3 42909 NULL |
35864 |
+sctp_getsockopt_maxburst_42941 sctp_getsockopt_maxburst 2 42941 NULL |
35865 |
+vx_reset_chk_42946 vx_reset_chk 0 42946 NULL |
35866 |
-+blkdev_direct_IO_42962 blkdev_direct_IO 4 42962 NULL |
35867 |
-+ntb_setup_snb_msix_42971 ntb_setup_snb_msix 2-0 42971 NULL |
35868 |
+compat_udpv6_setsockopt_42981 compat_udpv6_setsockopt 5 42981 NULL |
35869 |
+nfs_idmap_get_desc_42990 nfs_idmap_get_desc 4-2 42990 NULL nohasharray |
35870 |
+rtw_os_xmit_resource_alloc_42990 rtw_os_xmit_resource_alloc 3 42990 &nfs_idmap_get_desc_42990 |
35871 |
@@ -118924,10 +126827,8 @@ index 0000000..386792a |
35872 |
+nouveau_gpuobj_create__43072 nouveau_gpuobj_create_ 9 43072 NULL |
35873 |
+nfs_map_group_to_gid_43082 nfs_map_group_to_gid 3 43082 NULL |
35874 |
+_xfer_secondary_pool_43089 _xfer_secondary_pool 2 43089 NULL |
35875 |
-+sysfs_create_file_ns_43103 sysfs_create_file_ns 0 43103 NULL |
35876 |
+ieee80211_if_fmt_drop_unencrypted_43107 ieee80211_if_fmt_drop_unencrypted 3 43107 NULL |
35877 |
+calculate_node_totalpages_43118 calculate_node_totalpages 2-3 43118 NULL |
35878 |
-+e1000_request_msix_43134 e1000_request_msix 0 43134 NULL |
35879 |
+read_file_dfs_43145 read_file_dfs 3 43145 NULL |
35880 |
+cfs_cpt_table_alloc_43159 cfs_cpt_table_alloc 1 43159 NULL |
35881 |
+usb_string_sub_43164 usb_string_sub 0 43164 NULL |
35882 |
@@ -118938,19 +126839,18 @@ index 0000000..386792a |
35883 |
+iso_callback_43208 iso_callback 3 43208 NULL |
35884 |
+ath10k_p2p_calc_noa_ie_len_43209 ath10k_p2p_calc_noa_ie_len 0 43209 NULL |
35885 |
+f2fs_acl_from_disk_43210 f2fs_acl_from_disk 2 43210 NULL |
35886 |
-+atomic_long_add_return_43217 atomic_long_add_return 1-0 43217 NULL |
35887 |
++atomic_long_add_return_43217 atomic_long_add_return 1 43217 NULL |
35888 |
++gfs2_direct_IO_43220 gfs2_direct_IO 4 43220 NULL |
35889 |
+batadv_tt_tvlv_unicast_handler_v1_43239 batadv_tt_tvlv_unicast_handler_v1 5 43239 NULL |
35890 |
+vmemmap_alloc_block_43245 vmemmap_alloc_block 1 43245 NULL |
35891 |
+ide_end_rq_43269 ide_end_rq 4 43269 NULL |
35892 |
-+nilfs_direct_IO_43271 nilfs_direct_IO 4 43271 NULL |
35893 |
+evtchn_write_43278 evtchn_write 3 43278 NULL |
35894 |
+filemap_write_and_wait_range_43279 filemap_write_and_wait_range 0 43279 NULL |
35895 |
+mpage_alloc_43299 mpage_alloc 3 43299 NULL |
35896 |
-+mmu_set_spte_43327 mmu_set_spte 6-7 43327 NULL |
35897 |
++mmu_set_spte_43327 mmu_set_spte 7-6 43327 NULL |
35898 |
+__ext4_get_inode_loc_43332 __ext4_get_inode_loc 0 43332 NULL |
35899 |
+xenfb_write_43412 xenfb_write 3 43412 NULL |
35900 |
-+__alloc_bootmem_low_43423 __alloc_bootmem_low 1 43423 NULL nohasharray |
35901 |
-+msi_capability_init_43423 msi_capability_init 0 43423 &__alloc_bootmem_low_43423 |
35902 |
++__alloc_bootmem_low_43423 __alloc_bootmem_low 1 43423 NULL |
35903 |
+usb_alloc_urb_43436 usb_alloc_urb 1 43436 NULL |
35904 |
+ath6kl_wmi_roam_tbl_event_rx_43440 ath6kl_wmi_roam_tbl_event_rx 3 43440 NULL |
35905 |
+usb_string_43443 usb_string 0 43443 NULL nohasharray |
35906 |
@@ -118960,15 +126860,14 @@ index 0000000..386792a |
35907 |
+nvme_trans_device_id_page_43466 nvme_trans_device_id_page 4 43466 NULL |
35908 |
+tx_tx_data_prepared_read_43497 tx_tx_data_prepared_read 3 43497 NULL |
35909 |
+ieee80211_if_fmt_dot11MeshHWMPnetDiameterTraversalTime_43505 ieee80211_if_fmt_dot11MeshHWMPnetDiameterTraversalTime 3 43505 NULL |
35910 |
++ll_direct_IO_26_43530 ll_direct_IO_26 4 43530 NULL |
35911 |
+dvb_ca_en50221_io_write_43533 dvb_ca_en50221_io_write 3 43533 NULL |
35912 |
+read_events_43534 read_events 3 43534 NULL |
35913 |
+cachefiles_daemon_write_43535 cachefiles_daemon_write 3 43535 NULL |
35914 |
+tx_frag_failed_read_43540 tx_frag_failed_read 3 43540 NULL |
35915 |
+rpc_malloc_43573 rpc_malloc 2 43573 NULL |
35916 |
-+handle_frequent_errors_43599 handle_frequent_errors 4 43599 NULL |
35917 |
+lpfc_idiag_drbacc_read_reg_43606 lpfc_idiag_drbacc_read_reg 0-3 43606 NULL |
35918 |
+proc_read_43614 proc_read 3 43614 NULL |
35919 |
-+disable_dma_on_even_43618 disable_dma_on_even 0 43618 NULL |
35920 |
+alloc_thread_groups_43625 alloc_thread_groups 2 43625 NULL |
35921 |
+random_write_43656 random_write 3 43656 NULL |
35922 |
+bio_integrity_tag_43658 bio_integrity_tag 3 43658 NULL |
35923 |
@@ -118976,15 +126875,15 @@ index 0000000..386792a |
35924 |
+write_file_tx99_power_43670 write_file_tx99_power 3 43670 NULL |
35925 |
+dmam_declare_coherent_memory_43679 dmam_declare_coherent_memory 4 43679 NULL |
35926 |
+max77693_bulk_write_43698 max77693_bulk_write 2-3 43698 NULL |
35927 |
++nvkm_connector_create__43711 nvkm_connector_create_ 6 43711 NULL |
35928 |
+drbd_md_first_sector_43729 drbd_md_first_sector 0 43729 NULL |
35929 |
+snd_rme32_playback_copy_43732 snd_rme32_playback_copy 5 43732 NULL |
35930 |
+fuse_conn_congestion_threshold_write_43736 fuse_conn_congestion_threshold_write 3 43736 NULL |
35931 |
+gigaset_initcs_43753 gigaset_initcs 2 43753 NULL |
35932 |
+sctp_setsockopt_active_key_43755 sctp_setsockopt_active_key 3 43755 NULL |
35933 |
-+generic_file_direct_write_43770 generic_file_direct_write 0 43770 NULL |
35934 |
+ocfs2_xattr_get_value_outside_43787 ocfs2_xattr_get_value_outside 0 43787 NULL nohasharray |
35935 |
+byte_pos_43787 byte_pos 0 43787 &ocfs2_xattr_get_value_outside_43787 |
35936 |
-+btrfs_copy_from_user_43806 btrfs_copy_from_user 3-1-0 43806 NULL |
35937 |
++btrfs_copy_from_user_43806 btrfs_copy_from_user 0-3-1 43806 NULL |
35938 |
+ieee80211_if_fmt_element_ttl_43825 ieee80211_if_fmt_element_ttl 3 43825 NULL |
35939 |
+ieee80211_alloc_hw_43829 ieee80211_alloc_hw 1 43829 NULL |
35940 |
+read_flush_43851 read_flush 3 43851 NULL |
35941 |
@@ -118995,10 +126894,9 @@ index 0000000..386792a |
35942 |
+__get_required_blob_size_43980 __get_required_blob_size 0-3-2 43980 NULL |
35943 |
+nla_reserve_43984 nla_reserve 3 43984 NULL |
35944 |
+__clkdev_alloc_43990 __clkdev_alloc 1 43990 NULL |
35945 |
-+scsi_command_size_43992 scsi_command_size 0 43992 NULL nohasharray |
35946 |
-+bcm_recvmsg_43992 bcm_recvmsg 4 43992 &scsi_command_size_43992 nohasharray |
35947 |
-+kvm_read_guest_virt_43992 kvm_read_guest_virt 4-2 43992 &bcm_recvmsg_43992 |
35948 |
-+ulist_add_43994 ulist_add 0 43994 NULL |
35949 |
++kvm_read_guest_virt_43992 kvm_read_guest_virt 4-2 43992 NULL nohasharray |
35950 |
++bcm_recvmsg_43992 bcm_recvmsg 4 43992 &kvm_read_guest_virt_43992 nohasharray |
35951 |
++scsi_command_size_43992 scsi_command_size 0 43992 &bcm_recvmsg_43992 |
35952 |
+emit_flags_44006 emit_flags 4-3 44006 NULL |
35953 |
+write_flush_procfs_44011 write_flush_procfs 3 44011 NULL |
35954 |
+fru_strlen_44046 fru_strlen 0 44046 NULL |
35955 |
@@ -119007,19 +126905,20 @@ index 0000000..386792a |
35956 |
+pci_msix_vec_count_44093 pci_msix_vec_count 0 44093 NULL |
35957 |
+xlog_recover_add_to_cont_trans_44102 xlog_recover_add_to_cont_trans 4 44102 NULL |
35958 |
+skb_frag_dma_map_44112 skb_frag_dma_map 0 44112 NULL |
35959 |
-+tracing_set_trace_read_44122 tracing_set_trace_read 3 44122 NULL nohasharray |
35960 |
-+file_remove_suid_44122 file_remove_suid 0 44122 &tracing_set_trace_read_44122 |
35961 |
++nouveau_clock_create__44116 nouveau_clock_create_ 6 44116 NULL |
35962 |
++tracing_set_trace_read_44122 tracing_set_trace_read 3 44122 NULL |
35963 |
+SyS_process_vm_writev_44129 SyS_process_vm_writev 3-5 44129 NULL |
35964 |
++tracing_resize_saved_cmdlines_44140 tracing_resize_saved_cmdlines 1 44140 NULL |
35965 |
+ttm_get_pages_44142 ttm_get_pages 2 44142 NULL |
35966 |
+scsi_get_resid_44147 scsi_get_resid 0 44147 NULL |
35967 |
+ubifs_find_dirty_idx_leb_44169 ubifs_find_dirty_idx_leb 0 44169 NULL |
35968 |
+ocfs2_xattr_bucket_find_44174 ocfs2_xattr_bucket_find 0 44174 NULL |
35969 |
+SYSC_set_mempolicy_44176 SYSC_set_mempolicy 3 44176 NULL |
35970 |
+handle_eviocgbit_44193 handle_eviocgbit 3 44193 NULL |
35971 |
++btrfs_item_offset_nr_44220 btrfs_item_offset_nr 0 44220 NULL |
35972 |
+srp_alloc_iu_44227 srp_alloc_iu 2 44227 NULL |
35973 |
+scsi_track_queue_full_44239 scsi_track_queue_full 2 44239 NULL |
35974 |
+sigma_action_write_regmap_44240 sigma_action_write_regmap 3 44240 NULL |
35975 |
-+device_create_file_44285 device_create_file 0 44285 NULL |
35976 |
+ath6kl_keepalive_read_44303 ath6kl_keepalive_read 3 44303 NULL |
35977 |
+bitmap_scnprintf_44318 bitmap_scnprintf 0-2 44318 NULL |
35978 |
+dispatch_proc_write_44320 dispatch_proc_write 3 44320 NULL |
35979 |
@@ -119030,7 +126929,6 @@ index 0000000..386792a |
35980 |
+rts_threshold_read_44384 rts_threshold_read 3 44384 NULL |
35981 |
+mtip_hw_read_flags_44396 mtip_hw_read_flags 3 44396 NULL |
35982 |
+aoedev_flush_44398 aoedev_flush 2 44398 NULL |
35983 |
-+strlcpy_44400 strlcpy 3 44400 NULL |
35984 |
+drm_buffer_alloc_44405 drm_buffer_alloc 2 44405 NULL |
35985 |
+osst_do_scsi_44410 osst_do_scsi 4 44410 NULL |
35986 |
+ieee80211_if_read_rc_rateidx_mcs_mask_5ghz_44423 ieee80211_if_read_rc_rateidx_mcs_mask_5ghz 3 44423 NULL |
35987 |
@@ -119046,22 +126944,20 @@ index 0000000..386792a |
35988 |
+SyS_io_getevents_44519 SyS_io_getevents 3 44519 NULL |
35989 |
+ieee80211_rx_mgmt_assoc_resp_44525 ieee80211_rx_mgmt_assoc_resp 3 44525 NULL |
35990 |
+comm_write_44537 comm_write 3 44537 NULL |
35991 |
-+snd_pcm_drop_44542 snd_pcm_drop 0 44542 NULL |
35992 |
+dgrp_config_proc_write_44571 dgrp_config_proc_write 3 44571 NULL |
35993 |
-+btrfs_set_extent_delalloc_44587 btrfs_set_extent_delalloc 0 44587 NULL |
35994 |
+nouveau_perfmon_create__44602 nouveau_perfmon_create_ 4 44602 NULL |
35995 |
++xpcs_mmd_write_44633 xpcs_mmd_write 3 44633 NULL |
35996 |
+alloc_ctrl_packet_44667 alloc_ctrl_packet 1 44667 NULL |
35997 |
+mpi_resize_44674 mpi_resize 2 44674 NULL |
35998 |
-+sysfs_create_link_44685 sysfs_create_link 0 44685 NULL |
35999 |
+ts_read_44687 ts_read 3 44687 NULL |
36000 |
+lov_emerg_alloc_44698 lov_emerg_alloc 1 44698 NULL |
36001 |
+C_SYSC_select_44701 C_SYSC_select 1 44701 NULL |
36002 |
+__generic_block_fiemap_44713 __generic_block_fiemap 4 44713 NULL nohasharray |
36003 |
+xfer_to_user_44713 xfer_to_user 3 44713 &__generic_block_fiemap_44713 |
36004 |
++nft_hash_tbl_size_44724 nft_hash_tbl_size 0 44724 NULL |
36005 |
+_zd_iowrite32v_locked_44725 _zd_iowrite32v_locked 3 44725 NULL |
36006 |
+clusterip_proc_write_44729 clusterip_proc_write 3 44729 NULL |
36007 |
+fib_count_nexthops_44730 fib_count_nexthops 0 44730 NULL |
36008 |
-+efx_wanted_parallelism_44732 efx_wanted_parallelism 0 44732 NULL |
36009 |
+key_tx_rx_count_read_44742 key_tx_rx_count_read 3 44742 NULL |
36010 |
+bch_bio_max_sectors_44755 bch_bio_max_sectors 0 44755 NULL |
36011 |
+tnode_new_44757 tnode_new 3 44757 NULL nohasharray |
36012 |
@@ -119088,7 +126984,6 @@ index 0000000..386792a |
36013 |
+bytepos_delta_45017 bytepos_delta 0 45017 NULL |
36014 |
+ptrace_writedata_45021 ptrace_writedata 4 45021 NULL |
36015 |
+dm_kvzalloc_45025 dm_kvzalloc 1 45025 NULL |
36016 |
-+sysfs_do_create_link_sd_45057 sysfs_do_create_link_sd 0 45057 NULL |
36017 |
+sel_write_user_45060 sel_write_user 3 45060 NULL |
36018 |
+snd_mixart_BA0_read_45069 snd_mixart_BA0_read 5 45069 NULL |
36019 |
+snd_card_new_45104 snd_card_new 5 45104 NULL |
36020 |
@@ -119121,9 +127016,9 @@ index 0000000..386792a |
36021 |
+ieee80211_if_fmt_dot11MeshHWMProotInterval_45421 ieee80211_if_fmt_dot11MeshHWMProotInterval 3 45421 NULL |
36022 |
+ll_iocontrol_register_45430 ll_iocontrol_register 2 45430 NULL |
36023 |
+tty_buffer_alloc_45437 tty_buffer_alloc 2 45437 NULL |
36024 |
++blkdev_direct_IO_45440 blkdev_direct_IO 4 45440 NULL |
36025 |
+rds_ib_set_wr_signal_state_45463 rds_ib_set_wr_signal_state 0 45463 NULL |
36026 |
+tracing_read_dyn_info_45468 tracing_read_dyn_info 3 45468 NULL |
36027 |
-+snd_pcm_hwsync_45479 snd_pcm_hwsync 0 45479 NULL |
36028 |
+rds_message_copy_from_user_45510 rds_message_copy_from_user 3 45510 NULL |
36029 |
+copy_macs_45534 copy_macs 4 45534 NULL |
36030 |
+nla_attr_size_45545 nla_attr_size 0-1 45545 NULL |
36031 |
@@ -119154,7 +127049,6 @@ index 0000000..386792a |
36032 |
+ll_max_readahead_mb_seq_write_45815 ll_max_readahead_mb_seq_write 3 45815 NULL |
36033 |
+memcg_update_cache_size_45828 memcg_update_cache_size 2 45828 NULL |
36034 |
+ipv6_recv_rxpmtu_45830 ipv6_recv_rxpmtu 3 45830 NULL |
36035 |
-+insert_state_45848 insert_state 0 45848 NULL |
36036 |
+x509_process_extension_45854 x509_process_extension 5 45854 NULL |
36037 |
+efx_tx_queue_insert_45859 efx_tx_queue_insert 2 45859 NULL |
36038 |
+isdn_write_45863 isdn_write 3 45863 NULL |
36039 |
@@ -119165,17 +127059,15 @@ index 0000000..386792a |
36040 |
+dbgfs_frame_45917 dbgfs_frame 3 45917 NULL |
36041 |
+btree_keys_cachelines_45928 btree_keys_cachelines 0 45928 NULL |
36042 |
+alloc_mr_45935 alloc_mr 1 45935 NULL |
36043 |
-+copy_to_45969 copy_to 3 45969 NULL |
36044 |
+rb_simple_read_45972 rb_simple_read 3 45972 NULL |
36045 |
+ioat2_dca_count_dca_slots_45984 ioat2_dca_count_dca_slots 0 45984 NULL |
36046 |
-+kobject_init_and_add_46003 kobject_init_and_add 0 46003 NULL |
36047 |
+sierra_setup_urb_46029 sierra_setup_urb 5 46029 NULL |
36048 |
-+get_free_entries_46030 get_free_entries 1 46030 NULL nohasharray |
36049 |
-+fnic_reset_stats_read_46030 fnic_reset_stats_read 3 46030 &get_free_entries_46030 |
36050 |
++fnic_reset_stats_read_46030 fnic_reset_stats_read 3 46030 NULL nohasharray |
36051 |
++get_free_entries_46030 get_free_entries 1 46030 &fnic_reset_stats_read_46030 |
36052 |
+__access_remote_vm_46031 __access_remote_vm 0 46031 NULL |
36053 |
+snd_emu10k1x_ptr_read_46049 snd_emu10k1x_ptr_read 0 46049 NULL |
36054 |
-+__ocfs2_move_extent_46060 __ocfs2_move_extent 3-4 46060 NULL nohasharray |
36055 |
-+dma_tx_errors_read_46060 dma_tx_errors_read 3 46060 &__ocfs2_move_extent_46060 |
36056 |
++dma_tx_errors_read_46060 dma_tx_errors_read 3 46060 NULL nohasharray |
36057 |
++__ocfs2_move_extent_46060 __ocfs2_move_extent 3-4 46060 &dma_tx_errors_read_46060 |
36058 |
+sel_commit_bools_write_46077 sel_commit_bools_write 3 46077 NULL |
36059 |
+memcg_update_array_size_46111 memcg_update_array_size 1 46111 NULL nohasharray |
36060 |
+il3945_ucode_general_stats_read_46111 il3945_ucode_general_stats_read 3 46111 &memcg_update_array_size_46111 |
36061 |
@@ -119200,7 +127092,6 @@ index 0000000..386792a |
36062 |
+__hwahc_dev_set_key_46328 __hwahc_dev_set_key 5 46328 &compat_SyS_readv_46328 |
36063 |
+iwl_dbgfs_chain_noise_read_46355 iwl_dbgfs_chain_noise_read 3 46355 NULL |
36064 |
+smk_write_direct_46363 smk_write_direct 3 46363 NULL |
36065 |
-+fuse_file_aio_write_46399 fuse_file_aio_write 4 46399 NULL |
36066 |
+crypto_ablkcipher_reqsize_46411 crypto_ablkcipher_reqsize 0 46411 NULL |
36067 |
+ttm_page_pool_get_pages_46431 ttm_page_pool_get_pages 0-5 46431 NULL |
36068 |
+cfs_power2_roundup_46433 cfs_power2_roundup 0-1 46433 NULL |
36069 |
@@ -119210,17 +127101,17 @@ index 0000000..386792a |
36070 |
+fill_in_write_vector_46498 fill_in_write_vector 0 46498 NULL |
36071 |
+pin_code_reply_46510 pin_code_reply 4 46510 NULL |
36072 |
+mthca_alloc_cq_buf_46512 mthca_alloc_cq_buf 3 46512 NULL |
36073 |
-+nouveau_drm_ioctl_46514 nouveau_drm_ioctl 2 46514 NULL nohasharray |
36074 |
-+kmsg_read_46514 kmsg_read 3 46514 &nouveau_drm_ioctl_46514 |
36075 |
++kmsg_read_46514 kmsg_read 3 46514 NULL nohasharray |
36076 |
++nouveau_drm_ioctl_46514 nouveau_drm_ioctl 2 46514 &kmsg_read_46514 |
36077 |
+nl80211_send_rx_assoc_46538 nl80211_send_rx_assoc 4 46538 NULL |
36078 |
++__btrfs_free_extent_46573 __btrfs_free_extent 7 46573 NULL |
36079 |
+dn_current_mss_46574 dn_current_mss 0 46574 NULL |
36080 |
+serverworks_create_gatt_pages_46582 serverworks_create_gatt_pages 1 46582 NULL |
36081 |
+snd_compr_write_data_46592 snd_compr_write_data 3 46592 NULL |
36082 |
-+il3945_stats_flag_46606 il3945_stats_flag 0-3 46606 NULL |
36083 |
++il3945_stats_flag_46606 il3945_stats_flag 3-0 46606 NULL |
36084 |
+vscnprintf_46617 vscnprintf 0-2 46617 NULL |
36085 |
+__kfifo_out_r_46623 __kfifo_out_r 0-3 46623 NULL |
36086 |
+request_key_async_with_auxdata_46624 request_key_async_with_auxdata 4 46624 NULL |
36087 |
-+pci_enable_device_46642 pci_enable_device 0 46642 NULL |
36088 |
+vfs_getxattr_alloc_46649 vfs_getxattr_alloc 0 46649 NULL |
36089 |
+e1000_tx_map_46672 e1000_tx_map 4 46672 NULL |
36090 |
+l2cap_create_le_flowctl_pdu_46682 l2cap_create_le_flowctl_pdu 3 46682 NULL |
36091 |
@@ -119232,7 +127123,6 @@ index 0000000..386792a |
36092 |
+read_file_tx99_46741 read_file_tx99 3 46741 NULL |
36093 |
+hest_ghes_dev_register_46766 hest_ghes_dev_register 1 46766 NULL |
36094 |
+int_hw_irq_en_46776 int_hw_irq_en 3 46776 NULL |
36095 |
-+_xfs_buf_get_pages_46811 _xfs_buf_get_pages 2 46811 NULL |
36096 |
+xfs_iroot_realloc_46826 xfs_iroot_realloc 2 46826 NULL |
36097 |
+shmem_pwrite_fast_46842 shmem_pwrite_fast 3 46842 NULL |
36098 |
+spi_async_46857 spi_async 0 46857 NULL |
36099 |
@@ -119243,21 +127133,19 @@ index 0000000..386792a |
36100 |
+ixgbe_dbg_reg_ops_write_46895 ixgbe_dbg_reg_ops_write 3 46895 NULL |
36101 |
+sk_mem_pages_46896 sk_mem_pages 0-1 46896 NULL |
36102 |
+ieee80211_if_fmt_power_mode_46906 ieee80211_if_fmt_power_mode 3 46906 NULL |
36103 |
-+wlcore_alloc_hw_46917 wlcore_alloc_hw 3-1 46917 NULL |
36104 |
++wlcore_alloc_hw_46917 wlcore_alloc_hw 1-3 46917 NULL |
36105 |
+fb_write_46924 fb_write 3 46924 NULL |
36106 |
+__sctp_setsockopt_connectx_46949 __sctp_setsockopt_connectx 3 46949 NULL |
36107 |
+qla4xxx_post_aen_work_46953 qla4xxx_post_aen_work 3 46953 NULL |
36108 |
+SYSC_poll_46965 SYSC_poll 2 46965 NULL |
36109 |
+crypto_tfm_alg_alignmask_46971 crypto_tfm_alg_alignmask 0 46971 NULL |
36110 |
+mgmt_pending_add_46976 mgmt_pending_add 5 46976 NULL |
36111 |
-+strlcat_46985 strlcat 3 46985 NULL |
36112 |
+bitmap_file_clear_bit_46990 bitmap_file_clear_bit 2 46990 NULL |
36113 |
+sel_write_bool_46996 sel_write_bool 3 46996 NULL |
36114 |
+blk_rq_map_kern_47004 blk_rq_map_kern 4 47004 NULL |
36115 |
+cx231xx_init_bulk_47024 cx231xx_init_bulk 3-2-4 47024 NULL |
36116 |
+fs_path_len_47060 fs_path_len 0 47060 NULL |
36117 |
+event_trigger_regex_write_47067 event_trigger_regex_write 3 47067 NULL |
36118 |
-+ext4_xattr_list_entries_47070 ext4_xattr_list_entries 0 47070 NULL |
36119 |
+pipeline_dec_packet_in_read_47076 pipeline_dec_packet_in_read 3 47076 NULL |
36120 |
+scsi_deactivate_tcq_47086 scsi_deactivate_tcq 2 47086 NULL |
36121 |
+iwl_dump_nic_event_log_47089 iwl_dump_nic_event_log 0 47089 NULL |
36122 |
@@ -119268,13 +127156,11 @@ index 0000000..386792a |
36123 |
+ses_recv_diag_47143 ses_recv_diag 4 47143 &acpi_ut_initialize_buffer_47143 |
36124 |
+mxms_headerlen_47161 mxms_headerlen 0 47161 NULL |
36125 |
+rs_sta_dbgfs_rate_scale_data_read_47165 rs_sta_dbgfs_rate_scale_data_read 3 47165 NULL |
36126 |
-+rts51x_ms_rw_47171 rts51x_ms_rw 3-4 47171 NULL |
36127 |
+options_write_47243 options_write 3 47243 NULL |
36128 |
+portcntrs_1_read_47253 portcntrs_1_read 3 47253 NULL |
36129 |
+ablkcipher_next_slow_47274 ablkcipher_next_slow 4-3 47274 NULL |
36130 |
+gfs2_readpages_47285 gfs2_readpages 4 47285 NULL |
36131 |
+vsnprintf_47291 vsnprintf 0 47291 NULL |
36132 |
-+SYSC_semop_47292 SYSC_semop 3 47292 NULL |
36133 |
+tx_internal_desc_overflow_read_47300 tx_internal_desc_overflow_read 3 47300 NULL |
36134 |
+nouveau_fb_create__47316 nouveau_fb_create_ 4 47316 NULL |
36135 |
+ieee80211_if_read_dot11MeshHoldingTimeout_47356 ieee80211_if_read_dot11MeshHoldingTimeout 3 47356 NULL |
36136 |
@@ -119282,8 +127168,8 @@ index 0000000..386792a |
36137 |
+kvm_arch_create_memslot_47364 kvm_arch_create_memslot 3 47364 NULL nohasharray |
36138 |
+__output_copy_user_47364 __output_copy_user 3 47364 &kvm_arch_create_memslot_47364 |
36139 |
+__bio_map_kern_47379 __bio_map_kern 3 47379 NULL |
36140 |
-+nv_rd32_47390 nv_rd32 0 47390 NULL nohasharray |
36141 |
-+trace_options_core_read_47390 trace_options_core_read 3 47390 &nv_rd32_47390 |
36142 |
++trace_options_core_read_47390 trace_options_core_read 3 47390 NULL nohasharray |
36143 |
++nv_rd32_47390 nv_rd32 0 47390 &trace_options_core_read_47390 |
36144 |
+nametbl_list_47391 nametbl_list 2 47391 NULL |
36145 |
+dgrp_net_write_47392 dgrp_net_write 3 47392 NULL |
36146 |
+pfkey_sendmsg_47394 pfkey_sendmsg 4 47394 NULL |
36147 |
@@ -119292,20 +127178,19 @@ index 0000000..386792a |
36148 |
+crypto_ablkcipher_alignmask_47410 crypto_ablkcipher_alignmask 0 47410 NULL |
36149 |
+lbs_wrrf_write_47418 lbs_wrrf_write 3 47418 NULL |
36150 |
+C_SYSC_set_mempolicy_47466 C_SYSC_set_mempolicy 3 47466 NULL |
36151 |
++lprocfs_fid_write_common_47471 lprocfs_fid_write_common 2 47471 NULL |
36152 |
+nvme_trans_send_fw_cmd_47479 nvme_trans_send_fw_cmd 4 47479 NULL |
36153 |
+newpart_47485 newpart 6-4 47485 NULL |
36154 |
+mcp23s17_read_regs_47491 mcp23s17_read_regs 4 47491 NULL |
36155 |
+core_sys_select_47494 core_sys_select 1 47494 NULL |
36156 |
+as3722_block_write_47503 as3722_block_write 2-3 47503 NULL |
36157 |
-+alloc_arraycache_47505 alloc_arraycache 2 47505 NULL |
36158 |
+unlink_simple_47506 unlink_simple 3 47506 NULL |
36159 |
+pstore_decompress_47510 pstore_decompress 0 47510 NULL |
36160 |
++ec_i2c_count_response_47518 ec_i2c_count_response 0 47518 NULL |
36161 |
+__proc_lnet_portal_rotor_47529 __proc_lnet_portal_rotor 5 47529 NULL |
36162 |
-+snd_pcm_resume_47530 snd_pcm_resume 0 47530 NULL |
36163 |
+process_vm_rw_47533 process_vm_rw 3-5 47533 NULL nohasharray |
36164 |
+vscnprintf_47533 vscnprintf 0-2 47533 &process_vm_rw_47533 |
36165 |
+ieee80211_if_fmt_min_discovery_timeout_47539 ieee80211_if_fmt_min_discovery_timeout 3 47539 NULL |
36166 |
-+rtw_cfg80211_set_assoc_resp_wpsp2pie_47558 rtw_cfg80211_set_assoc_resp_wpsp2pie 3 47558 NULL |
36167 |
+read_ldt_47570 read_ldt 2 47570 NULL |
36168 |
+isku_sysfs_read_last_set_47572 isku_sysfs_read_last_set 6 47572 NULL |
36169 |
+btrfs_stack_header_bytenr_47589 btrfs_stack_header_bytenr 0 47589 NULL |
36170 |
@@ -119315,9 +127200,7 @@ index 0000000..386792a |
36171 |
+twl4030_clear_set_47624 twl4030_clear_set 4 47624 NULL |
36172 |
+ccp_sha_setkey_47633 ccp_sha_setkey 3 47633 NULL |
36173 |
+get_size_47644 get_size 1-2 47644 NULL |
36174 |
-+snd_pcm_info_47699 snd_pcm_info 0 47699 NULL |
36175 |
-+packet_recvmsg_47700 packet_recvmsg 4 47700 NULL nohasharray |
36176 |
-+ipath_format_hwmsg_47700 ipath_format_hwmsg 2 47700 &packet_recvmsg_47700 |
36177 |
++packet_recvmsg_47700 packet_recvmsg 4 47700 NULL |
36178 |
+save_microcode_47717 save_microcode 3 47717 NULL |
36179 |
+bits_to_user_47733 bits_to_user 2-3 47733 NULL |
36180 |
+carl9170_debugfs_read_47738 carl9170_debugfs_read 3 47738 NULL |
36181 |
@@ -119338,8 +127221,6 @@ index 0000000..386792a |
36182 |
+cfs_percpt_alloc_47918 cfs_percpt_alloc 2 47918 NULL |
36183 |
+comedi_write_47926 comedi_write 3 47926 NULL |
36184 |
+nvme_trans_get_blk_desc_len_47946 nvme_trans_get_blk_desc_len 0-2 47946 NULL |
36185 |
-+arch_setup_msi_irq_47959 arch_setup_msi_irq 0 47959 NULL |
36186 |
-+gether_get_ifname_47972 gether_get_ifname 3 47972 NULL |
36187 |
+mempool_resize_47983 mempool_resize 2 47983 NULL nohasharray |
36188 |
+iwl_dbgfs_ucode_tracing_read_47983 iwl_dbgfs_ucode_tracing_read 3 47983 &mempool_resize_47983 |
36189 |
+dbg_port_buf_47990 dbg_port_buf 2 47990 NULL |
36190 |
@@ -119368,7 +127249,6 @@ index 0000000..386792a |
36191 |
+cfg80211_process_deauth_48200 cfg80211_process_deauth 3 48200 NULL |
36192 |
+ext4_index_trans_blocks_48205 ext4_index_trans_blocks 0-2 48205 NULL |
36193 |
+snd_seq_dump_var_event_48209 snd_seq_dump_var_event 0 48209 NULL |
36194 |
-+ll_direct_IO_26_48216 ll_direct_IO_26 4 48216 NULL |
36195 |
+uv_blade_nr_possible_cpus_48226 uv_blade_nr_possible_cpus 0 48226 NULL |
36196 |
+nilfs_readpages_48229 nilfs_readpages 4 48229 NULL |
36197 |
+read_file_recv_48232 read_file_recv 3 48232 NULL |
36198 |
@@ -119387,13 +127267,12 @@ index 0000000..386792a |
36199 |
+lbs_debugfs_write_48413 lbs_debugfs_write 3 48413 NULL |
36200 |
+uhid_event_from_user_48417 uhid_event_from_user 2 48417 NULL |
36201 |
+div64_u64_rem_48418 div64_u64_rem 0-1-2 48418 NULL |
36202 |
-+snd_power_wait_48422 snd_power_wait 0 48422 NULL |
36203 |
+pwr_tx_without_ps_read_48423 pwr_tx_without_ps_read 3 48423 NULL |
36204 |
+print_filtered_48442 print_filtered 2-0 48442 NULL |
36205 |
+tun_recvmsg_48463 tun_recvmsg 4 48463 NULL |
36206 |
++copy_page_from_iter_iovec_48466 copy_page_from_iter_iovec 3-0 48466 NULL |
36207 |
+compat_SyS_preadv64_48469 compat_SyS_preadv64 3 48469 NULL |
36208 |
+_iwl_dbgfs_bt_tx_prio_write_48473 _iwl_dbgfs_bt_tx_prio_write 3 48473 NULL |
36209 |
-+ipath_format_hwerrors_48487 ipath_format_hwerrors 5 48487 NULL |
36210 |
+r8712_usbctrl_vendorreq_48489 r8712_usbctrl_vendorreq 6 48489 NULL |
36211 |
+send_control_msg_48498 send_control_msg 6 48498 NULL |
36212 |
+count_masked_bytes_48507 count_masked_bytes 0-1 48507 NULL |
36213 |
@@ -119404,12 +127283,12 @@ index 0000000..386792a |
36214 |
+raid10_size_48571 raid10_size 0-2-3 48571 NULL |
36215 |
+llog_data_len_48607 llog_data_len 1 48607 NULL |
36216 |
+do_ip_vs_set_ctl_48641 do_ip_vs_set_ctl 4 48641 NULL |
36217 |
++kernel_sock_ioctl_48644 kernel_sock_ioctl 0 48644 NULL |
36218 |
+ll_rw_extents_stats_pp_seq_write_48651 ll_rw_extents_stats_pp_seq_write 3 48651 NULL |
36219 |
+mtd_read_48655 mtd_read 0 48655 NULL |
36220 |
+aes_encrypt_packets_read_48666 aes_encrypt_packets_read 3 48666 NULL |
36221 |
+sm501_create_subdev_48668 sm501_create_subdev 3-4 48668 NULL |
36222 |
+ubi_eba_unmap_leb_48671 ubi_eba_unmap_leb 0 48671 NULL |
36223 |
-+security_inode_setattr_48689 security_inode_setattr 0 48689 NULL |
36224 |
+hysdn_log_write_48694 hysdn_log_write 3 48694 NULL |
36225 |
+altera_drscan_48698 altera_drscan 2 48698 NULL |
36226 |
+kvm_set_irq_routing_48704 kvm_set_irq_routing 3 48704 NULL |
36227 |
@@ -119418,13 +127297,11 @@ index 0000000..386792a |
36228 |
+ath6kl_usb_bmi_read_48745 ath6kl_usb_bmi_read 3 48745 NULL |
36229 |
+ath6kl_regwrite_read_48747 ath6kl_regwrite_read 3 48747 NULL |
36230 |
+l2cap_segment_sdu_48772 l2cap_segment_sdu 4 48772 NULL |
36231 |
-+gfs2_direct_IO_48774 gfs2_direct_IO 4 48774 NULL |
36232 |
+il3945_sta_dbgfs_stats_table_read_48802 il3945_sta_dbgfs_stats_table_read 3 48802 NULL |
36233 |
+twa_change_queue_depth_48808 twa_change_queue_depth 2 48808 NULL |
36234 |
+atomic_counters_read_48827 atomic_counters_read 3 48827 NULL |
36235 |
+azx_get_position_48841 azx_get_position 0 48841 NULL |
36236 |
+vc_do_resize_48842 vc_do_resize 3-4 48842 NULL |
36237 |
-+comedi_buf_write_alloc_48846 comedi_buf_write_alloc 0-2 48846 NULL |
36238 |
+suspend_dtim_interval_write_48854 suspend_dtim_interval_write 3 48854 NULL |
36239 |
+C_SYSC_pwritev64_48864 C_SYSC_pwritev64 3 48864 NULL nohasharray |
36240 |
+viafb_dvp1_proc_write_48864 viafb_dvp1_proc_write 3 48864 &C_SYSC_pwritev64_48864 |
36241 |
@@ -119433,12 +127310,12 @@ index 0000000..386792a |
36242 |
+joydev_handle_JSIOCSAXMAP_48898 joydev_handle_JSIOCSAXMAP 3 48898 NULL |
36243 |
+xdi_copy_to_user_48900 xdi_copy_to_user 4 48900 NULL |
36244 |
+msg_hdr_sz_48908 msg_hdr_sz 0 48908 NULL |
36245 |
-+snd_pcm_update_hw_ptr_48925 snd_pcm_update_hw_ptr 0 48925 NULL |
36246 |
+sep_crypto_dma_48937 sep_crypto_dma 0 48937 NULL |
36247 |
+si5351_write_parameters_48940 si5351_write_parameters 2 48940 NULL |
36248 |
+event_heart_beat_read_48961 event_heart_beat_read 3 48961 NULL |
36249 |
+nand_ecc_test_run_48966 nand_ecc_test_run 1 48966 NULL |
36250 |
+vmci_handle_arr_create_48971 vmci_handle_arr_create 1 48971 NULL |
36251 |
++nilfs_direct_IO_48981 nilfs_direct_IO 4 48981 NULL |
36252 |
+rds_rm_size_48996 rds_rm_size 0-2 48996 NULL |
36253 |
+sel_write_enforce_48998 sel_write_enforce 3 48998 NULL |
36254 |
+null_alloc_rs_49019 null_alloc_rs 2 49019 NULL |
36255 |
@@ -119449,16 +127326,14 @@ index 0000000..386792a |
36256 |
+compat_do_readv_writev_49102 compat_do_readv_writev 4 49102 NULL |
36257 |
+xfrm_replay_state_esn_len_49119 xfrm_replay_state_esn_len 0 49119 NULL |
36258 |
+ll_max_cached_mb_seq_write_49122 ll_max_cached_mb_seq_write 3 49122 NULL |
36259 |
-+pt_read_49136 pt_read 3 49136 NULL nohasharray |
36260 |
-+netxen_setup_msi_interrupts_49136 netxen_setup_msi_interrupts 2 49136 &pt_read_49136 |
36261 |
++pt_read_49136 pt_read 3 49136 NULL |
36262 |
+ipwireless_tty_received_49154 ipwireless_tty_received 3 49154 NULL |
36263 |
+f2fs_acl_count_49155 f2fs_acl_count 0-1 49155 NULL |
36264 |
+ipw_queue_tx_init_49161 ipw_queue_tx_init 3 49161 NULL |
36265 |
+__jfs_setxattr_49175 __jfs_setxattr 5 49175 NULL |
36266 |
+ath6kl_bgscan_int_write_49178 ath6kl_bgscan_int_write 3 49178 NULL |
36267 |
+dvb_dvr_ioctl_49182 dvb_dvr_ioctl 2 49182 NULL |
36268 |
-+print_queue_49191 print_queue 0-4 49191 NULL |
36269 |
-+root_nfs_cat_49192 root_nfs_cat 3 49192 NULL |
36270 |
++print_queue_49191 print_queue 4-0 49191 NULL |
36271 |
+iwl_dbgfs_ucode_general_stats_read_49199 iwl_dbgfs_ucode_general_stats_read 3 49199 NULL |
36272 |
+il4965_rs_sta_dbgfs_stats_table_read_49206 il4965_rs_sta_dbgfs_stats_table_read 3 49206 NULL |
36273 |
+do_jffs2_getxattr_49210 do_jffs2_getxattr 0 49210 NULL |
36274 |
@@ -119470,7 +127345,7 @@ index 0000000..386792a |
36275 |
+viafb_dfph_proc_write_49288 viafb_dfph_proc_write 3 49288 NULL |
36276 |
+uio_read_49300 uio_read 3 49300 NULL |
36277 |
+isku_sysfs_read_keys_macro_49312 isku_sysfs_read_keys_macro 6 49312 NULL |
36278 |
-+SYSC_mincore_49319 SYSC_mincore 2-1 49319 NULL |
36279 |
++SYSC_mincore_49319 SYSC_mincore 1-2 49319 NULL |
36280 |
+fwtty_port_handler_49327 fwtty_port_handler 9 49327 NULL |
36281 |
+srpt_alloc_ioctx_ring_49330 srpt_alloc_ioctx_ring 2-4-3 49330 NULL |
36282 |
+joydev_ioctl_common_49359 joydev_ioctl_common 2 49359 NULL |
36283 |
@@ -119490,7 +127365,6 @@ index 0000000..386792a |
36284 |
+smk_write_access_49561 smk_write_access 3 49561 NULL |
36285 |
+alloc_chunk_49575 alloc_chunk 1 49575 NULL |
36286 |
+sctp_setsockopt_default_send_param_49578 sctp_setsockopt_default_send_param 3 49578 NULL |
36287 |
-+evm_inode_setattr_49594 evm_inode_setattr 0 49594 NULL |
36288 |
+tap_write_49595 tap_write 3 49595 NULL |
36289 |
+isr_wakeups_read_49607 isr_wakeups_read 3 49607 NULL |
36290 |
+btrfs_mksubvol_49616 btrfs_mksubvol 3 49616 NULL |
36291 |
@@ -119498,9 +127372,9 @@ index 0000000..386792a |
36292 |
+smk_write_doi_49621 smk_write_doi 3 49621 NULL |
36293 |
+port_fops_read_49626 port_fops_read 3 49626 NULL |
36294 |
+btrfsic_cmp_log_and_dev_bytenr_49628 btrfsic_cmp_log_and_dev_bytenr 2 49628 NULL |
36295 |
-+aa_simple_write_to_buffer_49683 aa_simple_write_to_buffer 3-4 49683 NULL |
36296 |
++__swab32p_49657 __swab32p 0 49657 NULL |
36297 |
++aa_simple_write_to_buffer_49683 aa_simple_write_to_buffer 4-3 49683 NULL |
36298 |
+SyS_pwritev_49688 SyS_pwritev 3 49688 NULL |
36299 |
-+__setup_irq_49696 __setup_irq 0 49696 NULL |
36300 |
+__copy_from_user_nocheck_49699 __copy_from_user_nocheck 0-3 49699 NULL |
36301 |
+cx2341x_ctrl_new_menu_49700 cx2341x_ctrl_new_menu 3 49700 NULL |
36302 |
+write_pool_49718 write_pool 3 49718 NULL |
36303 |
@@ -119508,7 +127382,7 @@ index 0000000..386792a |
36304 |
+sep_create_dcb_dmatables_context_kernel_49728 sep_create_dcb_dmatables_context_kernel 6 49728 NULL |
36305 |
+zd_usb_iowrite16v_49744 zd_usb_iowrite16v 3 49744 NULL |
36306 |
+btrfs_chunk_num_stripes_49751 btrfs_chunk_num_stripes 0 49751 NULL |
36307 |
-+fuse_wr_pages_49753 fuse_wr_pages 0-2-1 49753 NULL |
36308 |
++fuse_wr_pages_49753 fuse_wr_pages 0-1-2 49753 NULL |
36309 |
+key_conf_keylen_read_49758 key_conf_keylen_read 3 49758 NULL |
36310 |
+fuse_conn_waiting_read_49762 fuse_conn_waiting_read 3 49762 NULL |
36311 |
+ceph_osdc_readpages_49789 ceph_osdc_readpages 0 49789 NULL |
36312 |
@@ -119533,22 +127407,20 @@ index 0000000..386792a |
36313 |
+ioread8_50049 ioread8 0 50049 NULL |
36314 |
+fuse_conn_max_background_write_50061 fuse_conn_max_background_write 3 50061 NULL |
36315 |
+__kfifo_dma_in_prepare_50081 __kfifo_dma_in_prepare 4 50081 NULL |
36316 |
-+dev_set_alias_50084 dev_set_alias 3 50084 NULL |
36317 |
+libcfs_ioctl_popdata_50087 libcfs_ioctl_popdata 3 50087 NULL |
36318 |
+sock_setsockopt_50088 sock_setsockopt 5 50088 NULL |
36319 |
+altera_swap_dr_50090 altera_swap_dr 2 50090 NULL |
36320 |
+android_set_cntry_50100 android_set_cntry 0 50100 NULL |
36321 |
+read_file_slot_50111 read_file_slot 3 50111 NULL |
36322 |
+rx_streaming_interval_write_50120 rx_streaming_interval_write 3 50120 NULL |
36323 |
-+jfs_direct_IO_50125 jfs_direct_IO 4 50125 NULL |
36324 |
+SYSC_preadv_50134 SYSC_preadv 3 50134 NULL |
36325 |
+tx_frag_need_fragmentation_read_50153 tx_frag_need_fragmentation_read 3 50153 NULL |
36326 |
+kmalloc_node_50163 kmalloc_node 1 50163 NULL |
36327 |
+rx_filter_ibss_filter_read_50167 rx_filter_ibss_filter_read 3 50167 NULL |
36328 |
+ahd_probe_stack_size_50168 ahd_probe_stack_size 0 50168 NULL |
36329 |
+odev_update_50169 odev_update 2 50169 NULL |
36330 |
-+ubi_resize_volume_50172 ubi_resize_volume 2 50172 NULL nohasharray |
36331 |
-+ieee80211_if_fmt_dot11MeshHWMPRannInterval_50172 ieee80211_if_fmt_dot11MeshHWMPRannInterval 3 50172 &ubi_resize_volume_50172 |
36332 |
++ieee80211_if_fmt_dot11MeshHWMPRannInterval_50172 ieee80211_if_fmt_dot11MeshHWMPRannInterval 3 50172 NULL nohasharray |
36333 |
++ubi_resize_volume_50172 ubi_resize_volume 2 50172 &ieee80211_if_fmt_dot11MeshHWMPRannInterval_50172 |
36334 |
+cfg80211_roamed_bss_50198 cfg80211_roamed_bss 4-6 50198 NULL |
36335 |
+cyttsp4_probe_50201 cyttsp4_probe 4 50201 NULL |
36336 |
+rx_rx_timeout_wa_read_50204 rx_rx_timeout_wa_read 3 50204 NULL |
36337 |
@@ -119575,7 +127447,6 @@ index 0000000..386792a |
36338 |
+validate_acl_mac_addrs_50429 validate_acl_mac_addrs 0 50429 NULL |
36339 |
+btrfs_error_discard_extent_50444 btrfs_error_discard_extent 2 50444 NULL |
36340 |
+pgctrl_write_50453 pgctrl_write 3 50453 NULL |
36341 |
-+device_create_sys_dev_entry_50458 device_create_sys_dev_entry 0 50458 NULL |
36342 |
+cfs_size_round_50472 cfs_size_round 0-1 50472 NULL |
36343 |
+cdrom_read_cdda_50478 cdrom_read_cdda 4 50478 NULL |
36344 |
+mei_io_cb_alloc_req_buf_50493 mei_io_cb_alloc_req_buf 2 50493 NULL |
36345 |
@@ -119598,8 +127469,6 @@ index 0000000..386792a |
36346 |
+__ext3_get_inode_loc_50744 __ext3_get_inode_loc 0 50744 NULL |
36347 |
+ocfs2_xattr_block_get_50773 ocfs2_xattr_block_get 0 50773 NULL |
36348 |
+tm6000_read_write_usb_50774 tm6000_read_write_usb 7 50774 NULL |
36349 |
-+bio_alloc_map_data_50782 bio_alloc_map_data 2 50782 NULL |
36350 |
-+ixgbe_acquire_msix_vectors_50789 ixgbe_acquire_msix_vectors 2 50789 NULL |
36351 |
+tpm_write_50798 tpm_write 3 50798 NULL |
36352 |
+tun_do_read_50800 tun_do_read 4 50800 NULL |
36353 |
+write_flush_50803 write_flush 3 50803 NULL |
36354 |
@@ -119607,6 +127476,7 @@ index 0000000..386792a |
36355 |
+btrfs_stack_file_extent_disk_num_bytes_50825 btrfs_stack_file_extent_disk_num_bytes 0 50825 NULL |
36356 |
+dpcm_show_state_50827 dpcm_show_state 0 50827 NULL |
36357 |
+SetArea_50835 SetArea 4 50835 NULL |
36358 |
++nft_trans_alloc_50836 nft_trans_alloc 3 50836 NULL |
36359 |
+videobuf_dma_init_user_50839 videobuf_dma_init_user 4-3 50839 NULL |
36360 |
+self_check_write_50856 self_check_write 0 50856 NULL |
36361 |
+carl9170_debugfs_write_50857 carl9170_debugfs_write 3 50857 NULL |
36362 |
@@ -119622,8 +127492,7 @@ index 0000000..386792a |
36363 |
+virtio_cread16_50951 virtio_cread16 0 50951 NULL |
36364 |
+sdio_uart_write_50954 sdio_uart_write 3 50954 NULL |
36365 |
+SyS_setxattr_50957 SyS_setxattr 4 50957 NULL |
36366 |
-+of_modalias_node_50975 of_modalias_node 3 50975 NULL |
36367 |
-+iwl_statistics_flag_50981 iwl_statistics_flag 0-3 50981 NULL |
36368 |
++iwl_statistics_flag_50981 iwl_statistics_flag 3-0 50981 NULL |
36369 |
+timeout_write_50991 timeout_write 3 50991 NULL |
36370 |
+proc_write_51003 proc_write 3 51003 NULL |
36371 |
+jbd2_journal_extend_51012 jbd2_journal_extend 2 51012 NULL |
36372 |
@@ -119641,7 +127510,6 @@ index 0000000..386792a |
36373 |
+alloc_rtllib_51136 alloc_rtllib 1 51136 NULL |
36374 |
+simple_xattr_set_51140 simple_xattr_set 4 51140 NULL |
36375 |
+xfs_trans_get_efd_51148 xfs_trans_get_efd 3 51148 NULL |
36376 |
-+snd_pcm_unlink_51210 snd_pcm_unlink 0 51210 NULL |
36377 |
+iwl_dbgfs_bcast_filters_macs_read_51231 iwl_dbgfs_bcast_filters_macs_read 3 51231 NULL |
36378 |
+nf_ct_ext_create_51232 nf_ct_ext_create 3 51232 NULL |
36379 |
+snd_pcm_write_51235 snd_pcm_write 3 51235 NULL |
36380 |
@@ -119656,6 +127524,7 @@ index 0000000..386792a |
36381 |
+init_map_ipmac_51317 init_map_ipmac 5 51317 NULL |
36382 |
+alloc_hippi_dev_51320 alloc_hippi_dev 1 51320 NULL |
36383 |
+ext2_xattr_get_51327 ext2_xattr_get 0 51327 NULL |
36384 |
++smk_write_ptrace_51333 smk_write_ptrace 3 51333 NULL |
36385 |
+alloc_smp_req_51337 alloc_smp_req 1 51337 NULL |
36386 |
+ipw_get_event_log_len_51341 ipw_get_event_log_len 0 51341 NULL |
36387 |
+ieee80211_if_fmt_estab_plinks_51370 ieee80211_if_fmt_estab_plinks 3 51370 NULL |
36388 |
@@ -119665,7 +127534,6 @@ index 0000000..386792a |
36389 |
+hfsplus_brec_read_51436 hfsplus_brec_read 0 51436 NULL |
36390 |
+ieee80211_if_read_dot11MeshHWMPRootMode_51441 ieee80211_if_read_dot11MeshHWMPRootMode 3 51441 NULL |
36391 |
+print_devstats_dot11ACKFailureCount_51443 print_devstats_dot11ACKFailureCount 3 51443 NULL |
36392 |
-+vmxnet3_acquire_msix_vectors_51462 vmxnet3_acquire_msix_vectors 2 51462 NULL |
36393 |
+____alloc_ei_netdev_51475 ____alloc_ei_netdev 1 51475 NULL |
36394 |
+xfs_buf_get_uncached_51477 xfs_buf_get_uncached 2 51477 NULL |
36395 |
+kvm_fetch_guest_virt_51493 kvm_fetch_guest_virt 4-2 51493 NULL |
36396 |
@@ -119710,11 +127578,9 @@ index 0000000..386792a |
36397 |
+xfrm_alg_len_51940 xfrm_alg_len 0 51940 NULL |
36398 |
+scsi_get_vpd_page_51951 scsi_get_vpd_page 4 51951 NULL |
36399 |
+snd_mask_min_51969 snd_mask_min 0 51969 NULL |
36400 |
-+__blkdev_get_51972 __blkdev_get 0 51972 NULL |
36401 |
+get_zone_51981 get_zone 0-1 51981 NULL |
36402 |
+ath6kl_sdio_alloc_prep_scat_req_51986 ath6kl_sdio_alloc_prep_scat_req 2 51986 NULL |
36403 |
+dwc3_mode_write_51997 dwc3_mode_write 3 51997 NULL |
36404 |
-+scsi_sysfs_add_host_52010 scsi_sysfs_add_host 0 52010 NULL |
36405 |
+skb_copy_datagram_from_iovec_52014 skb_copy_datagram_from_iovec 4-2-5 52014 NULL |
36406 |
+rdmalt_52022 rdmalt 0 52022 NULL |
36407 |
+override_release_52032 override_release 2 52032 NULL |
36408 |
@@ -119726,11 +127592,9 @@ index 0000000..386792a |
36409 |
+isofs_readpages_52067 isofs_readpages 4 52067 NULL |
36410 |
+mxuport_process_read_urb_data_52072 mxuport_process_read_urb_data 3 52072 NULL |
36411 |
+nsm_get_handle_52089 nsm_get_handle 4 52089 NULL |
36412 |
-+ulist_add_merge_52096 ulist_add_merge 0 52096 NULL |
36413 |
+o2net_debug_read_52105 o2net_debug_read 3 52105 NULL |
36414 |
+split_scan_timeout_write_52128 split_scan_timeout_write 3 52128 NULL |
36415 |
+retry_count_read_52129 retry_count_read 3 52129 NULL |
36416 |
-+snd_pcm_channel_info_user_52135 snd_pcm_channel_info_user 0 52135 NULL |
36417 |
+gdm_usb_hci_send_52138 gdm_usb_hci_send 3 52138 NULL |
36418 |
+sub_alloc_52140 sub_alloc 0 52140 NULL |
36419 |
+hysdn_conf_write_52145 hysdn_conf_write 3 52145 NULL |
36420 |
@@ -119741,22 +127605,20 @@ index 0000000..386792a |
36421 |
+print_prefix_52176 print_prefix 0 52176 NULL |
36422 |
+proc_pid_readlink_52186 proc_pid_readlink 3 52186 NULL |
36423 |
+reiserfs_posix_acl_from_disk_52191 reiserfs_posix_acl_from_disk 2 52191 NULL |
36424 |
++f2fs_seek_block_52194 f2fs_seek_block 2 52194 NULL |
36425 |
+vmci_qp_broker_alloc_52216 vmci_qp_broker_alloc 6-5 52216 NULL |
36426 |
+fuse_request_alloc_52243 fuse_request_alloc 1 52243 NULL |
36427 |
+mdiobus_alloc_size_52259 mdiobus_alloc_size 1 52259 NULL |
36428 |
+shrink_slab_52261 shrink_slab 2 52261 NULL |
36429 |
++ext2_direct_IO_52270 ext2_direct_IO 4 52270 NULL |
36430 |
+sisusbcon_do_font_op_52271 sisusbcon_do_font_op 9 52271 NULL |
36431 |
-+handle_supp_msgs_52284 handle_supp_msgs 4 52284 NULL |
36432 |
-+kobject_set_name_vargs_52309 kobject_set_name_vargs 0 52309 NULL |
36433 |
+read_file_reset_52310 read_file_reset 3 52310 NULL |
36434 |
+ssd1307fb_write_52315 ssd1307fb_write 3 52315 NULL |
36435 |
+request_asymmetric_key_52317 request_asymmetric_key 2-4 52317 NULL |
36436 |
+hwflags_read_52318 hwflags_read 3 52318 NULL |
36437 |
-+snd_pcm_hw_free_52327 snd_pcm_hw_free 0 52327 NULL |
36438 |
+test_unaligned_bulk_52333 test_unaligned_bulk 3 52333 NULL |
36439 |
+hur_len_52339 hur_len 0 52339 NULL |
36440 |
-+bytes_to_frames_52362 bytes_to_frames 0-2 52362 NULL nohasharray |
36441 |
-+cap_inode_killpriv_52362 cap_inode_killpriv 0 52362 &bytes_to_frames_52362 |
36442 |
++bytes_to_frames_52362 bytes_to_frames 0-2 52362 NULL |
36443 |
+copy_entries_to_user_52367 copy_entries_to_user 1 52367 NULL |
36444 |
+iwl_dump_fh_52371 iwl_dump_fh 0 52371 NULL |
36445 |
+hfsplus_find_attr_52374 hfsplus_find_attr 0 52374 NULL |
36446 |
@@ -119770,6 +127632,7 @@ index 0000000..386792a |
36447 |
+ath6kl_delete_qos_write_52435 ath6kl_delete_qos_write 3 52435 NULL |
36448 |
+ieee80211_if_fmt_num_sta_ps_52438 ieee80211_if_fmt_num_sta_ps 3 52438 NULL |
36449 |
+alauda_read_data_52452 alauda_read_data 3 52452 NULL |
36450 |
++bt_alloc_52457 bt_alloc 2 52457 NULL |
36451 |
+ieee80211_alloc_txb_52477 ieee80211_alloc_txb 1 52477 NULL |
36452 |
+usb_tranzport_write_52479 usb_tranzport_write 3 52479 NULL |
36453 |
+ocfs2_extend_no_holes_52483 ocfs2_extend_no_holes 3-4 52483 NULL |
36454 |
@@ -119784,7 +127647,6 @@ index 0000000..386792a |
36455 |
+dccpprobe_read_52549 dccpprobe_read 3 52549 NULL |
36456 |
+debug_level_proc_write_52572 debug_level_proc_write 3 52572 NULL |
36457 |
+isku_sysfs_read_macro_52587 isku_sysfs_read_macro 6 52587 NULL |
36458 |
-+snd_pcm_sw_params_52594 snd_pcm_sw_params 0 52594 NULL |
36459 |
+SyS_setsockopt_52610 SyS_setsockopt 5 52610 NULL |
36460 |
+ll_sa_entry_alloc_52611 ll_sa_entry_alloc 4 52611 NULL |
36461 |
+tps80031_writes_52638 tps80031_writes 3-4 52638 NULL |
36462 |
@@ -119804,7 +127666,6 @@ index 0000000..386792a |
36463 |
+lb_alloc_ep_req_52837 lb_alloc_ep_req 2 52837 NULL |
36464 |
+mon_bin_get_event_52863 mon_bin_get_event 4-6 52863 NULL |
36465 |
+twl6030_gpadc_write_52867 twl6030_gpadc_write 1 52867 NULL |
36466 |
-+qib_decode_6120_err_52876 qib_decode_6120_err 3 52876 NULL |
36467 |
+twlreg_write_52880 twlreg_write 3 52880 NULL |
36468 |
+pvr2_ctrl_value_to_sym_internal_52881 pvr2_ctrl_value_to_sym_internal 5 52881 NULL |
36469 |
+cache_read_procfs_52882 cache_read_procfs 3 52882 NULL |
36470 |
@@ -119815,7 +127676,6 @@ index 0000000..386792a |
36471 |
+ieee80211_if_fmt_fwded_mcast_52961 ieee80211_if_fmt_fwded_mcast 3 52961 NULL |
36472 |
+tx_tx_exch_read_52986 tx_tx_exch_read 3 52986 NULL |
36473 |
+num_node_state_52989 num_node_state 0 52989 NULL |
36474 |
-+efivarfs_file_write_53000 efivarfs_file_write 3 53000 NULL |
36475 |
+btrfs_free_and_pin_reserved_extent_53016 btrfs_free_and_pin_reserved_extent 2 53016 NULL |
36476 |
+tx_tx_exch_pending_read_53018 tx_tx_exch_pending_read 3 53018 NULL |
36477 |
+bio_cur_bytes_53037 bio_cur_bytes 0 53037 NULL |
36478 |
@@ -119823,12 +127683,10 @@ index 0000000..386792a |
36479 |
+cfi_read_query_53066 cfi_read_query 0 53066 NULL |
36480 |
+iwl_dbgfs_interrupt_write_53069 iwl_dbgfs_interrupt_write 3 53069 NULL |
36481 |
+mwifiex_debug_read_53074 mwifiex_debug_read 3 53074 NULL |
36482 |
-+vmci_check_host_caps_53087 vmci_check_host_caps 0 53087 NULL |
36483 |
+mic_virtio_copy_from_user_53107 mic_virtio_copy_from_user 3 53107 NULL |
36484 |
+verity_status_53120 verity_status 5 53120 NULL |
36485 |
+brcmf_usb_dl_cmd_53130 brcmf_usb_dl_cmd 4 53130 NULL |
36486 |
-+ps_poll_ps_poll_max_ap_turn_read_53140 ps_poll_ps_poll_max_ap_turn_read 3 53140 NULL nohasharray |
36487 |
-+inode_newsize_ok_53140 inode_newsize_ok 0 53140 &ps_poll_ps_poll_max_ap_turn_read_53140 |
36488 |
++ps_poll_ps_poll_max_ap_turn_read_53140 ps_poll_ps_poll_max_ap_turn_read 3 53140 NULL |
36489 |
+ieee80211_bss_info_update_53170 ieee80211_bss_info_update 4 53170 NULL |
36490 |
+btrfs_io_bio_alloc_53179 btrfs_io_bio_alloc 2 53179 NULL |
36491 |
+clear_capture_buf_53192 clear_capture_buf 2 53192 NULL |
36492 |
@@ -119837,6 +127695,7 @@ index 0000000..386792a |
36493 |
+xfs_trans_read_buf_map_53258 xfs_trans_read_buf_map 5 53258 NULL |
36494 |
+wil_write_file_ssid_53266 wil_write_file_ssid 3 53266 NULL |
36495 |
+btrfs_file_extent_num_bytes_53269 btrfs_file_extent_num_bytes 0 53269 NULL |
36496 |
++f2fs_fiemap_53310 f2fs_fiemap 4 53310 NULL |
36497 |
+ftrace_profile_write_53327 ftrace_profile_write 3 53327 NULL |
36498 |
+find_nr_power_limit_53330 find_nr_power_limit 0 53330 NULL |
36499 |
+gsm_control_reply_53333 gsm_control_reply 4 53333 NULL |
36500 |
@@ -119854,26 +127713,24 @@ index 0000000..386792a |
36501 |
+do_verify_xattr_datum_53499 do_verify_xattr_datum 0 53499 NULL |
36502 |
+snd_pcm_format_physical_width_53505 snd_pcm_format_physical_width 0 53505 NULL |
36503 |
+dbAllocNext_53506 dbAllocNext 0 53506 NULL |
36504 |
-+force_sc_support_write_53512 force_sc_support_write 3 53512 NULL nohasharray |
36505 |
-+check_acl_53512 check_acl 0 53512 &force_sc_support_write_53512 |
36506 |
++check_acl_53512 check_acl 0 53512 NULL nohasharray |
36507 |
++force_sc_support_write_53512 force_sc_support_write 3 53512 &check_acl_53512 |
36508 |
+nft_data_dump_53549 nft_data_dump 5 53549 NULL |
36509 |
+SYSC_bind_53582 SYSC_bind 3 53582 NULL |
36510 |
+cifs_utf16_bytes_53593 cifs_utf16_bytes 0 53593 NULL |
36511 |
+proc_uid_map_write_53596 proc_uid_map_write 3 53596 NULL |
36512 |
+pfkey_recvmsg_53604 pfkey_recvmsg 4 53604 NULL |
36513 |
+___alloc_bootmem_nopanic_53626 ___alloc_bootmem_nopanic 1 53626 NULL |
36514 |
-+xd_write_multiple_pages_53633 xd_write_multiple_pages 6-5 53633 NULL |
36515 |
+ccid_getsockopt_builtin_ccids_53634 ccid_getsockopt_builtin_ccids 2 53634 NULL |
36516 |
+nr_sendmsg_53656 nr_sendmsg 4 53656 NULL |
36517 |
-+fuse_fill_write_pages_53682 fuse_fill_write_pages 4-0 53682 NULL |
36518 |
++fuse_fill_write_pages_53682 fuse_fill_write_pages 0-4 53682 NULL |
36519 |
+v4l2_event_subscribe_53687 v4l2_event_subscribe 3 53687 NULL |
36520 |
+bdev_logical_block_size_53690 bdev_logical_block_size 0 53690 NULL nohasharray |
36521 |
+igb_alloc_q_vector_53690 igb_alloc_q_vector 4-6 53690 &bdev_logical_block_size_53690 |
36522 |
+find_overflow_devnum_53711 find_overflow_devnum 0 53711 NULL |
36523 |
+__proc_debug_mb_53732 __proc_debug_mb 5 53732 NULL |
36524 |
+wdm_write_53735 wdm_write 3 53735 NULL |
36525 |
-+lpfc_idiag_queacc_read_qe_53755 lpfc_idiag_queacc_read_qe 0-2 53755 NULL nohasharray |
36526 |
-+amdtp_out_stream_get_max_payload_53755 amdtp_out_stream_get_max_payload 0 53755 &lpfc_idiag_queacc_read_qe_53755 |
36527 |
++lpfc_idiag_queacc_read_qe_53755 lpfc_idiag_queacc_read_qe 0-2 53755 NULL |
36528 |
+wa_populate_buf_in_urb_53758 wa_populate_buf_in_urb 3-4 53758 NULL |
36529 |
+ext2_acl_count_53773 ext2_acl_count 0-1 53773 NULL |
36530 |
+__kfifo_dma_in_prepare_r_53792 __kfifo_dma_in_prepare_r 4-5 53792 NULL |
36531 |
@@ -119882,7 +127739,8 @@ index 0000000..386792a |
36532 |
+lpfc_idiag_ctlacc_read_reg_53809 lpfc_idiag_ctlacc_read_reg 0-3 53809 NULL |
36533 |
+nls_nullsize_53815 nls_nullsize 0 53815 NULL |
36534 |
+setup_data_read_53822 setup_data_read 3 53822 NULL |
36535 |
-+pms_read_53873 pms_read 3 53873 NULL |
36536 |
++btrfs_free_reserved_extent_53873 btrfs_free_reserved_extent 2 53873 NULL nohasharray |
36537 |
++pms_read_53873 pms_read 3 53873 &btrfs_free_reserved_extent_53873 |
36538 |
+ieee80211_if_fmt_dropped_frames_congestion_53883 ieee80211_if_fmt_dropped_frames_congestion 3 53883 NULL |
36539 |
+SyS_setgroups_53900 SyS_setgroups 1 53900 NULL |
36540 |
+batadv_tt_tvlv_ogm_handler_v1_53909 batadv_tt_tvlv_ogm_handler_v1 5 53909 NULL |
36541 |
@@ -119899,10 +127757,8 @@ index 0000000..386792a |
36542 |
+pipeline_dec_packet_out_read_54052 pipeline_dec_packet_out_read 3 54052 NULL |
36543 |
+nl80211_send_disconnected_54056 nl80211_send_disconnected 5 54056 NULL |
36544 |
+rproc_state_read_54057 rproc_state_read 3 54057 NULL |
36545 |
-+_malloc_54077 _malloc 1 54077 NULL |
36546 |
-+lustre_posix_acl_xattr_filter_54103 lustre_posix_acl_xattr_filter 2 54103 NULL nohasharray |
36547 |
-+altera_set_ir_pre_54103 altera_set_ir_pre 2 54103 &lustre_posix_acl_xattr_filter_54103 |
36548 |
-+__comedi_buf_write_alloc_54112 __comedi_buf_write_alloc 0-2 54112 NULL |
36549 |
++altera_set_ir_pre_54103 altera_set_ir_pre 2 54103 NULL nohasharray |
36550 |
++lustre_posix_acl_xattr_filter_54103 lustre_posix_acl_xattr_filter 2 54103 &altera_set_ir_pre_54103 |
36551 |
+strn_len_54122 strn_len 0 54122 NULL |
36552 |
+isku_receive_54130 isku_receive 4 54130 NULL |
36553 |
+isr_host_acknowledges_read_54136 isr_host_acknowledges_read 3 54136 NULL |
36554 |
@@ -119921,6 +127777,7 @@ index 0000000..386792a |
36555 |
+wusb_prf_54261 wusb_prf 7 54261 &audio_write_54261 |
36556 |
+mwifiex_getlog_read_54269 mwifiex_getlog_read 3 54269 NULL |
36557 |
+kstrtou16_from_user_54274 kstrtou16_from_user 2 54274 NULL |
36558 |
++sizeof_long_54276 sizeof_long 0 54276 NULL |
36559 |
+altera_set_dr_post_54291 altera_set_dr_post 2 54291 NULL |
36560 |
+dlm_alloc_pagevec_54296 dlm_alloc_pagevec 1 54296 NULL |
36561 |
+reclaim_pages_54301 reclaim_pages 3 54301 NULL |
36562 |
@@ -119941,7 +127798,6 @@ index 0000000..386792a |
36563 |
+sparse_early_mem_maps_alloc_node_54485 sparse_early_mem_maps_alloc_node 4 54485 NULL |
36564 |
+simple_strtoull_54493 simple_strtoull 0 54493 NULL |
36565 |
+btrfs_ordered_sum_size_54509 btrfs_ordered_sum_size 0-2 54509 NULL |
36566 |
-+sst_byt_get_dsp_position_54513 sst_byt_get_dsp_position 0-3 54513 NULL |
36567 |
+rfc4106_set_key_54519 rfc4106_set_key 3 54519 NULL |
36568 |
+vmci_transport_dgram_enqueue_54525 vmci_transport_dgram_enqueue 4 54525 NULL |
36569 |
+viacam_read_54526 viacam_read 3 54526 NULL |
36570 |
@@ -119959,11 +127815,10 @@ index 0000000..386792a |
36571 |
+dns_resolver_read_54658 dns_resolver_read 3 54658 NULL |
36572 |
+twl6030_interrupt_mask_54659 twl6030_interrupt_mask 2 54659 NULL |
36573 |
+tdp_page_fault_54663 tdp_page_fault 2 54663 NULL |
36574 |
-+bus_add_device_54665 bus_add_device 0 54665 NULL |
36575 |
+cw1200_queue_stats_init_54670 cw1200_queue_stats_init 2 54670 NULL |
36576 |
+bio_kmalloc_54672 bio_kmalloc 2 54672 NULL |
36577 |
+evm_read_key_54674 evm_read_key 3 54674 NULL |
36578 |
-+__btrfs_inc_extent_ref_54706 __btrfs_inc_extent_ref 7 54706 NULL |
36579 |
++jfs_direct_IO_54687 jfs_direct_IO 4 54687 NULL |
36580 |
+rfkill_fop_read_54711 rfkill_fop_read 3 54711 NULL |
36581 |
+ocfs2_control_write_54737 ocfs2_control_write 3 54737 NULL |
36582 |
+kzalloc_54740 kzalloc 1 54740 NULL |
36583 |
@@ -119977,33 +127832,31 @@ index 0000000..386792a |
36584 |
+nfsd_write_54809 nfsd_write 6 54809 NULL |
36585 |
+ar9287_dump_modal_eeprom_54814 ar9287_dump_modal_eeprom 3-2 54814 NULL |
36586 |
+crypto_tfm_ctx_alignment_54815 crypto_tfm_ctx_alignment 0 54815 NULL nohasharray |
36587 |
-+kvzalloc_54815 kvzalloc 1 54815 &crypto_tfm_ctx_alignment_54815 nohasharray |
36588 |
-+aes_decrypt_fail_read_54815 aes_decrypt_fail_read 3 54815 &kvzalloc_54815 |
36589 |
-+generic_perform_write_54832 generic_perform_write 3-0 54832 NULL |
36590 |
++aes_decrypt_fail_read_54815 aes_decrypt_fail_read 3 54815 &crypto_tfm_ctx_alignment_54815 nohasharray |
36591 |
++kvzalloc_54815 kvzalloc 1 54815 &aes_decrypt_fail_read_54815 |
36592 |
++generic_perform_write_54832 generic_perform_write 3 54832 NULL |
36593 |
+write_rio_54837 write_rio 3 54837 NULL |
36594 |
+ext3_acl_from_disk_54839 ext3_acl_from_disk 2 54839 NULL nohasharray |
36595 |
+nouveau_engctx_create__54839 nouveau_engctx_create_ 8 54839 &ext3_acl_from_disk_54839 |
36596 |
+ufx_ops_write_54848 ufx_ops_write 3 54848 NULL |
36597 |
+printer_read_54851 printer_read 3 54851 NULL |
36598 |
-+assign_irq_vector_54852 assign_irq_vector 0 54852 NULL |
36599 |
+broadsheet_spiflash_rewrite_sector_54864 broadsheet_spiflash_rewrite_sector 2 54864 NULL |
36600 |
+prism_build_supp_rates_54865 prism_build_supp_rates 0 54865 NULL |
36601 |
-+iscsi_pool_init_54913 iscsi_pool_init 2-4 54913 NULL nohasharray |
36602 |
-+kobject_set_name_vargs_54913 kobject_set_name_vargs 0 54913 &iscsi_pool_init_54913 |
36603 |
++iscsi_pool_init_54913 iscsi_pool_init 2-4 54913 NULL |
36604 |
+btrfs_stack_chunk_num_stripes_54923 btrfs_stack_chunk_num_stripes 0 54923 NULL |
36605 |
+bio_add_page_54933 bio_add_page 0-3 54933 NULL |
36606 |
+mxms_structlen_54939 mxms_structlen 0 54939 NULL |
36607 |
+add_port_54941 add_port 2 54941 NULL |
36608 |
+tipc_send2name_54946 tipc_send2name 5 54946 NULL |
36609 |
-+ath9k_dump_btcoex_54949 ath9k_dump_btcoex 0-3 54949 NULL |
36610 |
++ath9k_dump_btcoex_54949 ath9k_dump_btcoex 3-0 54949 NULL |
36611 |
+alauda_write_data_54967 alauda_write_data 3 54967 NULL |
36612 |
+c4_add_card_54968 c4_add_card 3 54968 NULL |
36613 |
+ext3_xattr_get_54989 ext3_xattr_get 0 54989 NULL |
36614 |
+cx231xx_v4l2_read_55014 cx231xx_v4l2_read 3 55014 NULL |
36615 |
+error_error_null_Frame_tx_start_read_55024 error_error_null_Frame_tx_start_read 3 55024 NULL |
36616 |
++efw_transaction_55052 efw_transaction 5-7 55052 NULL |
36617 |
+apei_exec_run_55075 apei_exec_run 0 55075 NULL |
36618 |
+bitmap_storage_alloc_55077 bitmap_storage_alloc 2 55077 NULL |
36619 |
-+snd_pcm_capture_hw_avail_55086 snd_pcm_capture_hw_avail 0 55086 NULL |
36620 |
+rxpipe_beacon_buffer_thres_host_int_trig_rx_data_read_55106 rxpipe_beacon_buffer_thres_host_int_trig_rx_data_read 3 55106 NULL |
36621 |
+crypto_ahash_setkey_55134 crypto_ahash_setkey 3 55134 NULL |
36622 |
+filldir_55137 filldir 3 55137 NULL |
36623 |
@@ -120025,12 +127878,12 @@ index 0000000..386792a |
36624 |
+rx_streaming_interval_read_55291 rx_streaming_interval_read 3 55291 NULL |
36625 |
+lov_get_stripecnt_55297 lov_get_stripecnt 0-3 55297 NULL |
36626 |
+gsm_control_modem_55303 gsm_control_modem 3 55303 NULL |
36627 |
-+qp_alloc_guest_work_55305 qp_alloc_guest_work 5-3 55305 NULL nohasharray |
36628 |
-+compat_SyS_process_vm_readv_55305 compat_SyS_process_vm_readv 3-5 55305 &qp_alloc_guest_work_55305 |
36629 |
++compat_SyS_process_vm_readv_55305 compat_SyS_process_vm_readv 3-5 55305 NULL nohasharray |
36630 |
++qp_alloc_guest_work_55305 qp_alloc_guest_work 5-3 55305 &compat_SyS_process_vm_readv_55305 |
36631 |
+compat_SyS_mbind_55329 compat_SyS_mbind 5 55329 NULL |
36632 |
+vme_user_read_55338 vme_user_read 3 55338 NULL |
36633 |
-+__wa_xfer_setup_sizes_55342 __wa_xfer_setup_sizes 0 55342 NULL nohasharray |
36634 |
-+sctp_datamsg_from_user_55342 sctp_datamsg_from_user 4 55342 &__wa_xfer_setup_sizes_55342 |
36635 |
++sctp_datamsg_from_user_55342 sctp_datamsg_from_user 4 55342 NULL nohasharray |
36636 |
++__wa_xfer_setup_sizes_55342 __wa_xfer_setup_sizes 0 55342 &sctp_datamsg_from_user_55342 |
36637 |
+cw1200_sdio_align_size_55391 cw1200_sdio_align_size 2 55391 NULL |
36638 |
+iwl_dbgfs_plcp_delta_read_55407 iwl_dbgfs_plcp_delta_read 3 55407 NULL |
36639 |
+nouveau_cli_create_55425 nouveau_cli_create 3 55425 NULL |
36640 |
@@ -120055,8 +127908,8 @@ index 0000000..386792a |
36641 |
+macvtap_put_user_55609 macvtap_put_user 4 55609 NULL |
36642 |
+selinux_setprocattr_55611 selinux_setprocattr 4 55611 NULL |
36643 |
+edge_tty_recv_55622 edge_tty_recv 3 55622 NULL |
36644 |
-+reiserfs_xattr_get_55628 reiserfs_xattr_get 0 55628 NULL nohasharray |
36645 |
-+pktgen_if_write_55628 pktgen_if_write 3 55628 &reiserfs_xattr_get_55628 |
36646 |
++pktgen_if_write_55628 pktgen_if_write 3 55628 NULL nohasharray |
36647 |
++reiserfs_xattr_get_55628 reiserfs_xattr_get 0 55628 &pktgen_if_write_55628 |
36648 |
+osc_obd_max_pages_per_rpc_seq_write_55636 osc_obd_max_pages_per_rpc_seq_write 3 55636 NULL |
36649 |
+xfs_bmbt_maxrecs_55649 xfs_bmbt_maxrecs 0-2 55649 NULL |
36650 |
+lpfc_idiag_queinfo_read_55662 lpfc_idiag_queinfo_read 3 55662 NULL |
36651 |
@@ -120068,11 +127921,12 @@ index 0000000..386792a |
36652 |
+tap_pwup_write_55723 tap_pwup_write 3 55723 NULL |
36653 |
+__iio_allocate_kfifo_55738 __iio_allocate_kfifo 2 55738 NULL |
36654 |
+set_local_name_55757 set_local_name 4 55757 NULL |
36655 |
++ethtool_copy_validate_indir_55769 ethtool_copy_validate_indir 4 55769 NULL |
36656 |
+strlen_55778 strlen 0 55778 NULL nohasharray |
36657 |
+is_idx_node_in_tnc_55778 is_idx_node_in_tnc 0 55778 &strlen_55778 |
36658 |
-+set_spte_55783 set_spte 5-4 55783 NULL |
36659 |
-+req_bio_endio_55786 req_bio_endio 3 55786 NULL nohasharray |
36660 |
-+conf_read_55786 conf_read 3 55786 &req_bio_endio_55786 |
36661 |
++set_spte_55783 set_spte 4-5 55783 NULL |
36662 |
++conf_read_55786 conf_read 3 55786 NULL nohasharray |
36663 |
++req_bio_endio_55786 req_bio_endio 3 55786 &conf_read_55786 |
36664 |
+uwb_rc_neh_grok_event_55799 uwb_rc_neh_grok_event 3 55799 NULL |
36665 |
+sb16_copy_from_user_55836 sb16_copy_from_user 10-6-7 55836 NULL |
36666 |
+ip_hdrlen_55849 ip_hdrlen 0 55849 NULL |
36667 |
@@ -120083,17 +127937,15 @@ index 0000000..386792a |
36668 |
+pm_qos_power_read_55891 pm_qos_power_read 3 55891 NULL |
36669 |
+hash_ip4_expire_55911 hash_ip4_expire 4 55911 NULL |
36670 |
+snd_pcm_hw_param_value_min_55917 snd_pcm_hw_param_value_min 0 55917 NULL |
36671 |
-+ext2_direct_IO_55932 ext2_direct_IO 4 55932 NULL |
36672 |
+kvm_write_guest_virt_system_55944 kvm_write_guest_virt_system 4-2 55944 NULL |
36673 |
+sel_read_policy_55947 sel_read_policy 3 55947 NULL |
36674 |
+ceph_get_direct_page_vector_55956 ceph_get_direct_page_vector 2 55956 NULL |
36675 |
-+simple_read_from_buffer_55957 simple_read_from_buffer 2-5 55957 NULL |
36676 |
++simple_read_from_buffer_55957 simple_read_from_buffer 5-2 55957 NULL |
36677 |
+tx_tx_imm_resp_read_55964 tx_tx_imm_resp_read 3 55964 NULL |
36678 |
-+btrfs_clone_55977 btrfs_clone 5-3 55977 NULL |
36679 |
++btrfs_clone_55977 btrfs_clone 5-3-6 55977 NULL |
36680 |
+wa_xfer_create_subset_sg_55992 wa_xfer_create_subset_sg 3-2 55992 NULL |
36681 |
+nvme_alloc_iod_56027 nvme_alloc_iod 1-2 56027 NULL |
36682 |
-+rtl8169_init_ring_56028 rtl8169_init_ring 0 56028 NULL |
36683 |
-+usb_ocp_write_56047 usb_ocp_write 4 56047 NULL |
36684 |
++iwl_trans_read_prph_56052 iwl_trans_read_prph 0 56052 NULL |
36685 |
+dccp_sendmsg_56058 dccp_sendmsg 4 56058 NULL |
36686 |
+pscsi_get_bio_56103 pscsi_get_bio 1 56103 NULL |
36687 |
+usb_alloc_stream_buffers_56123 usb_alloc_stream_buffers 3 56123 NULL |
36688 |
@@ -120117,17 +127969,16 @@ index 0000000..386792a |
36689 |
+journal_init_revoke_table_56331 journal_init_revoke_table 1 56331 NULL |
36690 |
+snd_rawmidi_read_56337 snd_rawmidi_read 3 56337 NULL |
36691 |
+vxge_os_dma_malloc_async_56348 vxge_os_dma_malloc_async 3 56348 NULL |
36692 |
-+mite_device_bytes_transferred_56355 mite_device_bytes_transferred 0 56355 NULL |
36693 |
-+iov_iter_copy_from_user_atomic_56368 iov_iter_copy_from_user_atomic 4-0 56368 NULL |
36694 |
++iov_iter_copy_from_user_atomic_56368 iov_iter_copy_from_user_atomic 0-4 56368 NULL |
36695 |
+dev_read_56369 dev_read 3 56369 NULL |
36696 |
+ath10k_read_simulate_fw_crash_56371 ath10k_read_simulate_fw_crash 3 56371 NULL |
36697 |
-+snd_pcm_common_ioctl1_56382 snd_pcm_common_ioctl1 0 56382 NULL |
36698 |
+write_gssp_56404 write_gssp 3 56404 NULL |
36699 |
+ocfs2_control_read_56405 ocfs2_control_read 3 56405 NULL |
36700 |
+store_msg_56417 store_msg 3 56417 NULL |
36701 |
+pppol2tp_sendmsg_56420 pppol2tp_sendmsg 4 56420 NULL |
36702 |
+l2cap_segment_le_sdu_56426 l2cap_segment_le_sdu 4 56426 NULL |
36703 |
-+ec_dbgfs_cmd_read_56431 ec_dbgfs_cmd_read 3 56431 NULL |
36704 |
++lprocfs_fid_space_seq_write_56431 lprocfs_fid_space_seq_write 3 56431 NULL nohasharray |
36705 |
++ec_dbgfs_cmd_read_56431 ec_dbgfs_cmd_read 3 56431 &lprocfs_fid_space_seq_write_56431 |
36706 |
+fl_create_56435 fl_create 5 56435 NULL |
36707 |
+gnttab_map_56439 gnttab_map 2 56439 NULL |
36708 |
+cx231xx_init_isoc_56453 cx231xx_init_isoc 3-2-4 56453 NULL |
36709 |
@@ -120168,32 +128019,28 @@ index 0000000..386792a |
36710 |
+mtdchar_write_56831 mtdchar_write 3 56831 NULL |
36711 |
+snd_rawmidi_kernel_write1_56847 snd_rawmidi_kernel_write1 4-0 56847 NULL |
36712 |
+si476x_radio_read_agc_blob_56849 si476x_radio_read_agc_blob 3 56849 NULL |
36713 |
++gk20a_ram_get_56863 gk20a_ram_get 2 56863 NULL |
36714 |
+ext3_xattr_ibody_get_56880 ext3_xattr_ibody_get 0 56880 NULL |
36715 |
+pvr2_debugifc_print_status_56890 pvr2_debugifc_print_status 3 56890 NULL |
36716 |
+debug_debug3_read_56894 debug_debug3_read 3 56894 NULL |
36717 |
+batadv_tt_update_changes_56895 batadv_tt_update_changes 3 56895 NULL nohasharray |
36718 |
+le_auto_conn_write_56895 le_auto_conn_write 3 56895 &batadv_tt_update_changes_56895 |
36719 |
+hfsplus_find_cat_56899 hfsplus_find_cat 0 56899 NULL |
36720 |
-+strcspn_56913 strcspn 0 56913 NULL |
36721 |
+__kfifo_out_56927 __kfifo_out 0-3 56927 NULL |
36722 |
+journal_init_revoke_56933 journal_init_revoke 2 56933 NULL |
36723 |
+nouveau_xtensa_create__56952 nouveau_xtensa_create_ 8 56952 NULL |
36724 |
+diva_get_driver_info_56967 diva_get_driver_info 0 56967 NULL |
36725 |
-+sptlrpc_secflags2str_56995 sptlrpc_secflags2str 3 56995 NULL |
36726 |
+vlsi_alloc_ring_57003 vlsi_alloc_ring 3-4 57003 NULL |
36727 |
+btrfs_super_csum_size_57004 btrfs_super_csum_size 0 57004 NULL |
36728 |
+aircable_process_packet_57027 aircable_process_packet 4 57027 NULL |
36729 |
-+ieee80211_if_fmt_state_57043 ieee80211_if_fmt_state 3 57043 NULL nohasharray |
36730 |
-+skb_network_offset_57043 skb_network_offset 0 57043 &ieee80211_if_fmt_state_57043 |
36731 |
++ieee80211_if_fmt_state_57043 ieee80211_if_fmt_state 3 57043 NULL |
36732 |
+bytes_to_samples_57049 bytes_to_samples 0-2 57049 NULL |
36733 |
+xfs_buf_read_map_57053 xfs_buf_read_map 3 57053 NULL |
36734 |
+cx2341x_ctrl_new_std_57061 cx2341x_ctrl_new_std 4 57061 NULL |
36735 |
+sca3000_read_data_57064 sca3000_read_data 4 57064 NULL |
36736 |
+pcmcia_replace_cis_57066 pcmcia_replace_cis 3 57066 NULL |
36737 |
+tracing_set_trace_write_57096 tracing_set_trace_write 3 57096 NULL |
36738 |
-+altera_get_note_57099 altera_get_note 6 57099 NULL |
36739 |
+hpfs_readpages_57106 hpfs_readpages 4 57106 NULL |
36740 |
-+snd_pcm_hw_params_old_user_57108 snd_pcm_hw_params_old_user 0 57108 NULL |
36741 |
+crypto_compress_ctxsize_57109 crypto_compress_ctxsize 0 57109 NULL |
36742 |
+cipso_v4_gentag_loc_57119 cipso_v4_gentag_loc 0 57119 NULL |
36743 |
+ima_show_htable_value_57136 ima_show_htable_value 2 57136 NULL nohasharray |
36744 |
@@ -120207,7 +128054,6 @@ index 0000000..386792a |
36745 |
+hash_netnet6_expire_57191 hash_netnet6_expire 4 57191 NULL |
36746 |
+tt3650_ci_msg_57219 tt3650_ci_msg 4 57219 NULL |
36747 |
+dma_fifo_alloc_57236 dma_fifo_alloc 2-3-5 57236 NULL |
36748 |
-+flush_space_57241 flush_space 0 57241 NULL |
36749 |
+rsxx_cram_write_57244 rsxx_cram_write 3 57244 NULL |
36750 |
+ieee80211_if_fmt_tsf_57249 ieee80211_if_fmt_tsf 3 57249 NULL |
36751 |
+oprofilefs_ulong_from_user_57251 oprofilefs_ulong_from_user 3 57251 NULL |
36752 |
@@ -120230,6 +128076,7 @@ index 0000000..386792a |
36753 |
+__roundup_pow_of_two_57461 __roundup_pow_of_two 0 57461 NULL |
36754 |
+sisusb_clear_vram_57466 sisusb_clear_vram 2-3 57466 NULL |
36755 |
+ieee80211_if_read_flags_57470 ieee80211_if_read_flags 3 57470 NULL |
36756 |
++read_file_skb_rx_57490 read_file_skb_rx 3 57490 NULL |
36757 |
+bnad_debugfs_write_regwr_57500 bnad_debugfs_write_regwr 3 57500 NULL |
36758 |
+skb_headlen_57501 skb_headlen 0 57501 NULL |
36759 |
+copy_in_user_57502 copy_in_user 3 57502 NULL |
36760 |
@@ -120242,7 +128089,6 @@ index 0000000..386792a |
36761 |
+acpi_dev_get_resources_57534 acpi_dev_get_resources 0 57534 NULL |
36762 |
+ptlrpc_lprocfs_hp_ratio_seq_write_57537 ptlrpc_lprocfs_hp_ratio_seq_write 3 57537 NULL |
36763 |
+compat_SyS_process_vm_writev_57542 compat_SyS_process_vm_writev 3-5 57542 NULL |
36764 |
-+obd_unpackmd_57563 obd_unpackmd 0 57563 NULL |
36765 |
+snd_pcm_playback_ioctl1_57569 snd_pcm_playback_ioctl1 0 57569 NULL |
36766 |
+get_bridge_ifindices_57579 get_bridge_ifindices 0 57579 NULL |
36767 |
+ldlm_cli_enqueue_local_57582 ldlm_cli_enqueue_local 11 57582 NULL |
36768 |
@@ -120251,24 +128097,19 @@ index 0000000..386792a |
36769 |
+tx_tx_retry_template_read_57623 tx_tx_retry_template_read 3 57623 NULL |
36770 |
+sisusbcon_putcs_57630 sisusbcon_putcs 3 57630 NULL |
36771 |
+mem_read_57631 mem_read 3 57631 NULL |
36772 |
-+pci_enable_msi_block_57632 pci_enable_msi_block 0 57632 NULL |
36773 |
-+msi_compose_msg_57637 msi_compose_msg 0 57637 NULL |
36774 |
+r3964_write_57662 r3964_write 4 57662 NULL |
36775 |
+proc_ns_readlink_57664 proc_ns_readlink 3 57664 NULL |
36776 |
+__lgwrite_57669 __lgwrite 4 57669 NULL |
36777 |
+i2400m_rx_stats_read_57706 i2400m_rx_stats_read 3 57706 NULL |
36778 |
+ieee80211_if_read_dot11MeshHWMPconfirmationInterval_57722 ieee80211_if_read_dot11MeshHWMPconfirmationInterval 3 57722 NULL |
36779 |
-+vm_find_vqs_57729 vm_find_vqs 0 57729 NULL |
36780 |
-+nouveau_gpio_create__57735 nouveau_gpio_create_ 4-5 57735 NULL |
36781 |
+pppol2tp_recvmsg_57742 pppol2tp_recvmsg 4 57742 NULL |
36782 |
+ieee80211_if_fmt_dot11MeshHWMPpreqMinInterval_57762 ieee80211_if_fmt_dot11MeshHWMPpreqMinInterval 3 57762 NULL |
36783 |
+SYSC_process_vm_writev_57776 SYSC_process_vm_writev 3-5 57776 NULL |
36784 |
-+security_inode_unlink_57791 security_inode_unlink 0 57791 NULL |
36785 |
+ld2_57794 ld2 0 57794 NULL |
36786 |
+ivtv_read_57796 ivtv_read 3 57796 NULL |
36787 |
+ion_test_ioctl_57799 ion_test_ioctl 2 57799 NULL |
36788 |
+bfad_debugfs_read_regrd_57830 bfad_debugfs_read_regrd 3 57830 NULL |
36789 |
-+copy_to_user_57835 copy_to_user 0-3 57835 NULL |
36790 |
++copy_to_user_57835 copy_to_user 3-0 57835 NULL |
36791 |
+flash_read_57843 flash_read 3 57843 NULL |
36792 |
+kiblnd_create_tx_pool_57846 kiblnd_create_tx_pool 2 57846 NULL |
36793 |
+radeon_ttm_gtt_read_57879 radeon_ttm_gtt_read 3 57879 NULL |
36794 |
@@ -120281,8 +128122,10 @@ index 0000000..386792a |
36795 |
+sel_read_handle_unknown_57933 sel_read_handle_unknown 3 57933 NULL |
36796 |
+xfs_mru_cache_create_57943 xfs_mru_cache_create 3 57943 NULL |
36797 |
+key_algorithm_read_57946 key_algorithm_read 3 57946 NULL |
36798 |
++arch_gnttab_init_57948 arch_gnttab_init 2-1 57948 NULL |
36799 |
+ip_set_alloc_57953 ip_set_alloc 1 57953 NULL nohasharray |
36800 |
+ioat3_dca_count_dca_slots_57953 ioat3_dca_count_dca_slots 0 57953 &ip_set_alloc_57953 |
36801 |
++iov_iter_npages_57979 iov_iter_npages 0-2 57979 NULL |
36802 |
+rx_reset_counter_read_58001 rx_reset_counter_read 3 58001 NULL |
36803 |
+iwl_dbgfs_ucode_rx_stats_read_58023 iwl_dbgfs_ucode_rx_stats_read 3 58023 NULL |
36804 |
+io_playback_transfer_58030 io_playback_transfer 4 58030 NULL |
36805 |
@@ -120310,36 +128153,34 @@ index 0000000..386792a |
36806 |
+brcmf_debugfs_sdio_counter_read_58369 brcmf_debugfs_sdio_counter_read 3 58369 NULL |
36807 |
+il_dbgfs_status_read_58388 il_dbgfs_status_read 3 58388 NULL |
36808 |
+_drbd_md_sync_page_io_58403 _drbd_md_sync_page_io 6 58403 NULL |
36809 |
-+idetape_pad_zeros_58406 idetape_pad_zeros 2 58406 NULL |
36810 |
++kvm_mmu_write_protect_pt_masked_58406 kvm_mmu_write_protect_pt_masked 3 58406 NULL nohasharray |
36811 |
++idetape_pad_zeros_58406 idetape_pad_zeros 2 58406 &kvm_mmu_write_protect_pt_masked_58406 |
36812 |
+i2400m_pld_size_58415 i2400m_pld_size 0 58415 NULL |
36813 |
+capabilities_read_58457 capabilities_read 3 58457 NULL |
36814 |
+usnic_vnic_get_resources_58462 usnic_vnic_get_resources 3 58462 NULL |
36815 |
+compat_do_ipt_set_ctl_58466 compat_do_ipt_set_ctl 4 58466 NULL nohasharray |
36816 |
+lpfc_idiag_baracc_read_58466 lpfc_idiag_baracc_read 3 58466 &compat_do_ipt_set_ctl_58466 |
36817 |
+nv_rd08_58472 nv_rd08 0 58472 NULL |
36818 |
-+acpi_tables_sysfs_init_58477 acpi_tables_sysfs_init 0 58477 NULL |
36819 |
+snd_gf1_read_addr_58483 snd_gf1_read_addr 0 58483 NULL |
36820 |
+snd_rme96_capture_copy_58484 snd_rme96_capture_copy 5 58484 NULL |
36821 |
-+btrfs_cont_expand_58498 btrfs_cont_expand 2-3-0 58498 NULL |
36822 |
++btrfs_cont_expand_58498 btrfs_cont_expand 2-3 58498 NULL |
36823 |
+tcf_hash_create_58507 tcf_hash_create 4 58507 NULL |
36824 |
+rndis_add_response_58544 rndis_add_response 2 58544 NULL |
36825 |
+wep_decrypt_fail_read_58567 wep_decrypt_fail_read 3 58567 NULL |
36826 |
+scnprint_mac_oui_58578 scnprint_mac_oui 3-0 58578 NULL |
36827 |
+cur_wm_latency_write_58581 cur_wm_latency_write 3 58581 NULL |
36828 |
-+get_rhf_errstring_58582 get_rhf_errstring 3 58582 NULL |
36829 |
+ea_read_inline_58589 ea_read_inline 0 58589 NULL |
36830 |
+isku_sysfs_read_keys_thumbster_58590 isku_sysfs_read_keys_thumbster 6 58590 NULL |
36831 |
+xip_file_read_58592 xip_file_read 3 58592 NULL |
36832 |
+ecryptfs_write_end_58594 ecryptfs_write_end 5-3 58594 NULL |
36833 |
+radeon_bo_size_58606 radeon_bo_size 0 58606 NULL |
36834 |
++btrfs_direct_IO_58608 btrfs_direct_IO 4 58608 NULL |
36835 |
+skb_copy_to_page_nocache_58624 skb_copy_to_page_nocache 6 58624 NULL |
36836 |
-+filemap_fdatawrite_range_58630 filemap_fdatawrite_range 0 58630 NULL |
36837 |
+tx_tx_start_fw_gen_read_58648 tx_tx_start_fw_gen_read 3 58648 NULL |
36838 |
+iwl_dbgfs_rx_handlers_write_58655 iwl_dbgfs_rx_handlers_write 3 58655 NULL |
36839 |
+find_zero_58685 find_zero 0-1 58685 NULL |
36840 |
+uwb_bce_print_IEs_58686 uwb_bce_print_IEs 4 58686 NULL |
36841 |
+tps6586x_writes_58689 tps6586x_writes 2-3 58689 NULL |
36842 |
-+scsi_setup_command_freelist_58703 scsi_setup_command_freelist 0 58703 NULL |
36843 |
+vx_send_msg_58711 vx_send_msg 0 58711 NULL |
36844 |
+csum_exist_in_range_58730 csum_exist_in_range 2-3 58730 NULL |
36845 |
+frames_to_bytes_58741 frames_to_bytes 0-2 58741 NULL |
36846 |
@@ -120366,10 +128207,9 @@ index 0000000..386792a |
36847 |
+init_pci_cap_msi_perm_59033 init_pci_cap_msi_perm 2 59033 NULL |
36848 |
+selinux_transaction_write_59038 selinux_transaction_write 3 59038 NULL |
36849 |
+crypto_aead_reqsize_59039 crypto_aead_reqsize 0 59039 NULL |
36850 |
-+regmap_bulk_write_59049 regmap_bulk_write 2-4 59049 NULL nohasharray |
36851 |
-+i8042_enable_kbd_port_59049 i8042_enable_kbd_port 0 59049 ®map_bulk_write_59049 |
36852 |
++regmap_bulk_write_59049 regmap_bulk_write 2-4 59049 NULL |
36853 |
+mmc_sd_num_wr_blocks_59112 mmc_sd_num_wr_blocks 0 59112 NULL |
36854 |
-+sta_tx_latency_stat_table_59122 sta_tx_latency_stat_table 0-4-5 59122 NULL nohasharray |
36855 |
++sta_tx_latency_stat_table_59122 sta_tx_latency_stat_table 5-4-0 59122 NULL nohasharray |
36856 |
+scsi_io_completion_59122 scsi_io_completion 2 59122 &sta_tx_latency_stat_table_59122 |
36857 |
+nfc_llcp_send_i_frame_59130 nfc_llcp_send_i_frame 3 59130 NULL |
36858 |
+framebuffer_alloc_59145 framebuffer_alloc 1 59145 NULL nohasharray |
36859 |
@@ -120380,15 +128220,12 @@ index 0000000..386792a |
36860 |
+setup_window_59178 setup_window 4-2-5-7 59178 NULL |
36861 |
+ocfs2_move_extent_59187 ocfs2_move_extent 2-5 59187 NULL |
36862 |
+xfs_iext_realloc_indirect_59211 xfs_iext_realloc_indirect 2 59211 NULL |
36863 |
-+check_mapped_selector_name_59216 check_mapped_selector_name 5 59216 NULL |
36864 |
+dt3155_read_59226 dt3155_read 3 59226 NULL |
36865 |
+paging64_gpte_to_gfn_lvl_59229 paging64_gpte_to_gfn_lvl 0-2-1 59229 NULL |
36866 |
+nla_len_59258 nla_len 0 59258 NULL |
36867 |
+drbd_bm_write_page_59290 drbd_bm_write_page 2 59290 NULL |
36868 |
+btrfs_insert_dir_item_59304 btrfs_insert_dir_item 4 59304 NULL |
36869 |
+fd_copyout_59323 fd_copyout 3 59323 NULL |
36870 |
-+read_9287_modal_eeprom_59327 read_9287_modal_eeprom 3 59327 NULL |
36871 |
-+set_state_private_59336 set_state_private 0 59336 NULL |
36872 |
+rx_defrag_in_process_called_read_59338 rx_defrag_in_process_called_read 3 59338 NULL |
36873 |
+xfs_attrmulti_attr_set_59346 xfs_attrmulti_attr_set 4 59346 NULL |
36874 |
+f2fs_fallocate_59377 f2fs_fallocate 4-3 59377 NULL |
36875 |
@@ -120396,31 +128233,25 @@ index 0000000..386792a |
36876 |
+journal_init_dev_59384 journal_init_dev 5 59384 NULL |
36877 |
+__net_get_random_once_59389 __net_get_random_once 2 59389 NULL |
36878 |
+isku_sysfs_read_keys_function_59412 isku_sysfs_read_keys_function 6 59412 NULL |
36879 |
-+pci_ctrl_read_59424 pci_ctrl_read 0 59424 NULL |
36880 |
+vxge_hw_ring_rxds_per_block_get_59425 vxge_hw_ring_rxds_per_block_get 0 59425 NULL |
36881 |
-+snd_pcm_tstamp_59431 snd_pcm_tstamp 0 59431 NULL |
36882 |
+SyS_sched_setaffinity_59442 SyS_sched_setaffinity 2 59442 NULL |
36883 |
+fs_path_ensure_buf_59445 fs_path_ensure_buf 2 59445 NULL |
36884 |
+tipc_recv_stream_59456 tipc_recv_stream 4 59456 NULL |
36885 |
+_iwl_dbgfs_bcast_filters_write_59491 _iwl_dbgfs_bcast_filters_write 3 59491 NULL |
36886 |
-+rtw_cfg80211_set_mgnt_wpsp2pie_59497 rtw_cfg80211_set_mgnt_wpsp2pie 3 59497 NULL |
36887 |
+ib_copy_from_udata_59502 ib_copy_from_udata 3 59502 NULL |
36888 |
+C_SYSC_get_mempolicy_59516 C_SYSC_get_mempolicy 3 59516 NULL |
36889 |
+mic_vringh_copy_59523 mic_vringh_copy 4 59523 NULL |
36890 |
-+msix_setup_entries_59545 msix_setup_entries 0 59545 NULL nohasharray |
36891 |
-+idr_alloc_59545 idr_alloc 0 59545 &msix_setup_entries_59545 |
36892 |
+mpi_get_nbits_59551 mpi_get_nbits 0 59551 NULL |
36893 |
+tunables_write_59563 tunables_write 3 59563 NULL |
36894 |
+bio_split_59564 bio_split 2 59564 NULL |
36895 |
+__copy_from_user_ll_nozero_59571 __copy_from_user_ll_nozero 0-3 59571 NULL |
36896 |
+memdup_user_59590 memdup_user 2 59590 NULL |
36897 |
-+xrcdn_free_res_59616 xrcdn_free_res 5 59616 NULL nohasharray |
36898 |
-+mem_fwlog_free_mem_blks_read_59616 mem_fwlog_free_mem_blks_read 3 59616 &xrcdn_free_res_59616 |
36899 |
++mem_fwlog_free_mem_blks_read_59616 mem_fwlog_free_mem_blks_read 3 59616 NULL nohasharray |
36900 |
++xrcdn_free_res_59616 xrcdn_free_res 5 59616 &mem_fwlog_free_mem_blks_read_59616 |
36901 |
+ath6kl_endpoint_stats_write_59621 ath6kl_endpoint_stats_write 3 59621 NULL |
36902 |
+mtrr_write_59622 mtrr_write 3 59622 NULL |
36903 |
+find_first_zero_bit_59636 find_first_zero_bit 0 59636 NULL |
36904 |
+SyS_setdomainname_59646 SyS_setdomainname 2 59646 NULL |
36905 |
-+file_update_time_59647 file_update_time 0 59647 NULL |
36906 |
+hidraw_read_59650 hidraw_read 3 59650 NULL |
36907 |
+v9fs_xattr_set_acl_59651 v9fs_xattr_set_acl 4 59651 NULL |
36908 |
+__devcgroup_check_permission_59665 __devcgroup_check_permission 0 59665 NULL |
36909 |
@@ -120428,15 +128259,12 @@ index 0000000..386792a |
36910 |
+alloc_dca_provider_59670 alloc_dca_provider 2 59670 NULL |
36911 |
+mic_calc_failure_read_59700 mic_calc_failure_read 3 59700 NULL |
36912 |
+ioperm_get_59701 ioperm_get 4-3 59701 NULL |
36913 |
-+snd_pcm_info_user_59711 snd_pcm_info_user 0 59711 NULL |
36914 |
+prism2_info_scanresults_59729 prism2_info_scanresults 3 59729 NULL |
36915 |
+ieee80211_if_read_fwded_unicast_59740 ieee80211_if_read_fwded_unicast 3 59740 NULL |
36916 |
-+fat_direct_IO_59741 fat_direct_IO 4 59741 NULL |
36917 |
+qib_decode_7220_sdma_errs_59745 qib_decode_7220_sdma_errs 4 59745 NULL |
36918 |
+strnlen_59746 strnlen 0 59746 NULL |
36919 |
+ext3_acl_count_59754 ext3_acl_count 0-1 59754 NULL |
36920 |
-+long_retry_limit_read_59766 long_retry_limit_read 3 59766 NULL nohasharray |
36921 |
-+cap_inode_need_killpriv_59766 cap_inode_need_killpriv 0 59766 &long_retry_limit_read_59766 |
36922 |
++long_retry_limit_read_59766 long_retry_limit_read 3 59766 NULL |
36923 |
+venus_remove_59781 venus_remove 4 59781 NULL |
36924 |
+mei_nfc_recv_59784 mei_nfc_recv 3 59784 NULL |
36925 |
+C_SYSC_preadv_59801 C_SYSC_preadv 3 59801 NULL |
36926 |
@@ -120445,6 +128273,7 @@ index 0000000..386792a |
36927 |
+ieee80211_if_read_dot11MeshHWMPmaxPREQretries_59829 ieee80211_if_read_dot11MeshHWMPmaxPREQretries 3 59829 NULL |
36928 |
+gspca_dev_probe2_59833 gspca_dev_probe2 4 59833 NULL |
36929 |
+regmap_raw_write_async_59849 regmap_raw_write_async 2-4 59849 NULL |
36930 |
++biovec_create_pool_59878 biovec_create_pool 1 59878 NULL |
36931 |
+pvr2_ioread_set_sync_key_59882 pvr2_ioread_set_sync_key 3 59882 NULL |
36932 |
+l2cap_sock_recvmsg_59886 l2cap_sock_recvmsg 4 59886 NULL |
36933 |
+ffs_prepare_buffer_59892 ffs_prepare_buffer 2 59892 NULL |
36934 |
@@ -120469,6 +128298,7 @@ index 0000000..386792a |
36935 |
+compat_writev_60063 compat_writev 3 60063 NULL |
36936 |
+ath6kl_listen_int_write_60066 ath6kl_listen_int_write 3 60066 NULL |
36937 |
+c4iw_num_stags_60073 c4iw_num_stags 0 60073 NULL |
36938 |
++usb_os_desc_prepare_interf_dir_60075 usb_os_desc_prepare_interf_dir 2 60075 NULL |
36939 |
+rxrpc_kernel_send_data_60083 rxrpc_kernel_send_data 3 60083 NULL |
36940 |
+ieee80211_if_fmt_fwded_frames_60103 ieee80211_if_fmt_fwded_frames 3 60103 NULL |
36941 |
+SYSC_msgsnd_60113 SYSC_msgsnd 3 60113 NULL |
36942 |
@@ -120477,11 +128307,10 @@ index 0000000..386792a |
36943 |
+ld_usb_read_60156 ld_usb_read 3 60156 NULL |
36944 |
+jmb38x_ms_count_slots_60164 jmb38x_ms_count_slots 0 60164 NULL |
36945 |
+init_state_60165 init_state 2 60165 NULL |
36946 |
-+jffs2_alloc_full_dirent_60179 jffs2_alloc_full_dirent 1 60179 NULL nohasharray |
36947 |
-+sg_build_sgat_60179 sg_build_sgat 3 60179 &jffs2_alloc_full_dirent_60179 |
36948 |
++sg_build_sgat_60179 sg_build_sgat 3 60179 NULL nohasharray |
36949 |
++jffs2_alloc_full_dirent_60179 jffs2_alloc_full_dirent 1 60179 &sg_build_sgat_60179 |
36950 |
+fuse_async_req_send_60183 fuse_async_req_send 0-3 60183 NULL |
36951 |
-+arch_setup_msi_irqs_60193 arch_setup_msi_irqs 0 60193 NULL nohasharray |
36952 |
-+rx_rx_tkip_replays_read_60193 rx_rx_tkip_replays_read 3 60193 &arch_setup_msi_irqs_60193 |
36953 |
++rx_rx_tkip_replays_read_60193 rx_rx_tkip_replays_read 3 60193 NULL |
36954 |
+qib_reg_phys_mr_60202 qib_reg_phys_mr 3 60202 NULL |
36955 |
+btrfs_get_token_16_60220 btrfs_get_token_16 0 60220 NULL |
36956 |
+irq_alloc_domain_generic_chips_60264 irq_alloc_domain_generic_chips 2-3 60264 NULL |
36957 |
@@ -120508,16 +128337,15 @@ index 0000000..386792a |
36958 |
+v9fs_fid_readn_60544 v9fs_fid_readn 4 60544 NULL |
36959 |
+nonpaging_map_60551 nonpaging_map 4 60551 NULL |
36960 |
+osc_lockless_truncate_seq_write_60553 osc_lockless_truncate_seq_write 3 60553 NULL |
36961 |
++xfs_vm_direct_IO_60557 xfs_vm_direct_IO 4 60557 NULL |
36962 |
+tracing_entries_write_60563 tracing_entries_write 3 60563 NULL |
36963 |
+memblock_virt_alloc_try_nid_nopanic_60604 memblock_virt_alloc_try_nid_nopanic 1 60604 NULL |
36964 |
-+inode_change_ok_60614 inode_change_ok 0 60614 NULL |
36965 |
+skb_transport_offset_60619 skb_transport_offset 0 60619 NULL |
36966 |
+wl1273_fm_fops_write_60621 wl1273_fm_fops_write 3 60621 NULL |
36967 |
+acl_alloc_stack_init_60630 acl_alloc_stack_init 1 60630 NULL |
36968 |
+__proc_lnet_stats_60647 __proc_lnet_stats 5 60647 NULL |
36969 |
+if_sdio_host_to_card_60666 if_sdio_host_to_card 4 60666 NULL |
36970 |
+ieee80211_if_read_dot11MeshConfirmTimeout_60670 ieee80211_if_read_dot11MeshConfirmTimeout 3 60670 NULL |
36971 |
-+vga_rcrt_60731 vga_rcrt 0 60731 NULL |
36972 |
+snd_ice1712_ds_read_60754 snd_ice1712_ds_read 0 60754 NULL |
36973 |
+raid_status_60755 raid_status 5 60755 NULL |
36974 |
+sel_write_checkreqprot_60774 sel_write_checkreqprot 3 60774 NULL |
36975 |
@@ -120525,7 +128353,6 @@ index 0000000..386792a |
36976 |
+acl_alloc_num_60778 acl_alloc_num 1-2 60778 NULL |
36977 |
+snd_pcm_oss_readv3_60792 snd_pcm_oss_readv3 3 60792 NULL |
36978 |
+pwr_tx_with_ps_read_60851 pwr_tx_with_ps_read 3 60851 NULL |
36979 |
-+__clone_and_map_data_bio_60861 __clone_and_map_data_bio 3-4 60861 NULL |
36980 |
+alloc_buf_60864 alloc_buf 3-2 60864 NULL |
36981 |
+generic_writepages_60871 generic_writepages 0 60871 NULL |
36982 |
+ubifs_read_one_lp_60882 ubifs_read_one_lp 0 60882 NULL |
36983 |
@@ -120538,16 +128365,15 @@ index 0000000..386792a |
36984 |
+mwifiex_alloc_sdio_mpa_buffers_60961 mwifiex_alloc_sdio_mpa_buffers 2-3 60961 NULL |
36985 |
+__a2mp_build_60987 __a2mp_build 3 60987 NULL |
36986 |
+hsc_msg_alloc_60990 hsc_msg_alloc 1 60990 NULL |
36987 |
++generic_file_direct_write_60995 generic_file_direct_write 0 60995 NULL |
36988 |
+ath6kl_lrssi_roam_read_61022 ath6kl_lrssi_roam_read 3 61022 NULL |
36989 |
+graph_depth_write_61024 graph_depth_write 3 61024 NULL |
36990 |
+sdhci_pltfm_register_61031 sdhci_pltfm_register 3 61031 NULL |
36991 |
+lpfc_idiag_queacc_write_61043 lpfc_idiag_queacc_write 3 61043 NULL |
36992 |
+symtab_init_61050 symtab_init 2 61050 NULL |
36993 |
+fuse_send_write_61053 fuse_send_write 0-4 61053 NULL |
36994 |
-+snd_pcm_pause_61054 snd_pcm_pause 0 61054 NULL |
36995 |
+bitmap_scnlistprintf_61062 bitmap_scnlistprintf 2-0 61062 NULL |
36996 |
+ahash_align_buffer_size_61070 ahash_align_buffer_size 0-1-2 61070 NULL |
36997 |
-+snd_pcm_update_hw_ptr0_61084 snd_pcm_update_hw_ptr0 0 61084 NULL |
36998 |
+get_derived_key_61100 get_derived_key 4 61100 NULL |
36999 |
+i40e_calculate_l2fpm_size_61104 i40e_calculate_l2fpm_size 0-4-3-2-1 61104 NULL |
37000 |
+alloc_chrdev_region_61112 alloc_chrdev_region 0 61112 NULL |
37001 |
@@ -120558,20 +128384,19 @@ index 0000000..386792a |
37002 |
+event_oom_late_read_61175 event_oom_late_read 3 61175 &pair_device_61175 |
37003 |
+dio_bio_add_page_61178 dio_bio_add_page 0 61178 NULL |
37004 |
+SyS_prctl_61202 SyS_prctl 4 61202 NULL |
37005 |
-+arch_hibernation_header_save_61212 arch_hibernation_header_save 0 61212 NULL |
37006 |
++srp_create_fr_pool_61207 srp_create_fr_pool 3 61207 NULL |
37007 |
+smk_read_ambient_61220 smk_read_ambient 3 61220 NULL |
37008 |
+v9fs_mmap_file_read_61262 v9fs_mmap_file_read 3 61262 NULL |
37009 |
+btrfs_bio_alloc_61270 btrfs_bio_alloc 3 61270 NULL nohasharray |
37010 |
-+find_get_pages_tag_61270 find_get_pages_tag 0 61270 &btrfs_bio_alloc_61270 nohasharray |
37011 |
-+ifalias_store_61270 ifalias_store 4 61270 &find_get_pages_tag_61270 |
37012 |
-+vortex_adbdma_getlinearpos_61283 vortex_adbdma_getlinearpos 0 61283 NULL nohasharray |
37013 |
-+hfsplus_getxattr_finder_info_61283 hfsplus_getxattr_finder_info 0 61283 &vortex_adbdma_getlinearpos_61283 |
37014 |
++find_get_pages_tag_61270 find_get_pages_tag 0 61270 &btrfs_bio_alloc_61270 |
37015 |
++hfsplus_getxattr_finder_info_61283 hfsplus_getxattr_finder_info 0 61283 NULL nohasharray |
37016 |
++vortex_adbdma_getlinearpos_61283 vortex_adbdma_getlinearpos 0 61283 &hfsplus_getxattr_finder_info_61283 |
37017 |
+nvme_trans_copy_to_user_61288 nvme_trans_copy_to_user 3 61288 NULL |
37018 |
+xfer_from_user_61307 xfer_from_user 3 61307 NULL |
37019 |
+xfrm_user_sec_ctx_size_61320 xfrm_user_sec_ctx_size 0 61320 NULL |
37020 |
+C_SYSC_msgsnd_61330 C_SYSC_msgsnd 3 61330 NULL |
37021 |
+write_file_spectral_short_repeat_61335 write_file_spectral_short_repeat 3 61335 NULL |
37022 |
-+st5481_setup_isocpipes_61340 st5481_setup_isocpipes 6-4 61340 NULL |
37023 |
++st5481_setup_isocpipes_61340 st5481_setup_isocpipes 4-6 61340 NULL |
37024 |
+rx_rx_wa_ba_not_expected_read_61341 rx_rx_wa_ba_not_expected_read 3 61341 NULL |
37025 |
+__dm_get_reserved_ios_61342 __dm_get_reserved_ios 0-3-2 61342 NULL |
37026 |
+debug_debug4_read_61367 debug_debug4_read 3 61367 NULL |
37027 |
@@ -120598,10 +128423,7 @@ index 0000000..386792a |
37028 |
+resize_stripes_61650 resize_stripes 2 61650 NULL |
37029 |
+ttm_page_pool_free_61661 ttm_page_pool_free 2-0 61661 NULL |
37030 |
+insert_one_name_61668 insert_one_name 7 61668 NULL |
37031 |
-+snd_pcm_playback_avail_61671 snd_pcm_playback_avail 0 61671 NULL |
37032 |
-+qib_format_hwmsg_61679 qib_format_hwmsg 2 61679 NULL |
37033 |
+lock_loop_61681 lock_loop 1 61681 NULL |
37034 |
-+__do_tune_cpucache_61684 __do_tune_cpucache 2 61684 NULL |
37035 |
+filter_read_61692 filter_read 3 61692 NULL |
37036 |
+iov_length_61716 iov_length 0 61716 NULL |
37037 |
+fragmentation_threshold_read_61718 fragmentation_threshold_read 3 61718 NULL |
37038 |
@@ -120618,18 +128440,13 @@ index 0000000..386792a |
37039 |
+get_fw_name_61874 get_fw_name 3 61874 NULL |
37040 |
+btrfs_ioctl_clone_61886 btrfs_ioctl_clone 3-4-5 61886 NULL |
37041 |
+lprocfs_write_frac_u64_helper_61897 lprocfs_write_frac_u64_helper 2 61897 NULL |
37042 |
-+lov_mds_md_stripecnt_61899 lov_mds_md_stripecnt 0-1 61899 NULL |
37043 |
-+clear_refs_write_61904 clear_refs_write 3 61904 NULL |
37044 |
-+kernfs_name_61910 kernfs_name 3 61910 NULL |
37045 |
+rx_filter_arp_filter_read_61914 rx_filter_arp_filter_read 3 61914 NULL |
37046 |
+au0828_init_isoc_61917 au0828_init_isoc 3-2-4 61917 NULL |
37047 |
+sctp_sendmsg_61919 sctp_sendmsg 4 61919 NULL |
37048 |
-+SyS_kexec_load_61946 SyS_kexec_load 2 61946 NULL |
37049 |
+il4965_ucode_rx_stats_read_61948 il4965_ucode_rx_stats_read 3 61948 NULL |
37050 |
+squashfs_read_id_index_table_61961 squashfs_read_id_index_table 4 61961 NULL |
37051 |
+fix_read_error_61965 fix_read_error 4 61965 NULL |
37052 |
+cow_file_range_61979 cow_file_range 3 61979 NULL |
37053 |
-+set_extent_delalloc_61982 set_extent_delalloc 0 61982 NULL |
37054 |
+dequeue_event_62000 dequeue_event 3 62000 NULL |
37055 |
+xt_compat_match_offset_62011 xt_compat_match_offset 0 62011 NULL |
37056 |
+SyS_setxattr_62019 SyS_setxattr 4 62019 NULL |
37057 |
@@ -120639,16 +128456,12 @@ index 0000000..386792a |
37058 |
+sctp_user_addto_chunk_62047 sctp_user_addto_chunk 2-3 62047 NULL |
37059 |
+do_pselect_62061 do_pselect 1 62061 NULL |
37060 |
+pcpu_alloc_bootmem_62074 pcpu_alloc_bootmem 2 62074 NULL |
37061 |
-+fat_setattr_62084 fat_setattr 0 62084 NULL |
37062 |
+jffs2_security_setxattr_62107 jffs2_security_setxattr 4 62107 NULL |
37063 |
-+btrfs_direct_IO_62114 btrfs_direct_IO 4 62114 NULL |
37064 |
+ip_recv_error_62117 ip_recv_error 3 62117 NULL |
37065 |
+generic_block_fiemap_62122 generic_block_fiemap 4 62122 NULL |
37066 |
+llc_ui_header_len_62131 llc_ui_header_len 0 62131 NULL |
37067 |
-+qib_diag_write_62133 qib_diag_write 3 62133 NULL nohasharray |
37068 |
-+kobject_add_varg_62133 kobject_add_varg 0 62133 &qib_diag_write_62133 |
37069 |
-+ql_status_62135 ql_status 5 62135 NULL nohasharray |
37070 |
-+device_add_attrs_62135 device_add_attrs 0 62135 &ql_status_62135 |
37071 |
++qib_diag_write_62133 qib_diag_write 3 62133 NULL |
37072 |
++ql_status_62135 ql_status 5 62135 NULL |
37073 |
+video_usercopy_62151 video_usercopy 2 62151 NULL |
37074 |
+SyS_getxattr_62166 SyS_getxattr 4 62166 NULL |
37075 |
+prism54_wpa_bss_ie_get_62173 prism54_wpa_bss_ie_get 0 62173 NULL |
37076 |
@@ -120657,7 +128470,6 @@ index 0000000..386792a |
37077 |
+sock_kmalloc_62205 sock_kmalloc 2 62205 NULL |
37078 |
+smk_read_syslog_62227 smk_read_syslog 3 62227 NULL |
37079 |
+SYSC_setgroups16_62232 SYSC_setgroups16 1 62232 NULL |
37080 |
-+nfsd_read_file_62241 nfsd_read_file 6 62241 NULL |
37081 |
+ion_handle_test_dma_62262 ion_handle_test_dma 4-5 62262 NULL |
37082 |
+il_dbgfs_sram_read_62296 il_dbgfs_sram_read 3 62296 NULL |
37083 |
+sparse_early_usemaps_alloc_pgdat_section_62304 sparse_early_usemaps_alloc_pgdat_section 2 62304 NULL |
37084 |
@@ -120670,8 +128482,7 @@ index 0000000..386792a |
37085 |
+rx_rx_timeout_read_62389 rx_rx_timeout_read 3 62389 NULL |
37086 |
+altera_irscan_62396 altera_irscan 2 62396 NULL |
37087 |
+set_ssp_62411 set_ssp 4 62411 NULL |
37088 |
-+udf_expand_file_adinicb_62470 udf_expand_file_adinicb 0 62470 NULL |
37089 |
-+ext_rts51x_sd_execute_read_data_62501 ext_rts51x_sd_execute_read_data 9 62501 NULL |
37090 |
++tracing_saved_cmdlines_size_read_62491 tracing_saved_cmdlines_size_read 3 62491 NULL |
37091 |
+pep_sendmsg_62524 pep_sendmsg 4 62524 NULL |
37092 |
+test_iso_queue_62534 test_iso_queue 5 62534 NULL |
37093 |
+debugfs_read_62535 debugfs_read 3 62535 NULL |
37094 |
@@ -120679,7 +128490,6 @@ index 0000000..386792a |
37095 |
+qib_refresh_qsfp_cache_62547 qib_refresh_qsfp_cache 0 62547 NULL |
37096 |
+xfrm_user_policy_62573 xfrm_user_policy 4 62573 NULL |
37097 |
+get_subdir_62581 get_subdir 3 62581 NULL |
37098 |
-+nfsd_vfs_read_62605 nfsd_vfs_read 6 62605 NULL |
37099 |
+dut_mode_write_62630 dut_mode_write 3 62630 NULL |
37100 |
+vfs_fsync_range_62635 vfs_fsync_range 0 62635 NULL |
37101 |
+lpfc_sli4_queue_alloc_62646 lpfc_sli4_queue_alloc 3 62646 NULL |
37102 |
@@ -120691,7 +128501,9 @@ index 0000000..386792a |
37103 |
+key_replays_read_62746 key_replays_read 3 62746 NULL |
37104 |
+lov_verify_lmm_62747 lov_verify_lmm 2 62747 NULL |
37105 |
+mwifiex_rdeeprom_write_62754 mwifiex_rdeeprom_write 3 62754 NULL |
37106 |
-+ax25_sendmsg_62770 ax25_sendmsg 4 62770 NULL |
37107 |
++mxt_obj_instances_62764 mxt_obj_instances 0 62764 NULL |
37108 |
++copy_page_to_iter_iovec_62770 copy_page_to_iter_iovec 3-0 62770 NULL nohasharray |
37109 |
++ax25_sendmsg_62770 ax25_sendmsg 4 62770 ©_page_to_iter_iovec_62770 |
37110 |
+C_SYSC_ipc_62776 C_SYSC_ipc 3 62776 NULL |
37111 |
+SyS_sched_getaffinity_62786 SyS_sched_getaffinity 2 62786 NULL |
37112 |
+dm_stats_account_io_62787 dm_stats_account_io 3 62787 NULL |
37113 |
@@ -120700,7 +128512,6 @@ index 0000000..386792a |
37114 |
+bio_get_nr_vecs_62838 bio_get_nr_vecs 0 62838 NULL |
37115 |
+xlog_recover_add_to_trans_62839 xlog_recover_add_to_trans 4 62839 NULL |
37116 |
+rx_fcs_err_read_62844 rx_fcs_err_read 3 62844 NULL |
37117 |
-+read_nic_io_dword_62859 read_nic_io_dword 0 62859 NULL |
37118 |
+l2tp_ip6_recvmsg_62874 l2tp_ip6_recvmsg 4 62874 NULL |
37119 |
+aoechr_write_62883 aoechr_write 3 62883 NULL |
37120 |
+if_spi_host_to_card_62890 if_spi_host_to_card 4 62890 NULL |
37121 |
@@ -120708,6 +128519,7 @@ index 0000000..386792a |
37122 |
+getdqbuf_62908 getdqbuf 1 62908 NULL |
37123 |
+ll_statahead_agl_seq_write_62928 ll_statahead_agl_seq_write 3 62928 NULL |
37124 |
+agp_create_user_memory_62955 agp_create_user_memory 1 62955 NULL |
37125 |
++hwdep_read_62992 hwdep_read 3 62992 NULL |
37126 |
+kstrtoull_from_user_63026 kstrtoull_from_user 2 63026 NULL |
37127 |
+__vb2_perform_fileio_63033 __vb2_perform_fileio 3 63033 NULL |
37128 |
+pipeline_defrag_to_csum_swi_read_63037 pipeline_defrag_to_csum_swi_read 3 63037 NULL |
37129 |
@@ -120718,7 +128530,6 @@ index 0000000..386792a |
37130 |
+sep_prepare_input_output_dma_table_in_dcb_63087 sep_prepare_input_output_dma_table_in_dcb 4-5 63087 NULL |
37131 |
+iwl_dbgfs_sensitivity_read_63116 iwl_dbgfs_sensitivity_read 3 63116 NULL |
37132 |
+ext4_chunk_trans_blocks_63123 ext4_chunk_trans_blocks 0-2 63123 NULL |
37133 |
-+snd_pcm_status_user_63140 snd_pcm_status_user 0 63140 NULL |
37134 |
+ubifs_change_one_lp_63157 ubifs_change_one_lp 0 63157 NULL |
37135 |
+smk_write_revoke_subj_63173 smk_write_revoke_subj 3 63173 NULL |
37136 |
+SyS_syslog_63178 SyS_syslog 3 63178 NULL |
37137 |
@@ -120728,25 +128539,23 @@ index 0000000..386792a |
37138 |
+xfs_dir2_leaf_getdents_63262 xfs_dir2_leaf_getdents 3 63262 NULL |
37139 |
+iwl_dbgfs_fw_error_dump_read_63263 iwl_dbgfs_fw_error_dump_read 3 63263 NULL |
37140 |
+raid5_resize_63306 raid5_resize 2 63306 NULL |
37141 |
++nfsd_vfs_read_63307 nfsd_vfs_read 5 63307 NULL |
37142 |
+ath10k_read_fw_dbglog_63323 ath10k_read_fw_dbglog 3 63323 NULL |
37143 |
+proc_info_read_63344 proc_info_read 3 63344 NULL |
37144 |
+ps_upsd_max_sptime_read_63362 ps_upsd_max_sptime_read 3 63362 NULL |
37145 |
+idmouse_read_63374 idmouse_read 3 63374 NULL |
37146 |
-+usbnet_read_cmd_nopm_63388 usbnet_read_cmd_nopm 7 63388 NULL nohasharray |
37147 |
-+edac_pci_alloc_ctl_info_63388 edac_pci_alloc_ctl_info 1 63388 &usbnet_read_cmd_nopm_63388 |
37148 |
++edac_pci_alloc_ctl_info_63388 edac_pci_alloc_ctl_info 1 63388 NULL nohasharray |
37149 |
++usbnet_read_cmd_nopm_63388 usbnet_read_cmd_nopm 7 63388 &edac_pci_alloc_ctl_info_63388 |
37150 |
+rxpipe_missed_beacon_host_int_trig_rx_data_read_63405 rxpipe_missed_beacon_host_int_trig_rx_data_read 3 63405 NULL |
37151 |
-+nouveau_event_create_63411 nouveau_event_create 1 63411 NULL |
37152 |
+l2cap_sock_sendmsg_63427 l2cap_sock_sendmsg 4 63427 NULL |
37153 |
+nfsd_symlink_63442 nfsd_symlink 6 63442 NULL |
37154 |
+si5351_bulk_write_63468 si5351_bulk_write 2-3 63468 NULL |
37155 |
+snd_info_entry_write_63474 snd_info_entry_write 3 63474 NULL |
37156 |
+reada_find_extent_63486 reada_find_extent 2 63486 NULL |
37157 |
-+read_kcore_63488 read_kcore 3 63488 NULL |
37158 |
+iwl_dbgfs_bcast_filters_read_63489 iwl_dbgfs_bcast_filters_read 3 63489 NULL |
37159 |
+snd_pcm_plug_write_transfer_63503 snd_pcm_plug_write_transfer 0-3 63503 NULL |
37160 |
+efx_mcdi_rpc_async_63529 efx_mcdi_rpc_async 4-5 63529 NULL |
37161 |
-+ubi_more_leb_change_data_63534 ubi_more_leb_change_data 4 63534 NULL nohasharray |
37162 |
-+generic_cont_expand_simple_63534 generic_cont_expand_simple 0 63534 &ubi_more_leb_change_data_63534 |
37163 |
++ubi_more_leb_change_data_63534 ubi_more_leb_change_data 4 63534 NULL |
37164 |
+write_file_spectral_period_63536 write_file_spectral_period 3 63536 NULL |
37165 |
+if_sdio_read_scratch_63540 if_sdio_read_scratch 0 63540 NULL |
37166 |
+append_to_buffer_63550 append_to_buffer 3 63550 NULL |
37167 |
@@ -120766,7 +128575,6 @@ index 0000000..386792a |
37168 |
+btrfs_insert_delayed_dir_index_63720 btrfs_insert_delayed_dir_index 4 63720 NULL |
37169 |
+selinux_secctx_to_secid_63744 selinux_secctx_to_secid 2 63744 NULL |
37170 |
+snd_pcm_oss_read1_63771 snd_pcm_oss_read1 3 63771 NULL |
37171 |
-+snd_pcm_link_63772 snd_pcm_link 0 63772 NULL |
37172 |
+snd_opl4_mem_proc_read_63774 snd_opl4_mem_proc_read 5 63774 NULL |
37173 |
+spidev_compat_ioctl_63778 spidev_compat_ioctl 2 63778 NULL |
37174 |
+mwifiex_11n_create_rx_reorder_tbl_63806 mwifiex_11n_create_rx_reorder_tbl 4 63806 NULL |
37175 |
@@ -120788,6 +128596,7 @@ index 0000000..386792a |
37176 |
+SyS_rt_sigpending_64018 SyS_rt_sigpending 2 64018 NULL |
37177 |
+dbAllocDmapLev_64030 dbAllocDmapLev 0 64030 NULL |
37178 |
+SyS_fsetxattr_64039 SyS_fsetxattr 4 64039 NULL |
37179 |
++__sock_create_64069 __sock_create 0 64069 NULL |
37180 |
+get_u8_64076 get_u8 0 64076 NULL |
37181 |
+xilly_malloc_64077 xilly_malloc 2 64077 NULL |
37182 |
+sl_realloc_bufs_64086 sl_realloc_bufs 2 64086 NULL |
37183 |
@@ -120806,25 +128615,22 @@ index 0000000..386792a |
37184 |
+bnx2x_vf_mcast_64166 bnx2x_vf_mcast 4 64166 NULL |
37185 |
+cpumask_scnprintf_64170 cpumask_scnprintf 0-2 64170 NULL |
37186 |
+kernfs_iop_setxattr_64220 kernfs_iop_setxattr 4 64220 NULL |
37187 |
-+xfs_vm_direct_IO_64223 xfs_vm_direct_IO 4 64223 NULL |
37188 |
+read_pulse_64227 read_pulse 0-3 64227 NULL |
37189 |
+ea_len_64229 ea_len 0 64229 NULL |
37190 |
+io_capture_transfer_64276 io_capture_transfer 4 64276 NULL |
37191 |
+btrfs_file_extent_offset_64278 btrfs_file_extent_offset 0 64278 NULL |
37192 |
+sta_current_tx_rate_read_64286 sta_current_tx_rate_read 3 64286 NULL |
37193 |
-+xfs_dir_cilookup_result_64288 xfs_dir_cilookup_result 3 64288 NULL nohasharray |
37194 |
-+event_id_read_64288 event_id_read 3 64288 &xfs_dir_cilookup_result_64288 |
37195 |
++event_id_read_64288 event_id_read 3 64288 NULL nohasharray |
37196 |
++xfs_dir_cilookup_result_64288 xfs_dir_cilookup_result 3 64288 &event_id_read_64288 |
37197 |
+ocfs2_block_check_validate_bhs_64302 ocfs2_block_check_validate_bhs 0 64302 NULL |
37198 |
+snd_hda_get_sub_nodes_64304 snd_hda_get_sub_nodes 0 64304 NULL |
37199 |
+error_error_bar_retry_read_64305 error_error_bar_retry_read 3 64305 NULL |
37200 |
+sisusbcon_clear_64329 sisusbcon_clear 4-3-5 64329 NULL |
37201 |
+ts_write_64336 ts_write 3 64336 NULL |
37202 |
+usbtmc_write_64340 usbtmc_write 3 64340 NULL |
37203 |
-+qlcnic_82xx_calculate_msix_vector_64354 qlcnic_82xx_calculate_msix_vector 0 64354 NULL |
37204 |
+user_regset_copyin_64360 user_regset_copyin 7 64360 NULL |
37205 |
+wlc_phy_loadsampletable_nphy_64367 wlc_phy_loadsampletable_nphy 3 64367 NULL |
37206 |
-+reg_create_64372 reg_create 5 64372 NULL nohasharray |
37207 |
-+bnx2_enable_msix_64372 bnx2_enable_msix 2 64372 ®_create_64372 |
37208 |
++reg_create_64372 reg_create 5 64372 NULL |
37209 |
+ilo_write_64378 ilo_write 3 64378 NULL |
37210 |
+btrfs_map_block_64379 btrfs_map_block 3 64379 NULL |
37211 |
+vmcs_readl_64381 vmcs_readl 0 64381 NULL |
37212 |
@@ -120836,7 +128642,6 @@ index 0000000..386792a |
37213 |
+oom_adj_write_64428 oom_adj_write 3 64428 NULL |
37214 |
+read_file_spectral_short_repeat_64431 read_file_spectral_short_repeat 3 64431 NULL |
37215 |
+ax25_recvmsg_64441 ax25_recvmsg 4 64441 NULL |
37216 |
-+__i2c_add_numbered_adapter_64445 __i2c_add_numbered_adapter 0 64445 NULL |
37217 |
+single_open_size_64483 single_open_size 4 64483 NULL |
37218 |
+p54_parse_rssical_64493 p54_parse_rssical 3 64493 NULL |
37219 |
+msg_data_sz_64503 msg_data_sz 0 64503 NULL |
37220 |
@@ -120868,6 +128673,7 @@ index 0000000..386792a |
37221 |
+squashfs_read_inode_lookup_table_64739 squashfs_read_inode_lookup_table 4 64739 NULL |
37222 |
+bio_map_kern_64751 bio_map_kern 3 64751 NULL |
37223 |
+rt2x00debug_write_csr_64753 rt2x00debug_write_csr 3 64753 NULL |
37224 |
++hwdep_write_64776 hwdep_write 3 64776 NULL |
37225 |
+message_for_md_64777 message_for_md 5 64777 NULL |
37226 |
+isr_low_rssi_read_64789 isr_low_rssi_read 3 64789 NULL |
37227 |
+regmap_reg_ranges_read_file_64798 regmap_reg_ranges_read_file 3 64798 NULL |
37228 |
@@ -120876,7 +128682,6 @@ index 0000000..386792a |
37229 |
+proc_projid_map_write_64810 proc_projid_map_write 3 64810 NULL |
37230 |
+megaraid_change_queue_depth_64815 megaraid_change_queue_depth 2 64815 NULL |
37231 |
+ecryptfs_send_miscdev_64816 ecryptfs_send_miscdev 2 64816 NULL |
37232 |
-+do_kimage_alloc_64827 do_kimage_alloc 3 64827 NULL |
37233 |
+altera_set_dr_pre_64862 altera_set_dr_pre 2 64862 NULL |
37234 |
+pci_vc_do_save_buffer_64876 pci_vc_do_save_buffer 0 64876 NULL |
37235 |
+lprocfs_write_u64_helper_64880 lprocfs_write_u64_helper 2 64880 NULL |
37236 |
@@ -120887,22 +128692,20 @@ index 0000000..386792a |
37237 |
+suspend_dtim_interval_read_64971 suspend_dtim_interval_read 3 64971 NULL |
37238 |
+crypto_ahash_digestsize_65014 crypto_ahash_digestsize 0 65014 NULL |
37239 |
+insert_dent_65034 insert_dent 7 65034 NULL |
37240 |
-+snd_hda_get_pin_label_65035 snd_hda_get_pin_label 5 65035 NULL |
37241 |
+ext4_ind_trans_blocks_65053 ext4_ind_trans_blocks 0-2 65053 NULL |
37242 |
-+pcibios_enable_device_65059 pcibios_enable_device 0 65059 NULL |
37243 |
+make_idx_node_65068 make_idx_node 0 65068 NULL |
37244 |
+__alloc_bootmem_node_high_65076 __alloc_bootmem_node_high 2 65076 NULL |
37245 |
+batadv_socket_write_65083 batadv_socket_write 3 65083 NULL |
37246 |
+ocfs2_truncate_cluster_pages_65086 ocfs2_truncate_cluster_pages 2 65086 NULL |
37247 |
+ath9k_dump_mci_btcoex_65090 ath9k_dump_mci_btcoex 3-0 65090 NULL |
37248 |
-+scsi_add_host_with_dma_65093 scsi_add_host_with_dma 0 65093 NULL |
37249 |
-+generic_ocp_write_65107 generic_ocp_write 4 65107 NULL |
37250 |
+rx_rx_done_read_65217 rx_rx_done_read 3 65217 NULL |
37251 |
-+print_endpoint_stat_65232 print_endpoint_stat 0-3-4 65232 NULL |
37252 |
++nouveau_event_create_65229 nouveau_event_create 2-1 65229 NULL |
37253 |
++print_endpoint_stat_65232 print_endpoint_stat 3-4-0 65232 NULL |
37254 |
+whci_n_caps_65247 whci_n_caps 0 65247 NULL |
37255 |
+kmalloc_parameter_65279 kmalloc_parameter 1 65279 NULL |
37256 |
+compat_core_sys_select_65285 compat_core_sys_select 1 65285 NULL |
37257 |
+mpi_set_buffer_65294 mpi_set_buffer 3 65294 NULL |
37258 |
++fat_direct_IO_65295 fat_direct_IO 4 65295 NULL |
37259 |
+redirected_tty_write_65297 redirected_tty_write 3 65297 NULL |
37260 |
+get_var_len_65304 get_var_len 0 65304 NULL |
37261 |
+unpack_array_65318 unpack_array 0 65318 NULL |
37262 |
@@ -120913,9 +128716,7 @@ index 0000000..386792a |
37263 |
+SyS_writev_65372 SyS_writev 3 65372 NULL |
37264 |
+__alloc_bootmem_nopanic_65397 __alloc_bootmem_nopanic 1 65397 NULL |
37265 |
+trace_seq_to_user_65398 trace_seq_to_user 3 65398 NULL |
37266 |
-+__read_vmcore_65402 __read_vmcore 2 65402 NULL |
37267 |
+ocfs2_write_begin_nolock_65410 ocfs2_write_begin_nolock 3-4 65410 NULL |
37268 |
-+device_add_groups_65423 device_add_groups 0 65423 NULL |
37269 |
+xpc_kzalloc_cacheline_aligned_65433 xpc_kzalloc_cacheline_aligned 1 65433 NULL |
37270 |
+usb_alloc_coherent_65444 usb_alloc_coherent 2 65444 NULL |
37271 |
+il_dbgfs_wd_timeout_write_65464 il_dbgfs_wd_timeout_write 3 65464 NULL |
37272 |
@@ -122339,10 +130140,10 @@ index 0000000..4ee2231 |
37273 |
+ return 0; |
37274 |
+} |
37275 |
diff --git a/tools/include/linux/compiler.h b/tools/include/linux/compiler.h |
37276 |
-index fbc6665..5e9ce79 100644 |
37277 |
+index 88461f0..6fb70a0 100644 |
37278 |
--- a/tools/include/linux/compiler.h |
37279 |
+++ b/tools/include/linux/compiler.h |
37280 |
-@@ -35,4 +35,12 @@ |
37281 |
+@@ -35,6 +35,14 @@ |
37282 |
# define unlikely(x) __builtin_expect(!!(x), 0) |
37283 |
#endif |
37284 |
|
37285 |
@@ -122354,6 +130155,8 @@ index fbc6665..5e9ce79 100644 |
37286 |
+# define __intentional_overflow(...) |
37287 |
+#endif |
37288 |
+ |
37289 |
+ #define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) |
37290 |
+ |
37291 |
#endif /* _TOOLS_LINUX_COMPILER_H */ |
37292 |
diff --git a/tools/lib/api/Makefile b/tools/lib/api/Makefile |
37293 |
index ce00f7e..0aca5e4 100644 |
37294 |
@@ -122394,7 +130197,7 @@ index 0a578fe..b81f62d 100644 |
37295 |
}) |
37296 |
|
37297 |
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c |
37298 |
-index 56baae8..2c889c2 100644 |
37299 |
+index 4b6c01b..16eb755 100644 |
37300 |
--- a/virt/kvm/kvm_main.c |
37301 |
+++ b/virt/kvm/kvm_main.c |
37302 |
@@ -76,12 +76,17 @@ LIST_HEAD(vm_list); |
37303 |
@@ -122417,7 +130220,7 @@ index 56baae8..2c889c2 100644 |
37304 |
|
37305 |
struct dentry *kvm_debugfs_dir; |
37306 |
|
37307 |
-@@ -755,7 +760,7 @@ int __kvm_set_memory_region(struct kvm *kvm, |
37308 |
+@@ -761,7 +766,7 @@ int __kvm_set_memory_region(struct kvm *kvm, |
37309 |
/* We can read the guest memory with __xxx_user() later on. */ |
37310 |
if ((mem->slot < KVM_USER_MEM_SLOTS) && |
37311 |
((mem->userspace_addr & (PAGE_SIZE - 1)) || |
37312 |
@@ -122426,7 +130229,7 @@ index 56baae8..2c889c2 100644 |
37313 |
(void __user *)(unsigned long)mem->userspace_addr, |
37314 |
mem->memory_size))) |
37315 |
goto out; |
37316 |
-@@ -1612,9 +1617,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached); |
37317 |
+@@ -1618,9 +1623,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached); |
37318 |
|
37319 |
int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len) |
37320 |
{ |
37321 |
@@ -122446,7 +130249,7 @@ index 56baae8..2c889c2 100644 |
37322 |
} |
37323 |
EXPORT_SYMBOL_GPL(kvm_clear_guest_page); |
37324 |
|
37325 |
-@@ -1864,7 +1877,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp) |
37326 |
+@@ -1870,7 +1883,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp) |
37327 |
return 0; |
37328 |
} |
37329 |
|
37330 |
@@ -122455,7 +130258,7 @@ index 56baae8..2c889c2 100644 |
37331 |
.release = kvm_vcpu_release, |
37332 |
.unlocked_ioctl = kvm_vcpu_ioctl, |
37333 |
#ifdef CONFIG_COMPAT |
37334 |
-@@ -2534,7 +2547,7 @@ out: |
37335 |
+@@ -2540,7 +2553,7 @@ out: |
37336 |
} |
37337 |
#endif |
37338 |
|
37339 |
@@ -122464,7 +130267,7 @@ index 56baae8..2c889c2 100644 |
37340 |
.release = kvm_vm_release, |
37341 |
.unlocked_ioctl = kvm_vm_ioctl, |
37342 |
#ifdef CONFIG_COMPAT |
37343 |
-@@ -2634,7 +2647,7 @@ out: |
37344 |
+@@ -2640,7 +2653,7 @@ out: |
37345 |
return r; |
37346 |
} |
37347 |
|
37348 |
@@ -122473,7 +130276,7 @@ index 56baae8..2c889c2 100644 |
37349 |
.unlocked_ioctl = kvm_dev_ioctl, |
37350 |
.compat_ioctl = kvm_dev_ioctl, |
37351 |
.llseek = noop_llseek, |
37352 |
-@@ -2660,7 +2673,7 @@ static void hardware_enable_nolock(void *junk) |
37353 |
+@@ -2666,7 +2679,7 @@ static void hardware_enable_nolock(void *junk) |
37354 |
|
37355 |
if (r) { |
37356 |
cpumask_clear_cpu(cpu, cpus_hardware_enabled); |
37357 |
@@ -122482,7 +130285,7 @@ index 56baae8..2c889c2 100644 |
37358 |
printk(KERN_INFO "kvm: enabling virtualization on " |
37359 |
"CPU%d failed\n", cpu); |
37360 |
} |
37361 |
-@@ -2716,10 +2729,10 @@ static int hardware_enable_all(void) |
37362 |
+@@ -2722,10 +2735,10 @@ static int hardware_enable_all(void) |
37363 |
|
37364 |
kvm_usage_count++; |
37365 |
if (kvm_usage_count == 1) { |
37366 |
@@ -122495,7 +130298,7 @@ index 56baae8..2c889c2 100644 |
37367 |
hardware_disable_all_nolock(); |
37368 |
r = -EBUSY; |
37369 |
} |
37370 |
-@@ -3123,7 +3136,7 @@ static void kvm_sched_out(struct preempt_notifier *pn, |
37371 |
+@@ -3130,7 +3143,7 @@ static void kvm_sched_out(struct preempt_notifier *pn, |
37372 |
kvm_arch_vcpu_put(vcpu); |
37373 |
} |
37374 |
|
37375 |
@@ -122504,7 +130307,7 @@ index 56baae8..2c889c2 100644 |
37376 |
struct module *module) |
37377 |
{ |
37378 |
int r; |
37379 |
-@@ -3170,7 +3183,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, |
37380 |
+@@ -3177,7 +3190,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, |
37381 |
if (!vcpu_align) |
37382 |
vcpu_align = __alignof__(struct kvm_vcpu); |
37383 |
kvm_vcpu_cache = kmem_cache_create("kvm_vcpu", vcpu_size, vcpu_align, |
37384 |
@@ -122513,7 +130316,7 @@ index 56baae8..2c889c2 100644 |
37385 |
if (!kvm_vcpu_cache) { |
37386 |
r = -ENOMEM; |
37387 |
goto out_free_3; |
37388 |
-@@ -3180,9 +3193,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, |
37389 |
+@@ -3187,9 +3200,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, |
37390 |
if (r) |
37391 |
goto out_free; |
37392 |
|
37393 |
@@ -122525,7 +130328,7 @@ index 56baae8..2c889c2 100644 |
37394 |
|
37395 |
r = misc_register(&kvm_dev); |
37396 |
if (r) { |
37397 |
-@@ -3192,9 +3207,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, |
37398 |
+@@ -3199,9 +3214,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align, |
37399 |
|
37400 |
register_syscore_ops(&kvm_syscore_ops); |
37401 |
|
37402 |
|
37403 |
diff --git a/3.15.10/4425_grsec_remove_EI_PAX.patch b/3.16.1/4425_grsec_remove_EI_PAX.patch |
37404 |
similarity index 100% |
37405 |
rename from 3.15.10/4425_grsec_remove_EI_PAX.patch |
37406 |
rename to 3.16.1/4425_grsec_remove_EI_PAX.patch |
37407 |
|
37408 |
diff --git a/3.15.10/4427_force_XATTR_PAX_tmpfs.patch b/3.16.1/4427_force_XATTR_PAX_tmpfs.patch |
37409 |
similarity index 100% |
37410 |
rename from 3.15.10/4427_force_XATTR_PAX_tmpfs.patch |
37411 |
rename to 3.16.1/4427_force_XATTR_PAX_tmpfs.patch |
37412 |
|
37413 |
diff --git a/3.15.10/4430_grsec-remove-localversion-grsec.patch b/3.16.1/4430_grsec-remove-localversion-grsec.patch |
37414 |
similarity index 100% |
37415 |
rename from 3.15.10/4430_grsec-remove-localversion-grsec.patch |
37416 |
rename to 3.16.1/4430_grsec-remove-localversion-grsec.patch |
37417 |
|
37418 |
diff --git a/3.15.10/4435_grsec-mute-warnings.patch b/3.16.1/4435_grsec-mute-warnings.patch |
37419 |
similarity index 100% |
37420 |
rename from 3.15.10/4435_grsec-mute-warnings.patch |
37421 |
rename to 3.16.1/4435_grsec-mute-warnings.patch |
37422 |
|
37423 |
diff --git a/3.15.10/4440_grsec-remove-protected-paths.patch b/3.16.1/4440_grsec-remove-protected-paths.patch |
37424 |
similarity index 100% |
37425 |
rename from 3.15.10/4440_grsec-remove-protected-paths.patch |
37426 |
rename to 3.16.1/4440_grsec-remove-protected-paths.patch |
37427 |
|
37428 |
diff --git a/3.15.10/4450_grsec-kconfig-default-gids.patch b/3.16.1/4450_grsec-kconfig-default-gids.patch |
37429 |
similarity index 100% |
37430 |
rename from 3.15.10/4450_grsec-kconfig-default-gids.patch |
37431 |
rename to 3.16.1/4450_grsec-kconfig-default-gids.patch |
37432 |
|
37433 |
diff --git a/3.15.10/4465_selinux-avc_audit-log-curr_ip.patch b/3.16.1/4465_selinux-avc_audit-log-curr_ip.patch |
37434 |
similarity index 100% |
37435 |
rename from 3.15.10/4465_selinux-avc_audit-log-curr_ip.patch |
37436 |
rename to 3.16.1/4465_selinux-avc_audit-log-curr_ip.patch |
37437 |
|
37438 |
diff --git a/3.15.10/4470_disable-compat_vdso.patch b/3.16.1/4470_disable-compat_vdso.patch |
37439 |
similarity index 100% |
37440 |
rename from 3.15.10/4470_disable-compat_vdso.patch |
37441 |
rename to 3.16.1/4470_disable-compat_vdso.patch |
37442 |
|
37443 |
diff --git a/3.15.10/4475_emutramp_default_on.patch b/3.16.1/4475_emutramp_default_on.patch |
37444 |
similarity index 100% |
37445 |
rename from 3.15.10/4475_emutramp_default_on.patch |
37446 |
rename to 3.16.1/4475_emutramp_default_on.patch |
37447 |
|
37448 |
diff --git a/3.2.62/0000_README b/3.2.62/0000_README |
37449 |
index 9c125a6..6c4c3cc 100644 |
37450 |
--- a/3.2.62/0000_README |
37451 |
+++ b/3.2.62/0000_README |
37452 |
@@ -166,7 +166,7 @@ Patch: 1061_linux-3.2.62.patch |
37453 |
From: http://www.kernel.org |
37454 |
Desc: Linux 3.2.62 |
37455 |
|
37456 |
-Patch: 4420_grsecurity-3.0-3.2.62-201408260037.patch |
37457 |
+Patch: 4420_grsecurity-3.0-3.2.62-201408312002.patch |
37458 |
From: http://www.grsecurity.net |
37459 |
Desc: hardened-sources base patch from upstream grsecurity |
37460 |
|
37461 |
|
37462 |
diff --git a/3.2.62/4420_grsecurity-3.0-3.2.62-201408260037.patch b/3.2.62/4420_grsecurity-3.0-3.2.62-201408312002.patch |
37463 |
similarity index 99% |
37464 |
rename from 3.2.62/4420_grsecurity-3.0-3.2.62-201408260037.patch |
37465 |
rename to 3.2.62/4420_grsecurity-3.0-3.2.62-201408312002.patch |
37466 |
index a4df725..ad26b87 100644 |
37467 |
--- a/3.2.62/4420_grsecurity-3.0-3.2.62-201408260037.patch |
37468 |
+++ b/3.2.62/4420_grsecurity-3.0-3.2.62-201408312002.patch |
37469 |
@@ -8747,7 +8747,7 @@ index fbb8005..984a269 100644 |
37470 |
|
37471 |
/* Atomic bit operations. */ |
37472 |
diff --git a/arch/sparc/mm/Makefile b/arch/sparc/mm/Makefile |
37473 |
-index 301421c..e2535d1 100644 |
37474 |
+index 301421c1..e2535d1 100644 |
37475 |
--- a/arch/sparc/mm/Makefile |
37476 |
+++ b/arch/sparc/mm/Makefile |
37477 |
@@ -2,7 +2,7 @@ |
37478 |
@@ -39211,6 +39211,34 @@ index 828a0dd..6efc0ea 100644 |
37479 |
|
37480 |
spin_lock_irqsave(&djrcv_dev->lock, flags); |
37481 |
if (dj_report->report_id == REPORT_ID_DJ_SHORT) { |
37482 |
+diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c |
37483 |
+index 7cf3ffe..81356f6 100644 |
37484 |
+--- a/drivers/hid/hid-magicmouse.c |
37485 |
++++ b/drivers/hid/hid-magicmouse.c |
37486 |
+@@ -308,6 +308,11 @@ static int magicmouse_raw_event(struct hid_device *hdev, |
37487 |
+ if (size < 4 || ((size - 4) % 9) != 0) |
37488 |
+ return 0; |
37489 |
+ npoints = (size - 4) / 9; |
37490 |
++ if (npoints > 15) { |
37491 |
++ hid_warn(hdev, "invalid size value (%d) for TRACKPAD_REPORT_ID\n", |
37492 |
++ size); |
37493 |
++ return 0; |
37494 |
++ } |
37495 |
+ msc->ntouches = 0; |
37496 |
+ for (ii = 0; ii < npoints; ii++) |
37497 |
+ magicmouse_emit_touch(msc, ii, data + ii * 9 + 4); |
37498 |
+@@ -331,6 +336,11 @@ static int magicmouse_raw_event(struct hid_device *hdev, |
37499 |
+ if (size < 6 || ((size - 6) % 8) != 0) |
37500 |
+ return 0; |
37501 |
+ npoints = (size - 6) / 8; |
37502 |
++ if (npoints > 15) { |
37503 |
++ hid_warn(hdev, "invalid size value (%d) for MOUSE_REPORT_ID\n", |
37504 |
++ size); |
37505 |
++ return 0; |
37506 |
++ } |
37507 |
+ msc->ntouches = 0; |
37508 |
+ for (ii = 0; ii < npoints; ii++) |
37509 |
+ magicmouse_emit_touch(msc, ii, data + ii * 8 + 6); |
37510 |
diff --git a/drivers/hid/hid-monterey.c b/drivers/hid/hid-monterey.c |
37511 |
index dedf757..eb0271e 100644 |
37512 |
--- a/drivers/hid/hid-monterey.c |