Magellan Linux

Contents of /trunk/kernel-alx/patches-4.14/0151-4.14.52-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (show annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 5 months ago) by niro
File size: 64344 byte(s)
-added up to patches-4.14.79
1 diff --git a/Makefile b/Makefile
2 index a33376204c17..e2e4009bbfed 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 14
9 -SUBLEVEL = 51
10 +SUBLEVEL = 52
11 EXTRAVERSION =
12 NAME = Petit Gorille
13
14 diff --git a/arch/x86/kernel/cpu/intel_rdt.c b/arch/x86/kernel/cpu/intel_rdt.c
15 index 18dd8f22e353..665d0f6cd62f 100644
16 --- a/arch/x86/kernel/cpu/intel_rdt.c
17 +++ b/arch/x86/kernel/cpu/intel_rdt.c
18 @@ -773,6 +773,8 @@ static __init void rdt_quirks(void)
19 case INTEL_FAM6_SKYLAKE_X:
20 if (boot_cpu_data.x86_stepping <= 4)
21 set_rdt_options("!cmt,!mbmtotal,!mbmlocal,!l3cat");
22 + else
23 + set_rdt_options("!l3cat");
24 }
25 }
26
27 diff --git a/arch/x86/kernel/cpu/mcheck/mce-inject.c b/arch/x86/kernel/cpu/mcheck/mce-inject.c
28 index 231ad23b24a9..8fec687b3e44 100644
29 --- a/arch/x86/kernel/cpu/mcheck/mce-inject.c
30 +++ b/arch/x86/kernel/cpu/mcheck/mce-inject.c
31 @@ -48,7 +48,7 @@ static struct dentry *dfs_inj;
32
33 static u8 n_banks;
34
35 -#define MAX_FLAG_OPT_SIZE 3
36 +#define MAX_FLAG_OPT_SIZE 4
37 #define NBCFG 0x44
38
39 enum injection_type {
40 diff --git a/block/blk-mq.c b/block/blk-mq.c
41 index 74c35513ada5..49979c095f31 100644
42 --- a/block/blk-mq.c
43 +++ b/block/blk-mq.c
44 @@ -2252,7 +2252,6 @@ static void blk_mq_del_queue_tag_set(struct request_queue *q)
45
46 mutex_lock(&set->tag_list_lock);
47 list_del_rcu(&q->tag_set_list);
48 - INIT_LIST_HEAD(&q->tag_set_list);
49 if (list_is_singular(&set->tag_list)) {
50 /* just transitioned to unshared */
51 set->flags &= ~BLK_MQ_F_TAG_SHARED;
52 @@ -2260,8 +2259,8 @@ static void blk_mq_del_queue_tag_set(struct request_queue *q)
53 blk_mq_update_tag_set_depth(set, false);
54 }
55 mutex_unlock(&set->tag_list_lock);
56 -
57 synchronize_rcu();
58 + INIT_LIST_HEAD(&q->tag_set_list);
59 }
60
61 static void blk_mq_add_queue_tag_set(struct blk_mq_tag_set *set,
62 diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
63 index 71008dbabe98..cad2530a5b52 100644
64 --- a/drivers/ata/libata-core.c
65 +++ b/drivers/ata/libata-core.c
66 @@ -4543,9 +4543,6 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
67 ATA_HORKAGE_ZERO_AFTER_TRIM |
68 ATA_HORKAGE_NOLPM, },
69
70 - /* Sandisk devices which are known to not handle LPM well */
71 - { "SanDisk SD7UB3Q*G1001", NULL, ATA_HORKAGE_NOLPM, },
72 -
73 /* devices that don't properly handle queued TRIM commands */
74 { "Micron_M500IT_*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
75 ATA_HORKAGE_ZERO_AFTER_TRIM, },
76 diff --git a/drivers/ata/libata-zpodd.c b/drivers/ata/libata-zpodd.c
77 index de4ddd0e8550..b3ed8f9953a8 100644
78 --- a/drivers/ata/libata-zpodd.c
79 +++ b/drivers/ata/libata-zpodd.c
80 @@ -35,7 +35,7 @@ struct zpodd {
81 static int eject_tray(struct ata_device *dev)
82 {
83 struct ata_taskfile tf;
84 - static const char cdb[] = { GPCMD_START_STOP_UNIT,
85 + static const char cdb[ATAPI_CDB_LEN] = { GPCMD_START_STOP_UNIT,
86 0, 0, 0,
87 0x02, /* LoEj */
88 0, 0, 0, 0, 0, 0, 0,
89 diff --git a/drivers/base/core.c b/drivers/base/core.c
90 index c8501cdb95f4..a359934ffd85 100644
91 --- a/drivers/base/core.c
92 +++ b/drivers/base/core.c
93 @@ -1461,7 +1461,7 @@ class_dir_create_and_add(struct class *class, struct kobject *parent_kobj)
94
95 dir = kzalloc(sizeof(*dir), GFP_KERNEL);
96 if (!dir)
97 - return NULL;
98 + return ERR_PTR(-ENOMEM);
99
100 dir->class = class;
101 kobject_init(&dir->kobj, &class_dir_ktype);
102 @@ -1471,7 +1471,7 @@ class_dir_create_and_add(struct class *class, struct kobject *parent_kobj)
103 retval = kobject_add(&dir->kobj, parent_kobj, "%s", class->name);
104 if (retval < 0) {
105 kobject_put(&dir->kobj);
106 - return NULL;
107 + return ERR_PTR(retval);
108 }
109 return &dir->kobj;
110 }
111 @@ -1778,6 +1778,10 @@ int device_add(struct device *dev)
112
113 parent = get_device(dev->parent);
114 kobj = get_device_parent(dev, parent);
115 + if (IS_ERR(kobj)) {
116 + error = PTR_ERR(kobj);
117 + goto parent_error;
118 + }
119 if (kobj)
120 dev->kobj.parent = kobj;
121
122 @@ -1876,6 +1880,7 @@ int device_add(struct device *dev)
123 kobject_del(&dev->kobj);
124 Error:
125 cleanup_glue_dir(dev, glue_dir);
126 +parent_error:
127 put_device(parent);
128 name_error:
129 kfree(dev->p);
130 @@ -2695,6 +2700,11 @@ int device_move(struct device *dev, struct device *new_parent,
131 device_pm_lock();
132 new_parent = get_device(new_parent);
133 new_parent_kobj = get_device_parent(dev, new_parent);
134 + if (IS_ERR(new_parent_kobj)) {
135 + error = PTR_ERR(new_parent_kobj);
136 + put_device(new_parent);
137 + goto out;
138 + }
139
140 pr_debug("device: '%s': %s: moving to '%s'\n", dev_name(dev),
141 __func__, new_parent ? dev_name(new_parent) : "<NULL>");
142 diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
143 index 86258b00a1d4..6fb64e73bc96 100644
144 --- a/drivers/block/nbd.c
145 +++ b/drivers/block/nbd.c
146 @@ -173,9 +173,12 @@ static const struct device_attribute pid_attr = {
147 static void nbd_dev_remove(struct nbd_device *nbd)
148 {
149 struct gendisk *disk = nbd->disk;
150 + struct request_queue *q;
151 +
152 if (disk) {
153 + q = disk->queue;
154 del_gendisk(disk);
155 - blk_cleanup_queue(disk->queue);
156 + blk_cleanup_queue(q);
157 blk_mq_free_tag_set(&nbd->tag_set);
158 disk->private_data = NULL;
159 put_disk(disk);
160 @@ -231,9 +234,18 @@ static void nbd_size_clear(struct nbd_device *nbd)
161 static void nbd_size_update(struct nbd_device *nbd)
162 {
163 struct nbd_config *config = nbd->config;
164 + struct block_device *bdev = bdget_disk(nbd->disk, 0);
165 +
166 blk_queue_logical_block_size(nbd->disk->queue, config->blksize);
167 blk_queue_physical_block_size(nbd->disk->queue, config->blksize);
168 set_capacity(nbd->disk, config->bytesize >> 9);
169 + if (bdev) {
170 + if (bdev->bd_disk)
171 + bd_set_size(bdev, config->bytesize);
172 + else
173 + bdev->bd_invalidated = 1;
174 + bdput(bdev);
175 + }
176 kobject_uevent(&nbd_to_dev(nbd)->kobj, KOBJ_CHANGE);
177 }
178
179 @@ -243,6 +255,8 @@ static void nbd_size_set(struct nbd_device *nbd, loff_t blocksize,
180 struct nbd_config *config = nbd->config;
181 config->blksize = blocksize;
182 config->bytesize = blocksize * nr_blocks;
183 + if (nbd->task_recv != NULL)
184 + nbd_size_update(nbd);
185 }
186
187 static void nbd_complete_rq(struct request *req)
188 @@ -1109,7 +1123,6 @@ static int nbd_start_device_ioctl(struct nbd_device *nbd, struct block_device *b
189 if (ret)
190 return ret;
191
192 - bd_set_size(bdev, config->bytesize);
193 if (max_part)
194 bdev->bd_invalidated = 1;
195 mutex_unlock(&nbd->config_lock);
196 diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
197 index 789fc3a8289f..93754300cb57 100644
198 --- a/drivers/cpufreq/cpufreq.c
199 +++ b/drivers/cpufreq/cpufreq.c
200 @@ -693,6 +693,8 @@ static ssize_t store_##file_name \
201 struct cpufreq_policy new_policy; \
202 \
203 memcpy(&new_policy, policy, sizeof(*policy)); \
204 + new_policy.min = policy->user_policy.min; \
205 + new_policy.max = policy->user_policy.max; \
206 \
207 ret = sscanf(buf, "%u", &new_policy.object); \
208 if (ret != 1) \
209 diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
210 index ca38229b045a..43e14bb512c8 100644
211 --- a/drivers/cpufreq/cpufreq_governor.c
212 +++ b/drivers/cpufreq/cpufreq_governor.c
213 @@ -165,7 +165,7 @@ unsigned int dbs_update(struct cpufreq_policy *policy)
214 * calls, so the previous load value can be used then.
215 */
216 load = j_cdbs->prev_load;
217 - } else if (unlikely(time_elapsed > 2 * sampling_rate &&
218 + } else if (unlikely((int)idle_time > 2 * sampling_rate &&
219 j_cdbs->prev_load)) {
220 /*
221 * If the CPU had gone completely idle and a task has
222 @@ -185,10 +185,8 @@ unsigned int dbs_update(struct cpufreq_policy *policy)
223 * clear prev_load to guarantee that the load will be
224 * computed again next time.
225 *
226 - * Detecting this situation is easy: the governor's
227 - * utilization update handler would not have run during
228 - * CPU-idle periods. Hence, an unusually large
229 - * 'time_elapsed' (as compared to the sampling rate)
230 + * Detecting this situation is easy: an unusually large
231 + * 'idle_time' (as compared to the sampling rate)
232 * indicates this scenario.
233 */
234 load = j_cdbs->prev_load;
235 @@ -217,8 +215,8 @@ unsigned int dbs_update(struct cpufreq_policy *policy)
236 j_cdbs->prev_load = load;
237 }
238
239 - if (time_elapsed > 2 * sampling_rate) {
240 - unsigned int periods = time_elapsed / sampling_rate;
241 + if (unlikely((int)idle_time > 2 * sampling_rate)) {
242 + unsigned int periods = idle_time / sampling_rate;
243
244 if (periods < idle_periods)
245 idle_periods = periods;
246 diff --git a/drivers/hid/intel-ish-hid/ipc/pci-ish.c b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
247 index 20d824f74f99..90d7be08fea0 100644
248 --- a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
249 +++ b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
250 @@ -204,8 +204,7 @@ static void ish_remove(struct pci_dev *pdev)
251 kfree(ishtp_dev);
252 }
253
254 -#ifdef CONFIG_PM
255 -static struct device *ish_resume_device;
256 +static struct device __maybe_unused *ish_resume_device;
257
258 /* 50ms to get resume response */
259 #define WAIT_FOR_RESUME_ACK_MS 50
260 @@ -219,7 +218,7 @@ static struct device *ish_resume_device;
261 * in that case a simple resume message is enough, others we need
262 * a reset sequence.
263 */
264 -static void ish_resume_handler(struct work_struct *work)
265 +static void __maybe_unused ish_resume_handler(struct work_struct *work)
266 {
267 struct pci_dev *pdev = to_pci_dev(ish_resume_device);
268 struct ishtp_device *dev = pci_get_drvdata(pdev);
269 @@ -261,7 +260,7 @@ static void ish_resume_handler(struct work_struct *work)
270 *
271 * Return: 0 to the pm core
272 */
273 -static int ish_suspend(struct device *device)
274 +static int __maybe_unused ish_suspend(struct device *device)
275 {
276 struct pci_dev *pdev = to_pci_dev(device);
277 struct ishtp_device *dev = pci_get_drvdata(pdev);
278 @@ -287,7 +286,7 @@ static int ish_suspend(struct device *device)
279 return 0;
280 }
281
282 -static DECLARE_WORK(resume_work, ish_resume_handler);
283 +static __maybe_unused DECLARE_WORK(resume_work, ish_resume_handler);
284 /**
285 * ish_resume() - ISH resume callback
286 * @device: device pointer
287 @@ -296,7 +295,7 @@ static DECLARE_WORK(resume_work, ish_resume_handler);
288 *
289 * Return: 0 to the pm core
290 */
291 -static int ish_resume(struct device *device)
292 +static int __maybe_unused ish_resume(struct device *device)
293 {
294 struct pci_dev *pdev = to_pci_dev(device);
295 struct ishtp_device *dev = pci_get_drvdata(pdev);
296 @@ -310,21 +309,14 @@ static int ish_resume(struct device *device)
297 return 0;
298 }
299
300 -static const struct dev_pm_ops ish_pm_ops = {
301 - .suspend = ish_suspend,
302 - .resume = ish_resume,
303 -};
304 -#define ISHTP_ISH_PM_OPS (&ish_pm_ops)
305 -#else
306 -#define ISHTP_ISH_PM_OPS NULL
307 -#endif /* CONFIG_PM */
308 +static SIMPLE_DEV_PM_OPS(ish_pm_ops, ish_suspend, ish_resume);
309
310 static struct pci_driver ish_driver = {
311 .name = KBUILD_MODNAME,
312 .id_table = ish_pci_tbl,
313 .probe = ish_probe,
314 .remove = ish_remove,
315 - .driver.pm = ISHTP_ISH_PM_OPS,
316 + .driver.pm = &ish_pm_ops,
317 };
318
319 module_pci_driver(ish_driver);
320 diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
321 index 69afd7968d9c..18d5b99d13f1 100644
322 --- a/drivers/hid/wacom_sys.c
323 +++ b/drivers/hid/wacom_sys.c
324 @@ -284,6 +284,14 @@ static void wacom_usage_mapping(struct hid_device *hdev,
325 }
326 }
327
328 + /* 2nd-generation Intuos Pro Large has incorrect Y maximum */
329 + if (hdev->vendor == USB_VENDOR_ID_WACOM &&
330 + hdev->product == 0x0358 &&
331 + WACOM_PEN_FIELD(field) &&
332 + wacom_equivalent_usage(usage->hid) == HID_GD_Y) {
333 + field->logical_maximum = 43200;
334 + }
335 +
336 switch (usage->hid) {
337 case HID_GD_X:
338 features->x_max = field->logical_maximum;
339 diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
340 index 5931aa2fe997..61084ba69a99 100644
341 --- a/drivers/net/bonding/bond_options.c
342 +++ b/drivers/net/bonding/bond_options.c
343 @@ -1142,6 +1142,7 @@ static int bond_option_primary_set(struct bonding *bond,
344 slave->dev->name);
345 rcu_assign_pointer(bond->primary_slave, slave);
346 strcpy(bond->params.primary, slave->dev->name);
347 + bond->force_primary = true;
348 bond_select_active_slave(bond);
349 goto out;
350 }
351 diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
352 index 3a7241c8713c..6890478a0851 100644
353 --- a/drivers/net/hyperv/netvsc_drv.c
354 +++ b/drivers/net/hyperv/netvsc_drv.c
355 @@ -123,8 +123,10 @@ static int netvsc_open(struct net_device *net)
356 }
357
358 rdev = nvdev->extension;
359 - if (!rdev->link_state)
360 + if (!rdev->link_state) {
361 netif_carrier_on(net);
362 + netif_tx_wake_all_queues(net);
363 + }
364
365 if (vf_netdev) {
366 /* Setting synthetic device up transparently sets
367 diff --git a/drivers/net/tap.c b/drivers/net/tap.c
368 index bfd4ded0a53f..773a3fea8f0e 100644
369 --- a/drivers/net/tap.c
370 +++ b/drivers/net/tap.c
371 @@ -777,13 +777,16 @@ static ssize_t tap_put_user(struct tap_queue *q,
372 int total;
373
374 if (q->flags & IFF_VNET_HDR) {
375 + int vlan_hlen = skb_vlan_tag_present(skb) ? VLAN_HLEN : 0;
376 struct virtio_net_hdr vnet_hdr;
377 +
378 vnet_hdr_len = READ_ONCE(q->vnet_hdr_sz);
379 if (iov_iter_count(iter) < vnet_hdr_len)
380 return -EINVAL;
381
382 if (virtio_net_hdr_from_skb(skb, &vnet_hdr,
383 - tap_is_little_endian(q), true))
384 + tap_is_little_endian(q), true,
385 + vlan_hlen))
386 BUG();
387
388 if (copy_to_iter(&vnet_hdr, sizeof(vnet_hdr), iter) !=
389 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
390 index 3d9ad11e4f28..cb17ffadfc30 100644
391 --- a/drivers/net/tun.c
392 +++ b/drivers/net/tun.c
393 @@ -1648,7 +1648,8 @@ static ssize_t tun_put_user(struct tun_struct *tun,
394 return -EINVAL;
395
396 if (virtio_net_hdr_from_skb(skb, &gso,
397 - tun_is_little_endian(tun), true)) {
398 + tun_is_little_endian(tun), true,
399 + vlan_hlen)) {
400 struct skb_shared_info *sinfo = skb_shinfo(skb);
401 pr_err("unexpected GSO type: "
402 "0x%x, gso_size %d, hdr_len %d\n",
403 diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
404 index 9e1b74590682..f5316ab68a0a 100644
405 --- a/drivers/net/usb/cdc_ncm.c
406 +++ b/drivers/net/usb/cdc_ncm.c
407 @@ -1124,7 +1124,7 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
408 * accordingly. Otherwise, we should check here.
409 */
410 if (ctx->drvflags & CDC_NCM_FLAG_NDP_TO_END)
411 - delayed_ndp_size = ctx->max_ndp_size;
412 + delayed_ndp_size = ALIGN(ctx->max_ndp_size, ctx->tx_ndp_modulus);
413 else
414 delayed_ndp_size = 0;
415
416 @@ -1285,7 +1285,7 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
417 /* If requested, put NDP at end of frame. */
418 if (ctx->drvflags & CDC_NCM_FLAG_NDP_TO_END) {
419 nth16 = (struct usb_cdc_ncm_nth16 *)skb_out->data;
420 - cdc_ncm_align_tail(skb_out, ctx->tx_ndp_modulus, 0, ctx->tx_curr_size);
421 + cdc_ncm_align_tail(skb_out, ctx->tx_ndp_modulus, 0, ctx->tx_curr_size - ctx->max_ndp_size);
422 nth16->wNdpIndex = cpu_to_le16(skb_out->len);
423 skb_put_data(skb_out, ctx->delayed_ndp16, ctx->max_ndp_size);
424
425 diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
426 index 9e93e7a5df7e..910c46b47769 100644
427 --- a/drivers/net/virtio_net.c
428 +++ b/drivers/net/virtio_net.c
429 @@ -1237,7 +1237,8 @@ static int xmit_skb(struct send_queue *sq, struct sk_buff *skb)
430 hdr = skb_vnet_hdr(skb);
431
432 if (virtio_net_hdr_from_skb(skb, &hdr->hdr,
433 - virtio_is_little_endian(vi->vdev), false))
434 + virtio_is_little_endian(vi->vdev), false,
435 + 0))
436 BUG();
437
438 if (vi->mergeable_rx_bufs)
439 diff --git a/drivers/net/wireless/intel/iwlwifi/fw/paging.c b/drivers/net/wireless/intel/iwlwifi/fw/paging.c
440 index 1610722b8099..747eef82cefd 100644
441 --- a/drivers/net/wireless/intel/iwlwifi/fw/paging.c
442 +++ b/drivers/net/wireless/intel/iwlwifi/fw/paging.c
443 @@ -8,6 +8,7 @@
444 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
445 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
446 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
447 + * Copyright(c) 2018 Intel Corporation
448 *
449 * This program is free software; you can redistribute it and/or modify
450 * it under the terms of version 2 of the GNU General Public License as
451 @@ -30,6 +31,7 @@
452 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
453 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
454 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
455 + * Copyright(c) 2018 Intel Corporation
456 * All rights reserved.
457 *
458 * Redistribution and use in source and binary forms, with or without
459 @@ -174,7 +176,7 @@ static int iwl_alloc_fw_paging_mem(struct iwl_fw_runtime *fwrt,
460 static int iwl_fill_paging_mem(struct iwl_fw_runtime *fwrt,
461 const struct fw_img *image)
462 {
463 - int sec_idx, idx;
464 + int sec_idx, idx, ret;
465 u32 offset = 0;
466
467 /*
468 @@ -201,17 +203,23 @@ static int iwl_fill_paging_mem(struct iwl_fw_runtime *fwrt,
469 */
470 if (sec_idx >= image->num_sec - 1) {
471 IWL_ERR(fwrt, "Paging: Missing CSS and/or paging sections\n");
472 - iwl_free_fw_paging(fwrt);
473 - return -EINVAL;
474 + ret = -EINVAL;
475 + goto err;
476 }
477
478 /* copy the CSS block to the dram */
479 IWL_DEBUG_FW(fwrt, "Paging: load paging CSS to FW, sec = %d\n",
480 sec_idx);
481
482 + if (image->sec[sec_idx].len > fwrt->fw_paging_db[0].fw_paging_size) {
483 + IWL_ERR(fwrt, "CSS block is larger than paging size\n");
484 + ret = -EINVAL;
485 + goto err;
486 + }
487 +
488 memcpy(page_address(fwrt->fw_paging_db[0].fw_paging_block),
489 image->sec[sec_idx].data,
490 - fwrt->fw_paging_db[0].fw_paging_size);
491 + image->sec[sec_idx].len);
492 dma_sync_single_for_device(fwrt->trans->dev,
493 fwrt->fw_paging_db[0].fw_paging_phys,
494 fwrt->fw_paging_db[0].fw_paging_size,
495 @@ -232,6 +240,14 @@ static int iwl_fill_paging_mem(struct iwl_fw_runtime *fwrt,
496 for (idx = 1; idx < fwrt->num_of_paging_blk; idx++) {
497 struct iwl_fw_paging *block = &fwrt->fw_paging_db[idx];
498
499 + if (block->fw_paging_size > image->sec[sec_idx].len - offset) {
500 + IWL_ERR(fwrt,
501 + "Paging: paging size is larger than remaining data in block %d\n",
502 + idx);
503 + ret = -EINVAL;
504 + goto err;
505 + }
506 +
507 memcpy(page_address(block->fw_paging_block),
508 image->sec[sec_idx].data + offset,
509 block->fw_paging_size);
510 @@ -242,19 +258,32 @@ static int iwl_fill_paging_mem(struct iwl_fw_runtime *fwrt,
511
512 IWL_DEBUG_FW(fwrt,
513 "Paging: copied %d paging bytes to block %d\n",
514 - fwrt->fw_paging_db[idx].fw_paging_size,
515 - idx);
516 + block->fw_paging_size, idx);
517 +
518 + offset += block->fw_paging_size;
519
520 - offset += fwrt->fw_paging_db[idx].fw_paging_size;
521 + if (offset > image->sec[sec_idx].len) {
522 + IWL_ERR(fwrt,
523 + "Paging: offset goes over section size\n");
524 + ret = -EINVAL;
525 + goto err;
526 + }
527 }
528
529 /* copy the last paging block */
530 if (fwrt->num_of_pages_in_last_blk > 0) {
531 struct iwl_fw_paging *block = &fwrt->fw_paging_db[idx];
532
533 + if (image->sec[sec_idx].len - offset > block->fw_paging_size) {
534 + IWL_ERR(fwrt,
535 + "Paging: last block is larger than paging size\n");
536 + ret = -EINVAL;
537 + goto err;
538 + }
539 +
540 memcpy(page_address(block->fw_paging_block),
541 image->sec[sec_idx].data + offset,
542 - FW_PAGING_SIZE * fwrt->num_of_pages_in_last_blk);
543 + image->sec[sec_idx].len - offset);
544 dma_sync_single_for_device(fwrt->trans->dev,
545 block->fw_paging_phys,
546 block->fw_paging_size,
547 @@ -266,6 +295,10 @@ static int iwl_fill_paging_mem(struct iwl_fw_runtime *fwrt,
548 }
549
550 return 0;
551 +
552 +err:
553 + iwl_free_fw_paging(fwrt);
554 + return ret;
555 }
556
557 static int iwl_save_fw_paging(struct iwl_fw_runtime *fwrt,
558 diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
559 index 50e48afd88ff..244e5256c526 100644
560 --- a/drivers/vhost/vhost.c
561 +++ b/drivers/vhost/vhost.c
562 @@ -2382,6 +2382,9 @@ struct vhost_msg_node *vhost_new_msg(struct vhost_virtqueue *vq, int type)
563 struct vhost_msg_node *node = kmalloc(sizeof *node, GFP_KERNEL);
564 if (!node)
565 return NULL;
566 +
567 + /* Make sure all padding within the structure is initialized. */
568 + memset(&node->msg, 0, sizeof node->msg);
569 node->vq = vq;
570 node->msg.type = type;
571 return node;
572 diff --git a/drivers/w1/masters/mxc_w1.c b/drivers/w1/masters/mxc_w1.c
573 index 74f2e6e6202a..8851d441e5fd 100644
574 --- a/drivers/w1/masters/mxc_w1.c
575 +++ b/drivers/w1/masters/mxc_w1.c
576 @@ -112,6 +112,10 @@ static int mxc_w1_probe(struct platform_device *pdev)
577 if (IS_ERR(mdev->clk))
578 return PTR_ERR(mdev->clk);
579
580 + err = clk_prepare_enable(mdev->clk);
581 + if (err)
582 + return err;
583 +
584 clkrate = clk_get_rate(mdev->clk);
585 if (clkrate < 10000000)
586 dev_warn(&pdev->dev,
587 @@ -125,12 +129,10 @@ static int mxc_w1_probe(struct platform_device *pdev)
588
589 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
590 mdev->regs = devm_ioremap_resource(&pdev->dev, res);
591 - if (IS_ERR(mdev->regs))
592 - return PTR_ERR(mdev->regs);
593 -
594 - err = clk_prepare_enable(mdev->clk);
595 - if (err)
596 - return err;
597 + if (IS_ERR(mdev->regs)) {
598 + err = PTR_ERR(mdev->regs);
599 + goto out_disable_clk;
600 + }
601
602 /* Software reset 1-Wire module */
603 writeb(MXC_W1_RESET_RST, mdev->regs + MXC_W1_RESET);
604 @@ -146,8 +148,12 @@ static int mxc_w1_probe(struct platform_device *pdev)
605
606 err = w1_add_master_device(&mdev->bus_master);
607 if (err)
608 - clk_disable_unprepare(mdev->clk);
609 + goto out_disable_clk;
610
611 + return 0;
612 +
613 +out_disable_clk:
614 + clk_disable_unprepare(mdev->clk);
615 return err;
616 }
617
618 diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
619 index a7c5a9861bef..8311e8ed76de 100644
620 --- a/fs/binfmt_misc.c
621 +++ b/fs/binfmt_misc.c
622 @@ -387,8 +387,13 @@ static Node *create_entry(const char __user *buffer, size_t count)
623 s = strchr(p, del);
624 if (!s)
625 goto einval;
626 - *s++ = '\0';
627 - e->offset = simple_strtoul(p, &p, 10);
628 + *s = '\0';
629 + if (p != s) {
630 + int r = kstrtoint(p, 10, &e->offset);
631 + if (r != 0 || e->offset < 0)
632 + goto einval;
633 + }
634 + p = s;
635 if (*p++)
636 goto einval;
637 pr_debug("register: offset: %#x\n", e->offset);
638 @@ -428,7 +433,8 @@ static Node *create_entry(const char __user *buffer, size_t count)
639 if (e->mask &&
640 string_unescape_inplace(e->mask, UNESCAPE_HEX) != e->size)
641 goto einval;
642 - if (e->size + e->offset > BINPRM_BUF_SIZE)
643 + if (e->size > BINPRM_BUF_SIZE ||
644 + BINPRM_BUF_SIZE - e->size < e->offset)
645 goto einval;
646 pr_debug("register: magic/mask length: %i\n", e->size);
647 if (USE_DEBUG) {
648 diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
649 index 8ecbac3b862e..3a07900971c3 100644
650 --- a/fs/btrfs/inode.c
651 +++ b/fs/btrfs/inode.c
652 @@ -1027,8 +1027,10 @@ static noinline int cow_file_range(struct inode *inode,
653 ram_size, /* ram_bytes */
654 BTRFS_COMPRESS_NONE, /* compress_type */
655 BTRFS_ORDERED_REGULAR /* type */);
656 - if (IS_ERR(em))
657 + if (IS_ERR(em)) {
658 + ret = PTR_ERR(em);
659 goto out_reserve;
660 + }
661 free_extent_map(em);
662
663 ret = btrfs_add_ordered_extent(inode, start, ins.objectid,
664 diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
665 index 2763f3184ac5..7303ba108112 100644
666 --- a/fs/btrfs/ioctl.c
667 +++ b/fs/btrfs/ioctl.c
668 @@ -2682,8 +2682,10 @@ static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg)
669 }
670
671 /* Check for compatibility reject unknown flags */
672 - if (vol_args->flags & ~BTRFS_VOL_ARG_V2_FLAGS_SUPPORTED)
673 - return -EOPNOTSUPP;
674 + if (vol_args->flags & ~BTRFS_VOL_ARG_V2_FLAGS_SUPPORTED) {
675 + ret = -EOPNOTSUPP;
676 + goto out;
677 + }
678
679 if (test_and_set_bit(BTRFS_FS_EXCL_OP, &fs_info->flags)) {
680 ret = BTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS;
681 @@ -3861,11 +3863,6 @@ static noinline int btrfs_clone_files(struct file *file, struct file *file_src,
682 src->i_sb != inode->i_sb)
683 return -EXDEV;
684
685 - /* don't make the dst file partly checksummed */
686 - if ((BTRFS_I(src)->flags & BTRFS_INODE_NODATASUM) !=
687 - (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM))
688 - return -EINVAL;
689 -
690 if (S_ISDIR(src->i_mode) || S_ISDIR(inode->i_mode))
691 return -EISDIR;
692
693 @@ -3875,6 +3872,13 @@ static noinline int btrfs_clone_files(struct file *file, struct file *file_src,
694 inode_lock(src);
695 }
696
697 + /* don't make the dst file partly checksummed */
698 + if ((BTRFS_I(src)->flags & BTRFS_INODE_NODATASUM) !=
699 + (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) {
700 + ret = -EINVAL;
701 + goto out_unlock;
702 + }
703 +
704 /* determine range to clone */
705 ret = -EINVAL;
706 if (off + len > src->i_size || off + len < off)
707 diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
708 index 24613b4e224c..936d58ca2b49 100644
709 --- a/fs/btrfs/scrub.c
710 +++ b/fs/btrfs/scrub.c
711 @@ -2775,7 +2775,7 @@ static int scrub_extent(struct scrub_ctx *sctx, u64 logical, u64 len,
712 have_csum = scrub_find_csum(sctx, logical, csum);
713 if (have_csum == 0)
714 ++sctx->stat.no_csum;
715 - if (sctx->is_dev_replace && !have_csum) {
716 + if (0 && sctx->is_dev_replace && !have_csum) {
717 ret = copy_nocow_pages(sctx, logical, l,
718 mirror_num,
719 physical_for_dev_replace);
720 diff --git a/fs/cifs/cifsacl.h b/fs/cifs/cifsacl.h
721 index 4f3884835267..dd95a6fa24bf 100644
722 --- a/fs/cifs/cifsacl.h
723 +++ b/fs/cifs/cifsacl.h
724 @@ -98,4 +98,18 @@ struct cifs_ace {
725 struct cifs_sid sid; /* ie UUID of user or group who gets these perms */
726 } __attribute__((packed));
727
728 +/*
729 + * Minimum security identifier can be one for system defined Users
730 + * and Groups such as NULL SID and World or Built-in accounts such
731 + * as Administrator and Guest and consists of
732 + * Revision + Num (Sub)Auths + Authority + Domain (one Subauthority)
733 + */
734 +#define MIN_SID_LEN (1 + 1 + 6 + 4) /* in bytes */
735 +
736 +/*
737 + * Minimum security descriptor can be one without any SACL and DACL and can
738 + * consist of revision, type, and two sids of minimum size for owner and group
739 + */
740 +#define MIN_SEC_DESC_LEN (sizeof(struct cifs_ntsd) + (2 * MIN_SID_LEN))
741 +
742 #endif /* _CIFSACL_H */
743 diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
744 index 839327f75e3d..36bc9a7eb8ea 100644
745 --- a/fs/cifs/smb2ops.c
746 +++ b/fs/cifs/smb2ops.c
747 @@ -1256,10 +1256,11 @@ smb2_is_session_expired(char *buf)
748 {
749 struct smb2_sync_hdr *shdr = get_sync_hdr(buf);
750
751 - if (shdr->Status != STATUS_NETWORK_SESSION_EXPIRED)
752 + if (shdr->Status != STATUS_NETWORK_SESSION_EXPIRED &&
753 + shdr->Status != STATUS_USER_SESSION_DELETED)
754 return false;
755
756 - cifs_dbg(FYI, "Session expired\n");
757 + cifs_dbg(FYI, "Session expired or deleted\n");
758 return true;
759 }
760
761 @@ -1571,8 +1572,11 @@ get_smb2_acl_by_path(struct cifs_sb_info *cifs_sb,
762 oparms.create_options = 0;
763
764 utf16_path = cifs_convert_path_to_utf16(path, cifs_sb);
765 - if (!utf16_path)
766 - return ERR_PTR(-ENOMEM);
767 + if (!utf16_path) {
768 + rc = -ENOMEM;
769 + free_xid(xid);
770 + return ERR_PTR(rc);
771 + }
772
773 oparms.tcon = tcon;
774 oparms.desired_access = READ_CONTROL;
775 @@ -1630,8 +1634,11 @@ set_smb2_acl(struct cifs_ntsd *pnntsd, __u32 acllen,
776 access_flags = WRITE_DAC;
777
778 utf16_path = cifs_convert_path_to_utf16(path, cifs_sb);
779 - if (!utf16_path)
780 - return -ENOMEM;
781 + if (!utf16_path) {
782 + rc = -ENOMEM;
783 + free_xid(xid);
784 + return rc;
785 + }
786
787 oparms.tcon = tcon;
788 oparms.desired_access = access_flags;
789 @@ -1691,15 +1698,21 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
790
791 /* if file not oplocked can't be sure whether asking to extend size */
792 if (!CIFS_CACHE_READ(cifsi))
793 - if (keep_size == false)
794 - return -EOPNOTSUPP;
795 + if (keep_size == false) {
796 + rc = -EOPNOTSUPP;
797 + free_xid(xid);
798 + return rc;
799 + }
800
801 /*
802 * Must check if file sparse since fallocate -z (zero range) assumes
803 * non-sparse allocation
804 */
805 - if (!(cifsi->cifsAttrs & FILE_ATTRIBUTE_SPARSE_FILE))
806 - return -EOPNOTSUPP;
807 + if (!(cifsi->cifsAttrs & FILE_ATTRIBUTE_SPARSE_FILE)) {
808 + rc = -EOPNOTSUPP;
809 + free_xid(xid);
810 + return rc;
811 + }
812
813 /*
814 * need to make sure we are not asked to extend the file since the SMB3
815 @@ -1708,8 +1721,11 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
816 * which for a non sparse file would zero the newly extended range
817 */
818 if (keep_size == false)
819 - if (i_size_read(inode) < offset + len)
820 - return -EOPNOTSUPP;
821 + if (i_size_read(inode) < offset + len) {
822 + rc = -EOPNOTSUPP;
823 + free_xid(xid);
824 + return rc;
825 + }
826
827 cifs_dbg(FYI, "offset %lld len %lld", offset, len);
828
829 @@ -1743,8 +1759,11 @@ static long smb3_punch_hole(struct file *file, struct cifs_tcon *tcon,
830
831 /* Need to make file sparse, if not already, before freeing range. */
832 /* Consider adding equivalent for compressed since it could also work */
833 - if (!smb2_set_sparse(xid, tcon, cfile, inode, set_sparse))
834 - return -EOPNOTSUPP;
835 + if (!smb2_set_sparse(xid, tcon, cfile, inode, set_sparse)) {
836 + rc = -EOPNOTSUPP;
837 + free_xid(xid);
838 + return rc;
839 + }
840
841 cifs_dbg(FYI, "offset %lld len %lld", offset, len);
842
843 @@ -1776,8 +1795,10 @@ static long smb3_simple_falloc(struct file *file, struct cifs_tcon *tcon,
844
845 /* if file not oplocked can't be sure whether asking to extend size */
846 if (!CIFS_CACHE_READ(cifsi))
847 - if (keep_size == false)
848 - return -EOPNOTSUPP;
849 + if (keep_size == false) {
850 + free_xid(xid);
851 + return rc;
852 + }
853
854 /*
855 * Files are non-sparse by default so falloc may be a no-op
856 @@ -1786,14 +1807,16 @@ static long smb3_simple_falloc(struct file *file, struct cifs_tcon *tcon,
857 */
858 if ((cifsi->cifsAttrs & FILE_ATTRIBUTE_SPARSE_FILE) == 0) {
859 if (keep_size == true)
860 - return 0;
861 + rc = 0;
862 /* check if extending file */
863 else if (i_size_read(inode) >= off + len)
864 /* not extending file and already not sparse */
865 - return 0;
866 + rc = 0;
867 /* BB: in future add else clause to extend file */
868 else
869 - return -EOPNOTSUPP;
870 + rc = -EOPNOTSUPP;
871 + free_xid(xid);
872 + return rc;
873 }
874
875 if ((keep_size == true) || (i_size_read(inode) >= off + len)) {
876 @@ -1805,8 +1828,11 @@ static long smb3_simple_falloc(struct file *file, struct cifs_tcon *tcon,
877 * ie potentially making a few extra pages at the beginning
878 * or end of the file non-sparse via set_sparse is harmless.
879 */
880 - if ((off > 8192) || (off + len + 8192 < i_size_read(inode)))
881 - return -EOPNOTSUPP;
882 + if ((off > 8192) || (off + len + 8192 < i_size_read(inode))) {
883 + rc = -EOPNOTSUPP;
884 + free_xid(xid);
885 + return rc;
886 + }
887
888 rc = smb2_set_sparse(xid, tcon, cfile, inode, false);
889 }
890 diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
891 index 49779d952cd5..5247b40e57f6 100644
892 --- a/fs/cifs/smb2pdu.c
893 +++ b/fs/cifs/smb2pdu.c
894 @@ -1182,6 +1182,7 @@ SMB2_sess_setup(const unsigned int xid, struct cifs_ses *ses,
895 sess_data->ses = ses;
896 sess_data->buf0_type = CIFS_NO_BUFFER;
897 sess_data->nls_cp = (struct nls_table *) nls_cp;
898 + sess_data->previous_session = ses->Suid;
899
900 while (sess_data->func)
901 sess_data->func(sess_data);
902 @@ -2278,8 +2279,7 @@ SMB2_query_acl(const unsigned int xid, struct cifs_tcon *tcon,
903
904 return query_info(xid, tcon, persistent_fid, volatile_fid,
905 0, SMB2_O_INFO_SECURITY, additional_info,
906 - SMB2_MAX_BUFFER_SIZE,
907 - sizeof(struct smb2_file_all_info), data, plen);
908 + SMB2_MAX_BUFFER_SIZE, MIN_SEC_DESC_LEN, data, plen);
909 }
910
911 int
912 diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c
913 index c32802c956d5..bf7fa1507e81 100644
914 --- a/fs/ext4/indirect.c
915 +++ b/fs/ext4/indirect.c
916 @@ -561,10 +561,16 @@ int ext4_ind_map_blocks(handle_t *handle, struct inode *inode,
917 unsigned epb = inode->i_sb->s_blocksize / sizeof(u32);
918 int i;
919
920 - /* Count number blocks in a subtree under 'partial' */
921 - count = 1;
922 - for (i = 0; partial + i != chain + depth - 1; i++)
923 - count *= epb;
924 + /*
925 + * Count number blocks in a subtree under 'partial'. At each
926 + * level we count number of complete empty subtrees beyond
927 + * current offset and then descend into the subtree only
928 + * partially beyond current offset.
929 + */
930 + count = 0;
931 + for (i = partial - chain + 1; i < depth; i++)
932 + count = count * epb + (epb - offsets[i] - 1);
933 + count++;
934 /* Fill in size of a hole we found */
935 map->m_pblk = 0;
936 map->m_len = min_t(unsigned int, map->m_len, count);
937 diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
938 index fd9501977f1c..8f5dc243effd 100644
939 --- a/fs/ext4/inline.c
940 +++ b/fs/ext4/inline.c
941 @@ -150,6 +150,12 @@ int ext4_find_inline_data_nolock(struct inode *inode)
942 goto out;
943
944 if (!is.s.not_found) {
945 + if (is.s.here->e_value_inum) {
946 + EXT4_ERROR_INODE(inode, "inline data xattr refers "
947 + "to an external xattr inode");
948 + error = -EFSCORRUPTED;
949 + goto out;
950 + }
951 EXT4_I(inode)->i_inline_off = (u16)((void *)is.s.here -
952 (void *)ext4_raw_inode(&is.iloc));
953 EXT4_I(inode)->i_inline_size = EXT4_MIN_INLINE_DATA_SIZE +
954 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
955 index 09014c3c4207..bd6453e78992 100644
956 --- a/fs/ext4/inode.c
957 +++ b/fs/ext4/inode.c
958 @@ -4246,28 +4246,28 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length)
959 EXT4_BLOCK_SIZE_BITS(sb);
960 stop_block = (offset + length) >> EXT4_BLOCK_SIZE_BITS(sb);
961
962 - /* If there are no blocks to remove, return now */
963 - if (first_block >= stop_block)
964 - goto out_stop;
965 + /* If there are blocks to remove, do it */
966 + if (stop_block > first_block) {
967
968 - down_write(&EXT4_I(inode)->i_data_sem);
969 - ext4_discard_preallocations(inode);
970 + down_write(&EXT4_I(inode)->i_data_sem);
971 + ext4_discard_preallocations(inode);
972
973 - ret = ext4_es_remove_extent(inode, first_block,
974 - stop_block - first_block);
975 - if (ret) {
976 - up_write(&EXT4_I(inode)->i_data_sem);
977 - goto out_stop;
978 - }
979 + ret = ext4_es_remove_extent(inode, first_block,
980 + stop_block - first_block);
981 + if (ret) {
982 + up_write(&EXT4_I(inode)->i_data_sem);
983 + goto out_stop;
984 + }
985
986 - if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
987 - ret = ext4_ext_remove_space(inode, first_block,
988 - stop_block - 1);
989 - else
990 - ret = ext4_ind_remove_space(handle, inode, first_block,
991 - stop_block);
992 + if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
993 + ret = ext4_ext_remove_space(inode, first_block,
994 + stop_block - 1);
995 + else
996 + ret = ext4_ind_remove_space(handle, inode, first_block,
997 + stop_block);
998
999 - up_write(&EXT4_I(inode)->i_data_sem);
1000 + up_write(&EXT4_I(inode)->i_data_sem);
1001 + }
1002 if (IS_SYNC(inode))
1003 ext4_handle_sync(handle);
1004
1005 @@ -4634,19 +4634,21 @@ static blkcnt_t ext4_inode_blocks(struct ext4_inode *raw_inode,
1006 }
1007 }
1008
1009 -static inline void ext4_iget_extra_inode(struct inode *inode,
1010 +static inline int ext4_iget_extra_inode(struct inode *inode,
1011 struct ext4_inode *raw_inode,
1012 struct ext4_inode_info *ei)
1013 {
1014 __le32 *magic = (void *)raw_inode +
1015 EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize;
1016 +
1017 if (EXT4_GOOD_OLD_INODE_SIZE + ei->i_extra_isize + sizeof(__le32) <=
1018 EXT4_INODE_SIZE(inode->i_sb) &&
1019 *magic == cpu_to_le32(EXT4_XATTR_MAGIC)) {
1020 ext4_set_inode_state(inode, EXT4_STATE_XATTR);
1021 - ext4_find_inline_data_nolock(inode);
1022 + return ext4_find_inline_data_nolock(inode);
1023 } else
1024 EXT4_I(inode)->i_inline_off = 0;
1025 + return 0;
1026 }
1027
1028 int ext4_get_projid(struct inode *inode, kprojid_t *projid)
1029 @@ -4826,7 +4828,9 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
1030 ei->i_extra_isize = sizeof(struct ext4_inode) -
1031 EXT4_GOOD_OLD_INODE_SIZE;
1032 } else {
1033 - ext4_iget_extra_inode(inode, raw_inode, ei);
1034 + ret = ext4_iget_extra_inode(inode, raw_inode, ei);
1035 + if (ret)
1036 + goto bad_inode;
1037 }
1038 }
1039
1040 diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
1041 index 1dac59c24792..823c0b82dfeb 100644
1042 --- a/fs/ext4/resize.c
1043 +++ b/fs/ext4/resize.c
1044 @@ -1905,7 +1905,7 @@ int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count)
1045 return 0;
1046
1047 n_group = ext4_get_group_number(sb, n_blocks_count - 1);
1048 - if (n_group > (0xFFFFFFFFUL / EXT4_INODES_PER_GROUP(sb))) {
1049 + if (n_group >= (0xFFFFFFFFUL / EXT4_INODES_PER_GROUP(sb))) {
1050 ext4_warning(sb, "resize would cause inodes_count overflow");
1051 return -EINVAL;
1052 }
1053 diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
1054 index 1718354e6322..ed1cf24a7831 100644
1055 --- a/fs/ext4/xattr.c
1056 +++ b/fs/ext4/xattr.c
1057 @@ -1687,7 +1687,7 @@ static int ext4_xattr_set_entry(struct ext4_xattr_info *i,
1058
1059 /* No failures allowed past this point. */
1060
1061 - if (!s->not_found && here->e_value_offs) {
1062 + if (!s->not_found && here->e_value_size && here->e_value_offs) {
1063 /* Remove the old value. */
1064 void *first_val = s->base + min_offs;
1065 size_t offs = le16_to_cpu(here->e_value_offs);
1066 diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h
1067 index dcfcf7fd7438..a73144b3cb8c 100644
1068 --- a/fs/nfs/nfs4_fs.h
1069 +++ b/fs/nfs/nfs4_fs.h
1070 @@ -465,7 +465,7 @@ extern void nfs_increment_open_seqid(int status, struct nfs_seqid *seqid);
1071 extern void nfs_increment_lock_seqid(int status, struct nfs_seqid *seqid);
1072 extern void nfs_release_seqid(struct nfs_seqid *seqid);
1073 extern void nfs_free_seqid(struct nfs_seqid *seqid);
1074 -extern int nfs4_setup_sequence(const struct nfs_client *client,
1075 +extern int nfs4_setup_sequence(struct nfs_client *client,
1076 struct nfs4_sequence_args *args,
1077 struct nfs4_sequence_res *res,
1078 struct rpc_task *task);
1079 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
1080 index ae8f43d270d6..8ff98bbe479b 100644
1081 --- a/fs/nfs/nfs4proc.c
1082 +++ b/fs/nfs/nfs4proc.c
1083 @@ -96,6 +96,10 @@ static int nfs4_do_setattr(struct inode *inode, struct rpc_cred *cred,
1084 struct nfs_open_context *ctx, struct nfs4_label *ilabel,
1085 struct nfs4_label *olabel);
1086 #ifdef CONFIG_NFS_V4_1
1087 +static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp,
1088 + struct rpc_cred *cred,
1089 + struct nfs4_slot *slot,
1090 + bool is_privileged);
1091 static int nfs41_test_stateid(struct nfs_server *, nfs4_stateid *,
1092 struct rpc_cred *);
1093 static int nfs41_free_stateid(struct nfs_server *, const nfs4_stateid *,
1094 @@ -641,13 +645,14 @@ static int nfs40_sequence_done(struct rpc_task *task,
1095
1096 #if defined(CONFIG_NFS_V4_1)
1097
1098 -static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
1099 +static void nfs41_release_slot(struct nfs4_slot *slot)
1100 {
1101 struct nfs4_session *session;
1102 struct nfs4_slot_table *tbl;
1103 - struct nfs4_slot *slot = res->sr_slot;
1104 bool send_new_highest_used_slotid = false;
1105
1106 + if (!slot)
1107 + return;
1108 tbl = slot->table;
1109 session = tbl->session;
1110
1111 @@ -673,13 +678,18 @@ static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
1112 send_new_highest_used_slotid = false;
1113 out_unlock:
1114 spin_unlock(&tbl->slot_tbl_lock);
1115 - res->sr_slot = NULL;
1116 if (send_new_highest_used_slotid)
1117 nfs41_notify_server(session->clp);
1118 if (waitqueue_active(&tbl->slot_waitq))
1119 wake_up_all(&tbl->slot_waitq);
1120 }
1121
1122 +static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res)
1123 +{
1124 + nfs41_release_slot(res->sr_slot);
1125 + res->sr_slot = NULL;
1126 +}
1127 +
1128 static int nfs41_sequence_process(struct rpc_task *task,
1129 struct nfs4_sequence_res *res)
1130 {
1131 @@ -707,13 +717,6 @@ static int nfs41_sequence_process(struct rpc_task *task,
1132 /* Check the SEQUENCE operation status */
1133 switch (res->sr_status) {
1134 case 0:
1135 - /* If previous op on slot was interrupted and we reused
1136 - * the seq# and got a reply from the cache, then retry
1137 - */
1138 - if (task->tk_status == -EREMOTEIO && interrupted) {
1139 - ++slot->seq_nr;
1140 - goto retry_nowait;
1141 - }
1142 /* Update the slot's sequence and clientid lease timer */
1143 slot->seq_done = 1;
1144 clp = session->clp;
1145 @@ -747,16 +750,16 @@ static int nfs41_sequence_process(struct rpc_task *task,
1146 * The slot id we used was probably retired. Try again
1147 * using a different slot id.
1148 */
1149 + if (slot->seq_nr < slot->table->target_highest_slotid)
1150 + goto session_recover;
1151 goto retry_nowait;
1152 case -NFS4ERR_SEQ_MISORDERED:
1153 /*
1154 * Was the last operation on this sequence interrupted?
1155 * If so, retry after bumping the sequence number.
1156 */
1157 - if (interrupted) {
1158 - ++slot->seq_nr;
1159 - goto retry_nowait;
1160 - }
1161 + if (interrupted)
1162 + goto retry_new_seq;
1163 /*
1164 * Could this slot have been previously retired?
1165 * If so, then the server may be expecting seq_nr = 1!
1166 @@ -765,10 +768,11 @@ static int nfs41_sequence_process(struct rpc_task *task,
1167 slot->seq_nr = 1;
1168 goto retry_nowait;
1169 }
1170 - break;
1171 + goto session_recover;
1172 case -NFS4ERR_SEQ_FALSE_RETRY:
1173 - ++slot->seq_nr;
1174 - goto retry_nowait;
1175 + if (interrupted)
1176 + goto retry_new_seq;
1177 + goto session_recover;
1178 default:
1179 /* Just update the slot sequence no. */
1180 slot->seq_done = 1;
1181 @@ -778,6 +782,11 @@ static int nfs41_sequence_process(struct rpc_task *task,
1182 dprintk("%s: Error %d free the slot \n", __func__, res->sr_status);
1183 out_noaction:
1184 return ret;
1185 +session_recover:
1186 + nfs4_schedule_session_recovery(session, res->sr_status);
1187 + goto retry_nowait;
1188 +retry_new_seq:
1189 + ++slot->seq_nr;
1190 retry_nowait:
1191 if (rpc_restart_call_prepare(task)) {
1192 nfs41_sequence_free_slot(res);
1193 @@ -854,6 +863,17 @@ static const struct rpc_call_ops nfs41_call_sync_ops = {
1194 .rpc_call_done = nfs41_call_sync_done,
1195 };
1196
1197 +static void
1198 +nfs4_sequence_process_interrupted(struct nfs_client *client,
1199 + struct nfs4_slot *slot, struct rpc_cred *cred)
1200 +{
1201 + struct rpc_task *task;
1202 +
1203 + task = _nfs41_proc_sequence(client, cred, slot, true);
1204 + if (!IS_ERR(task))
1205 + rpc_put_task_async(task);
1206 +}
1207 +
1208 #else /* !CONFIG_NFS_V4_1 */
1209
1210 static int nfs4_sequence_process(struct rpc_task *task, struct nfs4_sequence_res *res)
1211 @@ -874,9 +894,34 @@ int nfs4_sequence_done(struct rpc_task *task,
1212 }
1213 EXPORT_SYMBOL_GPL(nfs4_sequence_done);
1214
1215 +static void
1216 +nfs4_sequence_process_interrupted(struct nfs_client *client,
1217 + struct nfs4_slot *slot, struct rpc_cred *cred)
1218 +{
1219 + WARN_ON_ONCE(1);
1220 + slot->interrupted = 0;
1221 +}
1222 +
1223 #endif /* !CONFIG_NFS_V4_1 */
1224
1225 -int nfs4_setup_sequence(const struct nfs_client *client,
1226 +static
1227 +void nfs4_sequence_attach_slot(struct nfs4_sequence_args *args,
1228 + struct nfs4_sequence_res *res,
1229 + struct nfs4_slot *slot)
1230 +{
1231 + if (!slot)
1232 + return;
1233 + slot->privileged = args->sa_privileged ? 1 : 0;
1234 + args->sa_slot = slot;
1235 +
1236 + res->sr_slot = slot;
1237 + res->sr_timestamp = jiffies;
1238 + res->sr_status_flags = 0;
1239 + res->sr_status = 1;
1240 +
1241 +}
1242 +
1243 +int nfs4_setup_sequence(struct nfs_client *client,
1244 struct nfs4_sequence_args *args,
1245 struct nfs4_sequence_res *res,
1246 struct rpc_task *task)
1247 @@ -894,29 +939,28 @@ int nfs4_setup_sequence(const struct nfs_client *client,
1248 task->tk_timeout = 0;
1249 }
1250
1251 - spin_lock(&tbl->slot_tbl_lock);
1252 - /* The state manager will wait until the slot table is empty */
1253 - if (nfs4_slot_tbl_draining(tbl) && !args->sa_privileged)
1254 - goto out_sleep;
1255 + for (;;) {
1256 + spin_lock(&tbl->slot_tbl_lock);
1257 + /* The state manager will wait until the slot table is empty */
1258 + if (nfs4_slot_tbl_draining(tbl) && !args->sa_privileged)
1259 + goto out_sleep;
1260 +
1261 + slot = nfs4_alloc_slot(tbl);
1262 + if (IS_ERR(slot)) {
1263 + /* Try again in 1/4 second */
1264 + if (slot == ERR_PTR(-ENOMEM))
1265 + task->tk_timeout = HZ >> 2;
1266 + goto out_sleep;
1267 + }
1268 + spin_unlock(&tbl->slot_tbl_lock);
1269
1270 - slot = nfs4_alloc_slot(tbl);
1271 - if (IS_ERR(slot)) {
1272 - /* Try again in 1/4 second */
1273 - if (slot == ERR_PTR(-ENOMEM))
1274 - task->tk_timeout = HZ >> 2;
1275 - goto out_sleep;
1276 + if (likely(!slot->interrupted))
1277 + break;
1278 + nfs4_sequence_process_interrupted(client,
1279 + slot, task->tk_msg.rpc_cred);
1280 }
1281 - spin_unlock(&tbl->slot_tbl_lock);
1282 -
1283 - slot->privileged = args->sa_privileged ? 1 : 0;
1284 - args->sa_slot = slot;
1285
1286 - res->sr_slot = slot;
1287 - if (session) {
1288 - res->sr_timestamp = jiffies;
1289 - res->sr_status_flags = 0;
1290 - res->sr_status = 1;
1291 - }
1292 + nfs4_sequence_attach_slot(args, res, slot);
1293
1294 trace_nfs4_setup_sequence(session, args);
1295 out_start:
1296 @@ -8151,6 +8195,7 @@ static const struct rpc_call_ops nfs41_sequence_ops = {
1297
1298 static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp,
1299 struct rpc_cred *cred,
1300 + struct nfs4_slot *slot,
1301 bool is_privileged)
1302 {
1303 struct nfs4_sequence_data *calldata;
1304 @@ -8164,15 +8209,18 @@ static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp,
1305 .callback_ops = &nfs41_sequence_ops,
1306 .flags = RPC_TASK_ASYNC | RPC_TASK_TIMEOUT,
1307 };
1308 + struct rpc_task *ret;
1309
1310 + ret = ERR_PTR(-EIO);
1311 if (!atomic_inc_not_zero(&clp->cl_count))
1312 - return ERR_PTR(-EIO);
1313 + goto out_err;
1314 +
1315 + ret = ERR_PTR(-ENOMEM);
1316 calldata = kzalloc(sizeof(*calldata), GFP_NOFS);
1317 - if (calldata == NULL) {
1318 - nfs_put_client(clp);
1319 - return ERR_PTR(-ENOMEM);
1320 - }
1321 + if (calldata == NULL)
1322 + goto out_put_clp;
1323 nfs4_init_sequence(&calldata->args, &calldata->res, 0);
1324 + nfs4_sequence_attach_slot(&calldata->args, &calldata->res, slot);
1325 if (is_privileged)
1326 nfs4_set_sequence_privileged(&calldata->args);
1327 msg.rpc_argp = &calldata->args;
1328 @@ -8180,7 +8228,15 @@ static struct rpc_task *_nfs41_proc_sequence(struct nfs_client *clp,
1329 calldata->clp = clp;
1330 task_setup_data.callback_data = calldata;
1331
1332 - return rpc_run_task(&task_setup_data);
1333 + ret = rpc_run_task(&task_setup_data);
1334 + if (IS_ERR(ret))
1335 + goto out_err;
1336 + return ret;
1337 +out_put_clp:
1338 + nfs_put_client(clp);
1339 +out_err:
1340 + nfs41_release_slot(slot);
1341 + return ret;
1342 }
1343
1344 static int nfs41_proc_async_sequence(struct nfs_client *clp, struct rpc_cred *cred, unsigned renew_flags)
1345 @@ -8190,7 +8246,7 @@ static int nfs41_proc_async_sequence(struct nfs_client *clp, struct rpc_cred *cr
1346
1347 if ((renew_flags & NFS4_RENEW_TIMEOUT) == 0)
1348 return -EAGAIN;
1349 - task = _nfs41_proc_sequence(clp, cred, false);
1350 + task = _nfs41_proc_sequence(clp, cred, NULL, false);
1351 if (IS_ERR(task))
1352 ret = PTR_ERR(task);
1353 else
1354 @@ -8204,7 +8260,7 @@ static int nfs4_proc_sequence(struct nfs_client *clp, struct rpc_cred *cred)
1355 struct rpc_task *task;
1356 int ret;
1357
1358 - task = _nfs41_proc_sequence(clp, cred, true);
1359 + task = _nfs41_proc_sequence(clp, cred, NULL, true);
1360 if (IS_ERR(task)) {
1361 ret = PTR_ERR(task);
1362 goto out;
1363 diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c
1364 index 28825a5b6d09..902b72dac41a 100644
1365 --- a/fs/orangefs/inode.c
1366 +++ b/fs/orangefs/inode.c
1367 @@ -269,6 +269,13 @@ int orangefs_getattr(const struct path *path, struct kstat *stat,
1368 else
1369 stat->result_mask = STATX_BASIC_STATS &
1370 ~STATX_SIZE;
1371 +
1372 + stat->attributes_mask = STATX_ATTR_IMMUTABLE |
1373 + STATX_ATTR_APPEND;
1374 + if (inode->i_flags & S_IMMUTABLE)
1375 + stat->attributes |= STATX_ATTR_IMMUTABLE;
1376 + if (inode->i_flags & S_APPEND)
1377 + stat->attributes |= STATX_ATTR_APPEND;
1378 }
1379 return ret;
1380 }
1381 diff --git a/fs/orangefs/namei.c b/fs/orangefs/namei.c
1382 index f8f3c73d2664..05b3abbdbc4b 100644
1383 --- a/fs/orangefs/namei.c
1384 +++ b/fs/orangefs/namei.c
1385 @@ -314,6 +314,13 @@ static int orangefs_symlink(struct inode *dir,
1386 ret = PTR_ERR(inode);
1387 goto out;
1388 }
1389 + /*
1390 + * This is necessary because orangefs_inode_getattr will not
1391 + * re-read symlink size as it is impossible for it to change.
1392 + * Invalidating the cache does not help. orangefs_new_inode
1393 + * does not set the correct size (it does not know symname).
1394 + */
1395 + inode->i_size = strlen(symname);
1396
1397 gossip_debug(GOSSIP_NAME_DEBUG,
1398 "Assigned symlink inode new number of %pU\n",
1399 diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h
1400 index f144216febc6..9397628a1967 100644
1401 --- a/include/linux/virtio_net.h
1402 +++ b/include/linux/virtio_net.h
1403 @@ -58,7 +58,8 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,
1404 static inline int virtio_net_hdr_from_skb(const struct sk_buff *skb,
1405 struct virtio_net_hdr *hdr,
1406 bool little_endian,
1407 - bool has_data_valid)
1408 + bool has_data_valid,
1409 + int vlan_hlen)
1410 {
1411 memset(hdr, 0, sizeof(*hdr)); /* no info leak */
1412
1413 @@ -83,12 +84,8 @@ static inline int virtio_net_hdr_from_skb(const struct sk_buff *skb,
1414
1415 if (skb->ip_summed == CHECKSUM_PARTIAL) {
1416 hdr->flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
1417 - if (skb_vlan_tag_present(skb))
1418 - hdr->csum_start = __cpu_to_virtio16(little_endian,
1419 - skb_checksum_start_offset(skb) + VLAN_HLEN);
1420 - else
1421 - hdr->csum_start = __cpu_to_virtio16(little_endian,
1422 - skb_checksum_start_offset(skb));
1423 + hdr->csum_start = __cpu_to_virtio16(little_endian,
1424 + skb_checksum_start_offset(skb) + vlan_hlen);
1425 hdr->csum_offset = __cpu_to_virtio16(little_endian,
1426 skb->csum_offset);
1427 } else if (has_data_valid &&
1428 diff --git a/include/net/transp_v6.h b/include/net/transp_v6.h
1429 index c4f5caaf3778..f6a3543e5247 100644
1430 --- a/include/net/transp_v6.h
1431 +++ b/include/net/transp_v6.h
1432 @@ -45,8 +45,15 @@ int ip6_datagram_send_ctl(struct net *net, struct sock *sk, struct msghdr *msg,
1433 struct flowi6 *fl6, struct ipcm6_cookie *ipc6,
1434 struct sockcm_cookie *sockc);
1435
1436 -void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
1437 - __u16 srcp, __u16 destp, int bucket);
1438 +void __ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
1439 + __u16 srcp, __u16 destp, int rqueue, int bucket);
1440 +static inline void
1441 +ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp, __u16 srcp,
1442 + __u16 destp, int bucket)
1443 +{
1444 + __ip6_dgram_sock_seq_show(seq, sp, srcp, destp, sk_rmem_alloc_get(sp),
1445 + bucket);
1446 +}
1447
1448 #define LOOPBACK4_IPV6 cpu_to_be32(0x7f000006)
1449
1450 diff --git a/include/net/udp.h b/include/net/udp.h
1451 index 6c759c8594e2..18391015233e 100644
1452 --- a/include/net/udp.h
1453 +++ b/include/net/udp.h
1454 @@ -244,6 +244,11 @@ static inline __be16 udp_flow_src_port(struct net *net, struct sk_buff *skb,
1455 return htons((((u64) hash * (max - min)) >> 32) + min);
1456 }
1457
1458 +static inline int udp_rqueue_get(struct sock *sk)
1459 +{
1460 + return sk_rmem_alloc_get(sk) - READ_ONCE(udp_sk(sk)->forward_deficit);
1461 +}
1462 +
1463 /* net/ipv4/udp.c */
1464 void udp_destruct_sock(struct sock *sk);
1465 void skb_consume_udp(struct sock *sk, struct sk_buff *skb, int len);
1466 diff --git a/mm/backing-dev.c b/mm/backing-dev.c
1467 index dee049a0ec5b..6774e0369ebe 100644
1468 --- a/mm/backing-dev.c
1469 +++ b/mm/backing-dev.c
1470 @@ -409,6 +409,7 @@ static void wb_exit(struct bdi_writeback *wb)
1471 * protected.
1472 */
1473 static DEFINE_SPINLOCK(cgwb_lock);
1474 +static struct workqueue_struct *cgwb_release_wq;
1475
1476 /**
1477 * wb_congested_get_create - get or create a wb_congested
1478 @@ -519,7 +520,7 @@ static void cgwb_release(struct percpu_ref *refcnt)
1479 {
1480 struct bdi_writeback *wb = container_of(refcnt, struct bdi_writeback,
1481 refcnt);
1482 - schedule_work(&wb->release_work);
1483 + queue_work(cgwb_release_wq, &wb->release_work);
1484 }
1485
1486 static void cgwb_kill(struct bdi_writeback *wb)
1487 @@ -783,6 +784,21 @@ static void cgwb_bdi_register(struct backing_dev_info *bdi)
1488 spin_unlock_irq(&cgwb_lock);
1489 }
1490
1491 +static int __init cgwb_init(void)
1492 +{
1493 + /*
1494 + * There can be many concurrent release work items overwhelming
1495 + * system_wq. Put them in a separate wq and limit concurrency.
1496 + * There's no point in executing many of these in parallel.
1497 + */
1498 + cgwb_release_wq = alloc_workqueue("cgwb_release", 0, 1);
1499 + if (!cgwb_release_wq)
1500 + return -ENOMEM;
1501 +
1502 + return 0;
1503 +}
1504 +subsys_initcall(cgwb_init);
1505 +
1506 #else /* CONFIG_CGROUP_WRITEBACK */
1507
1508 static int cgwb_bdi_init(struct backing_dev_info *bdi)
1509 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
1510 index 1d7693c35424..59ccf455fcbd 100644
1511 --- a/mm/page_alloc.c
1512 +++ b/mm/page_alloc.c
1513 @@ -3981,7 +3981,6 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
1514 * orientated.
1515 */
1516 if (!(alloc_flags & ALLOC_CPUSET) || reserve_flags) {
1517 - ac->zonelist = node_zonelist(numa_node_id(), gfp_mask);
1518 ac->preferred_zoneref = first_zones_zonelist(ac->zonelist,
1519 ac->high_zoneidx, ac->nodemask);
1520 }
1521 diff --git a/net/dsa/tag_trailer.c b/net/dsa/tag_trailer.c
1522 index fcc9aa72877d..374d586b4a2c 100644
1523 --- a/net/dsa/tag_trailer.c
1524 +++ b/net/dsa/tag_trailer.c
1525 @@ -79,7 +79,8 @@ static struct sk_buff *trailer_rcv(struct sk_buff *skb, struct net_device *dev,
1526 if (unlikely(ds->cpu_port_mask & BIT(source_port)))
1527 return NULL;
1528
1529 - pskb_trim_rcsum(skb, skb->len - 4);
1530 + if (pskb_trim_rcsum(skb, skb->len - 4))
1531 + return NULL;
1532
1533 skb->dev = ds->ports[source_port].netdev;
1534
1535 diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
1536 index cab4b935e474..a95ccdceb797 100644
1537 --- a/net/ipv4/tcp_ipv4.c
1538 +++ b/net/ipv4/tcp_ipv4.c
1539 @@ -1675,6 +1675,10 @@ int tcp_v4_rcv(struct sk_buff *skb)
1540 reqsk_put(req);
1541 goto discard_it;
1542 }
1543 + if (tcp_checksum_complete(skb)) {
1544 + reqsk_put(req);
1545 + goto csum_error;
1546 + }
1547 if (unlikely(sk->sk_state != TCP_LISTEN)) {
1548 inet_csk_reqsk_queue_drop_and_put(sk, req);
1549 goto lookup;
1550 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
1551 index b0ad62bd38f7..5752bf7593dc 100644
1552 --- a/net/ipv4/udp.c
1553 +++ b/net/ipv4/udp.c
1554 @@ -2720,7 +2720,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f,
1555 " %02X %08X:%08X %02X:%08lX %08X %5u %8d %lu %d %pK %d",
1556 bucket, src, srcp, dest, destp, sp->sk_state,
1557 sk_wmem_alloc_get(sp),
1558 - sk_rmem_alloc_get(sp),
1559 + udp_rqueue_get(sp),
1560 0, 0L, 0,
1561 from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)),
1562 0, sock_i_ino(sp),
1563 diff --git a/net/ipv4/udp_diag.c b/net/ipv4/udp_diag.c
1564 index d0390d844ac8..d9ad986c7b2c 100644
1565 --- a/net/ipv4/udp_diag.c
1566 +++ b/net/ipv4/udp_diag.c
1567 @@ -163,7 +163,7 @@ static int udp_diag_dump_one(struct sk_buff *in_skb, const struct nlmsghdr *nlh,
1568 static void udp_diag_get_info(struct sock *sk, struct inet_diag_msg *r,
1569 void *info)
1570 {
1571 - r->idiag_rqueue = sk_rmem_alloc_get(sk);
1572 + r->idiag_rqueue = udp_rqueue_get(sk);
1573 r->idiag_wqueue = sk_wmem_alloc_get(sk);
1574 }
1575
1576 diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
1577 index 287112da3c06..453dc3726199 100644
1578 --- a/net/ipv6/datagram.c
1579 +++ b/net/ipv6/datagram.c
1580 @@ -1026,8 +1026,8 @@ int ip6_datagram_send_ctl(struct net *net, struct sock *sk,
1581 }
1582 EXPORT_SYMBOL_GPL(ip6_datagram_send_ctl);
1583
1584 -void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
1585 - __u16 srcp, __u16 destp, int bucket)
1586 +void __ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
1587 + __u16 srcp, __u16 destp, int rqueue, int bucket)
1588 {
1589 const struct in6_addr *dest, *src;
1590
1591 @@ -1043,7 +1043,7 @@ void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
1592 dest->s6_addr32[2], dest->s6_addr32[3], destp,
1593 sp->sk_state,
1594 sk_wmem_alloc_get(sp),
1595 - sk_rmem_alloc_get(sp),
1596 + rqueue,
1597 0, 0L, 0,
1598 from_kuid_munged(seq_user_ns(seq), sock_i_uid(sp)),
1599 0,
1600 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
1601 index 375b20d5bbd7..60efd326014b 100644
1602 --- a/net/ipv6/route.c
1603 +++ b/net/ipv6/route.c
1604 @@ -1476,9 +1476,6 @@ static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk,
1605 const struct in6_addr *daddr, *saddr;
1606 struct rt6_info *rt6 = (struct rt6_info *)dst;
1607
1608 - if (rt6->rt6i_flags & RTF_LOCAL)
1609 - return;
1610 -
1611 if (dst_metric_locked(dst, RTAX_MTU))
1612 return;
1613
1614 diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
1615 index 237cc6187c5a..35e8aef9ceed 100644
1616 --- a/net/ipv6/tcp_ipv6.c
1617 +++ b/net/ipv6/tcp_ipv6.c
1618 @@ -1453,6 +1453,10 @@ static int tcp_v6_rcv(struct sk_buff *skb)
1619 reqsk_put(req);
1620 goto discard_it;
1621 }
1622 + if (tcp_checksum_complete(skb)) {
1623 + reqsk_put(req);
1624 + goto csum_error;
1625 + }
1626 if (unlikely(sk->sk_state != TCP_LISTEN)) {
1627 inet_csk_reqsk_queue_drop_and_put(sk, req);
1628 goto lookup;
1629 diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
1630 index 0146dcdc5c40..330d5ea8451b 100644
1631 --- a/net/ipv6/udp.c
1632 +++ b/net/ipv6/udp.c
1633 @@ -1503,7 +1503,8 @@ int udp6_seq_show(struct seq_file *seq, void *v)
1634 struct inet_sock *inet = inet_sk(v);
1635 __u16 srcp = ntohs(inet->inet_sport);
1636 __u16 destp = ntohs(inet->inet_dport);
1637 - ip6_dgram_sock_seq_show(seq, v, srcp, destp, bucket);
1638 + __ip6_dgram_sock_seq_show(seq, v, srcp, destp,
1639 + udp_rqueue_get(v), bucket);
1640 }
1641 return 0;
1642 }
1643 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
1644 index 7806e166669a..4fe2e34522d6 100644
1645 --- a/net/packet/af_packet.c
1646 +++ b/net/packet/af_packet.c
1647 @@ -2046,7 +2046,7 @@ static int packet_rcv_vnet(struct msghdr *msg, const struct sk_buff *skb,
1648 return -EINVAL;
1649 *len -= sizeof(vnet_hdr);
1650
1651 - if (virtio_net_hdr_from_skb(skb, &vnet_hdr, vio_le(), true))
1652 + if (virtio_net_hdr_from_skb(skb, &vnet_hdr, vio_le(), true, 0))
1653 return -EINVAL;
1654
1655 return memcpy_to_msg(msg, (void *)&vnet_hdr, sizeof(vnet_hdr));
1656 @@ -2313,7 +2313,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
1657 if (do_vnet) {
1658 if (virtio_net_hdr_from_skb(skb, h.raw + macoff -
1659 sizeof(struct virtio_net_hdr),
1660 - vio_le(), true)) {
1661 + vio_le(), true, 0)) {
1662 spin_lock(&sk->sk_receive_queue.lock);
1663 goto drop_n_account;
1664 }
1665 diff --git a/net/sched/act_simple.c b/net/sched/act_simple.c
1666 index b5f80e675783..f3ed63aa4111 100644
1667 --- a/net/sched/act_simple.c
1668 +++ b/net/sched/act_simple.c
1669 @@ -53,22 +53,22 @@ static void tcf_simp_release(struct tc_action *a, int bind)
1670 kfree(d->tcfd_defdata);
1671 }
1672
1673 -static int alloc_defdata(struct tcf_defact *d, char *defdata)
1674 +static int alloc_defdata(struct tcf_defact *d, const struct nlattr *defdata)
1675 {
1676 d->tcfd_defdata = kzalloc(SIMP_MAX_DATA, GFP_KERNEL);
1677 if (unlikely(!d->tcfd_defdata))
1678 return -ENOMEM;
1679 - strlcpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
1680 + nla_strlcpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
1681 return 0;
1682 }
1683
1684 -static void reset_policy(struct tcf_defact *d, char *defdata,
1685 +static void reset_policy(struct tcf_defact *d, const struct nlattr *defdata,
1686 struct tc_defact *p)
1687 {
1688 spin_lock_bh(&d->tcf_lock);
1689 d->tcf_action = p->action;
1690 memset(d->tcfd_defdata, 0, SIMP_MAX_DATA);
1691 - strlcpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
1692 + nla_strlcpy(d->tcfd_defdata, defdata, SIMP_MAX_DATA);
1693 spin_unlock_bh(&d->tcf_lock);
1694 }
1695
1696 @@ -87,7 +87,6 @@ static int tcf_simp_init(struct net *net, struct nlattr *nla,
1697 struct tcf_defact *d;
1698 bool exists = false;
1699 int ret = 0, err;
1700 - char *defdata;
1701
1702 if (nla == NULL)
1703 return -EINVAL;
1704 @@ -110,8 +109,6 @@ static int tcf_simp_init(struct net *net, struct nlattr *nla,
1705 return -EINVAL;
1706 }
1707
1708 - defdata = nla_data(tb[TCA_DEF_DATA]);
1709 -
1710 if (!exists) {
1711 ret = tcf_idr_create(tn, parm->index, est, a,
1712 &act_simp_ops, bind, false);
1713 @@ -119,7 +116,7 @@ static int tcf_simp_init(struct net *net, struct nlattr *nla,
1714 return ret;
1715
1716 d = to_defact(*a);
1717 - ret = alloc_defdata(d, defdata);
1718 + ret = alloc_defdata(d, tb[TCA_DEF_DATA]);
1719 if (ret < 0) {
1720 tcf_idr_release(*a, bind);
1721 return ret;
1722 @@ -133,7 +130,7 @@ static int tcf_simp_init(struct net *net, struct nlattr *nla,
1723 if (!ovr)
1724 return -EEXIST;
1725
1726 - reset_policy(d, defdata, parm);
1727 + reset_policy(d, tb[TCA_DEF_DATA], parm);
1728 }
1729
1730 if (ret == ACT_P_CREATED)
1731 diff --git a/net/socket.c b/net/socket.c
1732 index 43d2f17f5eea..8b2bef6cfe42 100644
1733 --- a/net/socket.c
1734 +++ b/net/socket.c
1735 @@ -538,7 +538,10 @@ static int sockfs_setattr(struct dentry *dentry, struct iattr *iattr)
1736 if (!err && (iattr->ia_valid & ATTR_UID)) {
1737 struct socket *sock = SOCKET_I(d_inode(dentry));
1738
1739 - sock->sk->sk_uid = iattr->ia_uid;
1740 + if (sock->sk)
1741 + sock->sk->sk_uid = iattr->ia_uid;
1742 + else
1743 + err = -ENOENT;
1744 }
1745
1746 return err;
1747 @@ -588,12 +591,16 @@ EXPORT_SYMBOL(sock_alloc);
1748 * an inode not a file.
1749 */
1750
1751 -void sock_release(struct socket *sock)
1752 +static void __sock_release(struct socket *sock, struct inode *inode)
1753 {
1754 if (sock->ops) {
1755 struct module *owner = sock->ops->owner;
1756
1757 + if (inode)
1758 + inode_lock(inode);
1759 sock->ops->release(sock);
1760 + if (inode)
1761 + inode_unlock(inode);
1762 sock->ops = NULL;
1763 module_put(owner);
1764 }
1765 @@ -608,6 +615,11 @@ void sock_release(struct socket *sock)
1766 }
1767 sock->file = NULL;
1768 }
1769 +
1770 +void sock_release(struct socket *sock)
1771 +{
1772 + __sock_release(sock, NULL);
1773 +}
1774 EXPORT_SYMBOL(sock_release);
1775
1776 void __sock_tx_timestamp(__u16 tsflags, __u8 *tx_flags)
1777 @@ -1122,7 +1134,7 @@ static int sock_mmap(struct file *file, struct vm_area_struct *vma)
1778
1779 static int sock_close(struct inode *inode, struct file *filp)
1780 {
1781 - sock_release(SOCKET_I(inode));
1782 + __sock_release(SOCKET_I(inode), inode);
1783 return 0;
1784 }
1785
1786 diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
1787 index 83f886d7c1f8..3c86614462f6 100644
1788 --- a/net/tls/tls_sw.c
1789 +++ b/net/tls/tls_sw.c
1790 @@ -211,18 +211,12 @@ static void tls_free_both_sg(struct sock *sk)
1791 }
1792
1793 static int tls_do_encryption(struct tls_context *tls_ctx,
1794 - struct tls_sw_context *ctx, size_t data_len,
1795 - gfp_t flags)
1796 + struct tls_sw_context *ctx,
1797 + struct aead_request *aead_req,
1798 + size_t data_len)
1799 {
1800 - unsigned int req_size = sizeof(struct aead_request) +
1801 - crypto_aead_reqsize(ctx->aead_send);
1802 - struct aead_request *aead_req;
1803 int rc;
1804
1805 - aead_req = kzalloc(req_size, flags);
1806 - if (!aead_req)
1807 - return -ENOMEM;
1808 -
1809 ctx->sg_encrypted_data[0].offset += tls_ctx->prepend_size;
1810 ctx->sg_encrypted_data[0].length -= tls_ctx->prepend_size;
1811
1812 @@ -235,7 +229,6 @@ static int tls_do_encryption(struct tls_context *tls_ctx,
1813 ctx->sg_encrypted_data[0].offset -= tls_ctx->prepend_size;
1814 ctx->sg_encrypted_data[0].length += tls_ctx->prepend_size;
1815
1816 - kfree(aead_req);
1817 return rc;
1818 }
1819
1820 @@ -244,8 +237,14 @@ static int tls_push_record(struct sock *sk, int flags,
1821 {
1822 struct tls_context *tls_ctx = tls_get_ctx(sk);
1823 struct tls_sw_context *ctx = tls_sw_ctx(tls_ctx);
1824 + struct aead_request *req;
1825 int rc;
1826
1827 + req = kzalloc(sizeof(struct aead_request) +
1828 + crypto_aead_reqsize(ctx->aead_send), sk->sk_allocation);
1829 + if (!req)
1830 + return -ENOMEM;
1831 +
1832 sg_mark_end(ctx->sg_plaintext_data + ctx->sg_plaintext_num_elem - 1);
1833 sg_mark_end(ctx->sg_encrypted_data + ctx->sg_encrypted_num_elem - 1);
1834
1835 @@ -261,15 +260,14 @@ static int tls_push_record(struct sock *sk, int flags,
1836 tls_ctx->pending_open_record_frags = 0;
1837 set_bit(TLS_PENDING_CLOSED_RECORD, &tls_ctx->flags);
1838
1839 - rc = tls_do_encryption(tls_ctx, ctx, ctx->sg_plaintext_size,
1840 - sk->sk_allocation);
1841 + rc = tls_do_encryption(tls_ctx, ctx, req, ctx->sg_plaintext_size);
1842 if (rc < 0) {
1843 /* If we are called from write_space and
1844 * we fail, we need to set this SOCK_NOSPACE
1845 * to trigger another write_space in the future.
1846 */
1847 set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
1848 - return rc;
1849 + goto out_req;
1850 }
1851
1852 free_sg(sk, ctx->sg_plaintext_data, &ctx->sg_plaintext_num_elem,
1853 @@ -284,6 +282,8 @@ static int tls_push_record(struct sock *sk, int flags,
1854 tls_err_abort(sk);
1855
1856 tls_advance_record_sn(sk, tls_ctx);
1857 +out_req:
1858 + kfree(req);
1859 return rc;
1860 }
1861
1862 diff --git a/sound/pci/hda/hda_controller.c b/sound/pci/hda/hda_controller.c
1863 index d1eb14842340..a12e594d4e3b 100644
1864 --- a/sound/pci/hda/hda_controller.c
1865 +++ b/sound/pci/hda/hda_controller.c
1866 @@ -748,8 +748,10 @@ int snd_hda_attach_pcm_stream(struct hda_bus *_bus, struct hda_codec *codec,
1867 return err;
1868 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
1869 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
1870 - if (apcm == NULL)
1871 + if (apcm == NULL) {
1872 + snd_device_free(chip->card, pcm);
1873 return -ENOMEM;
1874 + }
1875 apcm->chip = chip;
1876 apcm->pcm = pcm;
1877 apcm->codec = codec;
1878 diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
1879 index 5b4dbcec6de8..ba9a7e552183 100644
1880 --- a/sound/pci/hda/patch_conexant.c
1881 +++ b/sound/pci/hda/patch_conexant.c
1882 @@ -959,12 +959,15 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
1883 SND_PCI_QUIRK(0x103c, 0x8079, "HP EliteBook 840 G3", CXT_FIXUP_HP_DOCK),
1884 SND_PCI_QUIRK(0x103c, 0x807C, "HP EliteBook 820 G3", CXT_FIXUP_HP_DOCK),
1885 SND_PCI_QUIRK(0x103c, 0x80FD, "HP ProBook 640 G2", CXT_FIXUP_HP_DOCK),
1886 + SND_PCI_QUIRK(0x103c, 0x83b3, "HP EliteBook 830 G5", CXT_FIXUP_HP_DOCK),
1887 + SND_PCI_QUIRK(0x103c, 0x83d3, "HP ProBook 640 G4", CXT_FIXUP_HP_DOCK),
1888 SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE),
1889 SND_PCI_QUIRK(0x103c, 0x8115, "HP Z1 Gen3", CXT_FIXUP_HP_GATE_MIC),
1890 SND_PCI_QUIRK(0x103c, 0x814f, "HP ZBook 15u G3", CXT_FIXUP_MUTE_LED_GPIO),
1891 SND_PCI_QUIRK(0x103c, 0x822e, "HP ProBook 440 G4", CXT_FIXUP_MUTE_LED_GPIO),
1892 SND_PCI_QUIRK(0x103c, 0x8299, "HP 800 G3 SFF", CXT_FIXUP_HP_MIC_NO_PRESENCE),
1893 SND_PCI_QUIRK(0x103c, 0x829a, "HP 800 G3 DM", CXT_FIXUP_HP_MIC_NO_PRESENCE),
1894 + SND_PCI_QUIRK(0x103c, 0x8455, "HP Z2 G4", CXT_FIXUP_HP_MIC_NO_PRESENCE),
1895 SND_PCI_QUIRK(0x1043, 0x138d, "Asus", CXT_FIXUP_HEADPHONE_MIC_PIN),
1896 SND_PCI_QUIRK(0x152d, 0x0833, "OLPC XO-1.5", CXT_FIXUP_OLPC_XO),
1897 SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400", CXT_PINCFG_LENOVO_TP410),
1898 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1899 index 6ae061183eff..2a8aa2bc5c30 100644
1900 --- a/sound/pci/hda/patch_realtek.c
1901 +++ b/sound/pci/hda/patch_realtek.c
1902 @@ -6439,7 +6439,6 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1903 SND_PCI_QUIRK(0x17aa, 0x312f, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
1904 SND_PCI_QUIRK(0x17aa, 0x3138, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
1905 SND_PCI_QUIRK(0x17aa, 0x313c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
1906 - SND_PCI_QUIRK(0x17aa, 0x3112, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
1907 SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
1908 SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
1909 SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP),
1910 @@ -6610,6 +6609,11 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
1911 {0x12, 0x90a60140},
1912 {0x14, 0x90170110},
1913 {0x21, 0x02211020}),
1914 + SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY,
1915 + {0x12, 0x90a60140},
1916 + {0x14, 0x90170110},
1917 + {0x19, 0x02a11030},
1918 + {0x21, 0x02211020}),
1919 SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
1920 {0x12, 0x90a60140},
1921 {0x14, 0x90170150},