Magellan Linux

Contents of /trunk/kernel-lts/patches-3.4/0172-3.4.73-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2337 - (show annotations) (download)
Thu Dec 12 08:43:43 2013 UTC (10 years, 4 months ago) by niro
File size: 78315 byte(s)
-linux-3.4.73
1 diff --git a/block/blk-core.c b/block/blk-core.c
2 index a02cfb7e4123..279f05dcbc87 100644
3 --- a/block/blk-core.c
4 +++ b/block/blk-core.c
5 @@ -499,7 +499,7 @@ struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id)
6 goto fail_id;
7
8 if (blk_throtl_init(q))
9 - goto fail_id;
10 + goto fail_bdi;
11
12 setup_timer(&q->backing_dev_info.laptop_mode_wb_timer,
13 laptop_mode_timer_fn, (unsigned long) q);
14 @@ -524,6 +524,8 @@ struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id)
15
16 return q;
17
18 +fail_bdi:
19 + bdi_destroy(&q->backing_dev_info);
20 fail_id:
21 ida_simple_remove(&blk_queue_ida, q->id);
22 fail_q:
23 diff --git a/block/elevator.c b/block/elevator.c
24 index f016855a46b0..dcef5d1bf999 100644
25 --- a/block/elevator.c
26 +++ b/block/elevator.c
27 @@ -961,7 +961,7 @@ fail_register:
28 /*
29 * Switch this queue to the given IO scheduler.
30 */
31 -int elevator_change(struct request_queue *q, const char *name)
32 +static int __elevator_change(struct request_queue *q, const char *name)
33 {
34 char elevator_name[ELV_NAME_MAX];
35 struct elevator_type *e;
36 @@ -983,6 +983,18 @@ int elevator_change(struct request_queue *q, const char *name)
37
38 return elevator_switch(q, e);
39 }
40 +
41 +int elevator_change(struct request_queue *q, const char *name)
42 +{
43 + int ret;
44 +
45 + /* Protect q->elevator from elevator_init() */
46 + mutex_lock(&q->sysfs_lock);
47 + ret = __elevator_change(q, name);
48 + mutex_unlock(&q->sysfs_lock);
49 +
50 + return ret;
51 +}
52 EXPORT_SYMBOL(elevator_change);
53
54 ssize_t elv_iosched_store(struct request_queue *q, const char *name,
55 @@ -993,7 +1005,7 @@ ssize_t elv_iosched_store(struct request_queue *q, const char *name,
56 if (!q->elevator)
57 return count;
58
59 - ret = elevator_change(q, name);
60 + ret = __elevator_change(q, name);
61 if (!ret)
62 return count;
63
64 diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c
65 index 0262210cad38..850246206b12 100644
66 --- a/crypto/algif_hash.c
67 +++ b/crypto/algif_hash.c
68 @@ -114,6 +114,9 @@ static ssize_t hash_sendpage(struct socket *sock, struct page *page,
69 struct hash_ctx *ctx = ask->private;
70 int err;
71
72 + if (flags & MSG_SENDPAGE_NOTLAST)
73 + flags |= MSG_MORE;
74 +
75 lock_sock(sk);
76 sg_init_table(ctx->sgl.sg, 1);
77 sg_set_page(ctx->sgl.sg, page, size, offset);
78 @@ -161,8 +164,6 @@ static int hash_recvmsg(struct kiocb *unused, struct socket *sock,
79 else if (len < ds)
80 msg->msg_flags |= MSG_TRUNC;
81
82 - msg->msg_namelen = 0;
83 -
84 lock_sock(sk);
85 if (ctx->more) {
86 ctx->more = 0;
87 diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
88 index a1c4f0a55583..a19c027b29bd 100644
89 --- a/crypto/algif_skcipher.c
90 +++ b/crypto/algif_skcipher.c
91 @@ -378,6 +378,9 @@ static ssize_t skcipher_sendpage(struct socket *sock, struct page *page,
92 struct skcipher_sg_list *sgl;
93 int err = -EINVAL;
94
95 + if (flags & MSG_SENDPAGE_NOTLAST)
96 + flags |= MSG_MORE;
97 +
98 lock_sock(sk);
99 if (!ctx->more && ctx->used)
100 goto unlock;
101 @@ -432,7 +435,6 @@ static int skcipher_recvmsg(struct kiocb *unused, struct socket *sock,
102 long copied = 0;
103
104 lock_sock(sk);
105 - msg->msg_namelen = 0;
106 for (iov = msg->msg_iov, iovlen = msg->msg_iovlen; iovlen > 0;
107 iovlen--, iov++) {
108 unsigned long seglen = iov->iov_len;
109 diff --git a/drivers/atm/idt77252.c b/drivers/atm/idt77252.c
110 index 1c052127548c..b0e75ce3c8fc 100644
111 --- a/drivers/atm/idt77252.c
112 +++ b/drivers/atm/idt77252.c
113 @@ -3513,7 +3513,7 @@ init_card(struct atm_dev *dev)
114 tmp = dev_get_by_name(&init_net, tname); /* jhs: was "tmp = dev_get(tname);" */
115 if (tmp) {
116 memcpy(card->atmdev->esi, tmp->dev_addr, 6);
117 -
118 + dev_put(tmp);
119 printk("%s: ESI %pM\n", card->name, card->atmdev->esi);
120 }
121 /*
122 diff --git a/drivers/connector/cn_proc.c b/drivers/connector/cn_proc.c
123 index 2894461e0bdb..ff18e41f5b22 100644
124 --- a/drivers/connector/cn_proc.c
125 +++ b/drivers/connector/cn_proc.c
126 @@ -31,11 +31,23 @@
127 #include <linux/ptrace.h>
128 #include <linux/atomic.h>
129
130 -#include <asm/unaligned.h>
131 -
132 #include <linux/cn_proc.h>
133
134 -#define CN_PROC_MSG_SIZE (sizeof(struct cn_msg) + sizeof(struct proc_event))
135 +/*
136 + * Size of a cn_msg followed by a proc_event structure. Since the
137 + * sizeof struct cn_msg is a multiple of 4 bytes, but not 8 bytes, we
138 + * add one 4-byte word to the size here, and then start the actual
139 + * cn_msg structure 4 bytes into the stack buffer. The result is that
140 + * the immediately following proc_event structure is aligned to 8 bytes.
141 + */
142 +#define CN_PROC_MSG_SIZE (sizeof(struct cn_msg) + sizeof(struct proc_event) + 4)
143 +
144 +/* See comment above; we test our assumption about sizeof struct cn_msg here. */
145 +static inline struct cn_msg *buffer_to_cn_msg(__u8 *buffer)
146 +{
147 + BUILD_BUG_ON(sizeof(struct cn_msg) != 20);
148 + return (struct cn_msg *)(buffer + 4);
149 +}
150
151 static atomic_t proc_event_num_listeners = ATOMIC_INIT(0);
152 static struct cb_id cn_proc_event_id = { CN_IDX_PROC, CN_VAL_PROC };
153 @@ -55,19 +67,19 @@ void proc_fork_connector(struct task_struct *task)
154 {
155 struct cn_msg *msg;
156 struct proc_event *ev;
157 - __u8 buffer[CN_PROC_MSG_SIZE];
158 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
159 struct timespec ts;
160 struct task_struct *parent;
161
162 if (atomic_read(&proc_event_num_listeners) < 1)
163 return;
164
165 - msg = (struct cn_msg*)buffer;
166 + msg = buffer_to_cn_msg(buffer);
167 ev = (struct proc_event*)msg->data;
168 memset(&ev->event_data, 0, sizeof(ev->event_data));
169 get_seq(&msg->seq, &ev->cpu);
170 ktime_get_ts(&ts); /* get high res monotonic timestamp */
171 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
172 + ev->timestamp_ns = timespec_to_ns(&ts);
173 ev->what = PROC_EVENT_FORK;
174 rcu_read_lock();
175 parent = rcu_dereference(task->real_parent);
176 @@ -90,17 +102,17 @@ void proc_exec_connector(struct task_struct *task)
177 struct cn_msg *msg;
178 struct proc_event *ev;
179 struct timespec ts;
180 - __u8 buffer[CN_PROC_MSG_SIZE];
181 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
182
183 if (atomic_read(&proc_event_num_listeners) < 1)
184 return;
185
186 - msg = (struct cn_msg*)buffer;
187 + msg = buffer_to_cn_msg(buffer);
188 ev = (struct proc_event*)msg->data;
189 memset(&ev->event_data, 0, sizeof(ev->event_data));
190 get_seq(&msg->seq, &ev->cpu);
191 ktime_get_ts(&ts); /* get high res monotonic timestamp */
192 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
193 + ev->timestamp_ns = timespec_to_ns(&ts);
194 ev->what = PROC_EVENT_EXEC;
195 ev->event_data.exec.process_pid = task->pid;
196 ev->event_data.exec.process_tgid = task->tgid;
197 @@ -116,14 +128,14 @@ void proc_id_connector(struct task_struct *task, int which_id)
198 {
199 struct cn_msg *msg;
200 struct proc_event *ev;
201 - __u8 buffer[CN_PROC_MSG_SIZE];
202 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
203 struct timespec ts;
204 const struct cred *cred;
205
206 if (atomic_read(&proc_event_num_listeners) < 1)
207 return;
208
209 - msg = (struct cn_msg*)buffer;
210 + msg = buffer_to_cn_msg(buffer);
211 ev = (struct proc_event*)msg->data;
212 memset(&ev->event_data, 0, sizeof(ev->event_data));
213 ev->what = which_id;
214 @@ -144,7 +156,7 @@ void proc_id_connector(struct task_struct *task, int which_id)
215 rcu_read_unlock();
216 get_seq(&msg->seq, &ev->cpu);
217 ktime_get_ts(&ts); /* get high res monotonic timestamp */
218 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
219 + ev->timestamp_ns = timespec_to_ns(&ts);
220
221 memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
222 msg->ack = 0; /* not used */
223 @@ -158,17 +170,17 @@ void proc_sid_connector(struct task_struct *task)
224 struct cn_msg *msg;
225 struct proc_event *ev;
226 struct timespec ts;
227 - __u8 buffer[CN_PROC_MSG_SIZE];
228 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
229
230 if (atomic_read(&proc_event_num_listeners) < 1)
231 return;
232
233 - msg = (struct cn_msg *)buffer;
234 + msg = buffer_to_cn_msg(buffer);
235 ev = (struct proc_event *)msg->data;
236 memset(&ev->event_data, 0, sizeof(ev->event_data));
237 get_seq(&msg->seq, &ev->cpu);
238 ktime_get_ts(&ts); /* get high res monotonic timestamp */
239 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
240 + ev->timestamp_ns = timespec_to_ns(&ts);
241 ev->what = PROC_EVENT_SID;
242 ev->event_data.sid.process_pid = task->pid;
243 ev->event_data.sid.process_tgid = task->tgid;
244 @@ -185,17 +197,17 @@ void proc_ptrace_connector(struct task_struct *task, int ptrace_id)
245 struct cn_msg *msg;
246 struct proc_event *ev;
247 struct timespec ts;
248 - __u8 buffer[CN_PROC_MSG_SIZE];
249 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
250
251 if (atomic_read(&proc_event_num_listeners) < 1)
252 return;
253
254 - msg = (struct cn_msg *)buffer;
255 + msg = buffer_to_cn_msg(buffer);
256 ev = (struct proc_event *)msg->data;
257 memset(&ev->event_data, 0, sizeof(ev->event_data));
258 get_seq(&msg->seq, &ev->cpu);
259 ktime_get_ts(&ts); /* get high res monotonic timestamp */
260 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
261 + ev->timestamp_ns = timespec_to_ns(&ts);
262 ev->what = PROC_EVENT_PTRACE;
263 ev->event_data.ptrace.process_pid = task->pid;
264 ev->event_data.ptrace.process_tgid = task->tgid;
265 @@ -220,17 +232,17 @@ void proc_comm_connector(struct task_struct *task)
266 struct cn_msg *msg;
267 struct proc_event *ev;
268 struct timespec ts;
269 - __u8 buffer[CN_PROC_MSG_SIZE];
270 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
271
272 if (atomic_read(&proc_event_num_listeners) < 1)
273 return;
274
275 - msg = (struct cn_msg *)buffer;
276 + msg = buffer_to_cn_msg(buffer);
277 ev = (struct proc_event *)msg->data;
278 memset(&ev->event_data, 0, sizeof(ev->event_data));
279 get_seq(&msg->seq, &ev->cpu);
280 ktime_get_ts(&ts); /* get high res monotonic timestamp */
281 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
282 + ev->timestamp_ns = timespec_to_ns(&ts);
283 ev->what = PROC_EVENT_COMM;
284 ev->event_data.comm.process_pid = task->pid;
285 ev->event_data.comm.process_tgid = task->tgid;
286 @@ -247,18 +259,18 @@ void proc_exit_connector(struct task_struct *task)
287 {
288 struct cn_msg *msg;
289 struct proc_event *ev;
290 - __u8 buffer[CN_PROC_MSG_SIZE];
291 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
292 struct timespec ts;
293
294 if (atomic_read(&proc_event_num_listeners) < 1)
295 return;
296
297 - msg = (struct cn_msg*)buffer;
298 + msg = buffer_to_cn_msg(buffer);
299 ev = (struct proc_event*)msg->data;
300 memset(&ev->event_data, 0, sizeof(ev->event_data));
301 get_seq(&msg->seq, &ev->cpu);
302 ktime_get_ts(&ts); /* get high res monotonic timestamp */
303 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
304 + ev->timestamp_ns = timespec_to_ns(&ts);
305 ev->what = PROC_EVENT_EXIT;
306 ev->event_data.exit.process_pid = task->pid;
307 ev->event_data.exit.process_tgid = task->tgid;
308 @@ -284,18 +296,18 @@ static void cn_proc_ack(int err, int rcvd_seq, int rcvd_ack)
309 {
310 struct cn_msg *msg;
311 struct proc_event *ev;
312 - __u8 buffer[CN_PROC_MSG_SIZE];
313 + __u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
314 struct timespec ts;
315
316 if (atomic_read(&proc_event_num_listeners) < 1)
317 return;
318
319 - msg = (struct cn_msg*)buffer;
320 + msg = buffer_to_cn_msg(buffer);
321 ev = (struct proc_event*)msg->data;
322 memset(&ev->event_data, 0, sizeof(ev->event_data));
323 msg->seq = rcvd_seq;
324 ktime_get_ts(&ts); /* get high res monotonic timestamp */
325 - put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
326 + ev->timestamp_ns = timespec_to_ns(&ts);
327 ev->cpu = -1;
328 ev->what = PROC_EVENT_NONE;
329 ev->event_data.ack.err = err;
330 diff --git a/drivers/hid/hid-picolcd.c b/drivers/hid/hid-picolcd.c
331 index 45c3433f7986..95f90479f285 100644
332 --- a/drivers/hid/hid-picolcd.c
333 +++ b/drivers/hid/hid-picolcd.c
334 @@ -1424,7 +1424,7 @@ static ssize_t picolcd_operation_mode_store(struct device *dev,
335 buf += 10;
336 cnt -= 10;
337 }
338 - if (!report)
339 + if (!report || report->maxfield != 1)
340 return -EINVAL;
341
342 while (cnt > 0 && (buf[cnt-1] == '\n' || buf[cnt-1] == '\r'))
343 diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
344 index a60a54d8593a..abc6ac855598 100644
345 --- a/drivers/iommu/intel-iommu.c
346 +++ b/drivers/iommu/intel-iommu.c
347 @@ -778,7 +778,11 @@ static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
348 int offset;
349
350 BUG_ON(!domain->pgd);
351 - BUG_ON(addr_width < BITS_PER_LONG && pfn >> addr_width);
352 +
353 + if (addr_width < BITS_PER_LONG && pfn >> addr_width)
354 + /* Address beyond IOMMU's addressing capabilities. */
355 + return NULL;
356 +
357 parent = domain->pgd;
358
359 while (level > 0) {
360 diff --git a/drivers/isdn/isdnloop/isdnloop.c b/drivers/isdn/isdnloop/isdnloop.c
361 index baf2686aa8eb..02125e6a9109 100644
362 --- a/drivers/isdn/isdnloop/isdnloop.c
363 +++ b/drivers/isdn/isdnloop/isdnloop.c
364 @@ -1083,8 +1083,10 @@ isdnloop_start(isdnloop_card *card, isdnloop_sdef *sdefp)
365 spin_unlock_irqrestore(&card->isdnloop_lock, flags);
366 return -ENOMEM;
367 }
368 - for (i = 0; i < 3; i++)
369 - strcpy(card->s0num[i], sdef.num[i]);
370 + for (i = 0; i < 3; i++) {
371 + strlcpy(card->s0num[i], sdef.num[i],
372 + sizeof(card->s0num[0]));
373 + }
374 break;
375 case ISDN_PTYPE_1TR6:
376 if (isdnloop_fake(card, "DRV1.04TC-1TR6-CAPI-CNS-BASIS-29.11.95",
377 @@ -1097,7 +1099,7 @@ isdnloop_start(isdnloop_card *card, isdnloop_sdef *sdefp)
378 spin_unlock_irqrestore(&card->isdnloop_lock, flags);
379 return -ENOMEM;
380 }
381 - strcpy(card->s0num[0], sdef.num[0]);
382 + strlcpy(card->s0num[0], sdef.num[0], sizeof(card->s0num[0]));
383 card->s0num[1][0] = '\0';
384 card->s0num[2][0] = '\0';
385 break;
386 diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c
387 index abe2d699b6f3..ade1bcfb0e6d 100644
388 --- a/drivers/isdn/mISDN/socket.c
389 +++ b/drivers/isdn/mISDN/socket.c
390 @@ -117,7 +117,6 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
391 {
392 struct sk_buff *skb;
393 struct sock *sk = sock->sk;
394 - struct sockaddr_mISDN *maddr;
395
396 int copied, err;
397
398 @@ -135,9 +134,9 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
399 if (!skb)
400 return err;
401
402 - if (msg->msg_namelen >= sizeof(struct sockaddr_mISDN)) {
403 - msg->msg_namelen = sizeof(struct sockaddr_mISDN);
404 - maddr = (struct sockaddr_mISDN *)msg->msg_name;
405 + if (msg->msg_name) {
406 + struct sockaddr_mISDN *maddr = msg->msg_name;
407 +
408 maddr->family = AF_ISDN;
409 maddr->dev = _pms(sk)->dev->id;
410 if ((sk->sk_protocol == ISDN_P_LAPD_TE) ||
411 @@ -150,11 +149,7 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
412 maddr->sapi = _pms(sk)->ch.addr & 0xFF;
413 maddr->tei = (_pms(sk)->ch.addr >> 8) & 0xFF;
414 }
415 - } else {
416 - if (msg->msg_namelen)
417 - printk(KERN_WARNING "%s: too small namelen %d\n",
418 - __func__, msg->msg_namelen);
419 - msg->msg_namelen = 0;
420 + msg->msg_namelen = sizeof(*maddr);
421 }
422
423 copied = skb->len + MISDN_HEADER_LEN;
424 diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
425 index 3f06df59fd82..535c3e276fc7 100644
426 --- a/drivers/md/dm-crypt.c
427 +++ b/drivers/md/dm-crypt.c
428 @@ -1262,20 +1262,6 @@ static int crypt_decode_key(u8 *key, char *hex, unsigned int size)
429 return 0;
430 }
431
432 -/*
433 - * Encode key into its hex representation
434 - */
435 -static void crypt_encode_key(char *hex, u8 *key, unsigned int size)
436 -{
437 - unsigned int i;
438 -
439 - for (i = 0; i < size; i++) {
440 - sprintf(hex, "%02x", *key);
441 - hex += 2;
442 - key++;
443 - }
444 -}
445 -
446 static void crypt_free_tfms(struct crypt_config *cc, int cpu)
447 {
448 struct crypt_cpu *cpu_cc = per_cpu_ptr(cc->cpu, cpu);
449 @@ -1741,11 +1727,11 @@ static int crypt_map(struct dm_target *ti, struct bio *bio,
450 return DM_MAPIO_SUBMITTED;
451 }
452
453 -static int crypt_status(struct dm_target *ti, status_type_t type,
454 - char *result, unsigned int maxlen)
455 +static void crypt_status(struct dm_target *ti, status_type_t type,
456 + char *result, unsigned int maxlen)
457 {
458 struct crypt_config *cc = ti->private;
459 - unsigned int sz = 0;
460 + unsigned i, sz = 0;
461
462 switch (type) {
463 case STATUSTYPE_INFO:
464 @@ -1755,17 +1741,11 @@ static int crypt_status(struct dm_target *ti, status_type_t type,
465 case STATUSTYPE_TABLE:
466 DMEMIT("%s ", cc->cipher_string);
467
468 - if (cc->key_size > 0) {
469 - if ((maxlen - sz) < ((cc->key_size << 1) + 1))
470 - return -ENOMEM;
471 -
472 - crypt_encode_key(result + sz, cc->key, cc->key_size);
473 - sz += cc->key_size << 1;
474 - } else {
475 - if (sz >= maxlen)
476 - return -ENOMEM;
477 - result[sz++] = '-';
478 - }
479 + if (cc->key_size > 0)
480 + for (i = 0; i < cc->key_size; i++)
481 + DMEMIT("%02x", cc->key[i]);
482 + else
483 + DMEMIT("-");
484
485 DMEMIT(" %llu %s %llu", (unsigned long long)cc->iv_offset,
486 cc->dev->name, (unsigned long long)cc->start);
487 @@ -1775,7 +1755,6 @@ static int crypt_status(struct dm_target *ti, status_type_t type,
488
489 break;
490 }
491 - return 0;
492 }
493
494 static void crypt_postsuspend(struct dm_target *ti)
495 diff --git a/drivers/md/dm-delay.c b/drivers/md/dm-delay.c
496 index 2dc22dddb2ae..ee99912596cb 100644
497 --- a/drivers/md/dm-delay.c
498 +++ b/drivers/md/dm-delay.c
499 @@ -294,8 +294,8 @@ static int delay_map(struct dm_target *ti, struct bio *bio,
500 return delay_bio(dc, dc->read_delay, bio);
501 }
502
503 -static int delay_status(struct dm_target *ti, status_type_t type,
504 - char *result, unsigned maxlen)
505 +static void delay_status(struct dm_target *ti, status_type_t type,
506 + char *result, unsigned maxlen)
507 {
508 struct delay_c *dc = ti->private;
509 int sz = 0;
510 @@ -315,8 +315,6 @@ static int delay_status(struct dm_target *ti, status_type_t type,
511 dc->write_delay);
512 break;
513 }
514 -
515 - return 0;
516 }
517
518 static int delay_iterate_devices(struct dm_target *ti,
519 diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
520 index ac49c01f1a44..f29d665fe83a 100644
521 --- a/drivers/md/dm-flakey.c
522 +++ b/drivers/md/dm-flakey.c
523 @@ -332,8 +332,8 @@ static int flakey_end_io(struct dm_target *ti, struct bio *bio,
524 return error;
525 }
526
527 -static int flakey_status(struct dm_target *ti, status_type_t type,
528 - char *result, unsigned int maxlen)
529 +static void flakey_status(struct dm_target *ti, status_type_t type,
530 + char *result, unsigned int maxlen)
531 {
532 unsigned sz = 0;
533 struct flakey_c *fc = ti->private;
534 @@ -363,7 +363,6 @@ static int flakey_status(struct dm_target *ti, status_type_t type,
535
536 break;
537 }
538 - return 0;
539 }
540
541 static int flakey_ioctl(struct dm_target *ti, unsigned int cmd, unsigned long arg)
542 diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
543 index f011d4b3c139..d365365bdb99 100644
544 --- a/drivers/md/dm-ioctl.c
545 +++ b/drivers/md/dm-ioctl.c
546 @@ -1066,6 +1066,7 @@ static void retrieve_status(struct dm_table *table,
547 num_targets = dm_table_get_num_targets(table);
548 for (i = 0; i < num_targets; i++) {
549 struct dm_target *ti = dm_table_get_target(table, i);
550 + size_t l;
551
552 remaining = len - (outptr - outbuf);
553 if (remaining <= sizeof(struct dm_target_spec)) {
554 @@ -1089,15 +1090,18 @@ static void retrieve_status(struct dm_table *table,
555 }
556
557 /* Get the status/table string from the target driver */
558 - if (ti->type->status) {
559 - if (ti->type->status(ti, type, outptr, remaining)) {
560 - param->flags |= DM_BUFFER_FULL_FLAG;
561 - break;
562 - }
563 - } else
564 + if (ti->type->status)
565 + ti->type->status(ti, type, outptr, remaining);
566 + else
567 outptr[0] = '\0';
568
569 - outptr += strlen(outptr) + 1;
570 + l = strlen(outptr) + 1;
571 + if (l == remaining) {
572 + param->flags |= DM_BUFFER_FULL_FLAG;
573 + break;
574 + }
575 +
576 + outptr += l;
577 used = param->data_start + (outptr - outbuf);
578
579 outptr = align_ptr(outptr);
580 diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c
581 index 3639eeab6042..5a5e9c8b29a7 100644
582 --- a/drivers/md/dm-linear.c
583 +++ b/drivers/md/dm-linear.c
584 @@ -95,8 +95,8 @@ static int linear_map(struct dm_target *ti, struct bio *bio,
585 return DM_MAPIO_REMAPPED;
586 }
587
588 -static int linear_status(struct dm_target *ti, status_type_t type,
589 - char *result, unsigned int maxlen)
590 +static void linear_status(struct dm_target *ti, status_type_t type,
591 + char *result, unsigned int maxlen)
592 {
593 struct linear_c *lc = (struct linear_c *) ti->private;
594
595 @@ -110,7 +110,6 @@ static int linear_status(struct dm_target *ti, status_type_t type,
596 (unsigned long long)lc->start);
597 break;
598 }
599 - return 0;
600 }
601
602 static int linear_ioctl(struct dm_target *ti, unsigned int cmd,
603 diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
604 index 754f38f8a692..b74cb796c17c 100644
605 --- a/drivers/md/dm-mpath.c
606 +++ b/drivers/md/dm-mpath.c
607 @@ -1343,8 +1343,8 @@ static void multipath_resume(struct dm_target *ti)
608 * [priority selector-name num_ps_args [ps_args]*
609 * num_paths num_selector_args [path_dev [selector_args]* ]+ ]+
610 */
611 -static int multipath_status(struct dm_target *ti, status_type_t type,
612 - char *result, unsigned int maxlen)
613 +static void multipath_status(struct dm_target *ti, status_type_t type,
614 + char *result, unsigned int maxlen)
615 {
616 int sz = 0;
617 unsigned long flags;
618 @@ -1447,8 +1447,6 @@ static int multipath_status(struct dm_target *ti, status_type_t type,
619 }
620
621 spin_unlock_irqrestore(&m->lock, flags);
622 -
623 - return 0;
624 }
625
626 static int multipath_message(struct dm_target *ti, unsigned argc, char **argv)
627 diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
628 index 68965e663248..ead5ca99a749 100644
629 --- a/drivers/md/dm-raid.c
630 +++ b/drivers/md/dm-raid.c
631 @@ -1067,8 +1067,8 @@ static int raid_map(struct dm_target *ti, struct bio *bio, union map_info *map_c
632 return DM_MAPIO_SUBMITTED;
633 }
634
635 -static int raid_status(struct dm_target *ti, status_type_t type,
636 - char *result, unsigned maxlen)
637 +static void raid_status(struct dm_target *ti, status_type_t type,
638 + char *result, unsigned maxlen)
639 {
640 struct raid_set *rs = ti->private;
641 unsigned raid_param_cnt = 1; /* at least 1 for chunksize */
642 @@ -1203,8 +1203,6 @@ static int raid_status(struct dm_target *ti, status_type_t type,
643 DMEMIT(" -");
644 }
645 }
646 -
647 - return 0;
648 }
649
650 static int raid_iterate_devices(struct dm_target *ti, iterate_devices_callout_fn fn, void *data)
651 diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
652 index b58b7a33914a..a3cf259275af 100644
653 --- a/drivers/md/dm-raid1.c
654 +++ b/drivers/md/dm-raid1.c
655 @@ -1362,8 +1362,8 @@ static char device_status_char(struct mirror *m)
656 }
657
658
659 -static int mirror_status(struct dm_target *ti, status_type_t type,
660 - char *result, unsigned int maxlen)
661 +static void mirror_status(struct dm_target *ti, status_type_t type,
662 + char *result, unsigned int maxlen)
663 {
664 unsigned int m, sz = 0;
665 struct mirror_set *ms = (struct mirror_set *) ti->private;
666 @@ -1398,8 +1398,6 @@ static int mirror_status(struct dm_target *ti, status_type_t type,
667 if (ms->features & DM_RAID1_HANDLE_ERRORS)
668 DMEMIT(" 1 handle_errors");
669 }
670 -
671 - return 0;
672 }
673
674 static int mirror_iterate_devices(struct dm_target *ti,
675 diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
676 index 448050c87be0..db77ac693323 100644
677 --- a/drivers/md/dm-snap.c
678 +++ b/drivers/md/dm-snap.c
679 @@ -1845,8 +1845,8 @@ static void snapshot_merge_resume(struct dm_target *ti)
680 start_merge(s);
681 }
682
683 -static int snapshot_status(struct dm_target *ti, status_type_t type,
684 - char *result, unsigned int maxlen)
685 +static void snapshot_status(struct dm_target *ti, status_type_t type,
686 + char *result, unsigned int maxlen)
687 {
688 unsigned sz = 0;
689 struct dm_snapshot *snap = ti->private;
690 @@ -1892,8 +1892,6 @@ static int snapshot_status(struct dm_target *ti, status_type_t type,
691 maxlen - sz);
692 break;
693 }
694 -
695 - return 0;
696 }
697
698 static int snapshot_iterate_devices(struct dm_target *ti,
699 @@ -2148,8 +2146,8 @@ static void origin_resume(struct dm_target *ti)
700 ti->split_io = get_origin_minimum_chunksize(dev->bdev);
701 }
702
703 -static int origin_status(struct dm_target *ti, status_type_t type, char *result,
704 - unsigned int maxlen)
705 +static void origin_status(struct dm_target *ti, status_type_t type, char *result,
706 + unsigned int maxlen)
707 {
708 struct dm_dev *dev = ti->private;
709
710 @@ -2162,8 +2160,6 @@ static int origin_status(struct dm_target *ti, status_type_t type, char *result,
711 snprintf(result, maxlen, "%s", dev->name);
712 break;
713 }
714 -
715 - return 0;
716 }
717
718 static int origin_merge(struct dm_target *ti, struct bvec_merge_data *bvm,
719 diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c
720 index 35c94ff24ad5..58ffcda3dab3 100644
721 --- a/drivers/md/dm-stripe.c
722 +++ b/drivers/md/dm-stripe.c
723 @@ -302,8 +302,8 @@ static int stripe_map(struct dm_target *ti, struct bio *bio,
724 *
725 */
726
727 -static int stripe_status(struct dm_target *ti,
728 - status_type_t type, char *result, unsigned int maxlen)
729 +static void stripe_status(struct dm_target *ti,
730 + status_type_t type, char *result, unsigned int maxlen)
731 {
732 struct stripe_c *sc = (struct stripe_c *) ti->private;
733 char buffer[sc->stripes + 1];
734 @@ -330,7 +330,6 @@ static int stripe_status(struct dm_target *ti,
735 (unsigned long long)sc->stripe[i].physical_start);
736 break;
737 }
738 - return 0;
739 }
740
741 static int stripe_end_io(struct dm_target *ti, struct bio *bio,
742 diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
743 index 7c3ab8fcdbd3..c540dfff1f81 100644
744 --- a/drivers/md/dm-thin.c
745 +++ b/drivers/md/dm-thin.c
746 @@ -2325,8 +2325,8 @@ static int pool_message(struct dm_target *ti, unsigned argc, char **argv)
747 * <transaction id> <used metadata sectors>/<total metadata sectors>
748 * <used data sectors>/<total data sectors> <held metadata root>
749 */
750 -static int pool_status(struct dm_target *ti, status_type_t type,
751 - char *result, unsigned maxlen)
752 +static void pool_status(struct dm_target *ti, status_type_t type,
753 + char *result, unsigned maxlen)
754 {
755 int r, count;
756 unsigned sz = 0;
757 @@ -2343,32 +2343,41 @@ static int pool_status(struct dm_target *ti, status_type_t type,
758
759 switch (type) {
760 case STATUSTYPE_INFO:
761 - r = dm_pool_get_metadata_transaction_id(pool->pmd,
762 - &transaction_id);
763 - if (r)
764 - return r;
765 + r = dm_pool_get_metadata_transaction_id(pool->pmd, &transaction_id);
766 + if (r) {
767 + DMERR("dm_pool_get_metadata_transaction_id returned %d", r);
768 + goto err;
769 + }
770
771 - r = dm_pool_get_free_metadata_block_count(pool->pmd,
772 - &nr_free_blocks_metadata);
773 - if (r)
774 - return r;
775 + r = dm_pool_get_free_metadata_block_count(pool->pmd, &nr_free_blocks_metadata);
776 + if (r) {
777 + DMERR("dm_pool_get_free_metadata_block_count returned %d", r);
778 + goto err;
779 + }
780
781 r = dm_pool_get_metadata_dev_size(pool->pmd, &nr_blocks_metadata);
782 - if (r)
783 - return r;
784 + if (r) {
785 + DMERR("dm_pool_get_metadata_dev_size returned %d", r);
786 + goto err;
787 + }
788
789 - r = dm_pool_get_free_block_count(pool->pmd,
790 - &nr_free_blocks_data);
791 - if (r)
792 - return r;
793 + r = dm_pool_get_free_block_count(pool->pmd, &nr_free_blocks_data);
794 + if (r) {
795 + DMERR("dm_pool_get_free_block_count returned %d", r);
796 + goto err;
797 + }
798
799 r = dm_pool_get_data_dev_size(pool->pmd, &nr_blocks_data);
800 - if (r)
801 - return r;
802 + if (r) {
803 + DMERR("dm_pool_get_data_dev_size returned %d", r);
804 + goto err;
805 + }
806
807 r = dm_pool_get_held_metadata_root(pool->pmd, &held_root);
808 - if (r)
809 - return r;
810 + if (r) {
811 + DMERR("dm_pool_get_metadata_snap returned %d", r);
812 + goto err;
813 + }
814
815 DMEMIT("%llu %llu/%llu %llu/%llu ",
816 (unsigned long long)transaction_id,
817 @@ -2406,8 +2415,10 @@ static int pool_status(struct dm_target *ti, status_type_t type,
818
819 break;
820 }
821 + return;
822
823 - return 0;
824 +err:
825 + DMEMIT("Error");
826 }
827
828 static int pool_iterate_devices(struct dm_target *ti,
829 @@ -2659,8 +2670,8 @@ static void thin_postsuspend(struct dm_target *ti)
830 /*
831 * <nr mapped sectors> <highest mapped sector>
832 */
833 -static int thin_status(struct dm_target *ti, status_type_t type,
834 - char *result, unsigned maxlen)
835 +static void thin_status(struct dm_target *ti, status_type_t type,
836 + char *result, unsigned maxlen)
837 {
838 int r;
839 ssize_t sz = 0;
840 @@ -2674,12 +2685,16 @@ static int thin_status(struct dm_target *ti, status_type_t type,
841 switch (type) {
842 case STATUSTYPE_INFO:
843 r = dm_thin_get_mapped_count(tc->td, &mapped);
844 - if (r)
845 - return r;
846 + if (r) {
847 + DMERR("dm_thin_get_mapped_count returned %d", r);
848 + goto err;
849 + }
850
851 r = dm_thin_get_highest_mapped_block(tc->td, &highest);
852 - if (r < 0)
853 - return r;
854 + if (r < 0) {
855 + DMERR("dm_thin_get_highest_mapped_block returned %d", r);
856 + goto err;
857 + }
858
859 DMEMIT("%llu ", mapped * tc->pool->sectors_per_block);
860 if (r)
861 @@ -2699,7 +2714,10 @@ static int thin_status(struct dm_target *ti, status_type_t type,
862 }
863 }
864
865 - return 0;
866 + return;
867 +
868 +err:
869 + DMEMIT("Error");
870 }
871
872 static int thin_iterate_devices(struct dm_target *ti,
873 diff --git a/drivers/md/dm-verity.c b/drivers/md/dm-verity.c
874 index 9ab2a6a582b6..ac099847a4b3 100644
875 --- a/drivers/md/dm-verity.c
876 +++ b/drivers/md/dm-verity.c
877 @@ -514,8 +514,8 @@ static int verity_map(struct dm_target *ti, struct bio *bio,
878 /*
879 * Status: V (valid) or C (corruption found)
880 */
881 -static int verity_status(struct dm_target *ti, status_type_t type,
882 - char *result, unsigned maxlen)
883 +static void verity_status(struct dm_target *ti, status_type_t type,
884 + char *result, unsigned maxlen)
885 {
886 struct dm_verity *v = ti->private;
887 unsigned sz = 0;
888 @@ -546,8 +546,6 @@ static int verity_status(struct dm_target *ti, status_type_t type,
889 DMEMIT("%02x", v->salt[x]);
890 break;
891 }
892 -
893 - return 0;
894 }
895
896 static int verity_ioctl(struct dm_target *ti, unsigned cmd,
897 diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
898 index 833ff16f5fe1..c32a9093159a 100644
899 --- a/drivers/mmc/card/block.c
900 +++ b/drivers/mmc/card/block.c
901 @@ -701,7 +701,7 @@ static int mmc_blk_cmd_error(struct request *req, const char *name, int error,
902 * Otherwise we don't understand what happened, so abort.
903 */
904 static int mmc_blk_cmd_recovery(struct mmc_card *card, struct request *req,
905 - struct mmc_blk_request *brq, int *ecc_err)
906 + struct mmc_blk_request *brq, int *ecc_err, int *gen_err)
907 {
908 bool prev_cmd_status_valid = true;
909 u32 status, stop_status = 0;
910 @@ -739,6 +739,16 @@ static int mmc_blk_cmd_recovery(struct mmc_card *card, struct request *req,
911 (brq->cmd.resp[0] & R1_CARD_ECC_FAILED))
912 *ecc_err = 1;
913
914 + /* Flag General errors */
915 + if (!mmc_host_is_spi(card->host) && rq_data_dir(req) != READ)
916 + if ((status & R1_ERROR) ||
917 + (brq->stop.resp[0] & R1_ERROR)) {
918 + pr_err("%s: %s: general error sending stop or status command, stop cmd response %#x, card status %#x\n",
919 + req->rq_disk->disk_name, __func__,
920 + brq->stop.resp[0], status);
921 + *gen_err = 1;
922 + }
923 +
924 /*
925 * Check the current card state. If it is in some data transfer
926 * mode, tell it to stop (and hopefully transition back to TRAN.)
927 @@ -758,6 +768,13 @@ static int mmc_blk_cmd_recovery(struct mmc_card *card, struct request *req,
928 return ERR_ABORT;
929 if (stop_status & R1_CARD_ECC_FAILED)
930 *ecc_err = 1;
931 + if (!mmc_host_is_spi(card->host) && rq_data_dir(req) != READ)
932 + if (stop_status & R1_ERROR) {
933 + pr_err("%s: %s: general error sending stop command, stop cmd response %#x\n",
934 + req->rq_disk->disk_name, __func__,
935 + stop_status);
936 + *gen_err = 1;
937 + }
938 }
939
940 /* Check for set block count errors */
941 @@ -1007,7 +1024,7 @@ static int mmc_blk_err_check(struct mmc_card *card,
942 mmc_active);
943 struct mmc_blk_request *brq = &mq_mrq->brq;
944 struct request *req = mq_mrq->req;
945 - int ecc_err = 0;
946 + int ecc_err = 0, gen_err = 0;
947
948 /*
949 * sbc.error indicates a problem with the set block count
950 @@ -1021,7 +1038,7 @@ static int mmc_blk_err_check(struct mmc_card *card,
951 */
952 if (brq->sbc.error || brq->cmd.error || brq->stop.error ||
953 brq->data.error) {
954 - switch (mmc_blk_cmd_recovery(card, req, brq, &ecc_err)) {
955 + switch (mmc_blk_cmd_recovery(card, req, brq, &ecc_err, &gen_err)) {
956 case ERR_RETRY:
957 return MMC_BLK_RETRY;
958 case ERR_ABORT:
959 @@ -1051,6 +1068,15 @@ static int mmc_blk_err_check(struct mmc_card *card,
960 */
961 if (!mmc_host_is_spi(card->host) && rq_data_dir(req) != READ) {
962 u32 status;
963 +
964 + /* Check stop command response */
965 + if (brq->stop.resp[0] & R1_ERROR) {
966 + pr_err("%s: %s: general error sending stop command, stop cmd response %#x\n",
967 + req->rq_disk->disk_name, __func__,
968 + brq->stop.resp[0]);
969 + gen_err = 1;
970 + }
971 +
972 do {
973 int err = get_card_status(card, &status, 5);
974 if (err) {
975 @@ -1058,6 +1084,14 @@ static int mmc_blk_err_check(struct mmc_card *card,
976 req->rq_disk->disk_name, err);
977 return MMC_BLK_CMD_ERR;
978 }
979 +
980 + if (status & R1_ERROR) {
981 + pr_err("%s: %s: general error sending status command, card status %#x\n",
982 + req->rq_disk->disk_name, __func__,
983 + status);
984 + gen_err = 1;
985 + }
986 +
987 /*
988 * Some cards mishandle the status bits,
989 * so make sure to check both the busy
990 @@ -1067,6 +1101,13 @@ static int mmc_blk_err_check(struct mmc_card *card,
991 (R1_CURRENT_STATE(status) == R1_STATE_PRG));
992 }
993
994 + /* if general error occurs, retry the write operation. */
995 + if (gen_err) {
996 + pr_warning("%s: retrying write for general error\n",
997 + req->rq_disk->disk_name);
998 + return MMC_BLK_RETRY;
999 + }
1000 +
1001 if (brq->data.error) {
1002 pr_err("%s: error %d transferring data, sector %u, nr %u, cmd response %#x, card status %#x\n",
1003 req->rq_disk->disk_name, brq->data.error,
1004 diff --git a/drivers/net/bonding/bond_sysfs.c b/drivers/net/bonding/bond_sysfs.c
1005 index c40c0a871818..f42a00ac38d7 100644
1006 --- a/drivers/net/bonding/bond_sysfs.c
1007 +++ b/drivers/net/bonding/bond_sysfs.c
1008 @@ -533,8 +533,9 @@ static ssize_t bonding_store_arp_interval(struct device *d,
1009 goto out;
1010 }
1011 if (bond->params.mode == BOND_MODE_ALB ||
1012 - bond->params.mode == BOND_MODE_TLB) {
1013 - pr_info("%s: ARP monitoring cannot be used with ALB/TLB. Only MII monitoring is supported on %s.\n",
1014 + bond->params.mode == BOND_MODE_TLB ||
1015 + bond->params.mode == BOND_MODE_8023AD) {
1016 + pr_info("%s: ARP monitoring cannot be used with ALB/TLB/802.3ad. Only MII monitoring is supported on %s.\n",
1017 bond->dev->name, bond->dev->name);
1018 ret = -EINVAL;
1019 goto out;
1020 @@ -692,6 +693,8 @@ static ssize_t bonding_store_downdelay(struct device *d,
1021 int new_value, ret = count;
1022 struct bonding *bond = to_bond(d);
1023
1024 + if (!rtnl_trylock())
1025 + return restart_syscall();
1026 if (!(bond->params.miimon)) {
1027 pr_err("%s: Unable to set down delay as MII monitoring is disabled\n",
1028 bond->dev->name);
1029 @@ -725,6 +728,7 @@ static ssize_t bonding_store_downdelay(struct device *d,
1030 }
1031
1032 out:
1033 + rtnl_unlock();
1034 return ret;
1035 }
1036 static DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR,
1037 @@ -747,6 +751,8 @@ static ssize_t bonding_store_updelay(struct device *d,
1038 int new_value, ret = count;
1039 struct bonding *bond = to_bond(d);
1040
1041 + if (!rtnl_trylock())
1042 + return restart_syscall();
1043 if (!(bond->params.miimon)) {
1044 pr_err("%s: Unable to set up delay as MII monitoring is disabled\n",
1045 bond->dev->name);
1046 @@ -780,6 +786,7 @@ static ssize_t bonding_store_updelay(struct device *d,
1047 }
1048
1049 out:
1050 + rtnl_unlock();
1051 return ret;
1052 }
1053 static DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR,
1054 diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
1055 index 2e0d8762bb52..bac88c22d990 100644
1056 --- a/drivers/net/ppp/pppoe.c
1057 +++ b/drivers/net/ppp/pppoe.c
1058 @@ -985,8 +985,6 @@ static int pppoe_recvmsg(struct kiocb *iocb, struct socket *sock,
1059 if (error < 0)
1060 goto end;
1061
1062 - m->msg_namelen = 0;
1063 -
1064 if (skb) {
1065 total_len = min_t(size_t, total_len, skb->len);
1066 error = skb_copy_datagram_iovec(skb, 0, m->msg_iov, total_len);
1067 diff --git a/drivers/video/kyro/fbdev.c b/drivers/video/kyro/fbdev.c
1068 index acb9370fdb14..7aa8668f0a0c 100644
1069 --- a/drivers/video/kyro/fbdev.c
1070 +++ b/drivers/video/kyro/fbdev.c
1071 @@ -625,15 +625,15 @@ static int kyrofb_ioctl(struct fb_info *info,
1072 }
1073 break;
1074 case KYRO_IOCTL_UVSTRIDE:
1075 - if (copy_to_user(argp, &deviceInfo.ulOverlayUVStride, sizeof(unsigned long)))
1076 + if (copy_to_user(argp, &deviceInfo.ulOverlayUVStride, sizeof(deviceInfo.ulOverlayUVStride)))
1077 return -EFAULT;
1078 break;
1079 case KYRO_IOCTL_STRIDE:
1080 - if (copy_to_user(argp, &deviceInfo.ulOverlayStride, sizeof(unsigned long)))
1081 + if (copy_to_user(argp, &deviceInfo.ulOverlayStride, sizeof(deviceInfo.ulOverlayStride)))
1082 return -EFAULT;
1083 break;
1084 case KYRO_IOCTL_OVERLAY_OFFSET:
1085 - if (copy_to_user(argp, &deviceInfo.ulOverlayOffset, sizeof(unsigned long)))
1086 + if (copy_to_user(argp, &deviceInfo.ulOverlayOffset, sizeof(deviceInfo.ulOverlayOffset)))
1087 return -EFAULT;
1088 break;
1089 }
1090 diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
1091 index 53459b055cfc..25d839ed0ae1 100644
1092 --- a/fs/nfsd/nfssvc.c
1093 +++ b/fs/nfsd/nfssvc.c
1094 @@ -11,7 +11,6 @@
1095 #include <linux/module.h>
1096 #include <linux/fs_struct.h>
1097 #include <linux/swap.h>
1098 -#include <linux/nsproxy.h>
1099
1100 #include <linux/sunrpc/stats.h>
1101 #include <linux/sunrpc/svcsock.h>
1102 @@ -330,7 +329,7 @@ static int nfsd_get_default_max_blksize(void)
1103 int nfsd_create_serv(void)
1104 {
1105 int error;
1106 - struct net *net = current->nsproxy->net_ns;
1107 + struct net *net = &init_net;
1108
1109 WARN_ON(!mutex_is_locked(&nfsd_mutex));
1110 if (nfsd_serv) {
1111 diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
1112 index 98f34b886f95..fa09b579f67c 100644
1113 --- a/include/linux/device-mapper.h
1114 +++ b/include/linux/device-mapper.h
1115 @@ -72,8 +72,8 @@ typedef void (*dm_postsuspend_fn) (struct dm_target *ti);
1116 typedef int (*dm_preresume_fn) (struct dm_target *ti);
1117 typedef void (*dm_resume_fn) (struct dm_target *ti);
1118
1119 -typedef int (*dm_status_fn) (struct dm_target *ti, status_type_t status_type,
1120 - char *result, unsigned int maxlen);
1121 +typedef void (*dm_status_fn) (struct dm_target *ti, status_type_t status_type,
1122 + char *result, unsigned int maxlen);
1123
1124 typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv);
1125
1126 diff --git a/include/linux/net.h b/include/linux/net.h
1127 index 95fea1432dd3..45232814fc03 100644
1128 --- a/include/linux/net.h
1129 +++ b/include/linux/net.h
1130 @@ -198,6 +198,14 @@ struct proto_ops {
1131 #endif
1132 int (*sendmsg) (struct kiocb *iocb, struct socket *sock,
1133 struct msghdr *m, size_t total_len);
1134 + /* Notes for implementing recvmsg:
1135 + * ===============================
1136 + * msg->msg_namelen should get updated by the recvmsg handlers
1137 + * iff msg_name != NULL. It is by default 0 to prevent
1138 + * returning uninitialized memory to user space. The recvfrom
1139 + * handlers can assume that msg.msg_name is either NULL or has
1140 + * a minimum size of sizeof(struct sockaddr_storage).
1141 + */
1142 int (*recvmsg) (struct kiocb *iocb, struct socket *sock,
1143 struct msghdr *m, size_t total_len,
1144 int flags);
1145 diff --git a/include/linux/random.h b/include/linux/random.h
1146 index 7e58ad27b7ff..54b1fd3efdfa 100644
1147 --- a/include/linux/random.h
1148 +++ b/include/linux/random.h
1149 @@ -87,9 +87,9 @@ static inline void prandom32_seed(struct rnd_state *state, u64 seed)
1150 {
1151 u32 i = (seed >> 32) ^ (seed << 10) ^ seed;
1152
1153 - state->s1 = __seed(i, 1);
1154 - state->s2 = __seed(i, 7);
1155 - state->s3 = __seed(i, 15);
1156 + state->s1 = __seed(i, 2);
1157 + state->s2 = __seed(i, 8);
1158 + state->s3 = __seed(i, 16);
1159 }
1160
1161 #ifdef CONFIG_ARCH_RANDOM
1162 diff --git a/include/net/ip.h b/include/net/ip.h
1163 index 0750bf7d424f..6d6b12f4753c 100644
1164 --- a/include/net/ip.h
1165 +++ b/include/net/ip.h
1166 @@ -466,7 +466,7 @@ extern int compat_ip_getsockopt(struct sock *sk, int level,
1167 int optname, char __user *optval, int __user *optlen);
1168 extern int ip_ra_control(struct sock *sk, unsigned char on, void (*destructor)(struct sock *));
1169
1170 -extern int ip_recv_error(struct sock *sk, struct msghdr *msg, int len);
1171 +extern int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len);
1172 extern void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
1173 __be16 port, u32 info, u8 *payload);
1174 extern void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport,
1175 diff --git a/include/net/ipv6.h b/include/net/ipv6.h
1176 index 12a1bd2e9879..fa7af9183dc9 100644
1177 --- a/include/net/ipv6.h
1178 +++ b/include/net/ipv6.h
1179 @@ -606,8 +606,10 @@ extern int compat_ipv6_getsockopt(struct sock *sk,
1180 extern int ip6_datagram_connect(struct sock *sk,
1181 struct sockaddr *addr, int addr_len);
1182
1183 -extern int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len);
1184 -extern int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len);
1185 +extern int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len,
1186 + int *addr_len);
1187 +extern int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len,
1188 + int *addr_len);
1189 extern void ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, int err, __be16 port,
1190 u32 info, u8 *payload);
1191 extern void ipv6_local_error(struct sock *sk, int err, struct flowi6 *fl6, u32 info);
1192 diff --git a/lib/random32.c b/lib/random32.c
1193 index 938bde5876ac..aa95712c1431 100644
1194 --- a/lib/random32.c
1195 +++ b/lib/random32.c
1196 @@ -92,7 +92,7 @@ void srandom32(u32 entropy)
1197 */
1198 for_each_possible_cpu (i) {
1199 struct rnd_state *state = &per_cpu(net_rand_state, i);
1200 - state->s1 = __seed(state->s1 ^ entropy, 1);
1201 + state->s1 = __seed(state->s1 ^ entropy, 2);
1202 }
1203 }
1204 EXPORT_SYMBOL(srandom32);
1205 @@ -109,9 +109,9 @@ static int __init random32_init(void)
1206 struct rnd_state *state = &per_cpu(net_rand_state,i);
1207
1208 #define LCG(x) ((x) * 69069) /* super-duper LCG */
1209 - state->s1 = __seed(LCG(i + jiffies), 1);
1210 - state->s2 = __seed(LCG(state->s1), 7);
1211 - state->s3 = __seed(LCG(state->s2), 15);
1212 + state->s1 = __seed(LCG(i + jiffies), 2);
1213 + state->s2 = __seed(LCG(state->s1), 8);
1214 + state->s3 = __seed(LCG(state->s2), 16);
1215
1216 /* "warm it up" */
1217 prandom32(state);
1218 @@ -138,9 +138,9 @@ static int __init random32_reseed(void)
1219 u32 seeds[3];
1220
1221 get_random_bytes(&seeds, sizeof(seeds));
1222 - state->s1 = __seed(seeds[0], 1);
1223 - state->s2 = __seed(seeds[1], 7);
1224 - state->s3 = __seed(seeds[2], 15);
1225 + state->s1 = __seed(seeds[0], 2);
1226 + state->s2 = __seed(seeds[1], 8);
1227 + state->s3 = __seed(seeds[2], 16);
1228
1229 /* mix it in */
1230 prandom32(state);
1231 diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
1232 index bfa9ab93eda5..334d4cd7612f 100644
1233 --- a/net/appletalk/ddp.c
1234 +++ b/net/appletalk/ddp.c
1235 @@ -1740,7 +1740,6 @@ static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr
1236 size_t size, int flags)
1237 {
1238 struct sock *sk = sock->sk;
1239 - struct sockaddr_at *sat = (struct sockaddr_at *)msg->msg_name;
1240 struct ddpehdr *ddp;
1241 int copied = 0;
1242 int offset = 0;
1243 @@ -1769,14 +1768,13 @@ static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr
1244 }
1245 err = skb_copy_datagram_iovec(skb, offset, msg->msg_iov, copied);
1246
1247 - if (!err) {
1248 - if (sat) {
1249 - sat->sat_family = AF_APPLETALK;
1250 - sat->sat_port = ddp->deh_sport;
1251 - sat->sat_addr.s_node = ddp->deh_snode;
1252 - sat->sat_addr.s_net = ddp->deh_snet;
1253 - }
1254 - msg->msg_namelen = sizeof(*sat);
1255 + if (!err && msg->msg_name) {
1256 + struct sockaddr_at *sat = msg->msg_name;
1257 + sat->sat_family = AF_APPLETALK;
1258 + sat->sat_port = ddp->deh_sport;
1259 + sat->sat_addr.s_node = ddp->deh_snode;
1260 + sat->sat_addr.s_net = ddp->deh_snet;
1261 + msg->msg_namelen = sizeof(*sat);
1262 }
1263
1264 skb_free_datagram(sk, skb); /* Free the datagram. */
1265 diff --git a/net/atm/common.c b/net/atm/common.c
1266 index f0a9b7eb3732..0c0ad930a632 100644
1267 --- a/net/atm/common.c
1268 +++ b/net/atm/common.c
1269 @@ -520,8 +520,6 @@ int vcc_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
1270 struct sk_buff *skb;
1271 int copied, error = -EINVAL;
1272
1273 - msg->msg_namelen = 0;
1274 -
1275 if (sock->state != SS_CONNECTED)
1276 return -ENOTCONN;
1277
1278 diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c
1279 index 68b39927ecda..ca1820cf22f2 100644
1280 --- a/net/ax25/af_ax25.c
1281 +++ b/net/ax25/af_ax25.c
1282 @@ -1640,11 +1640,11 @@ static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
1283
1284 skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
1285
1286 - if (msg->msg_namelen != 0) {
1287 - struct sockaddr_ax25 *sax = (struct sockaddr_ax25 *)msg->msg_name;
1288 + if (msg->msg_name) {
1289 ax25_digi digi;
1290 ax25_address src;
1291 const unsigned char *mac = skb_mac_header(skb);
1292 + struct sockaddr_ax25 *sax = msg->msg_name;
1293
1294 memset(sax, 0, sizeof(struct full_sockaddr_ax25));
1295 ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
1296 diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
1297 index c2943484eab4..af3775f3d640 100644
1298 --- a/net/bluetooth/af_bluetooth.c
1299 +++ b/net/bluetooth/af_bluetooth.c
1300 @@ -240,8 +240,6 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
1301 if (flags & (MSG_OOB))
1302 return -EOPNOTSUPP;
1303
1304 - msg->msg_namelen = 0;
1305 -
1306 skb = skb_recv_datagram(sk, flags, noblock, &err);
1307 if (!skb) {
1308 if (sk->sk_shutdown & RCV_SHUTDOWN)
1309 @@ -306,8 +304,6 @@ int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
1310 if (flags & MSG_OOB)
1311 return -EOPNOTSUPP;
1312
1313 - msg->msg_namelen = 0;
1314 -
1315 BT_DBG("sk %p size %zu", sk, size);
1316
1317 lock_sock(sk);
1318 diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
1319 index bedc768c8cdf..8c2cb05e50ea 100644
1320 --- a/net/bluetooth/hci_sock.c
1321 +++ b/net/bluetooth/hci_sock.c
1322 @@ -767,8 +767,6 @@ static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
1323 if (!skb)
1324 return err;
1325
1326 - msg->msg_namelen = 0;
1327 -
1328 copied = skb->len;
1329 if (len < copied) {
1330 msg->msg_flags |= MSG_TRUNC;
1331 diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c
1332 index c79db7f7533b..8d1edd7207df 100644
1333 --- a/net/bluetooth/rfcomm/sock.c
1334 +++ b/net/bluetooth/rfcomm/sock.c
1335 @@ -628,7 +628,6 @@ static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
1336
1337 if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
1338 rfcomm_dlc_accept(d);
1339 - msg->msg_namelen = 0;
1340 return 0;
1341 }
1342
1343 diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
1344 index e1144e1617be..ff44f5f16780 100644
1345 --- a/net/bridge/br_if.c
1346 +++ b/net/bridge/br_if.c
1347 @@ -170,6 +170,8 @@ void br_dev_delete(struct net_device *dev, struct list_head *head)
1348 del_nbp(p);
1349 }
1350
1351 + br_fdb_delete_by_port(br, NULL, 1);
1352 +
1353 del_timer_sync(&br->gc_timer);
1354
1355 br_sysfs_delbr(br->dev);
1356 diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c
1357 index 24a68861881c..9e8351598f8a 100644
1358 --- a/net/caif/caif_socket.c
1359 +++ b/net/caif/caif_socket.c
1360 @@ -287,8 +287,6 @@ static int caif_seqpkt_recvmsg(struct kiocb *iocb, struct socket *sock,
1361 if (m->msg_flags&MSG_OOB)
1362 goto read_error;
1363
1364 - m->msg_namelen = 0;
1365 -
1366 skb = skb_recv_datagram(sk, flags, 0 , &ret);
1367 if (!skb)
1368 goto read_error;
1369 @@ -362,8 +360,6 @@ static int caif_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
1370 if (flags&MSG_OOB)
1371 goto out;
1372
1373 - msg->msg_namelen = 0;
1374 -
1375 /*
1376 * Lock the socket to prevent queue disordering
1377 * while sleeps in memcpy_tomsg
1378 diff --git a/net/compat.c b/net/compat.c
1379 index ee84d82d7287..17f997e14f63 100644
1380 --- a/net/compat.c
1381 +++ b/net/compat.c
1382 @@ -72,7 +72,7 @@ int get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr __user *umsg)
1383 __get_user(kmsg->msg_flags, &umsg->msg_flags))
1384 return -EFAULT;
1385 if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
1386 - return -EINVAL;
1387 + kmsg->msg_namelen = sizeof(struct sockaddr_storage);
1388 kmsg->msg_name = compat_ptr(tmp1);
1389 kmsg->msg_iov = compat_ptr(tmp2);
1390 kmsg->msg_control = compat_ptr(tmp3);
1391 @@ -93,7 +93,8 @@ int verify_compat_iovec(struct msghdr *kern_msg, struct iovec *kern_iov,
1392 if (err < 0)
1393 return err;
1394 }
1395 - kern_msg->msg_name = kern_address;
1396 + if (kern_msg->msg_name)
1397 + kern_msg->msg_name = kern_address;
1398 } else
1399 kern_msg->msg_name = NULL;
1400
1401 diff --git a/net/core/dev.c b/net/core/dev.c
1402 index 7db83d64e4f7..cebdc15ce327 100644
1403 --- a/net/core/dev.c
1404 +++ b/net/core/dev.c
1405 @@ -4443,7 +4443,7 @@ static void dev_change_rx_flags(struct net_device *dev, int flags)
1406 {
1407 const struct net_device_ops *ops = dev->netdev_ops;
1408
1409 - if ((dev->flags & IFF_UP) && ops->ndo_change_rx_flags)
1410 + if (ops->ndo_change_rx_flags)
1411 ops->ndo_change_rx_flags(dev, flags);
1412 }
1413
1414 diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c
1415 index c02e63c908da..c0c21b1ce1ec 100644
1416 --- a/net/core/fib_rules.c
1417 +++ b/net/core/fib_rules.c
1418 @@ -443,7 +443,8 @@ static int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
1419 if (frh->action && (frh->action != rule->action))
1420 continue;
1421
1422 - if (frh->table && (frh_get_table(frh, tb) != rule->table))
1423 + if (frh_get_table(frh, tb) &&
1424 + (frh_get_table(frh, tb) != rule->table))
1425 continue;
1426
1427 if (tb[FRA_PRIORITY] &&
1428 diff --git a/net/core/iovec.c b/net/core/iovec.c
1429 index 7e7aeb01de45..7fd34a56aeb3 100644
1430 --- a/net/core/iovec.c
1431 +++ b/net/core/iovec.c
1432 @@ -48,7 +48,8 @@ int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr_storage *a
1433 if (err < 0)
1434 return err;
1435 }
1436 - m->msg_name = address;
1437 + if (m->msg_name)
1438 + m->msg_name = address;
1439 } else {
1440 m->msg_name = NULL;
1441 }
1442 diff --git a/net/core/pktgen.c b/net/core/pktgen.c
1443 index 114d8a9e8570..546b1334fad4 100644
1444 --- a/net/core/pktgen.c
1445 +++ b/net/core/pktgen.c
1446 @@ -2521,6 +2521,8 @@ static int process_ipsec(struct pktgen_dev *pkt_dev,
1447 if (x) {
1448 int ret;
1449 __u8 *eth;
1450 + struct iphdr *iph;
1451 +
1452 nhead = x->props.header_len - skb_headroom(skb);
1453 if (nhead > 0) {
1454 ret = pskb_expand_head(skb, nhead, 0, GFP_ATOMIC);
1455 @@ -2542,6 +2544,11 @@ static int process_ipsec(struct pktgen_dev *pkt_dev,
1456 eth = (__u8 *) skb_push(skb, ETH_HLEN);
1457 memcpy(eth, pkt_dev->hh, 12);
1458 *(u16 *) &eth[12] = protocol;
1459 +
1460 + /* Update IPv4 header len as well as checksum value */
1461 + iph = ip_hdr(skb);
1462 + iph->tot_len = htons(skb->len - ETH_HLEN);
1463 + ip_send_check(iph);
1464 }
1465 }
1466 return 1;
1467 diff --git a/net/ieee802154/6lowpan.c b/net/ieee802154/6lowpan.c
1468 index 840821b90bcd..ddbdceb9594b 100644
1469 --- a/net/ieee802154/6lowpan.c
1470 +++ b/net/ieee802154/6lowpan.c
1471 @@ -803,7 +803,7 @@ lowpan_process_data(struct sk_buff *skb)
1472 * Traffic class carried in-line
1473 * ECN + DSCP (1 byte), Flow Label is elided
1474 */
1475 - case 1: /* 10b */
1476 + case 2: /* 10b */
1477 if (!skb->len)
1478 goto drop;
1479 tmp = lowpan_fetch_skb_u8(skb);
1480 @@ -816,7 +816,7 @@ lowpan_process_data(struct sk_buff *skb)
1481 * Flow Label carried in-line
1482 * ECN + 2-bit Pad + Flow Label (3 bytes), DSCP is elided
1483 */
1484 - case 2: /* 01b */
1485 + case 1: /* 01b */
1486 if (!skb->len)
1487 goto drop;
1488 tmp = lowpan_fetch_skb_u8(skb);
1489 diff --git a/net/ipv4/datagram.c b/net/ipv4/datagram.c
1490 index 424fafbc8cb0..ec0751051db7 100644
1491 --- a/net/ipv4/datagram.c
1492 +++ b/net/ipv4/datagram.c
1493 @@ -57,7 +57,7 @@ int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
1494 if (IS_ERR(rt)) {
1495 err = PTR_ERR(rt);
1496 if (err == -ENETUNREACH)
1497 - IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
1498 + IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
1499 goto out;
1500 }
1501
1502 diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
1503 index 374828487003..0bd174faff8f 100644
1504 --- a/net/ipv4/ip_sockglue.c
1505 +++ b/net/ipv4/ip_sockglue.c
1506 @@ -367,7 +367,7 @@ void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 port, u32 inf
1507 /*
1508 * Handle MSG_ERRQUEUE
1509 */
1510 -int ip_recv_error(struct sock *sk, struct msghdr *msg, int len)
1511 +int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
1512 {
1513 struct sock_exterr_skb *serr;
1514 struct sk_buff *skb, *skb2;
1515 @@ -404,6 +404,7 @@ int ip_recv_error(struct sock *sk, struct msghdr *msg, int len)
1516 serr->addr_offset);
1517 sin->sin_port = serr->port;
1518 memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
1519 + *addr_len = sizeof(*sin);
1520 }
1521
1522 memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err));
1523 diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
1524 index c234bda5b801..e80db1e6b0b2 100644
1525 --- a/net/ipv4/ping.c
1526 +++ b/net/ipv4/ping.c
1527 @@ -568,7 +568,7 @@ static int ping_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
1528 err = PTR_ERR(rt);
1529 rt = NULL;
1530 if (err == -ENETUNREACH)
1531 - IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
1532 + IP_INC_STATS(net, IPSTATS_MIB_OUTNOROUTES);
1533 goto out;
1534 }
1535
1536 @@ -624,7 +624,6 @@ static int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
1537 size_t len, int noblock, int flags, int *addr_len)
1538 {
1539 struct inet_sock *isk = inet_sk(sk);
1540 - struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
1541 struct sk_buff *skb;
1542 int copied, err;
1543
1544 @@ -634,11 +633,8 @@ static int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
1545 if (flags & MSG_OOB)
1546 goto out;
1547
1548 - if (addr_len)
1549 - *addr_len = sizeof(*sin);
1550 -
1551 if (flags & MSG_ERRQUEUE)
1552 - return ip_recv_error(sk, msg, len);
1553 + return ip_recv_error(sk, msg, len, addr_len);
1554
1555 skb = skb_recv_datagram(sk, flags, noblock, &err);
1556 if (!skb)
1557 @@ -658,11 +654,14 @@ static int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
1558 sock_recv_timestamp(msg, sk, skb);
1559
1560 /* Copy the address. */
1561 - if (sin) {
1562 + if (msg->msg_name) {
1563 + struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
1564 +
1565 sin->sin_family = AF_INET;
1566 sin->sin_port = 0 /* skb->h.uh->source */;
1567 sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
1568 memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
1569 + *addr_len = sizeof(*sin);
1570 }
1571 if (isk->cmsg_flags)
1572 ip_cmsg_recv(msg, skb);
1573 diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
1574 index c6b9ca651ab3..48c6ebcb7fe0 100644
1575 --- a/net/ipv4/raw.c
1576 +++ b/net/ipv4/raw.c
1577 @@ -688,11 +688,8 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
1578 if (flags & MSG_OOB)
1579 goto out;
1580
1581 - if (addr_len)
1582 - *addr_len = sizeof(*sin);
1583 -
1584 if (flags & MSG_ERRQUEUE) {
1585 - err = ip_recv_error(sk, msg, len);
1586 + err = ip_recv_error(sk, msg, len, addr_len);
1587 goto out;
1588 }
1589
1590 @@ -718,6 +715,7 @@ static int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
1591 sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
1592 sin->sin_port = 0;
1593 memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
1594 + *addr_len = sizeof(*sin);
1595 }
1596 if (inet->cmsg_flags)
1597 ip_cmsg_recv(msg, skb);
1598 diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
1599 index ae03b7b75af6..727678dc7968 100644
1600 --- a/net/ipv4/tcp_ipv4.c
1601 +++ b/net/ipv4/tcp_ipv4.c
1602 @@ -176,7 +176,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
1603 if (IS_ERR(rt)) {
1604 err = PTR_ERR(rt);
1605 if (err == -ENETUNREACH)
1606 - IP_INC_STATS_BH(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
1607 + IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
1608 return err;
1609 }
1610
1611 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
1612 index 0b6136d578f6..7949b5d1663f 100644
1613 --- a/net/ipv4/udp.c
1614 +++ b/net/ipv4/udp.c
1615 @@ -940,7 +940,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
1616 err = PTR_ERR(rt);
1617 rt = NULL;
1618 if (err == -ENETUNREACH)
1619 - IP_INC_STATS_BH(net, IPSTATS_MIB_OUTNOROUTES);
1620 + IP_INC_STATS(net, IPSTATS_MIB_OUTNOROUTES);
1621 goto out;
1622 }
1623
1624 @@ -1039,6 +1039,9 @@ int udp_sendpage(struct sock *sk, struct page *page, int offset,
1625 struct udp_sock *up = udp_sk(sk);
1626 int ret;
1627
1628 + if (flags & MSG_SENDPAGE_NOTLAST)
1629 + flags |= MSG_MORE;
1630 +
1631 if (!up->pending) {
1632 struct msghdr msg = { .msg_flags = flags|MSG_MORE };
1633
1634 @@ -1174,14 +1177,8 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
1635 int is_udplite = IS_UDPLITE(sk);
1636 bool slow;
1637
1638 - /*
1639 - * Check any passed addresses
1640 - */
1641 - if (addr_len)
1642 - *addr_len = sizeof(*sin);
1643 -
1644 if (flags & MSG_ERRQUEUE)
1645 - return ip_recv_error(sk, msg, len);
1646 + return ip_recv_error(sk, msg, len, addr_len);
1647
1648 try_again:
1649 skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
1650 @@ -1234,6 +1231,7 @@ try_again:
1651 sin->sin_port = udp_hdr(skb)->source;
1652 sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
1653 memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
1654 + *addr_len = sizeof(*sin);
1655 }
1656 if (inet->cmsg_flags)
1657 ip_cmsg_recv(msg, skb);
1658 diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
1659 index 76832c8dc89d..94e5258f3560 100644
1660 --- a/net/ipv6/datagram.c
1661 +++ b/net/ipv6/datagram.c
1662 @@ -315,7 +315,7 @@ void ipv6_local_rxpmtu(struct sock *sk, struct flowi6 *fl6, u32 mtu)
1663 /*
1664 * Handle MSG_ERRQUEUE
1665 */
1666 -int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
1667 +int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
1668 {
1669 struct ipv6_pinfo *np = inet6_sk(sk);
1670 struct sock_exterr_skb *serr;
1671 @@ -366,6 +366,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
1672 ipv6_addr_set_v4mapped(*(__be32 *)(nh + serr->addr_offset),
1673 &sin->sin6_addr);
1674 }
1675 + *addr_len = sizeof(*sin);
1676 }
1677
1678 memcpy(&errhdr.ee, &serr->ee, sizeof(struct sock_extended_err));
1679 @@ -374,6 +375,7 @@ int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len)
1680 if (serr->ee.ee_origin != SO_EE_ORIGIN_LOCAL) {
1681 sin->sin6_family = AF_INET6;
1682 sin->sin6_flowinfo = 0;
1683 + sin->sin6_port = 0;
1684 sin->sin6_scope_id = 0;
1685 if (skb->protocol == htons(ETH_P_IPV6)) {
1686 sin->sin6_addr = ipv6_hdr(skb)->saddr;
1687 @@ -418,7 +420,8 @@ out:
1688 /*
1689 * Handle IPV6_RECVPATHMTU
1690 */
1691 -int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len)
1692 +int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len,
1693 + int *addr_len)
1694 {
1695 struct ipv6_pinfo *np = inet6_sk(sk);
1696 struct sk_buff *skb;
1697 @@ -452,6 +455,7 @@ int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len)
1698 sin->sin6_port = 0;
1699 sin->sin6_scope_id = mtu_info.ip6m_addr.sin6_scope_id;
1700 sin->sin6_addr = mtu_info.ip6m_addr.sin6_addr;
1701 + *addr_len = sizeof(*sin);
1702 }
1703
1704 put_cmsg(msg, SOL_IPV6, IPV6_PATHMTU, sizeof(mtu_info), &mtu_info);
1705 diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
1706 index 7dabea3a7125..91cd5f1657b7 100644
1707 --- a/net/ipv6/ip6_output.c
1708 +++ b/net/ipv6/ip6_output.c
1709 @@ -144,8 +144,8 @@ static int ip6_finish_output2(struct sk_buff *skb)
1710 return res;
1711 }
1712 rcu_read_unlock();
1713 - IP6_INC_STATS_BH(dev_net(dst->dev),
1714 - ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
1715 + IP6_INC_STATS(dev_net(dst->dev),
1716 + ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
1717 kfree_skb(skb);
1718 return -EINVAL;
1719 }
1720 diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
1721 index 3ee28700de4c..d6820d019b2b 100644
1722 --- a/net/ipv6/raw.c
1723 +++ b/net/ipv6/raw.c
1724 @@ -457,14 +457,11 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
1725 if (flags & MSG_OOB)
1726 return -EOPNOTSUPP;
1727
1728 - if (addr_len)
1729 - *addr_len=sizeof(*sin6);
1730 -
1731 if (flags & MSG_ERRQUEUE)
1732 - return ipv6_recv_error(sk, msg, len);
1733 + return ipv6_recv_error(sk, msg, len, addr_len);
1734
1735 if (np->rxpmtu && np->rxopt.bits.rxpmtu)
1736 - return ipv6_recv_rxpmtu(sk, msg, len);
1737 + return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
1738
1739 skb = skb_recv_datagram(sk, flags, noblock, &err);
1740 if (!skb)
1741 @@ -499,6 +496,7 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
1742 sin6->sin6_scope_id = 0;
1743 if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL)
1744 sin6->sin6_scope_id = IP6CB(skb)->iif;
1745 + *addr_len = sizeof(*sin6);
1746 }
1747
1748 sock_recv_ts_and_drops(msg, sk, skb);
1749 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1750 index 4f768a4c2907..6ac8bc29b43e 100644
1751 --- a/net/ipv6/route.c
1752 +++ b/net/ipv6/route.c
1753 @@ -617,8 +617,11 @@ int rt6_route_rcv(struct net_device *dev, u8 *opt, int len,
1754 prefix = &prefix_buf;
1755 }
1756
1757 - rt = rt6_get_route_info(net, prefix, rinfo->prefix_len, gwaddr,
1758 - dev->ifindex);
1759 + if (rinfo->prefix_len == 0)
1760 + rt = rt6_get_dflt_router(gwaddr, dev);
1761 + else
1762 + rt = rt6_get_route_info(net, prefix, rinfo->prefix_len,
1763 + gwaddr, dev->ifindex);
1764
1765 if (rt && !lifetime) {
1766 ip6_del_rt(rt);
1767 diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
1768 index f79bfdbc247f..98fd7384c446 100644
1769 --- a/net/ipv6/udp.c
1770 +++ b/net/ipv6/udp.c
1771 @@ -348,14 +348,11 @@ int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk,
1772 int is_udp4;
1773 bool slow;
1774
1775 - if (addr_len)
1776 - *addr_len=sizeof(struct sockaddr_in6);
1777 -
1778 if (flags & MSG_ERRQUEUE)
1779 - return ipv6_recv_error(sk, msg, len);
1780 + return ipv6_recv_error(sk, msg, len, addr_len);
1781
1782 if (np->rxpmtu && np->rxopt.bits.rxpmtu)
1783 - return ipv6_recv_rxpmtu(sk, msg, len);
1784 + return ipv6_recv_rxpmtu(sk, msg, len, addr_len);
1785
1786 try_again:
1787 skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
1788 @@ -423,7 +420,7 @@ try_again:
1789 if (ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LINKLOCAL)
1790 sin6->sin6_scope_id = IP6CB(skb)->iif;
1791 }
1792 -
1793 + *addr_len = sizeof(*sin6);
1794 }
1795 if (is_udp4) {
1796 if (inet->cmsg_flags)
1797 diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c
1798 index 9680226640ef..8c06a5065772 100644
1799 --- a/net/ipx/af_ipx.c
1800 +++ b/net/ipx/af_ipx.c
1801 @@ -1835,8 +1835,6 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
1802 if (skb->tstamp.tv64)
1803 sk->sk_stamp = skb->tstamp;
1804
1805 - msg->msg_namelen = sizeof(*sipx);
1806 -
1807 if (sipx) {
1808 sipx->sipx_family = AF_IPX;
1809 sipx->sipx_port = ipx->ipx_source.sock;
1810 @@ -1844,6 +1842,7 @@ static int ipx_recvmsg(struct kiocb *iocb, struct socket *sock,
1811 sipx->sipx_network = IPX_SKB_CB(skb)->ipx_source_net;
1812 sipx->sipx_type = ipx->ipx_type;
1813 sipx->sipx_zero = 0;
1814 + msg->msg_namelen = sizeof(*sipx);
1815 }
1816 rc = copied;
1817
1818 diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c
1819 index bd25678b1d50..12218f705315 100644
1820 --- a/net/irda/af_irda.c
1821 +++ b/net/irda/af_irda.c
1822 @@ -1386,8 +1386,6 @@ static int irda_recvmsg_dgram(struct kiocb *iocb, struct socket *sock,
1823
1824 IRDA_DEBUG(4, "%s()\n", __func__);
1825
1826 - msg->msg_namelen = 0;
1827 -
1828 skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1829 flags & MSG_DONTWAIT, &err);
1830 if (!skb)
1831 @@ -1452,8 +1450,6 @@ static int irda_recvmsg_stream(struct kiocb *iocb, struct socket *sock,
1832 target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
1833 timeo = sock_rcvtimeo(sk, noblock);
1834
1835 - msg->msg_namelen = 0;
1836 -
1837 do {
1838 int chunk;
1839 struct sk_buff *skb = skb_dequeue(&sk->sk_receive_queue);
1840 diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
1841 index 625bc50391cc..cd6f7a991d80 100644
1842 --- a/net/iucv/af_iucv.c
1843 +++ b/net/iucv/af_iucv.c
1844 @@ -1331,8 +1331,6 @@ static int iucv_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
1845 struct sk_buff *skb, *rskb, *cskb;
1846 int err = 0;
1847
1848 - msg->msg_namelen = 0;
1849 -
1850 if ((sk->sk_state == IUCV_DISCONN) &&
1851 skb_queue_empty(&iucv->backlog_skb_q) &&
1852 skb_queue_empty(&sk->sk_receive_queue) &&
1853 diff --git a/net/key/af_key.c b/net/key/af_key.c
1854 index 2f3ce93d3fc1..d5cd43920ccb 100644
1855 --- a/net/key/af_key.c
1856 +++ b/net/key/af_key.c
1857 @@ -3595,7 +3595,6 @@ static int pfkey_recvmsg(struct kiocb *kiocb,
1858 if (flags & ~(MSG_PEEK|MSG_DONTWAIT|MSG_TRUNC|MSG_CMSG_COMPAT))
1859 goto out;
1860
1861 - msg->msg_namelen = 0;
1862 skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err);
1863 if (skb == NULL)
1864 goto out;
1865 diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
1866 index b1d4370c8962..ea247600f7d9 100644
1867 --- a/net/l2tp/l2tp_ip.c
1868 +++ b/net/l2tp/l2tp_ip.c
1869 @@ -569,9 +569,6 @@ static int l2tp_ip_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
1870 if (flags & MSG_OOB)
1871 goto out;
1872
1873 - if (addr_len)
1874 - *addr_len = sizeof(*sin);
1875 -
1876 skb = skb_recv_datagram(sk, flags, noblock, &err);
1877 if (!skb)
1878 goto out;
1879 @@ -594,6 +591,7 @@ static int l2tp_ip_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
1880 sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
1881 sin->sin_port = 0;
1882 memset(&sin->sin_zero, 0, sizeof(sin->sin_zero));
1883 + *addr_len = sizeof(*sin);
1884 }
1885 if (inet->cmsg_flags)
1886 ip_cmsg_recv(msg, skb);
1887 diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c
1888 index 904bc098790d..22112754ba06 100644
1889 --- a/net/l2tp/l2tp_ppp.c
1890 +++ b/net/l2tp/l2tp_ppp.c
1891 @@ -200,8 +200,6 @@ static int pppol2tp_recvmsg(struct kiocb *iocb, struct socket *sock,
1892 if (sk->sk_state & PPPOX_BOUND)
1893 goto end;
1894
1895 - msg->msg_namelen = 0;
1896 -
1897 err = 0;
1898 skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1899 flags & MSG_DONTWAIT, &err);
1900 diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
1901 index e4d2fbb59a7e..df08d7779e1d 100644
1902 --- a/net/llc/af_llc.c
1903 +++ b/net/llc/af_llc.c
1904 @@ -721,8 +721,6 @@ static int llc_ui_recvmsg(struct kiocb *iocb, struct socket *sock,
1905 int target; /* Read at least this many bytes */
1906 long timeo;
1907
1908 - msg->msg_namelen = 0;
1909 -
1910 lock_sock(sk);
1911 copied = -ENOTCONN;
1912 if (unlikely(sk->sk_type == SOCK_STREAM && sk->sk_state == TCP_LISTEN))
1913 diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
1914 index 9017e3ef8fee..ff960b792ee4 100644
1915 --- a/net/netlink/af_netlink.c
1916 +++ b/net/netlink/af_netlink.c
1917 @@ -1443,8 +1443,6 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
1918 }
1919 #endif
1920
1921 - msg->msg_namelen = 0;
1922 -
1923 copied = data_skb->len;
1924 if (len < copied) {
1925 msg->msg_flags |= MSG_TRUNC;
1926 diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c
1927 index 7ed9b1d0c102..dcf6791ec76d 100644
1928 --- a/net/netrom/af_netrom.c
1929 +++ b/net/netrom/af_netrom.c
1930 @@ -1181,10 +1181,9 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock,
1931 sax->sax25_family = AF_NETROM;
1932 skb_copy_from_linear_data_offset(skb, 7, sax->sax25_call.ax25_call,
1933 AX25_ADDR_LEN);
1934 + msg->msg_namelen = sizeof(*sax);
1935 }
1936
1937 - msg->msg_namelen = sizeof(*sax);
1938 -
1939 skb_free_datagram(sk, skb);
1940
1941 release_sock(sk);
1942 diff --git a/net/nfc/rawsock.c b/net/nfc/rawsock.c
1943 index e879dce52818..44835ceb5562 100644
1944 --- a/net/nfc/rawsock.c
1945 +++ b/net/nfc/rawsock.c
1946 @@ -235,8 +235,6 @@ static int rawsock_recvmsg(struct kiocb *iocb, struct socket *sock,
1947 if (!skb)
1948 return rc;
1949
1950 - msg->msg_namelen = 0;
1951 -
1952 copied = skb->len;
1953 if (len < copied) {
1954 msg->msg_flags |= MSG_TRUNC;
1955 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
1956 index 8ed5d9302e88..dbe1715c629f 100644
1957 --- a/net/packet/af_packet.c
1958 +++ b/net/packet/af_packet.c
1959 @@ -294,6 +294,7 @@ struct packet_sock {
1960 unsigned int tp_reserve;
1961 unsigned int tp_loss:1;
1962 unsigned int tp_tstamp;
1963 + struct net_device __rcu *cached_dev;
1964 struct packet_type prot_hook ____cacheline_aligned_in_smp;
1965 };
1966
1967 @@ -349,11 +350,15 @@ static void __fanout_link(struct sock *sk, struct packet_sock *po);
1968 static void register_prot_hook(struct sock *sk)
1969 {
1970 struct packet_sock *po = pkt_sk(sk);
1971 +
1972 if (!po->running) {
1973 - if (po->fanout)
1974 + if (po->fanout) {
1975 __fanout_link(sk, po);
1976 - else
1977 + } else {
1978 dev_add_pack(&po->prot_hook);
1979 + rcu_assign_pointer(po->cached_dev, po->prot_hook.dev);
1980 + }
1981 +
1982 sock_hold(sk);
1983 po->running = 1;
1984 }
1985 @@ -371,10 +376,13 @@ static void __unregister_prot_hook(struct sock *sk, bool sync)
1986 struct packet_sock *po = pkt_sk(sk);
1987
1988 po->running = 0;
1989 - if (po->fanout)
1990 + if (po->fanout) {
1991 __fanout_unlink(sk, po);
1992 - else
1993 + } else {
1994 __dev_remove_pack(&po->prot_hook);
1995 + RCU_INIT_POINTER(po->cached_dev, NULL);
1996 + }
1997 +
1998 __sock_put(sk);
1999
2000 if (sync) {
2001 @@ -496,9 +504,9 @@ static void prb_shutdown_retire_blk_timer(struct packet_sock *po,
2002
2003 pkc = tx_ring ? &po->tx_ring.prb_bdqc : &po->rx_ring.prb_bdqc;
2004
2005 - spin_lock(&rb_queue->lock);
2006 + spin_lock_bh(&rb_queue->lock);
2007 pkc->delete_blk_timer = 1;
2008 - spin_unlock(&rb_queue->lock);
2009 + spin_unlock_bh(&rb_queue->lock);
2010
2011 prb_del_retire_blk_timer(pkc);
2012 }
2013 @@ -2044,12 +2052,24 @@ static int tpacket_fill_skb(struct packet_sock *po, struct sk_buff *skb,
2014 return tp_len;
2015 }
2016
2017 +static struct net_device *packet_cached_dev_get(struct packet_sock *po)
2018 +{
2019 + struct net_device *dev;
2020 +
2021 + rcu_read_lock();
2022 + dev = rcu_dereference(po->cached_dev);
2023 + if (dev)
2024 + dev_hold(dev);
2025 + rcu_read_unlock();
2026 +
2027 + return dev;
2028 +}
2029 +
2030 static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2031 {
2032 struct sk_buff *skb;
2033 struct net_device *dev;
2034 __be16 proto;
2035 - bool need_rls_dev = false;
2036 int err, reserve = 0;
2037 void *ph;
2038 struct sockaddr_ll *saddr = (struct sockaddr_ll *)msg->msg_name;
2039 @@ -2063,7 +2083,7 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2040
2041 err = -EBUSY;
2042 if (saddr == NULL) {
2043 - dev = po->prot_hook.dev;
2044 + dev = packet_cached_dev_get(po);
2045 proto = po->num;
2046 addr = NULL;
2047 } else {
2048 @@ -2077,19 +2097,17 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2049 proto = saddr->sll_protocol;
2050 addr = saddr->sll_addr;
2051 dev = dev_get_by_index(sock_net(&po->sk), saddr->sll_ifindex);
2052 - need_rls_dev = true;
2053 }
2054
2055 err = -ENXIO;
2056 if (unlikely(dev == NULL))
2057 goto out;
2058 -
2059 - reserve = dev->hard_header_len;
2060 -
2061 err = -ENETDOWN;
2062 if (unlikely(!(dev->flags & IFF_UP)))
2063 goto out_put;
2064
2065 + reserve = dev->hard_header_len;
2066 +
2067 size_max = po->tx_ring.frame_size
2068 - (po->tp_hdrlen - sizeof(struct sockaddr_ll));
2069
2070 @@ -2166,8 +2184,7 @@ out_status:
2071 __packet_set_status(po, ph, status);
2072 kfree_skb(skb);
2073 out_put:
2074 - if (need_rls_dev)
2075 - dev_put(dev);
2076 + dev_put(dev);
2077 out:
2078 mutex_unlock(&po->pg_vec_lock);
2079 return err;
2080 @@ -2205,7 +2222,6 @@ static int packet_snd(struct socket *sock,
2081 struct sk_buff *skb;
2082 struct net_device *dev;
2083 __be16 proto;
2084 - bool need_rls_dev = false;
2085 unsigned char *addr;
2086 int err, reserve = 0;
2087 struct virtio_net_hdr vnet_hdr = { 0 };
2088 @@ -2221,7 +2237,7 @@ static int packet_snd(struct socket *sock,
2089 */
2090
2091 if (saddr == NULL) {
2092 - dev = po->prot_hook.dev;
2093 + dev = packet_cached_dev_get(po);
2094 proto = po->num;
2095 addr = NULL;
2096 } else {
2097 @@ -2233,19 +2249,17 @@ static int packet_snd(struct socket *sock,
2098 proto = saddr->sll_protocol;
2099 addr = saddr->sll_addr;
2100 dev = dev_get_by_index(sock_net(sk), saddr->sll_ifindex);
2101 - need_rls_dev = true;
2102 }
2103
2104 err = -ENXIO;
2105 - if (dev == NULL)
2106 + if (unlikely(dev == NULL))
2107 goto out_unlock;
2108 - if (sock->type == SOCK_RAW)
2109 - reserve = dev->hard_header_len;
2110 -
2111 err = -ENETDOWN;
2112 - if (!(dev->flags & IFF_UP))
2113 + if (unlikely(!(dev->flags & IFF_UP)))
2114 goto out_unlock;
2115
2116 + if (sock->type == SOCK_RAW)
2117 + reserve = dev->hard_header_len;
2118 if (po->has_vnet_hdr) {
2119 vnet_hdr_len = sizeof(vnet_hdr);
2120
2121 @@ -2378,15 +2392,14 @@ static int packet_snd(struct socket *sock,
2122 if (err > 0 && (err = net_xmit_errno(err)) != 0)
2123 goto out_unlock;
2124
2125 - if (need_rls_dev)
2126 - dev_put(dev);
2127 + dev_put(dev);
2128
2129 return len;
2130
2131 out_free:
2132 kfree_skb(skb);
2133 out_unlock:
2134 - if (dev && need_rls_dev)
2135 + if (dev)
2136 dev_put(dev);
2137 out:
2138 return err;
2139 @@ -2603,6 +2616,7 @@ static int packet_create(struct net *net, struct socket *sock, int protocol,
2140 po = pkt_sk(sk);
2141 sk->sk_family = PF_PACKET;
2142 po->num = proto;
2143 + RCU_INIT_POINTER(po->cached_dev, NULL);
2144
2145 sk->sk_destruct = packet_sock_destruct;
2146 sk_refcnt_debug_inc(sk);
2147 @@ -2691,7 +2705,6 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
2148 struct sock *sk = sock->sk;
2149 struct sk_buff *skb;
2150 int copied, err;
2151 - struct sockaddr_ll *sll;
2152 int vnet_hdr_len = 0;
2153
2154 err = -EINVAL;
2155 @@ -2774,22 +2787,10 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
2156 goto out_free;
2157 }
2158
2159 - /*
2160 - * If the address length field is there to be filled in, we fill
2161 - * it in now.
2162 + /* You lose any data beyond the buffer you gave. If it worries
2163 + * a user program they can ask the device for its MTU
2164 + * anyway.
2165 */
2166 -
2167 - sll = &PACKET_SKB_CB(skb)->sa.ll;
2168 - if (sock->type == SOCK_PACKET)
2169 - msg->msg_namelen = sizeof(struct sockaddr_pkt);
2170 - else
2171 - msg->msg_namelen = sll->sll_halen + offsetof(struct sockaddr_ll, sll_addr);
2172 -
2173 - /*
2174 - * You lose any data beyond the buffer you gave. If it worries a
2175 - * user program they can ask the device for its MTU anyway.
2176 - */
2177 -
2178 copied = skb->len;
2179 if (copied > len) {
2180 copied = len;
2181 @@ -2802,9 +2803,20 @@ static int packet_recvmsg(struct kiocb *iocb, struct socket *sock,
2182
2183 sock_recv_ts_and_drops(msg, sk, skb);
2184
2185 - if (msg->msg_name)
2186 + if (msg->msg_name) {
2187 + /* If the address length field is there to be filled
2188 + * in, we fill it in now.
2189 + */
2190 + if (sock->type == SOCK_PACKET) {
2191 + msg->msg_namelen = sizeof(struct sockaddr_pkt);
2192 + } else {
2193 + struct sockaddr_ll *sll = &PACKET_SKB_CB(skb)->sa.ll;
2194 + msg->msg_namelen = sll->sll_halen +
2195 + offsetof(struct sockaddr_ll, sll_addr);
2196 + }
2197 memcpy(msg->msg_name, &PACKET_SKB_CB(skb)->sa,
2198 msg->msg_namelen);
2199 + }
2200
2201 if (pkt_sk(sk)->auxdata) {
2202 struct tpacket_auxdata aux;
2203 diff --git a/net/phonet/datagram.c b/net/phonet/datagram.c
2204 index bf35b4e1a14c..b25f2d321e05 100644
2205 --- a/net/phonet/datagram.c
2206 +++ b/net/phonet/datagram.c
2207 @@ -139,9 +139,6 @@ static int pn_recvmsg(struct kiocb *iocb, struct sock *sk,
2208 MSG_CMSG_COMPAT))
2209 goto out_nofree;
2210
2211 - if (addr_len)
2212 - *addr_len = sizeof(sa);
2213 -
2214 skb = skb_recv_datagram(sk, flags, noblock, &rval);
2215 if (skb == NULL)
2216 goto out_nofree;
2217 @@ -162,8 +159,10 @@ static int pn_recvmsg(struct kiocb *iocb, struct sock *sk,
2218
2219 rval = (flags & MSG_TRUNC) ? skb->len : copylen;
2220
2221 - if (msg->msg_name != NULL)
2222 - memcpy(msg->msg_name, &sa, sizeof(struct sockaddr_pn));
2223 + if (msg->msg_name != NULL) {
2224 + memcpy(msg->msg_name, &sa, sizeof(sa));
2225 + *addr_len = sizeof(sa);
2226 + }
2227
2228 out:
2229 skb_free_datagram(sk, skb);
2230 diff --git a/net/rds/recv.c b/net/rds/recv.c
2231 index 9f0f17cf6bf9..de339b24ca14 100644
2232 --- a/net/rds/recv.c
2233 +++ b/net/rds/recv.c
2234 @@ -410,8 +410,6 @@ int rds_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
2235
2236 rdsdebug("size %zu flags 0x%x timeo %ld\n", size, msg_flags, timeo);
2237
2238 - msg->msg_namelen = 0;
2239 -
2240 if (msg_flags & MSG_OOB)
2241 goto out;
2242
2243 diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c
2244 index 7f645d115795..ce5f5b934ea1 100644
2245 --- a/net/rose/af_rose.c
2246 +++ b/net/rose/af_rose.c
2247 @@ -1220,7 +1220,6 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock,
2248 {
2249 struct sock *sk = sock->sk;
2250 struct rose_sock *rose = rose_sk(sk);
2251 - struct sockaddr_rose *srose = (struct sockaddr_rose *)msg->msg_name;
2252 size_t copied;
2253 unsigned char *asmptr;
2254 struct sk_buff *skb;
2255 @@ -1256,8 +1255,11 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock,
2256
2257 skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
2258
2259 - if (srose != NULL) {
2260 - memset(srose, 0, msg->msg_namelen);
2261 + if (msg->msg_name) {
2262 + struct sockaddr_rose *srose;
2263 +
2264 + memset(msg->msg_name, 0, sizeof(struct full_sockaddr_rose));
2265 + srose = msg->msg_name;
2266 srose->srose_family = AF_ROSE;
2267 srose->srose_addr = rose->dest_addr;
2268 srose->srose_call = rose->dest_call;
2269 diff --git a/net/rxrpc/ar-recvmsg.c b/net/rxrpc/ar-recvmsg.c
2270 index 4b48687c3890..898492a8d61b 100644
2271 --- a/net/rxrpc/ar-recvmsg.c
2272 +++ b/net/rxrpc/ar-recvmsg.c
2273 @@ -143,10 +143,13 @@ int rxrpc_recvmsg(struct kiocb *iocb, struct socket *sock,
2274
2275 /* copy the peer address and timestamp */
2276 if (!continue_call) {
2277 - if (msg->msg_name && msg->msg_namelen > 0)
2278 + if (msg->msg_name) {
2279 + size_t len =
2280 + sizeof(call->conn->trans->peer->srx);
2281 memcpy(msg->msg_name,
2282 - &call->conn->trans->peer->srx,
2283 - sizeof(call->conn->trans->peer->srx));
2284 + &call->conn->trans->peer->srx, len);
2285 + msg->msg_namelen = len;
2286 + }
2287 sock_recv_ts_and_drops(msg, &rx->sk, skb);
2288 }
2289
2290 diff --git a/net/socket.c b/net/socket.c
2291 index acc769562707..4006452e8475 100644
2292 --- a/net/socket.c
2293 +++ b/net/socket.c
2294 @@ -215,12 +215,13 @@ static int move_addr_to_user(struct sockaddr_storage *kaddr, int klen,
2295 int err;
2296 int len;
2297
2298 + BUG_ON(klen > sizeof(struct sockaddr_storage));
2299 err = get_user(len, ulen);
2300 if (err)
2301 return err;
2302 if (len > klen)
2303 len = klen;
2304 - if (len < 0 || len > sizeof(struct sockaddr_storage))
2305 + if (len < 0)
2306 return -EINVAL;
2307 if (len) {
2308 if (audit_sockaddr(klen, kaddr))
2309 @@ -1775,8 +1776,10 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
2310 msg.msg_iov = &iov;
2311 iov.iov_len = size;
2312 iov.iov_base = ubuf;
2313 - msg.msg_name = (struct sockaddr *)&address;
2314 - msg.msg_namelen = sizeof(address);
2315 + /* Save some cycles and don't copy the address if not needed */
2316 + msg.msg_name = addr ? (struct sockaddr *)&address : NULL;
2317 + /* We assume all kernel code knows the size of sockaddr_storage */
2318 + msg.msg_namelen = 0;
2319 if (sock->file->f_flags & O_NONBLOCK)
2320 flags |= MSG_DONTWAIT;
2321 err = sock_recvmsg(sock, &msg, size, flags);
2322 @@ -1905,7 +1908,7 @@ static int copy_msghdr_from_user(struct msghdr *kmsg,
2323 if (copy_from_user(kmsg, umsg, sizeof(struct msghdr)))
2324 return -EFAULT;
2325 if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
2326 - return -EINVAL;
2327 + kmsg->msg_namelen = sizeof(struct sockaddr_storage);
2328 return 0;
2329 }
2330
2331 @@ -2161,16 +2164,14 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
2332 goto out;
2333 }
2334
2335 - /*
2336 - * Save the user-mode address (verify_iovec will change the
2337 - * kernel msghdr to use the kernel address space)
2338 + /* Save the user-mode address (verify_iovec will change the
2339 + * kernel msghdr to use the kernel address space)
2340 */
2341 -
2342 uaddr = (__force void __user *)msg_sys->msg_name;
2343 uaddr_len = COMPAT_NAMELEN(msg);
2344 - if (MSG_CMSG_COMPAT & flags) {
2345 + if (MSG_CMSG_COMPAT & flags)
2346 err = verify_compat_iovec(msg_sys, iov, &addr, VERIFY_WRITE);
2347 - } else
2348 + else
2349 err = verify_iovec(msg_sys, iov, &addr, VERIFY_WRITE);
2350 if (err < 0)
2351 goto out_freeiov;
2352 @@ -2179,6 +2180,9 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
2353 cmsg_ptr = (unsigned long)msg_sys->msg_control;
2354 msg_sys->msg_flags = flags & (MSG_CMSG_CLOEXEC|MSG_CMSG_COMPAT);
2355
2356 + /* We assume all kernel code knows the size of sockaddr_storage */
2357 + msg_sys->msg_namelen = 0;
2358 +
2359 if (sock->file->f_flags & O_NONBLOCK)
2360 flags |= MSG_DONTWAIT;
2361 err = (nosec ? sock_recvmsg_nosec : sock_recvmsg)(sock, msg_sys,
2362 diff --git a/net/tipc/socket.c b/net/tipc/socket.c
2363 index 1441ab70b98c..64b847008ee3 100644
2364 --- a/net/tipc/socket.c
2365 +++ b/net/tipc/socket.c
2366 @@ -949,9 +949,6 @@ static int recv_msg(struct kiocb *iocb, struct socket *sock,
2367 goto exit;
2368 }
2369
2370 - /* will be updated in set_orig_addr() if needed */
2371 - m->msg_namelen = 0;
2372 -
2373 timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
2374 restart:
2375
2376 @@ -1078,9 +1075,6 @@ static int recv_stream(struct kiocb *iocb, struct socket *sock,
2377 goto exit;
2378 }
2379
2380 - /* will be updated in set_orig_addr() if needed */
2381 - m->msg_namelen = 0;
2382 -
2383 target = sock_rcvlowat(sk, flags & MSG_WAITALL, buf_len);
2384 timeout = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
2385 restart:
2386 diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
2387 index ed005b425a7c..0540dd9b0387 100644
2388 --- a/net/unix/af_unix.c
2389 +++ b/net/unix/af_unix.c
2390 @@ -1755,7 +1755,6 @@ static void unix_copy_addr(struct msghdr *msg, struct sock *sk)
2391 {
2392 struct unix_sock *u = unix_sk(sk);
2393
2394 - msg->msg_namelen = 0;
2395 if (u->addr) {
2396 msg->msg_namelen = u->addr->len;
2397 memcpy(msg->msg_name, u->addr->name, u->addr->len);
2398 @@ -1779,8 +1778,6 @@ static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock,
2399 if (flags&MSG_OOB)
2400 goto out;
2401
2402 - msg->msg_namelen = 0;
2403 -
2404 err = mutex_lock_interruptible(&u->readlock);
2405 if (err) {
2406 err = sock_intr_errno(sock_rcvtimeo(sk, noblock));
2407 @@ -1922,8 +1919,6 @@ static int unix_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
2408 target = sock_rcvlowat(sk, flags&MSG_WAITALL, size);
2409 timeo = sock_rcvtimeo(sk, flags&MSG_DONTWAIT);
2410
2411 - msg->msg_namelen = 0;
2412 -
2413 /* Lock the socket to prevent queue disordering
2414 * while sleeps in memcpy_tomsg
2415 */
2416 diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
2417 index b943e3e71bd2..92aed9e45c73 100644
2418 --- a/net/x25/af_x25.c
2419 +++ b/net/x25/af_x25.c
2420 @@ -1343,10 +1343,9 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock,
2421 if (sx25) {
2422 sx25->sx25_family = AF_X25;
2423 sx25->sx25_addr = x25->dest_addr;
2424 + msg->msg_namelen = sizeof(*sx25);
2425 }
2426
2427 - msg->msg_namelen = sizeof(struct sockaddr_x25);
2428 -
2429 x25_check_rbuf(sk);
2430 rc = copied;
2431 out_free_dgram: