Annotation of /trunk/kernel-alx-legacy/patches-4.9/0371-4.9.272-all-fixes.patch
Parent Directory
|
Revision Log
Revision 3673 -
(hide annotations)
(download)
Mon Oct 24 14:07:50 2022 UTC (19 months, 3 weeks ago) by niro
File size: 29723 byte(s)
Mon Oct 24 14:07:50 2022 UTC (19 months, 3 weeks ago) by niro
File size: 29723 byte(s)
-linux-4.9.272
1 | niro | 3673 | diff --git a/Makefile b/Makefile |
2 | index 4964c2494edb5..39aa8b66fc6ff 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 271 | ||
9 | +SUBLEVEL = 272 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c | ||
14 | index 5962badb33462..b6fd2a21b015e 100644 | ||
15 | --- a/arch/arm64/kernel/traps.c | ||
16 | +++ b/arch/arm64/kernel/traps.c | ||
17 | @@ -543,14 +543,6 @@ asmlinkage long do_ni_syscall(struct pt_regs *regs) | ||
18 | } | ||
19 | #endif | ||
20 | |||
21 | - if (show_unhandled_signals_ratelimited()) { | ||
22 | - pr_info("%s[%d]: syscall %d\n", current->comm, | ||
23 | - task_pid_nr(current), (int)regs->syscallno); | ||
24 | - dump_instr("", regs); | ||
25 | - if (user_mode(regs)) | ||
26 | - __show_regs(regs); | ||
27 | - } | ||
28 | - | ||
29 | return sys_ni_syscall(); | ||
30 | } | ||
31 | |||
32 | diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c | ||
33 | index 29078eaf18c9b..cbc7f177bbd8e 100644 | ||
34 | --- a/arch/x86/kvm/svm.c | ||
35 | +++ b/arch/x86/kvm/svm.c | ||
36 | @@ -3412,7 +3412,7 @@ static int cr_interception(struct vcpu_svm *svm) | ||
37 | err = 0; | ||
38 | if (cr >= 16) { /* mov to cr */ | ||
39 | cr -= 16; | ||
40 | - val = kvm_register_read(&svm->vcpu, reg); | ||
41 | + val = kvm_register_readl(&svm->vcpu, reg); | ||
42 | switch (cr) { | ||
43 | case 0: | ||
44 | if (!check_selective_cr0_intercepted(svm, val)) | ||
45 | @@ -3457,7 +3457,7 @@ static int cr_interception(struct vcpu_svm *svm) | ||
46 | kvm_queue_exception(&svm->vcpu, UD_VECTOR); | ||
47 | return 1; | ||
48 | } | ||
49 | - kvm_register_write(&svm->vcpu, reg, val); | ||
50 | + kvm_register_writel(&svm->vcpu, reg, val); | ||
51 | } | ||
52 | kvm_complete_insn_gp(&svm->vcpu, err); | ||
53 | |||
54 | @@ -3489,13 +3489,13 @@ static int dr_interception(struct vcpu_svm *svm) | ||
55 | if (dr >= 16) { /* mov to DRn */ | ||
56 | if (!kvm_require_dr(&svm->vcpu, dr - 16)) | ||
57 | return 1; | ||
58 | - val = kvm_register_read(&svm->vcpu, reg); | ||
59 | + val = kvm_register_readl(&svm->vcpu, reg); | ||
60 | kvm_set_dr(&svm->vcpu, dr - 16, val); | ||
61 | } else { | ||
62 | if (!kvm_require_dr(&svm->vcpu, dr)) | ||
63 | return 1; | ||
64 | kvm_get_dr(&svm->vcpu, dr, &val); | ||
65 | - kvm_register_write(&svm->vcpu, reg, val); | ||
66 | + kvm_register_writel(&svm->vcpu, reg, val); | ||
67 | } | ||
68 | |||
69 | skip_emulated_instruction(&svm->vcpu); | ||
70 | diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c | ||
71 | index c0e54396f2502..dc8d2603612ed 100644 | ||
72 | --- a/drivers/firmware/efi/cper.c | ||
73 | +++ b/drivers/firmware/efi/cper.c | ||
74 | @@ -257,8 +257,7 @@ static int cper_dimm_err_location(struct cper_mem_err_compact *mem, char *msg) | ||
75 | if (!msg || !(mem->validation_bits & CPER_MEM_VALID_MODULE_HANDLE)) | ||
76 | return 0; | ||
77 | |||
78 | - n = 0; | ||
79 | - len = CPER_REC_LEN - 1; | ||
80 | + len = CPER_REC_LEN; | ||
81 | dmi_memdev_name(mem->mem_dev_handle, &bank, &device); | ||
82 | if (bank && device) | ||
83 | n = snprintf(msg, len, "DIMM location: %s %s ", bank, device); | ||
84 | @@ -267,7 +266,6 @@ static int cper_dimm_err_location(struct cper_mem_err_compact *mem, char *msg) | ||
85 | "DIMM location: not present. DMI handle: 0x%.4x ", | ||
86 | mem->mem_dev_handle); | ||
87 | |||
88 | - msg[n] = '\0'; | ||
89 | return n; | ||
90 | } | ||
91 | |||
92 | diff --git a/drivers/firmware/efi/memattr.c b/drivers/firmware/efi/memattr.c | ||
93 | index 9faa09e7c31f1..c2b991b9fa9e6 100644 | ||
94 | --- a/drivers/firmware/efi/memattr.c | ||
95 | +++ b/drivers/firmware/efi/memattr.c | ||
96 | @@ -68,11 +68,6 @@ static bool entry_is_valid(const efi_memory_desc_t *in, efi_memory_desc_t *out) | ||
97 | return false; | ||
98 | } | ||
99 | |||
100 | - if (!(in->attribute & (EFI_MEMORY_RO | EFI_MEMORY_XP))) { | ||
101 | - pr_warn("Entry attributes invalid: RO and XP bits both cleared\n"); | ||
102 | - return false; | ||
103 | - } | ||
104 | - | ||
105 | if (PAGE_SIZE > EFI_PAGE_SIZE && | ||
106 | (!PAGE_ALIGNED(in->phys_addr) || | ||
107 | !PAGE_ALIGNED(in->num_pages << EFI_PAGE_SHIFT))) { | ||
108 | diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c | ||
109 | index 606fd875740c0..800c477dd0761 100644 | ||
110 | --- a/drivers/hid/i2c-hid/i2c-hid-core.c | ||
111 | +++ b/drivers/hid/i2c-hid/i2c-hid-core.c | ||
112 | @@ -1157,8 +1157,8 @@ static int i2c_hid_probe(struct i2c_client *client, | ||
113 | hid->vendor = le16_to_cpu(ihid->hdesc.wVendorID); | ||
114 | hid->product = le16_to_cpu(ihid->hdesc.wProductID); | ||
115 | |||
116 | - snprintf(hid->name, sizeof(hid->name), "%s %04hX:%04hX", | ||
117 | - client->name, hid->vendor, hid->product); | ||
118 | + snprintf(hid->name, sizeof(hid->name), "%s %04X:%04X", | ||
119 | + client->name, (u16)hid->vendor, (u16)hid->product); | ||
120 | strlcpy(hid->phys, dev_name(&client->dev), sizeof(hid->phys)); | ||
121 | |||
122 | ihid->quirks = i2c_hid_lookup_quirk(hid->vendor, hid->product); | ||
123 | diff --git a/drivers/hid/usbhid/hid-pidff.c b/drivers/hid/usbhid/hid-pidff.c | ||
124 | index 08174d341f4a1..bc75f1efa0f4c 100644 | ||
125 | --- a/drivers/hid/usbhid/hid-pidff.c | ||
126 | +++ b/drivers/hid/usbhid/hid-pidff.c | ||
127 | @@ -1304,6 +1304,7 @@ int hid_pidff_init(struct hid_device *hid) | ||
128 | |||
129 | if (pidff->pool[PID_DEVICE_MANAGED_POOL].value && | ||
130 | pidff->pool[PID_DEVICE_MANAGED_POOL].value[0] == 0) { | ||
131 | + error = -EPERM; | ||
132 | hid_notice(hid, | ||
133 | "device does not support device managed pool\n"); | ||
134 | goto fail; | ||
135 | diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c | ||
136 | index 148e1ff2e5e0e..77dadbe1a4464 100644 | ||
137 | --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c | ||
138 | +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c | ||
139 | @@ -4262,7 +4262,6 @@ int bnxt_hwrm_func_qcaps(struct bnxt *bp) | ||
140 | |||
141 | pf->fw_fid = le16_to_cpu(resp->fid); | ||
142 | pf->port_id = le16_to_cpu(resp->port_id); | ||
143 | - bp->dev->dev_port = pf->port_id; | ||
144 | memcpy(pf->mac_addr, resp->mac_address, ETH_ALEN); | ||
145 | memcpy(bp->dev->dev_addr, pf->mac_addr, ETH_ALEN); | ||
146 | pf->max_rsscos_ctxs = le16_to_cpu(resp->max_rsscos_ctx); | ||
147 | diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c | ||
148 | index d418542924e16..297d3f599efda 100644 | ||
149 | --- a/drivers/net/usb/cdc_ncm.c | ||
150 | +++ b/drivers/net/usb/cdc_ncm.c | ||
151 | @@ -1563,6 +1563,15 @@ cdc_ncm_speed_change(struct usbnet *dev, | ||
152 | uint32_t rx_speed = le32_to_cpu(data->DLBitRRate); | ||
153 | uint32_t tx_speed = le32_to_cpu(data->ULBitRate); | ||
154 | |||
155 | + /* if the speed hasn't changed, don't report it. | ||
156 | + * RTL8156 shipped before 2021 sends notification about every 32ms. | ||
157 | + */ | ||
158 | + if (dev->rx_speed == rx_speed && dev->tx_speed == tx_speed) | ||
159 | + return; | ||
160 | + | ||
161 | + dev->rx_speed = rx_speed; | ||
162 | + dev->tx_speed = tx_speed; | ||
163 | + | ||
164 | /* | ||
165 | * Currently the USB-NET API does not support reporting the actual | ||
166 | * device speed. Do print it instead. | ||
167 | @@ -1606,7 +1615,8 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb) | ||
168 | * USB_CDC_NOTIFY_NETWORK_CONNECTION notification shall be | ||
169 | * sent by device after USB_CDC_NOTIFY_SPEED_CHANGE. | ||
170 | */ | ||
171 | - usbnet_link_change(dev, !!event->wValue, 0); | ||
172 | + if (netif_carrier_ok(dev->net) != !!event->wValue) | ||
173 | + usbnet_link_change(dev, !!event->wValue, 0); | ||
174 | break; | ||
175 | |||
176 | case USB_CDC_NOTIFY_SPEED_CHANGE: | ||
177 | diff --git a/drivers/vfio/pci/Kconfig b/drivers/vfio/pci/Kconfig | ||
178 | index 24ee2605b9f04..0da884bfc7a80 100644 | ||
179 | --- a/drivers/vfio/pci/Kconfig | ||
180 | +++ b/drivers/vfio/pci/Kconfig | ||
181 | @@ -1,6 +1,7 @@ | ||
182 | config VFIO_PCI | ||
183 | tristate "VFIO support for PCI devices" | ||
184 | depends on VFIO && PCI && EVENTFD | ||
185 | + depends on MMU | ||
186 | select VFIO_VIRQFD | ||
187 | select IRQ_BYPASS_MANAGER | ||
188 | help | ||
189 | diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c | ||
190 | index f3c2de04b20d3..5b0f09b211bee 100644 | ||
191 | --- a/drivers/vfio/pci/vfio_pci_config.c | ||
192 | +++ b/drivers/vfio/pci/vfio_pci_config.c | ||
193 | @@ -1576,7 +1576,7 @@ static int vfio_ecap_init(struct vfio_pci_device *vdev) | ||
194 | if (len == 0xFF) { | ||
195 | len = vfio_ext_cap_len(vdev, ecap, epos); | ||
196 | if (len < 0) | ||
197 | - return ret; | ||
198 | + return len; | ||
199 | } | ||
200 | } | ||
201 | |||
202 | diff --git a/drivers/vfio/platform/vfio_platform_common.c b/drivers/vfio/platform/vfio_platform_common.c | ||
203 | index d143d08c4f0fe..9b1b6c1e218dc 100644 | ||
204 | --- a/drivers/vfio/platform/vfio_platform_common.c | ||
205 | +++ b/drivers/vfio/platform/vfio_platform_common.c | ||
206 | @@ -288,7 +288,7 @@ err_irq: | ||
207 | vfio_platform_regions_cleanup(vdev); | ||
208 | err_reg: | ||
209 | mutex_unlock(&driver_lock); | ||
210 | - module_put(THIS_MODULE); | ||
211 | + module_put(vdev->parent_module); | ||
212 | return ret; | ||
213 | } | ||
214 | |||
215 | diff --git a/drivers/xen/xen-pciback/vpci.c b/drivers/xen/xen-pciback/vpci.c | ||
216 | index c99f8bb1c56c4..e6c7509a3d873 100644 | ||
217 | --- a/drivers/xen/xen-pciback/vpci.c | ||
218 | +++ b/drivers/xen/xen-pciback/vpci.c | ||
219 | @@ -68,7 +68,7 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev, | ||
220 | struct pci_dev *dev, int devid, | ||
221 | publish_pci_dev_cb publish_cb) | ||
222 | { | ||
223 | - int err = 0, slot, func = -1; | ||
224 | + int err = 0, slot, func = PCI_FUNC(dev->devfn); | ||
225 | struct pci_dev_entry *t, *dev_entry; | ||
226 | struct vpci_dev_data *vpci_dev = pdev->pci_dev_data; | ||
227 | |||
228 | @@ -93,23 +93,26 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev, | ||
229 | |||
230 | /* | ||
231 | * Keep multi-function devices together on the virtual PCI bus, except | ||
232 | - * virtual functions. | ||
233 | + * that we want to keep virtual functions at func 0 on their own. They | ||
234 | + * aren't multi-function devices and hence their presence at func 0 | ||
235 | + * may cause guests to not scan the other functions. | ||
236 | */ | ||
237 | - if (!dev->is_virtfn) { | ||
238 | + if (!dev->is_virtfn || func) { | ||
239 | for (slot = 0; slot < PCI_SLOT_MAX; slot++) { | ||
240 | if (list_empty(&vpci_dev->dev_list[slot])) | ||
241 | continue; | ||
242 | |||
243 | t = list_entry(list_first(&vpci_dev->dev_list[slot]), | ||
244 | struct pci_dev_entry, list); | ||
245 | + if (t->dev->is_virtfn && !PCI_FUNC(t->dev->devfn)) | ||
246 | + continue; | ||
247 | |||
248 | if (match_slot(dev, t->dev)) { | ||
249 | pr_info("vpci: %s: assign to virtual slot %d func %d\n", | ||
250 | pci_name(dev), slot, | ||
251 | - PCI_FUNC(dev->devfn)); | ||
252 | + func); | ||
253 | list_add_tail(&dev_entry->list, | ||
254 | &vpci_dev->dev_list[slot]); | ||
255 | - func = PCI_FUNC(dev->devfn); | ||
256 | goto unlock; | ||
257 | } | ||
258 | } | ||
259 | @@ -122,7 +125,6 @@ static int __xen_pcibk_add_pci_dev(struct xen_pcibk_device *pdev, | ||
260 | pci_name(dev), slot); | ||
261 | list_add_tail(&dev_entry->list, | ||
262 | &vpci_dev->dev_list[slot]); | ||
263 | - func = dev->is_virtfn ? 0 : PCI_FUNC(dev->devfn); | ||
264 | goto unlock; | ||
265 | } | ||
266 | } | ||
267 | diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c | ||
268 | index 4f919628137cb..374d91830a900 100644 | ||
269 | --- a/fs/btrfs/file-item.c | ||
270 | +++ b/fs/btrfs/file-item.c | ||
271 | @@ -608,7 +608,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, | ||
272 | u64 end_byte = bytenr + len; | ||
273 | u64 csum_end; | ||
274 | struct extent_buffer *leaf; | ||
275 | - int ret; | ||
276 | + int ret = 0; | ||
277 | u16 csum_size = btrfs_super_csum_size(root->fs_info->super_copy); | ||
278 | int blocksize_bits = root->fs_info->sb->s_blocksize_bits; | ||
279 | |||
280 | @@ -626,6 +626,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, | ||
281 | path->leave_spinning = 1; | ||
282 | ret = btrfs_search_slot(trans, root, &key, path, -1, 1); | ||
283 | if (ret > 0) { | ||
284 | + ret = 0; | ||
285 | if (path->slots[0] == 0) | ||
286 | break; | ||
287 | path->slots[0]--; | ||
288 | @@ -656,7 +657,7 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, | ||
289 | if (key.offset >= bytenr && csum_end <= end_byte) { | ||
290 | ret = btrfs_del_item(trans, root, path); | ||
291 | if (ret) | ||
292 | - goto out; | ||
293 | + break; | ||
294 | if (key.offset == bytenr) | ||
295 | break; | ||
296 | } else if (key.offset < bytenr && csum_end > end_byte) { | ||
297 | @@ -700,8 +701,9 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, | ||
298 | ret = btrfs_split_item(trans, root, path, &key, offset); | ||
299 | if (ret && ret != -EAGAIN) { | ||
300 | btrfs_abort_transaction(trans, ret); | ||
301 | - goto out; | ||
302 | + break; | ||
303 | } | ||
304 | + ret = 0; | ||
305 | |||
306 | key.offset = end_byte - 1; | ||
307 | } else { | ||
308 | @@ -711,8 +713,6 @@ int btrfs_del_csums(struct btrfs_trans_handle *trans, | ||
309 | } | ||
310 | btrfs_release_path(path); | ||
311 | } | ||
312 | - ret = 0; | ||
313 | -out: | ||
314 | btrfs_free_path(path); | ||
315 | return ret; | ||
316 | } | ||
317 | diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c | ||
318 | index 5c86fecaf167e..11ecd798864c8 100644 | ||
319 | --- a/fs/btrfs/tree-log.c | ||
320 | +++ b/fs/btrfs/tree-log.c | ||
321 | @@ -1529,6 +1529,7 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans, | ||
322 | break; | ||
323 | |||
324 | if (ret == 1) { | ||
325 | + ret = 0; | ||
326 | if (path->slots[0] == 0) | ||
327 | break; | ||
328 | path->slots[0]--; | ||
329 | @@ -1541,17 +1542,19 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans, | ||
330 | |||
331 | ret = btrfs_del_item(trans, root, path); | ||
332 | if (ret) | ||
333 | - goto out; | ||
334 | + break; | ||
335 | |||
336 | btrfs_release_path(path); | ||
337 | inode = read_one_inode(root, key.offset); | ||
338 | - if (!inode) | ||
339 | - return -EIO; | ||
340 | + if (!inode) { | ||
341 | + ret = -EIO; | ||
342 | + break; | ||
343 | + } | ||
344 | |||
345 | ret = fixup_inode_link_count(trans, root, inode); | ||
346 | iput(inode); | ||
347 | if (ret) | ||
348 | - goto out; | ||
349 | + break; | ||
350 | |||
351 | /* | ||
352 | * fixup on a directory may create new entries, | ||
353 | @@ -1560,8 +1563,6 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans, | ||
354 | */ | ||
355 | key.offset = (u64)-1; | ||
356 | } | ||
357 | - ret = 0; | ||
358 | -out: | ||
359 | btrfs_release_path(path); | ||
360 | return ret; | ||
361 | } | ||
362 | diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c | ||
363 | index 7f291b7be7f3a..e2f31aee67c28 100644 | ||
364 | --- a/fs/ext4/extents.c | ||
365 | +++ b/fs/ext4/extents.c | ||
366 | @@ -3274,7 +3274,10 @@ static int ext4_split_extent_at(handle_t *handle, | ||
367 | ext4_ext_mark_unwritten(ex2); | ||
368 | |||
369 | err = ext4_ext_insert_extent(handle, inode, ppath, &newex, flags); | ||
370 | - if (err == -ENOSPC && (EXT4_EXT_MAY_ZEROOUT & split_flag)) { | ||
371 | + if (err != -ENOSPC && err != -EDQUOT) | ||
372 | + goto out; | ||
373 | + | ||
374 | + if (EXT4_EXT_MAY_ZEROOUT & split_flag) { | ||
375 | if (split_flag & (EXT4_EXT_DATA_VALID1|EXT4_EXT_DATA_VALID2)) { | ||
376 | if (split_flag & EXT4_EXT_DATA_VALID1) { | ||
377 | err = ext4_ext_zeroout(inode, ex2); | ||
378 | @@ -3300,30 +3303,30 @@ static int ext4_split_extent_at(handle_t *handle, | ||
379 | ext4_ext_pblock(&orig_ex)); | ||
380 | } | ||
381 | |||
382 | - if (err) | ||
383 | - goto fix_extent_len; | ||
384 | - /* update the extent length and mark as initialized */ | ||
385 | - ex->ee_len = cpu_to_le16(ee_len); | ||
386 | - ext4_ext_try_to_merge(handle, inode, path, ex); | ||
387 | - err = ext4_ext_dirty(handle, inode, path + path->p_depth); | ||
388 | - if (err) | ||
389 | - goto fix_extent_len; | ||
390 | - | ||
391 | - /* update extent status tree */ | ||
392 | - err = ext4_zeroout_es(inode, &zero_ex); | ||
393 | - | ||
394 | - goto out; | ||
395 | - } else if (err) | ||
396 | - goto fix_extent_len; | ||
397 | - | ||
398 | -out: | ||
399 | - ext4_ext_show_leaf(inode, path); | ||
400 | - return err; | ||
401 | + if (!err) { | ||
402 | + /* update the extent length and mark as initialized */ | ||
403 | + ex->ee_len = cpu_to_le16(ee_len); | ||
404 | + ext4_ext_try_to_merge(handle, inode, path, ex); | ||
405 | + err = ext4_ext_dirty(handle, inode, path + path->p_depth); | ||
406 | + if (!err) | ||
407 | + /* update extent status tree */ | ||
408 | + err = ext4_zeroout_es(inode, &zero_ex); | ||
409 | + /* If we failed at this point, we don't know in which | ||
410 | + * state the extent tree exactly is so don't try to fix | ||
411 | + * length of the original extent as it may do even more | ||
412 | + * damage. | ||
413 | + */ | ||
414 | + goto out; | ||
415 | + } | ||
416 | + } | ||
417 | |||
418 | fix_extent_len: | ||
419 | ex->ee_len = orig_ex.ee_len; | ||
420 | ext4_ext_dirty(handle, inode, path + path->p_depth); | ||
421 | return err; | ||
422 | +out: | ||
423 | + ext4_ext_show_leaf(inode, path); | ||
424 | + return err; | ||
425 | } | ||
426 | |||
427 | /* | ||
428 | diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c | ||
429 | index c17285df12be2..3aa4441f5ab50 100644 | ||
430 | --- a/fs/ocfs2/file.c | ||
431 | +++ b/fs/ocfs2/file.c | ||
432 | @@ -1838,6 +1838,45 @@ out: | ||
433 | return ret; | ||
434 | } | ||
435 | |||
436 | +/* | ||
437 | + * zero out partial blocks of one cluster. | ||
438 | + * | ||
439 | + * start: file offset where zero starts, will be made upper block aligned. | ||
440 | + * len: it will be trimmed to the end of current cluster if "start + len" | ||
441 | + * is bigger than it. | ||
442 | + */ | ||
443 | +static int ocfs2_zeroout_partial_cluster(struct inode *inode, | ||
444 | + u64 start, u64 len) | ||
445 | +{ | ||
446 | + int ret; | ||
447 | + u64 start_block, end_block, nr_blocks; | ||
448 | + u64 p_block, offset; | ||
449 | + u32 cluster, p_cluster, nr_clusters; | ||
450 | + struct super_block *sb = inode->i_sb; | ||
451 | + u64 end = ocfs2_align_bytes_to_clusters(sb, start); | ||
452 | + | ||
453 | + if (start + len < end) | ||
454 | + end = start + len; | ||
455 | + | ||
456 | + start_block = ocfs2_blocks_for_bytes(sb, start); | ||
457 | + end_block = ocfs2_blocks_for_bytes(sb, end); | ||
458 | + nr_blocks = end_block - start_block; | ||
459 | + if (!nr_blocks) | ||
460 | + return 0; | ||
461 | + | ||
462 | + cluster = ocfs2_bytes_to_clusters(sb, start); | ||
463 | + ret = ocfs2_get_clusters(inode, cluster, &p_cluster, | ||
464 | + &nr_clusters, NULL); | ||
465 | + if (ret) | ||
466 | + return ret; | ||
467 | + if (!p_cluster) | ||
468 | + return 0; | ||
469 | + | ||
470 | + offset = start_block - ocfs2_clusters_to_blocks(sb, cluster); | ||
471 | + p_block = ocfs2_clusters_to_blocks(sb, p_cluster) + offset; | ||
472 | + return sb_issue_zeroout(sb, p_block, nr_blocks, GFP_NOFS); | ||
473 | +} | ||
474 | + | ||
475 | /* | ||
476 | * Parts of this function taken from xfs_change_file_space() | ||
477 | */ | ||
478 | @@ -1848,7 +1887,7 @@ static int __ocfs2_change_file_space(struct file *file, struct inode *inode, | ||
479 | { | ||
480 | int ret; | ||
481 | s64 llen; | ||
482 | - loff_t size; | ||
483 | + loff_t size, orig_isize; | ||
484 | struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); | ||
485 | struct buffer_head *di_bh = NULL; | ||
486 | handle_t *handle; | ||
487 | @@ -1879,6 +1918,7 @@ static int __ocfs2_change_file_space(struct file *file, struct inode *inode, | ||
488 | goto out_inode_unlock; | ||
489 | } | ||
490 | |||
491 | + orig_isize = i_size_read(inode); | ||
492 | switch (sr->l_whence) { | ||
493 | case 0: /*SEEK_SET*/ | ||
494 | break; | ||
495 | @@ -1886,7 +1926,7 @@ static int __ocfs2_change_file_space(struct file *file, struct inode *inode, | ||
496 | sr->l_start += f_pos; | ||
497 | break; | ||
498 | case 2: /*SEEK_END*/ | ||
499 | - sr->l_start += i_size_read(inode); | ||
500 | + sr->l_start += orig_isize; | ||
501 | break; | ||
502 | default: | ||
503 | ret = -EINVAL; | ||
504 | @@ -1940,6 +1980,14 @@ static int __ocfs2_change_file_space(struct file *file, struct inode *inode, | ||
505 | default: | ||
506 | ret = -EINVAL; | ||
507 | } | ||
508 | + | ||
509 | + /* zeroout eof blocks in the cluster. */ | ||
510 | + if (!ret && change_size && orig_isize < size) { | ||
511 | + ret = ocfs2_zeroout_partial_cluster(inode, orig_isize, | ||
512 | + size - orig_isize); | ||
513 | + if (!ret) | ||
514 | + i_size_write(inode, size); | ||
515 | + } | ||
516 | up_write(&OCFS2_I(inode)->ip_alloc_sem); | ||
517 | if (ret) { | ||
518 | mlog_errno(ret); | ||
519 | @@ -1956,9 +2004,6 @@ static int __ocfs2_change_file_space(struct file *file, struct inode *inode, | ||
520 | goto out_inode_unlock; | ||
521 | } | ||
522 | |||
523 | - if (change_size && i_size_read(inode) < size) | ||
524 | - i_size_write(inode, size); | ||
525 | - | ||
526 | inode->i_ctime = inode->i_mtime = current_time(inode); | ||
527 | ret = ocfs2_mark_inode_dirty(handle, inode, di_bh); | ||
528 | if (ret < 0) | ||
529 | diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h | ||
530 | index fde7550754df6..52f47c2944f84 100644 | ||
531 | --- a/include/linux/usb/usbnet.h | ||
532 | +++ b/include/linux/usb/usbnet.h | ||
533 | @@ -80,6 +80,8 @@ struct usbnet { | ||
534 | # define EVENT_LINK_CHANGE 11 | ||
535 | # define EVENT_SET_RX_MODE 12 | ||
536 | # define EVENT_NO_IP_ALIGN 13 | ||
537 | + u32 rx_speed; /* in bps - NOT Mbps */ | ||
538 | + u32 tx_speed; /* in bps - NOT Mbps */ | ||
539 | }; | ||
540 | |||
541 | static inline struct usb_driver *driver_of(struct usb_interface *intf) | ||
542 | diff --git a/include/net/caif/caif_dev.h b/include/net/caif/caif_dev.h | ||
543 | index 028b754ae9b17..0baf2e21a533f 100644 | ||
544 | --- a/include/net/caif/caif_dev.h | ||
545 | +++ b/include/net/caif/caif_dev.h | ||
546 | @@ -119,7 +119,7 @@ void caif_free_client(struct cflayer *adap_layer); | ||
547 | * The link_support layer is used to add any Link Layer specific | ||
548 | * framing. | ||
549 | */ | ||
550 | -void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, | ||
551 | +int caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, | ||
552 | struct cflayer *link_support, int head_room, | ||
553 | struct cflayer **layer, int (**rcv_func)( | ||
554 | struct sk_buff *, struct net_device *, | ||
555 | diff --git a/include/net/caif/cfcnfg.h b/include/net/caif/cfcnfg.h | ||
556 | index 70bfd017581fb..219094ace893c 100644 | ||
557 | --- a/include/net/caif/cfcnfg.h | ||
558 | +++ b/include/net/caif/cfcnfg.h | ||
559 | @@ -62,7 +62,7 @@ void cfcnfg_remove(struct cfcnfg *cfg); | ||
560 | * @fcs: Specify if checksum is used in CAIF Framing Layer. | ||
561 | * @head_room: Head space needed by link specific protocol. | ||
562 | */ | ||
563 | -void | ||
564 | +int | ||
565 | cfcnfg_add_phy_layer(struct cfcnfg *cnfg, | ||
566 | struct net_device *dev, struct cflayer *phy_layer, | ||
567 | enum cfcnfg_phy_preference pref, | ||
568 | diff --git a/include/net/caif/cfserl.h b/include/net/caif/cfserl.h | ||
569 | index b5b020f3c72eb..bc3fae07a25f9 100644 | ||
570 | --- a/include/net/caif/cfserl.h | ||
571 | +++ b/include/net/caif/cfserl.h | ||
572 | @@ -9,4 +9,5 @@ | ||
573 | #include <net/caif/caif_layer.h> | ||
574 | |||
575 | struct cflayer *cfserl_create(int instance, bool use_stx); | ||
576 | +void cfserl_release(struct cflayer *layer); | ||
577 | #endif | ||
578 | diff --git a/init/main.c b/init/main.c | ||
579 | index 7ad08957dd180..9e057314a15f3 100644 | ||
580 | --- a/init/main.c | ||
581 | +++ b/init/main.c | ||
582 | @@ -1005,7 +1005,7 @@ static noinline void __init kernel_init_freeable(void) | ||
583 | */ | ||
584 | set_cpus_allowed_ptr(current, cpu_all_mask); | ||
585 | |||
586 | - cad_pid = task_pid(current); | ||
587 | + cad_pid = get_pid(task_pid(current)); | ||
588 | |||
589 | smp_prepare_cpus(setup_max_cpus); | ||
590 | |||
591 | diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c | ||
592 | index 02f44a408edbd..839c534bdcdb9 100644 | ||
593 | --- a/net/bluetooth/hci_core.c | ||
594 | +++ b/net/bluetooth/hci_core.c | ||
595 | @@ -1422,8 +1422,13 @@ static int hci_dev_do_open(struct hci_dev *hdev) | ||
596 | } else { | ||
597 | /* Init failed, cleanup */ | ||
598 | flush_work(&hdev->tx_work); | ||
599 | - flush_work(&hdev->cmd_work); | ||
600 | + | ||
601 | + /* Since hci_rx_work() is possible to awake new cmd_work | ||
602 | + * it should be flushed first to avoid unexpected call of | ||
603 | + * hci_cmd_work() | ||
604 | + */ | ||
605 | flush_work(&hdev->rx_work); | ||
606 | + flush_work(&hdev->cmd_work); | ||
607 | |||
608 | skb_queue_purge(&hdev->cmd_q); | ||
609 | skb_queue_purge(&hdev->rx_q); | ||
610 | diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c | ||
611 | index 44b3146c61175..35f5585188de7 100644 | ||
612 | --- a/net/bluetooth/hci_sock.c | ||
613 | +++ b/net/bluetooth/hci_sock.c | ||
614 | @@ -750,7 +750,7 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event) | ||
615 | /* Detach sockets from device */ | ||
616 | read_lock(&hci_sk_list.lock); | ||
617 | sk_for_each(sk, &hci_sk_list.head) { | ||
618 | - bh_lock_sock_nested(sk); | ||
619 | + lock_sock(sk); | ||
620 | if (hci_pi(sk)->hdev == hdev) { | ||
621 | hci_pi(sk)->hdev = NULL; | ||
622 | sk->sk_err = EPIPE; | ||
623 | @@ -759,7 +759,7 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event) | ||
624 | |||
625 | hci_dev_put(hdev); | ||
626 | } | ||
627 | - bh_unlock_sock(sk); | ||
628 | + release_sock(sk); | ||
629 | } | ||
630 | read_unlock(&hci_sk_list.lock); | ||
631 | } | ||
632 | diff --git a/net/caif/caif_dev.c b/net/caif/caif_dev.c | ||
633 | index a0443d40d677c..a28ffbbf7450c 100644 | ||
634 | --- a/net/caif/caif_dev.c | ||
635 | +++ b/net/caif/caif_dev.c | ||
636 | @@ -303,7 +303,7 @@ static void dev_flowctrl(struct net_device *dev, int on) | ||
637 | caifd_put(caifd); | ||
638 | } | ||
639 | |||
640 | -void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, | ||
641 | +int caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, | ||
642 | struct cflayer *link_support, int head_room, | ||
643 | struct cflayer **layer, | ||
644 | int (**rcv_func)(struct sk_buff *, struct net_device *, | ||
645 | @@ -314,11 +314,12 @@ void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, | ||
646 | enum cfcnfg_phy_preference pref; | ||
647 | struct cfcnfg *cfg = get_cfcnfg(dev_net(dev)); | ||
648 | struct caif_device_entry_list *caifdevs; | ||
649 | + int res; | ||
650 | |||
651 | caifdevs = caif_device_list(dev_net(dev)); | ||
652 | caifd = caif_device_alloc(dev); | ||
653 | if (!caifd) | ||
654 | - return; | ||
655 | + return -ENOMEM; | ||
656 | *layer = &caifd->layer; | ||
657 | spin_lock_init(&caifd->flow_lock); | ||
658 | |||
659 | @@ -340,7 +341,7 @@ void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, | ||
660 | sizeof(caifd->layer.name) - 1); | ||
661 | caifd->layer.name[sizeof(caifd->layer.name) - 1] = 0; | ||
662 | caifd->layer.transmit = transmit; | ||
663 | - cfcnfg_add_phy_layer(cfg, | ||
664 | + res = cfcnfg_add_phy_layer(cfg, | ||
665 | dev, | ||
666 | &caifd->layer, | ||
667 | pref, | ||
668 | @@ -350,6 +351,7 @@ void caif_enroll_dev(struct net_device *dev, struct caif_dev_common *caifdev, | ||
669 | mutex_unlock(&caifdevs->lock); | ||
670 | if (rcv_func) | ||
671 | *rcv_func = receive; | ||
672 | + return res; | ||
673 | } | ||
674 | EXPORT_SYMBOL(caif_enroll_dev); | ||
675 | |||
676 | @@ -364,6 +366,7 @@ static int caif_device_notify(struct notifier_block *me, unsigned long what, | ||
677 | struct cflayer *layer, *link_support; | ||
678 | int head_room = 0; | ||
679 | struct caif_device_entry_list *caifdevs; | ||
680 | + int res; | ||
681 | |||
682 | cfg = get_cfcnfg(dev_net(dev)); | ||
683 | caifdevs = caif_device_list(dev_net(dev)); | ||
684 | @@ -389,8 +392,10 @@ static int caif_device_notify(struct notifier_block *me, unsigned long what, | ||
685 | break; | ||
686 | } | ||
687 | } | ||
688 | - caif_enroll_dev(dev, caifdev, link_support, head_room, | ||
689 | + res = caif_enroll_dev(dev, caifdev, link_support, head_room, | ||
690 | &layer, NULL); | ||
691 | + if (res) | ||
692 | + cfserl_release(link_support); | ||
693 | caifdev->flowctrl = dev_flowctrl; | ||
694 | break; | ||
695 | |||
696 | diff --git a/net/caif/caif_usb.c b/net/caif/caif_usb.c | ||
697 | index 5cd44f001f647..485dde566c1a9 100644 | ||
698 | --- a/net/caif/caif_usb.c | ||
699 | +++ b/net/caif/caif_usb.c | ||
700 | @@ -116,6 +116,11 @@ static struct cflayer *cfusbl_create(int phyid, u8 ethaddr[ETH_ALEN], | ||
701 | return (struct cflayer *) this; | ||
702 | } | ||
703 | |||
704 | +static void cfusbl_release(struct cflayer *layer) | ||
705 | +{ | ||
706 | + kfree(layer); | ||
707 | +} | ||
708 | + | ||
709 | static struct packet_type caif_usb_type __read_mostly = { | ||
710 | .type = cpu_to_be16(ETH_P_802_EX1), | ||
711 | }; | ||
712 | @@ -128,6 +133,7 @@ static int cfusbl_device_notify(struct notifier_block *me, unsigned long what, | ||
713 | struct cflayer *layer, *link_support; | ||
714 | struct usbnet *usbnet; | ||
715 | struct usb_device *usbdev; | ||
716 | + int res; | ||
717 | |||
718 | /* Check whether we have a NCM device, and find its VID/PID. */ | ||
719 | if (!(dev->dev.parent && dev->dev.parent->driver && | ||
720 | @@ -170,8 +176,11 @@ static int cfusbl_device_notify(struct notifier_block *me, unsigned long what, | ||
721 | if (dev->num_tx_queues > 1) | ||
722 | pr_warn("USB device uses more than one tx queue\n"); | ||
723 | |||
724 | - caif_enroll_dev(dev, &common, link_support, CFUSB_MAX_HEADLEN, | ||
725 | + res = caif_enroll_dev(dev, &common, link_support, CFUSB_MAX_HEADLEN, | ||
726 | &layer, &caif_usb_type.func); | ||
727 | + if (res) | ||
728 | + goto err; | ||
729 | + | ||
730 | if (!pack_added) | ||
731 | dev_add_pack(&caif_usb_type); | ||
732 | pack_added = true; | ||
733 | @@ -181,6 +190,9 @@ static int cfusbl_device_notify(struct notifier_block *me, unsigned long what, | ||
734 | layer->name[sizeof(layer->name) - 1] = 0; | ||
735 | |||
736 | return 0; | ||
737 | +err: | ||
738 | + cfusbl_release(link_support); | ||
739 | + return res; | ||
740 | } | ||
741 | |||
742 | static struct notifier_block caif_device_notifier = { | ||
743 | diff --git a/net/caif/cfcnfg.c b/net/caif/cfcnfg.c | ||
744 | index fa39fc2987086..c45b531a6cd5c 100644 | ||
745 | --- a/net/caif/cfcnfg.c | ||
746 | +++ b/net/caif/cfcnfg.c | ||
747 | @@ -455,7 +455,7 @@ unlock: | ||
748 | rcu_read_unlock(); | ||
749 | } | ||
750 | |||
751 | -void | ||
752 | +int | ||
753 | cfcnfg_add_phy_layer(struct cfcnfg *cnfg, | ||
754 | struct net_device *dev, struct cflayer *phy_layer, | ||
755 | enum cfcnfg_phy_preference pref, | ||
756 | @@ -464,7 +464,7 @@ cfcnfg_add_phy_layer(struct cfcnfg *cnfg, | ||
757 | { | ||
758 | struct cflayer *frml; | ||
759 | struct cfcnfg_phyinfo *phyinfo = NULL; | ||
760 | - int i; | ||
761 | + int i, res = 0; | ||
762 | u8 phyid; | ||
763 | |||
764 | mutex_lock(&cnfg->lock); | ||
765 | @@ -478,12 +478,15 @@ cfcnfg_add_phy_layer(struct cfcnfg *cnfg, | ||
766 | goto got_phyid; | ||
767 | } | ||
768 | pr_warn("Too many CAIF Link Layers (max 6)\n"); | ||
769 | + res = -EEXIST; | ||
770 | goto out; | ||
771 | |||
772 | got_phyid: | ||
773 | phyinfo = kzalloc(sizeof(struct cfcnfg_phyinfo), GFP_ATOMIC); | ||
774 | - if (!phyinfo) | ||
775 | + if (!phyinfo) { | ||
776 | + res = -ENOMEM; | ||
777 | goto out_err; | ||
778 | + } | ||
779 | |||
780 | phy_layer->id = phyid; | ||
781 | phyinfo->pref = pref; | ||
782 | @@ -497,8 +500,10 @@ got_phyid: | ||
783 | |||
784 | frml = cffrml_create(phyid, fcs); | ||
785 | |||
786 | - if (!frml) | ||
787 | + if (!frml) { | ||
788 | + res = -ENOMEM; | ||
789 | goto out_err; | ||
790 | + } | ||
791 | phyinfo->frm_layer = frml; | ||
792 | layer_set_up(frml, cnfg->mux); | ||
793 | |||
794 | @@ -516,11 +521,12 @@ got_phyid: | ||
795 | list_add_rcu(&phyinfo->node, &cnfg->phys); | ||
796 | out: | ||
797 | mutex_unlock(&cnfg->lock); | ||
798 | - return; | ||
799 | + return res; | ||
800 | |||
801 | out_err: | ||
802 | kfree(phyinfo); | ||
803 | mutex_unlock(&cnfg->lock); | ||
804 | + return res; | ||
805 | } | ||
806 | EXPORT_SYMBOL(cfcnfg_add_phy_layer); | ||
807 | |||
808 | diff --git a/net/caif/cfserl.c b/net/caif/cfserl.c | ||
809 | index ce60f06d76de3..af1e1e36dc90a 100644 | ||
810 | --- a/net/caif/cfserl.c | ||
811 | +++ b/net/caif/cfserl.c | ||
812 | @@ -31,6 +31,11 @@ static int cfserl_transmit(struct cflayer *layr, struct cfpkt *pkt); | ||
813 | static void cfserl_ctrlcmd(struct cflayer *layr, enum caif_ctrlcmd ctrl, | ||
814 | int phyid); | ||
815 | |||
816 | +void cfserl_release(struct cflayer *layer) | ||
817 | +{ | ||
818 | + kfree(layer); | ||
819 | +} | ||
820 | + | ||
821 | struct cflayer *cfserl_create(int instance, bool use_stx) | ||
822 | { | ||
823 | struct cfserl *this = kzalloc(sizeof(struct cfserl), GFP_ATOMIC); | ||
824 | diff --git a/net/ieee802154/nl-mac.c b/net/ieee802154/nl-mac.c | ||
825 | index c0930b9fe848b..7531cb1665d2b 100644 | ||
826 | --- a/net/ieee802154/nl-mac.c | ||
827 | +++ b/net/ieee802154/nl-mac.c | ||
828 | @@ -688,8 +688,10 @@ int ieee802154_llsec_getparams(struct sk_buff *skb, struct genl_info *info) | ||
829 | nla_put_u8(msg, IEEE802154_ATTR_LLSEC_SECLEVEL, params.out_level) || | ||
830 | nla_put_u32(msg, IEEE802154_ATTR_LLSEC_FRAME_COUNTER, | ||
831 | be32_to_cpu(params.frame_counter)) || | ||
832 | - ieee802154_llsec_fill_key_id(msg, ¶ms.out_key)) | ||
833 | + ieee802154_llsec_fill_key_id(msg, ¶ms.out_key)) { | ||
834 | + rc = -ENOBUFS; | ||
835 | goto out_free; | ||
836 | + } | ||
837 | |||
838 | dev_put(dev); | ||
839 | |||
840 | diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c | ||
841 | index 77d73014bde31..11f53dc0c1c09 100644 | ||
842 | --- a/net/ieee802154/nl-phy.c | ||
843 | +++ b/net/ieee802154/nl-phy.c | ||
844 | @@ -249,8 +249,10 @@ int ieee802154_add_iface(struct sk_buff *skb, struct genl_info *info) | ||
845 | } | ||
846 | |||
847 | if (nla_put_string(msg, IEEE802154_ATTR_PHY_NAME, wpan_phy_name(phy)) || | ||
848 | - nla_put_string(msg, IEEE802154_ATTR_DEV_NAME, dev->name)) | ||
849 | + nla_put_string(msg, IEEE802154_ATTR_DEV_NAME, dev->name)) { | ||
850 | + rc = -EMSGSIZE; | ||
851 | goto nla_put_failure; | ||
852 | + } | ||
853 | dev_put(dev); | ||
854 | |||
855 | wpan_phy_put(phy); | ||
856 | diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c | ||
857 | index ba9e711f7e3d6..4e08305a55c48 100644 | ||
858 | --- a/net/netfilter/ipvs/ip_vs_ctl.c | ||
859 | +++ b/net/netfilter/ipvs/ip_vs_ctl.c | ||
860 | @@ -1256,7 +1256,7 @@ ip_vs_add_service(struct netns_ipvs *ipvs, struct ip_vs_service_user_kern *u, | ||
861 | ip_vs_addr_copy(svc->af, &svc->addr, &u->addr); | ||
862 | svc->port = u->port; | ||
863 | svc->fwmark = u->fwmark; | ||
864 | - svc->flags = u->flags; | ||
865 | + svc->flags = u->flags & ~IP_VS_SVC_F_HASHED; | ||
866 | svc->timeout = u->timeout * HZ; | ||
867 | svc->netmask = u->netmask; | ||
868 | svc->ipvs = ipvs; | ||
869 | diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c | ||
870 | index 8396dc8ee2474..babe42ff3eecf 100644 | ||
871 | --- a/net/netfilter/nfnetlink_cthelper.c | ||
872 | +++ b/net/netfilter/nfnetlink_cthelper.c | ||
873 | @@ -355,10 +355,14 @@ static int | ||
874 | nfnl_cthelper_update(const struct nlattr * const tb[], | ||
875 | struct nf_conntrack_helper *helper) | ||
876 | { | ||
877 | + u32 size; | ||
878 | int ret; | ||
879 | |||
880 | - if (tb[NFCTH_PRIV_DATA_LEN]) | ||
881 | - return -EBUSY; | ||
882 | + if (tb[NFCTH_PRIV_DATA_LEN]) { | ||
883 | + size = ntohl(nla_get_be32(tb[NFCTH_PRIV_DATA_LEN])); | ||
884 | + if (size != helper->data_len) | ||
885 | + return -EBUSY; | ||
886 | + } | ||
887 | |||
888 | if (tb[NFCTH_POLICY]) { | ||
889 | ret = nfnl_cthelper_update_policy(helper, tb[NFCTH_POLICY]); | ||
890 | diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c | ||
891 | index 22e340a9049c8..92c6fbfd51f79 100644 | ||
892 | --- a/net/nfc/llcp_sock.c | ||
893 | +++ b/net/nfc/llcp_sock.c | ||
894 | @@ -121,6 +121,7 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) | ||
895 | if (!llcp_sock->service_name) { | ||
896 | nfc_llcp_local_put(llcp_sock->local); | ||
897 | llcp_sock->local = NULL; | ||
898 | + llcp_sock->dev = NULL; | ||
899 | ret = -ENOMEM; | ||
900 | goto put_dev; | ||
901 | } | ||
902 | @@ -130,6 +131,7 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) | ||
903 | llcp_sock->local = NULL; | ||
904 | kfree(llcp_sock->service_name); | ||
905 | llcp_sock->service_name = NULL; | ||
906 | + llcp_sock->dev = NULL; | ||
907 | ret = -EADDRINUSE; | ||
908 | goto put_dev; | ||
909 | } | ||
910 | diff --git a/sound/core/timer.c b/sound/core/timer.c | ||
911 | index f8a4b2a2f8f6b..6475b85599364 100644 | ||
912 | --- a/sound/core/timer.c | ||
913 | +++ b/sound/core/timer.c | ||
914 | @@ -488,9 +488,10 @@ static void snd_timer_notify1(struct snd_timer_instance *ti, int event) | ||
915 | return; | ||
916 | if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE) | ||
917 | return; | ||
918 | + event += 10; /* convert to SNDRV_TIMER_EVENT_MXXX */ | ||
919 | list_for_each_entry(ts, &ti->slave_active_head, active_list) | ||
920 | if (ts->ccallback) | ||
921 | - ts->ccallback(ts, event + 100, &tstamp, resolution); | ||
922 | + ts->ccallback(ts, event, &tstamp, resolution); | ||
923 | } | ||
924 | |||
925 | /* start/continue a master timer */ |