Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0229-4.9.130-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3230 - (show annotations) (download)
Mon Oct 1 09:59:50 2018 UTC (5 years, 7 months ago) by niro
File size: 36931 byte(s)
-linux-4.9.130
1 diff --git a/Makefile b/Makefile
2 index 3f3c340374c5..b98e04a5e1e5 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 129
9 +SUBLEVEL = 130
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/x86/xen/pmu.c b/arch/x86/xen/pmu.c
14 index b9fc52556bcc..0b29a43e09c8 100644
15 --- a/arch/x86/xen/pmu.c
16 +++ b/arch/x86/xen/pmu.c
17 @@ -477,7 +477,7 @@ static void xen_convert_regs(const struct xen_pmu_regs *xen_regs,
18 irqreturn_t xen_pmu_irq_handler(int irq, void *dev_id)
19 {
20 int err, ret = IRQ_NONE;
21 - struct pt_regs regs;
22 + struct pt_regs regs = {0};
23 const struct xen_pmu_data *xenpmu_data = get_xenpmu_data();
24 uint8_t xenpmu_flags = get_xenpmu_flags();
25
26 diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
27 index 56c288f78d8a..5bfae1f972c7 100644
28 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
29 +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
30 @@ -271,12 +271,16 @@ nouveau_connector_detect(struct drm_connector *connector, bool force)
31 nv_connector->edid = NULL;
32 }
33
34 - /* Outputs are only polled while runtime active, so acquiring a
35 - * runtime PM ref here is unnecessary (and would deadlock upon
36 - * runtime suspend because it waits for polling to finish).
37 + /* Outputs are only polled while runtime active, so resuming the
38 + * device here is unnecessary (and would deadlock upon runtime suspend
39 + * because it waits for polling to finish). We do however, want to
40 + * prevent the autosuspend timer from elapsing during this operation
41 + * if possible.
42 */
43 - if (!drm_kms_helper_is_poll_worker()) {
44 - ret = pm_runtime_get_sync(connector->dev->dev);
45 + if (drm_kms_helper_is_poll_worker()) {
46 + pm_runtime_get_noresume(dev->dev);
47 + } else {
48 + ret = pm_runtime_get_sync(dev->dev);
49 if (ret < 0 && ret != -EACCES)
50 return conn_status;
51 }
52 @@ -354,10 +358,8 @@ detect_analog:
53
54 out:
55
56 - if (!drm_kms_helper_is_poll_worker()) {
57 - pm_runtime_mark_last_busy(connector->dev->dev);
58 - pm_runtime_put_autosuspend(connector->dev->dev);
59 - }
60 + pm_runtime_mark_last_busy(dev->dev);
61 + pm_runtime_put_autosuspend(dev->dev);
62
63 return conn_status;
64 }
65 diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
66 index 6526a3366087..3ddd4096da2a 100644
67 --- a/drivers/gpu/drm/nouveau/nouveau_display.c
68 +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
69 @@ -367,8 +367,6 @@ nouveau_display_hpd_work(struct work_struct *work)
70 pm_runtime_get_sync(drm->dev->dev);
71
72 drm_helper_hpd_irq_event(drm->dev);
73 - /* enable polling for external displays */
74 - drm_kms_helper_poll_enable(drm->dev);
75
76 pm_runtime_mark_last_busy(drm->dev->dev);
77 pm_runtime_put_sync(drm->dev->dev);
78 @@ -391,15 +389,29 @@ nouveau_display_acpi_ntfy(struct notifier_block *nb, unsigned long val,
79 {
80 struct nouveau_drm *drm = container_of(nb, typeof(*drm), acpi_nb);
81 struct acpi_bus_event *info = data;
82 + int ret;
83
84 if (!strcmp(info->device_class, ACPI_VIDEO_CLASS)) {
85 if (info->type == ACPI_VIDEO_NOTIFY_PROBE) {
86 - /*
87 - * This may be the only indication we receive of a
88 - * connector hotplug on a runtime suspended GPU,
89 - * schedule hpd_work to check.
90 - */
91 - schedule_work(&drm->hpd_work);
92 + ret = pm_runtime_get(drm->dev->dev);
93 + if (ret == 1 || ret == -EACCES) {
94 + /* If the GPU is already awake, or in a state
95 + * where we can't wake it up, it can handle
96 + * it's own hotplug events.
97 + */
98 + pm_runtime_put_autosuspend(drm->dev->dev);
99 + } else if (ret == 0) {
100 + /* This may be the only indication we receive
101 + * of a connector hotplug on a runtime
102 + * suspended GPU, schedule hpd_work to check.
103 + */
104 + NV_DEBUG(drm, "ACPI requested connector reprobe\n");
105 + schedule_work(&drm->hpd_work);
106 + pm_runtime_put_noidle(drm->dev->dev);
107 + } else {
108 + NV_WARN(drm, "Dropped ACPI reprobe event due to RPM error: %d\n",
109 + ret);
110 + }
111
112 /* acpi-video should not generate keypresses for this */
113 return NOTIFY_BAD;
114 @@ -422,6 +434,11 @@ nouveau_display_init(struct drm_device *dev)
115 if (ret)
116 return ret;
117
118 + /* enable connector detection and polling for connectors without HPD
119 + * support
120 + */
121 + drm_kms_helper_poll_enable(dev);
122 +
123 /* enable hotplug interrupts */
124 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
125 struct nouveau_connector *conn = nouveau_connector(connector);
126 diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
127 index f8c9f6f4f822..a2d8630058ed 100644
128 --- a/drivers/gpu/drm/vc4/vc4_plane.c
129 +++ b/drivers/gpu/drm/vc4/vc4_plane.c
130 @@ -327,6 +327,9 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)
131 vc4_state->y_scaling[0] = vc4_get_scaling_mode(vc4_state->src_h[0],
132 vc4_state->crtc_h);
133
134 + vc4_state->is_unity = (vc4_state->x_scaling[0] == VC4_SCALING_NONE &&
135 + vc4_state->y_scaling[0] == VC4_SCALING_NONE);
136 +
137 if (num_planes > 1) {
138 vc4_state->is_yuv = true;
139
140 @@ -342,24 +345,17 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)
141 vc4_get_scaling_mode(vc4_state->src_h[1],
142 vc4_state->crtc_h);
143
144 - /* YUV conversion requires that scaling be enabled,
145 - * even on a plane that's otherwise 1:1. Choose TPZ
146 - * for simplicity.
147 + /* YUV conversion requires that horizontal scaling be enabled,
148 + * even on a plane that's otherwise 1:1. Looks like only PPF
149 + * works in that case, so let's pick that one.
150 */
151 - if (vc4_state->x_scaling[0] == VC4_SCALING_NONE)
152 - vc4_state->x_scaling[0] = VC4_SCALING_TPZ;
153 - if (vc4_state->y_scaling[0] == VC4_SCALING_NONE)
154 - vc4_state->y_scaling[0] = VC4_SCALING_TPZ;
155 + if (vc4_state->is_unity)
156 + vc4_state->x_scaling[0] = VC4_SCALING_PPF;
157 } else {
158 vc4_state->x_scaling[1] = VC4_SCALING_NONE;
159 vc4_state->y_scaling[1] = VC4_SCALING_NONE;
160 }
161
162 - vc4_state->is_unity = (vc4_state->x_scaling[0] == VC4_SCALING_NONE &&
163 - vc4_state->y_scaling[0] == VC4_SCALING_NONE &&
164 - vc4_state->x_scaling[1] == VC4_SCALING_NONE &&
165 - vc4_state->y_scaling[1] == VC4_SCALING_NONE);
166 -
167 /* No configuring scaling on the cursor plane, since it gets
168 non-vblank-synced updates, and scaling requires requires
169 LBM changes which have to be vblank-synced.
170 @@ -614,7 +610,10 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
171 vc4_dlist_write(vc4_state, SCALER_CSC2_ITR_R_601_5);
172 }
173
174 - if (!vc4_state->is_unity) {
175 + if (vc4_state->x_scaling[0] != VC4_SCALING_NONE ||
176 + vc4_state->x_scaling[1] != VC4_SCALING_NONE ||
177 + vc4_state->y_scaling[0] != VC4_SCALING_NONE ||
178 + vc4_state->y_scaling[1] != VC4_SCALING_NONE) {
179 /* LBM Base Address. */
180 if (vc4_state->y_scaling[0] != VC4_SCALING_NONE ||
181 vc4_state->y_scaling[1] != VC4_SCALING_NONE) {
182 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
183 index 7944a1f589eb..2248b330c047 100644
184 --- a/drivers/hid/hid-core.c
185 +++ b/drivers/hid/hid-core.c
186 @@ -2059,6 +2059,9 @@ static const struct hid_device_id hid_have_special_driver[] = {
187 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
188 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
189 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
190 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) },
191 + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) },
192 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE) },
193 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) },
194 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) },
195 { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER) },
196 diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
197 index 019ee9181f2b..de64cd33590a 100644
198 --- a/drivers/hid/hid-ids.h
199 +++ b/drivers/hid/hid-ids.h
200 @@ -927,6 +927,8 @@
201 #define USB_DEVICE_ID_SONY_PS3_BDREMOTE 0x0306
202 #define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268
203 #define USB_DEVICE_ID_SONY_PS4_CONTROLLER 0x05c4
204 +#define USB_DEVICE_ID_SONY_PS4_CONTROLLER_2 0x09cc
205 +#define USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE 0x0ba0
206 #define USB_DEVICE_ID_SONY_MOTION_CONTROLLER 0x03d5
207 #define USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER 0x042f
208 #define USB_DEVICE_ID_SONY_BUZZ_CONTROLLER 0x0002
209 diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
210 index 1b1dccd37fbd..eee58d15e745 100644
211 --- a/drivers/hid/hid-sony.c
212 +++ b/drivers/hid/hid-sony.c
213 @@ -2581,6 +2581,12 @@ static const struct hid_device_id sony_devices[] = {
214 .driver_data = DUALSHOCK4_CONTROLLER_USB },
215 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER),
216 .driver_data = DUALSHOCK4_CONTROLLER_BT },
217 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2),
218 + .driver_data = DUALSHOCK4_CONTROLLER_USB },
219 + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2),
220 + .driver_data = DUALSHOCK4_CONTROLLER_BT },
221 + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE),
222 + .driver_data = DUALSHOCK4_CONTROLLER_USB },
223 /* Nyko Core Controller for PS3 */
224 { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER),
225 .driver_data = SIXAXIS_CONTROLLER_USB | SINO_LITE_CONTROLLER },
226 diff --git a/drivers/infiniband/hw/cxgb4/qp.c b/drivers/infiniband/hw/cxgb4/qp.c
227 index cc2243f6cc7f..bb45eb22ba1f 100644
228 --- a/drivers/infiniband/hw/cxgb4/qp.c
229 +++ b/drivers/infiniband/hw/cxgb4/qp.c
230 @@ -1258,6 +1258,12 @@ static void flush_qp(struct c4iw_qp *qhp)
231
232 t4_set_wq_in_error(&qhp->wq);
233 if (qhp->ibqp.uobject) {
234 +
235 + /* for user qps, qhp->wq.flushed is protected by qhp->mutex */
236 + if (qhp->wq.flushed)
237 + return;
238 +
239 + qhp->wq.flushed = 1;
240 t4_set_cq_in_error(&rchp->cq);
241 spin_lock_irqsave(&rchp->comp_handler_lock, flag);
242 (*rchp->ibcq.comp_handler)(&rchp->ibcq, rchp->ibcq.cq_context);
243 diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c
244 index 518e2dec2aa2..5e9122cd3898 100644
245 --- a/drivers/misc/vmw_balloon.c
246 +++ b/drivers/misc/vmw_balloon.c
247 @@ -45,6 +45,7 @@
248 #include <linux/seq_file.h>
249 #include <linux/vmw_vmci_defs.h>
250 #include <linux/vmw_vmci_api.h>
251 +#include <linux/io.h>
252 #include <asm/hypervisor.h>
253
254 MODULE_AUTHOR("VMware, Inc.");
255 diff --git a/drivers/net/appletalk/ipddp.c b/drivers/net/appletalk/ipddp.c
256 index 2e4649655181..4e98e5aff7c5 100644
257 --- a/drivers/net/appletalk/ipddp.c
258 +++ b/drivers/net/appletalk/ipddp.c
259 @@ -284,8 +284,12 @@ static int ipddp_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
260 case SIOCFINDIPDDPRT:
261 spin_lock_bh(&ipddp_route_lock);
262 rp = __ipddp_find_route(&rcp);
263 - if (rp)
264 - memcpy(&rcp2, rp, sizeof(rcp2));
265 + if (rp) {
266 + memset(&rcp2, 0, sizeof(rcp2));
267 + rcp2.ip = rp->ip;
268 + rcp2.at = rp->at;
269 + rcp2.flags = rp->flags;
270 + }
271 spin_unlock_bh(&ipddp_route_lock);
272
273 if (rp) {
274 diff --git a/drivers/net/ethernet/hp/hp100.c b/drivers/net/ethernet/hp/hp100.c
275 index 631dbc7b4dbb..0988bf1a43c0 100644
276 --- a/drivers/net/ethernet/hp/hp100.c
277 +++ b/drivers/net/ethernet/hp/hp100.c
278 @@ -2636,7 +2636,7 @@ static int hp100_login_to_vg_hub(struct net_device *dev, u_short force_relogin)
279 /* Wait for link to drop */
280 time = jiffies + (HZ / 10);
281 do {
282 - if (~(hp100_inb(VG_LAN_CFG_1) & HP100_LINK_UP_ST))
283 + if (!(hp100_inb(VG_LAN_CFG_1) & HP100_LINK_UP_ST))
284 break;
285 if (!in_interrupt())
286 schedule_timeout_interruptible(1);
287 diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
288 index 7f6af10f09ee..3c1adb38412b 100644
289 --- a/drivers/net/xen-netfront.c
290 +++ b/drivers/net/xen-netfront.c
291 @@ -906,7 +906,11 @@ static RING_IDX xennet_fill_frags(struct netfront_queue *queue,
292 BUG_ON(pull_to <= skb_headlen(skb));
293 __pskb_pull_tail(skb, pull_to - skb_headlen(skb));
294 }
295 - BUG_ON(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS);
296 + if (unlikely(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS)) {
297 + queue->rx.rsp_cons = ++cons;
298 + kfree_skb(nskb);
299 + return ~0U;
300 + }
301
302 skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
303 skb_frag_page(nfrag),
304 @@ -1043,6 +1047,8 @@ err:
305 skb->len += rx->status;
306
307 i = xennet_fill_frags(queue, skb, &tmpq);
308 + if (unlikely(i == ~0U))
309 + goto err;
310
311 if (rx->flags & XEN_NETRXF_csum_blank)
312 skb->ip_summed = CHECKSUM_PARTIAL;
313 diff --git a/drivers/pci/host/pci-aardvark.c b/drivers/pci/host/pci-aardvark.c
314 index 11bad826683e..1dbd09c91a7c 100644
315 --- a/drivers/pci/host/pci-aardvark.c
316 +++ b/drivers/pci/host/pci-aardvark.c
317 @@ -976,6 +976,7 @@ static int advk_pcie_probe(struct platform_device *pdev)
318 return -ENOMEM;
319 }
320
321 + pci_bus_size_bridges(bus);
322 pci_bus_assign_resources(bus);
323
324 list_for_each_entry(child, &bus->children, node)
325 diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
326 index a05d143ac43b..c7a695c2303a 100644
327 --- a/drivers/pci/quirks.c
328 +++ b/drivers/pci/quirks.c
329 @@ -4236,11 +4236,6 @@ static int pci_quirk_qcom_rp_acs(struct pci_dev *dev, u16 acs_flags)
330 *
331 * 0x9d10-0x9d1b PCI Express Root port #{1-12}
332 *
333 - * The 300 series chipset suffers from the same bug so include those root
334 - * ports here as well.
335 - *
336 - * 0xa32c-0xa343 PCI Express Root port #{0-24}
337 - *
338 * [1] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-2.html
339 * [2] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-datasheet-vol-1.html
340 * [3] http://www.intel.com/content/www/us/en/chipsets/100-series-chipset-spec-update.html
341 @@ -4258,7 +4253,6 @@ static bool pci_quirk_intel_spt_pch_acs_match(struct pci_dev *dev)
342 case 0xa110 ... 0xa11f: case 0xa167 ... 0xa16a: /* Sunrise Point */
343 case 0xa290 ... 0xa29f: case 0xa2e7 ... 0xa2ee: /* Union Point */
344 case 0x9d10 ... 0x9d1b: /* 7th & 8th Gen Mobile */
345 - case 0xa32c ... 0xa343: /* 300 series */
346 return true;
347 }
348
349 diff --git a/drivers/platform/x86/alienware-wmi.c b/drivers/platform/x86/alienware-wmi.c
350 index 005629447b0c..fe419935041c 100644
351 --- a/drivers/platform/x86/alienware-wmi.c
352 +++ b/drivers/platform/x86/alienware-wmi.c
353 @@ -518,6 +518,7 @@ static acpi_status alienware_wmax_command(struct wmax_basic_args *in_args,
354 if (obj && obj->type == ACPI_TYPE_INTEGER)
355 *out_data = (u32) obj->integer.value;
356 }
357 + kfree(output.pointer);
358 return status;
359
360 }
361 diff --git a/drivers/target/iscsi/iscsi_target_auth.c b/drivers/target/iscsi/iscsi_target_auth.c
362 index 98f75e5811c8..f06e74ea10d3 100644
363 --- a/drivers/target/iscsi/iscsi_target_auth.c
364 +++ b/drivers/target/iscsi/iscsi_target_auth.c
365 @@ -26,18 +26,6 @@
366 #include "iscsi_target_nego.h"
367 #include "iscsi_target_auth.h"
368
369 -static int chap_string_to_hex(unsigned char *dst, unsigned char *src, int len)
370 -{
371 - int j = DIV_ROUND_UP(len, 2), rc;
372 -
373 - rc = hex2bin(dst, src, j);
374 - if (rc < 0)
375 - pr_debug("CHAP string contains non hex digit symbols\n");
376 -
377 - dst[j] = '\0';
378 - return j;
379 -}
380 -
381 static void chap_binaryhex_to_asciihex(char *dst, char *src, int src_len)
382 {
383 int i;
384 @@ -240,9 +228,16 @@ static int chap_server_compute_md5(
385 pr_err("Could not find CHAP_R.\n");
386 goto out;
387 }
388 + if (strlen(chap_r) != MD5_SIGNATURE_SIZE * 2) {
389 + pr_err("Malformed CHAP_R\n");
390 + goto out;
391 + }
392 + if (hex2bin(client_digest, chap_r, MD5_SIGNATURE_SIZE) < 0) {
393 + pr_err("Malformed CHAP_R\n");
394 + goto out;
395 + }
396
397 pr_debug("[server] Got CHAP_R=%s\n", chap_r);
398 - chap_string_to_hex(client_digest, chap_r, strlen(chap_r));
399
400 tfm = crypto_alloc_shash("md5", 0, 0);
401 if (IS_ERR(tfm)) {
402 @@ -341,9 +336,7 @@ static int chap_server_compute_md5(
403 pr_err("Could not find CHAP_C.\n");
404 goto out;
405 }
406 - pr_debug("[server] Got CHAP_C=%s\n", challenge);
407 - challenge_len = chap_string_to_hex(challenge_binhex, challenge,
408 - strlen(challenge));
409 + challenge_len = DIV_ROUND_UP(strlen(challenge), 2);
410 if (!challenge_len) {
411 pr_err("Unable to convert incoming challenge\n");
412 goto out;
413 @@ -352,6 +345,11 @@ static int chap_server_compute_md5(
414 pr_err("CHAP_C exceeds maximum binary size of 1024 bytes\n");
415 goto out;
416 }
417 + if (hex2bin(challenge_binhex, challenge, challenge_len) < 0) {
418 + pr_err("Malformed CHAP_C\n");
419 + goto out;
420 + }
421 + pr_debug("[server] Got CHAP_C=%s\n", challenge);
422 /*
423 * During mutual authentication, the CHAP_C generated by the
424 * initiator must not match the original CHAP_C generated by
425 diff --git a/drivers/tty/vt/vt_ioctl.c b/drivers/tty/vt/vt_ioctl.c
426 index f62c598810ff..638eb9bbd59f 100644
427 --- a/drivers/tty/vt/vt_ioctl.c
428 +++ b/drivers/tty/vt/vt_ioctl.c
429 @@ -31,6 +31,8 @@
430 #include <asm/io.h>
431 #include <asm/uaccess.h>
432
433 +#include <linux/nospec.h>
434 +
435 #include <linux/kbd_kern.h>
436 #include <linux/vt_kern.h>
437 #include <linux/kbd_diacr.h>
438 @@ -703,6 +705,8 @@ int vt_ioctl(struct tty_struct *tty,
439 if (vsa.console == 0 || vsa.console > MAX_NR_CONSOLES)
440 ret = -ENXIO;
441 else {
442 + vsa.console = array_index_nospec(vsa.console,
443 + MAX_NR_CONSOLES + 1);
444 vsa.console--;
445 console_lock();
446 ret = vc_allocate(vsa.console);
447 diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
448 index e8b365000d73..e16bc4cec62e 100644
449 --- a/fs/ext4/dir.c
450 +++ b/fs/ext4/dir.c
451 @@ -74,7 +74,7 @@ int __ext4_check_dir_entry(const char *function, unsigned int line,
452 else if (unlikely(rlen < EXT4_DIR_REC_LEN(de->name_len)))
453 error_msg = "rec_len is too small for name_len";
454 else if (unlikely(((char *) de - buf) + rlen > size))
455 - error_msg = "directory entry across range";
456 + error_msg = "directory entry overrun";
457 else if (unlikely(le32_to_cpu(de->inode) >
458 le32_to_cpu(EXT4_SB(dir->i_sb)->s_es->s_inodes_count)))
459 error_msg = "inode out of bounds";
460 @@ -83,18 +83,16 @@ int __ext4_check_dir_entry(const char *function, unsigned int line,
461
462 if (filp)
463 ext4_error_file(filp, function, line, bh->b_blocknr,
464 - "bad entry in directory: %s - offset=%u(%u), "
465 - "inode=%u, rec_len=%d, name_len=%d",
466 - error_msg, (unsigned) (offset % size),
467 - offset, le32_to_cpu(de->inode),
468 - rlen, de->name_len);
469 + "bad entry in directory: %s - offset=%u, "
470 + "inode=%u, rec_len=%d, name_len=%d, size=%d",
471 + error_msg, offset, le32_to_cpu(de->inode),
472 + rlen, de->name_len, size);
473 else
474 ext4_error_inode(dir, function, line, bh->b_blocknr,
475 - "bad entry in directory: %s - offset=%u(%u), "
476 - "inode=%u, rec_len=%d, name_len=%d",
477 - error_msg, (unsigned) (offset % size),
478 - offset, le32_to_cpu(de->inode),
479 - rlen, de->name_len);
480 + "bad entry in directory: %s - offset=%u, "
481 + "inode=%u, rec_len=%d, name_len=%d, size=%d",
482 + error_msg, offset, le32_to_cpu(de->inode),
483 + rlen, de->name_len, size);
484
485 return 1;
486 }
487 diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
488 index 436baf7cdca3..211539a7adfc 100644
489 --- a/fs/ext4/inline.c
490 +++ b/fs/ext4/inline.c
491 @@ -1754,6 +1754,7 @@ bool empty_inline_dir(struct inode *dir, int *has_inline_data)
492 {
493 int err, inline_size;
494 struct ext4_iloc iloc;
495 + size_t inline_len;
496 void *inline_pos;
497 unsigned int offset;
498 struct ext4_dir_entry_2 *de;
499 @@ -1781,8 +1782,9 @@ bool empty_inline_dir(struct inode *dir, int *has_inline_data)
500 goto out;
501 }
502
503 + inline_len = ext4_get_inline_size(dir);
504 offset = EXT4_INLINE_DOTDOT_SIZE;
505 - while (offset < dir->i_size) {
506 + while (offset < inline_len) {
507 de = ext4_get_inline_entry(dir, &iloc, offset,
508 &inline_pos, &inline_size);
509 if (ext4_check_dir_entry(dir, NULL, de,
510 diff --git a/fs/ext4/mmp.c b/fs/ext4/mmp.c
511 index d89754ef1aab..c2e830a6206d 100644
512 --- a/fs/ext4/mmp.c
513 +++ b/fs/ext4/mmp.c
514 @@ -48,7 +48,6 @@ static int write_mmp_block(struct super_block *sb, struct buffer_head *bh)
515 */
516 sb_start_write(sb);
517 ext4_mmp_csum_set(sb, mmp);
518 - mark_buffer_dirty(bh);
519 lock_buffer(bh);
520 bh->b_end_io = end_buffer_write_sync;
521 get_bh(bh);
522 diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
523 index a225a21d04ad..bc727c393a89 100644
524 --- a/fs/ext4/namei.c
525 +++ b/fs/ext4/namei.c
526 @@ -3527,6 +3527,12 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
527 int credits;
528 u8 old_file_type;
529
530 + if (new.inode && new.inode->i_nlink == 0) {
531 + EXT4_ERROR_INODE(new.inode,
532 + "target of rename is already freed");
533 + return -EFSCORRUPTED;
534 + }
535 +
536 if ((ext4_test_inode_flag(new_dir, EXT4_INODE_PROJINHERIT)) &&
537 (!projid_eq(EXT4_I(new_dir)->i_projid,
538 EXT4_I(old_dentry->d_inode)->i_projid)))
539 diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
540 index eb720d9e2953..1da301ee78ce 100644
541 --- a/fs/ext4/resize.c
542 +++ b/fs/ext4/resize.c
543 @@ -18,6 +18,7 @@
544
545 int ext4_resize_begin(struct super_block *sb)
546 {
547 + struct ext4_sb_info *sbi = EXT4_SB(sb);
548 int ret = 0;
549
550 if (!capable(CAP_SYS_RESOURCE))
551 @@ -28,7 +29,7 @@ int ext4_resize_begin(struct super_block *sb)
552 * because the user tools have no way of handling this. Probably a
553 * bad time to do it anyways.
554 */
555 - if (EXT4_SB(sb)->s_sbh->b_blocknr !=
556 + if (EXT4_B2C(sbi, sbi->s_sbh->b_blocknr) !=
557 le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block)) {
558 ext4_warning(sb, "won't resize using backup superblock at %llu",
559 (unsigned long long)EXT4_SB(sb)->s_sbh->b_blocknr);
560 @@ -1954,6 +1955,26 @@ retry:
561 }
562 }
563
564 + /*
565 + * Make sure the last group has enough space so that it's
566 + * guaranteed to have enough space for all metadata blocks
567 + * that it might need to hold. (We might not need to store
568 + * the inode table blocks in the last block group, but there
569 + * will be cases where this might be needed.)
570 + */
571 + if ((ext4_group_first_block_no(sb, n_group) +
572 + ext4_group_overhead_blocks(sb, n_group) + 2 +
573 + sbi->s_itb_per_group + sbi->s_cluster_ratio) >= n_blocks_count) {
574 + n_blocks_count = ext4_group_first_block_no(sb, n_group);
575 + n_group--;
576 + n_blocks_count_retry = 0;
577 + if (resize_inode) {
578 + iput(resize_inode);
579 + resize_inode = NULL;
580 + }
581 + goto retry;
582 + }
583 +
584 /* extend the last group */
585 if (n_group == o_group)
586 add = n_blocks_count - o_blocks_count;
587 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
588 index 9d44b3683b46..f88d4804c3a8 100644
589 --- a/fs/ext4/super.c
590 +++ b/fs/ext4/super.c
591 @@ -2015,6 +2015,8 @@ static int _ext4_show_options(struct seq_file *seq, struct super_block *sb,
592 SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb);
593 if (test_opt(sb, DATA_ERR_ABORT))
594 SEQ_OPTS_PUTS("data_err=abort");
595 + if (DUMMY_ENCRYPTION_ENABLED(sbi))
596 + SEQ_OPTS_PUTS("test_dummy_encryption");
597
598 ext4_show_quota_options(seq, sb);
599 return 0;
600 @@ -4187,11 +4189,13 @@ no_journal:
601 block = ext4_count_free_clusters(sb);
602 ext4_free_blocks_count_set(sbi->s_es,
603 EXT4_C2B(sbi, block));
604 + ext4_superblock_csum_set(sb);
605 err = percpu_counter_init(&sbi->s_freeclusters_counter, block,
606 GFP_KERNEL);
607 if (!err) {
608 unsigned long freei = ext4_count_free_inodes(sb);
609 sbi->s_es->s_free_inodes_count = cpu_to_le32(freei);
610 + ext4_superblock_csum_set(sb);
611 err = percpu_counter_init(&sbi->s_freeinodes_counter, freei,
612 GFP_KERNEL);
613 }
614 diff --git a/fs/ocfs2/buffer_head_io.c b/fs/ocfs2/buffer_head_io.c
615 index 8f040f88ade4..25c8b328c43d 100644
616 --- a/fs/ocfs2/buffer_head_io.c
617 +++ b/fs/ocfs2/buffer_head_io.c
618 @@ -341,6 +341,7 @@ int ocfs2_read_blocks(struct ocfs2_caching_info *ci, u64 block, int nr,
619 * for this bh as it's not marked locally
620 * uptodate. */
621 status = -EIO;
622 + clear_buffer_needs_validate(bh);
623 put_bh(bh);
624 bhs[i] = NULL;
625 continue;
626 diff --git a/include/net/nfc/hci.h b/include/net/nfc/hci.h
627 index 316694dafa5b..008f466d1da7 100644
628 --- a/include/net/nfc/hci.h
629 +++ b/include/net/nfc/hci.h
630 @@ -87,7 +87,7 @@ struct nfc_hci_pipe {
631 * According to specification 102 622 chapter 4.4 Pipes,
632 * the pipe identifier is 7 bits long.
633 */
634 -#define NFC_HCI_MAX_PIPES 127
635 +#define NFC_HCI_MAX_PIPES 128
636 struct nfc_hci_init_data {
637 u8 gate_count;
638 struct nfc_hci_gate gates[NFC_HCI_MAX_CUSTOM_GATES];
639 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
640 index f6e8727f7fa3..f81adb476c03 100644
641 --- a/kernel/sched/fair.c
642 +++ b/kernel/sched/fair.c
643 @@ -8639,7 +8639,8 @@ static inline bool vruntime_normalized(struct task_struct *p)
644 * - A task which has been woken up by try_to_wake_up() and
645 * waiting for actually being woken up by sched_ttwu_pending().
646 */
647 - if (!se->sum_exec_runtime || p->state == TASK_WAKING)
648 + if (!se->sum_exec_runtime ||
649 + (p->state == TASK_WAKING && p->sched_remote_wakeup))
650 return true;
651
652 return false;
653 diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
654 index dc29b600d2cb..f316e90ad538 100644
655 --- a/kernel/trace/ring_buffer.c
656 +++ b/kernel/trace/ring_buffer.c
657 @@ -1504,6 +1504,8 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned long nr_pages)
658 tmp_iter_page = first_page;
659
660 do {
661 + cond_resched();
662 +
663 to_remove_page = tmp_iter_page;
664 rb_inc_page(cpu_buffer, &tmp_iter_page);
665
666 diff --git a/mm/shmem.c b/mm/shmem.c
667 index 42ca5df2c0e3..4b5cca167baf 100644
668 --- a/mm/shmem.c
669 +++ b/mm/shmem.c
670 @@ -2160,6 +2160,8 @@ static struct inode *shmem_get_inode(struct super_block *sb, const struct inode
671 mpol_shared_policy_init(&info->policy, NULL);
672 break;
673 }
674 +
675 + lockdep_annotate_inode_mutex_key(inode);
676 } else
677 shmem_free_inode(sb);
678 return inode;
679 diff --git a/net/core/neighbour.c b/net/core/neighbour.c
680 index 128c811dcb1a..8eb1916b742c 100644
681 --- a/net/core/neighbour.c
682 +++ b/net/core/neighbour.c
683 @@ -1138,6 +1138,12 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
684 lladdr = neigh->ha;
685 }
686
687 + /* Update confirmed timestamp for neighbour entry after we
688 + * received ARP packet even if it doesn't change IP to MAC binding.
689 + */
690 + if (new & NUD_CONNECTED)
691 + neigh->confirmed = jiffies;
692 +
693 /* If entry was valid and address is not changed,
694 do not change entry state, if new one is STALE.
695 */
696 @@ -1159,15 +1165,12 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
697 }
698 }
699
700 - /* Update timestamps only once we know we will make a change to the
701 + /* Update timestamp only once we know we will make a change to the
702 * neighbour entry. Otherwise we risk to move the locktime window with
703 * noop updates and ignore relevant ARP updates.
704 */
705 - if (new != old || lladdr != neigh->ha) {
706 - if (new & NUD_CONNECTED)
707 - neigh->confirmed = jiffies;
708 + if (new != old || lladdr != neigh->ha)
709 neigh->updated = jiffies;
710 - }
711
712 if (new != old) {
713 neigh_del_timer(neigh);
714 diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
715 index b5116ec31757..689246d079ad 100644
716 --- a/net/ipv4/af_inet.c
717 +++ b/net/ipv4/af_inet.c
718 @@ -1277,6 +1277,7 @@ struct sk_buff *inet_gso_segment(struct sk_buff *skb,
719 if (encap)
720 skb_reset_inner_headers(skb);
721 skb->network_header = (u8 *)iph - skb->head;
722 + skb_reset_mac_len(skb);
723 } while ((skb = skb->next));
724
725 out:
726 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
727 index aa2a20e918fd..b9b2a9828d98 100644
728 --- a/net/ipv4/udp.c
729 +++ b/net/ipv4/udp.c
730 @@ -1730,6 +1730,28 @@ static inline int udp4_csum_init(struct sk_buff *skb, struct udphdr *uh,
731 inet_compute_pseudo);
732 }
733
734 +/* wrapper for udp_queue_rcv_skb tacking care of csum conversion and
735 + * return code conversion for ip layer consumption
736 + */
737 +static int udp_unicast_rcv_skb(struct sock *sk, struct sk_buff *skb,
738 + struct udphdr *uh)
739 +{
740 + int ret;
741 +
742 + if (inet_get_convert_csum(sk) && uh->check && !IS_UDPLITE(sk))
743 + skb_checksum_try_convert(skb, IPPROTO_UDP, uh->check,
744 + inet_compute_pseudo);
745 +
746 + ret = udp_queue_rcv_skb(sk, skb);
747 +
748 + /* a return value > 0 means to resubmit the input, but
749 + * it wants the return to be -protocol, or 0
750 + */
751 + if (ret > 0)
752 + return -ret;
753 + return 0;
754 +}
755 +
756 /*
757 * All we need to do is get the socket, and then do a checksum.
758 */
759 @@ -1776,14 +1798,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
760 if (unlikely(sk->sk_rx_dst != dst))
761 udp_sk_rx_dst_set(sk, dst);
762
763 - ret = udp_queue_rcv_skb(sk, skb);
764 + ret = udp_unicast_rcv_skb(sk, skb, uh);
765 sock_put(sk);
766 - /* a return value > 0 means to resubmit the input, but
767 - * it wants the return to be -protocol, or 0
768 - */
769 - if (ret > 0)
770 - return -ret;
771 - return 0;
772 + return ret;
773 }
774
775 if (rt->rt_flags & (RTCF_BROADCAST|RTCF_MULTICAST))
776 @@ -1791,22 +1808,8 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
777 saddr, daddr, udptable, proto);
778
779 sk = __udp4_lib_lookup_skb(skb, uh->source, uh->dest, udptable);
780 - if (sk) {
781 - int ret;
782 -
783 - if (inet_get_convert_csum(sk) && uh->check && !IS_UDPLITE(sk))
784 - skb_checksum_try_convert(skb, IPPROTO_UDP, uh->check,
785 - inet_compute_pseudo);
786 -
787 - ret = udp_queue_rcv_skb(sk, skb);
788 -
789 - /* a return value > 0 means to resubmit the input, but
790 - * it wants the return to be -protocol, or 0
791 - */
792 - if (ret > 0)
793 - return -ret;
794 - return 0;
795 - }
796 + if (sk)
797 + return udp_unicast_rcv_skb(sk, skb, uh);
798
799 if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
800 goto drop;
801 diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c
802 index 649f4d87b318..a36ae90bf613 100644
803 --- a/net/ipv6/ip6_offload.c
804 +++ b/net/ipv6/ip6_offload.c
805 @@ -113,6 +113,7 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb,
806 payload_len = skb->len - nhoff - sizeof(*ipv6h);
807 ipv6h->payload_len = htons(payload_len);
808 skb->network_header = (u8 *)ipv6h - skb->head;
809 + skb_reset_mac_len(skb);
810
811 if (udpfrag) {
812 int err = ip6_find_1stfragopt(skb, &prevhdr);
813 diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
814 index ea14466cdca8..8e77cecd2165 100644
815 --- a/net/ipv6/ip6_output.c
816 +++ b/net/ipv6/ip6_output.c
817 @@ -201,12 +201,10 @@ int ip6_xmit(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6,
818 kfree_skb(skb);
819 return -ENOBUFS;
820 }
821 + if (skb->sk)
822 + skb_set_owner_w(skb2, skb->sk);
823 consume_skb(skb);
824 skb = skb2;
825 - /* skb_set_owner_w() changes sk->sk_wmem_alloc atomically,
826 - * it is safe to call in our context (socket lock not held)
827 - */
828 - skb_set_owner_w(skb, (struct sock *)sk);
829 }
830 if (opt->opt_flen)
831 ipv6_push_frag_opts(skb, opt, &proto);
832 diff --git a/net/nfc/hci/core.c b/net/nfc/hci/core.c
833 index 2b0f0ac498d2..5a58f9f38095 100644
834 --- a/net/nfc/hci/core.c
835 +++ b/net/nfc/hci/core.c
836 @@ -209,6 +209,11 @@ void nfc_hci_cmd_received(struct nfc_hci_dev *hdev, u8 pipe, u8 cmd,
837 }
838 create_info = (struct hci_create_pipe_resp *)skb->data;
839
840 + if (create_info->pipe >= NFC_HCI_MAX_PIPES) {
841 + status = NFC_HCI_ANY_E_NOK;
842 + goto exit;
843 + }
844 +
845 /* Save the new created pipe and bind with local gate,
846 * the description for skb->data[3] is destination gate id
847 * but since we received this cmd from host controller, we
848 @@ -232,6 +237,11 @@ void nfc_hci_cmd_received(struct nfc_hci_dev *hdev, u8 pipe, u8 cmd,
849 }
850 delete_info = (struct hci_delete_pipe_noti *)skb->data;
851
852 + if (delete_info->pipe >= NFC_HCI_MAX_PIPES) {
853 + status = NFC_HCI_ANY_E_NOK;
854 + goto exit;
855 + }
856 +
857 hdev->pipes[delete_info->pipe].gate = NFC_HCI_INVALID_GATE;
858 hdev->pipes[delete_info->pipe].dest_host = NFC_HCI_INVALID_HOST;
859 break;
860 diff --git a/sound/firewire/bebob/bebob.c b/sound/firewire/bebob/bebob.c
861 index 3469ac14c89c..d0dfa822266b 100644
862 --- a/sound/firewire/bebob/bebob.c
863 +++ b/sound/firewire/bebob/bebob.c
864 @@ -263,6 +263,8 @@ do_registration(struct work_struct *work)
865 error:
866 mutex_unlock(&devices_mutex);
867 snd_bebob_stream_destroy_duplex(bebob);
868 + kfree(bebob->maudio_special_quirk);
869 + bebob->maudio_special_quirk = NULL;
870 snd_card_free(bebob->card);
871 dev_info(&bebob->unit->device,
872 "Sound card registration failed: %d\n", err);
873 diff --git a/sound/firewire/bebob/bebob_maudio.c b/sound/firewire/bebob/bebob_maudio.c
874 index 07e5abdbceb5..6dbf047d4f75 100644
875 --- a/sound/firewire/bebob/bebob_maudio.c
876 +++ b/sound/firewire/bebob/bebob_maudio.c
877 @@ -96,17 +96,13 @@ int snd_bebob_maudio_load_firmware(struct fw_unit *unit)
878 struct fw_device *device = fw_parent_device(unit);
879 int err, rcode;
880 u64 date;
881 - __le32 cues[3] = {
882 - cpu_to_le32(MAUDIO_BOOTLOADER_CUE1),
883 - cpu_to_le32(MAUDIO_BOOTLOADER_CUE2),
884 - cpu_to_le32(MAUDIO_BOOTLOADER_CUE3)
885 - };
886 + __le32 *cues;
887
888 /* check date of software used to build */
889 err = snd_bebob_read_block(unit, INFO_OFFSET_SW_DATE,
890 &date, sizeof(u64));
891 if (err < 0)
892 - goto end;
893 + return err;
894 /*
895 * firmware version 5058 or later has date later than "20070401", but
896 * 'date' is not null-terminated.
897 @@ -114,20 +110,28 @@ int snd_bebob_maudio_load_firmware(struct fw_unit *unit)
898 if (date < 0x3230303730343031LL) {
899 dev_err(&unit->device,
900 "Use firmware version 5058 or later\n");
901 - err = -ENOSYS;
902 - goto end;
903 + return -ENXIO;
904 }
905
906 + cues = kmalloc_array(3, sizeof(*cues), GFP_KERNEL);
907 + if (!cues)
908 + return -ENOMEM;
909 +
910 + cues[0] = cpu_to_le32(MAUDIO_BOOTLOADER_CUE1);
911 + cues[1] = cpu_to_le32(MAUDIO_BOOTLOADER_CUE2);
912 + cues[2] = cpu_to_le32(MAUDIO_BOOTLOADER_CUE3);
913 +
914 rcode = fw_run_transaction(device->card, TCODE_WRITE_BLOCK_REQUEST,
915 device->node_id, device->generation,
916 device->max_speed, BEBOB_ADDR_REG_REQ,
917 - cues, sizeof(cues));
918 + cues, 3 * sizeof(*cues));
919 + kfree(cues);
920 if (rcode != RCODE_COMPLETE) {
921 dev_err(&unit->device,
922 "Failed to send a cue to load firmware\n");
923 err = -EIO;
924 }
925 -end:
926 +
927 return err;
928 }
929
930 @@ -290,10 +294,6 @@ snd_bebob_maudio_special_discover(struct snd_bebob *bebob, bool is1814)
931 bebob->midi_output_ports = 2;
932 }
933 end:
934 - if (err < 0) {
935 - kfree(params);
936 - bebob->maudio_special_quirk = NULL;
937 - }
938 mutex_unlock(&bebob->mutex);
939 return err;
940 }
941 diff --git a/sound/firewire/digi00x/digi00x.c b/sound/firewire/digi00x/digi00x.c
942 index 1f5e1d23f31a..ef689997d6a5 100644
943 --- a/sound/firewire/digi00x/digi00x.c
944 +++ b/sound/firewire/digi00x/digi00x.c
945 @@ -49,6 +49,7 @@ static void dg00x_free(struct snd_dg00x *dg00x)
946 fw_unit_put(dg00x->unit);
947
948 mutex_destroy(&dg00x->mutex);
949 + kfree(dg00x);
950 }
951
952 static void dg00x_card_free(struct snd_card *card)
953 diff --git a/sound/firewire/fireworks/fireworks.c b/sound/firewire/fireworks/fireworks.c
954 index 71a0613d3da0..f2d073365cf6 100644
955 --- a/sound/firewire/fireworks/fireworks.c
956 +++ b/sound/firewire/fireworks/fireworks.c
957 @@ -301,6 +301,8 @@ error:
958 snd_efw_transaction_remove_instance(efw);
959 snd_efw_stream_destroy_duplex(efw);
960 snd_card_free(efw->card);
961 + kfree(efw->resp_buf);
962 + efw->resp_buf = NULL;
963 dev_info(&efw->unit->device,
964 "Sound card registration failed: %d\n", err);
965 }
966 diff --git a/sound/firewire/oxfw/oxfw.c b/sound/firewire/oxfw/oxfw.c
967 index 474b06d8acd1..696b6cf35003 100644
968 --- a/sound/firewire/oxfw/oxfw.c
969 +++ b/sound/firewire/oxfw/oxfw.c
970 @@ -135,6 +135,7 @@ static void oxfw_free(struct snd_oxfw *oxfw)
971
972 kfree(oxfw->spec);
973 mutex_destroy(&oxfw->mutex);
974 + kfree(oxfw);
975 }
976
977 /*
978 @@ -212,6 +213,7 @@ static int detect_quirks(struct snd_oxfw *oxfw)
979 static void do_registration(struct work_struct *work)
980 {
981 struct snd_oxfw *oxfw = container_of(work, struct snd_oxfw, dwork.work);
982 + int i;
983 int err;
984
985 if (oxfw->registered)
986 @@ -274,7 +276,15 @@ error:
987 snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->rx_stream);
988 if (oxfw->has_output)
989 snd_oxfw_stream_destroy_simplex(oxfw, &oxfw->tx_stream);
990 + for (i = 0; i < SND_OXFW_STREAM_FORMAT_ENTRIES; ++i) {
991 + kfree(oxfw->tx_stream_formats[i]);
992 + oxfw->tx_stream_formats[i] = NULL;
993 + kfree(oxfw->rx_stream_formats[i]);
994 + oxfw->rx_stream_formats[i] = NULL;
995 + }
996 snd_card_free(oxfw->card);
997 + kfree(oxfw->spec);
998 + oxfw->spec = NULL;
999 dev_info(&oxfw->unit->device,
1000 "Sound card registration failed: %d\n", err);
1001 }
1002 diff --git a/sound/firewire/tascam/tascam.c b/sound/firewire/tascam/tascam.c
1003 index 9dc93a7eb9da..4c967ac1c0e8 100644
1004 --- a/sound/firewire/tascam/tascam.c
1005 +++ b/sound/firewire/tascam/tascam.c
1006 @@ -93,6 +93,7 @@ static void tscm_free(struct snd_tscm *tscm)
1007 fw_unit_put(tscm->unit);
1008
1009 mutex_destroy(&tscm->mutex);
1010 + kfree(tscm);
1011 }
1012
1013 static void tscm_card_free(struct snd_card *card)
1014 diff --git a/sound/pci/emu10k1/emufx.c b/sound/pci/emu10k1/emufx.c
1015 index 56fc47bd6dba..50b216fc369f 100644
1016 --- a/sound/pci/emu10k1/emufx.c
1017 +++ b/sound/pci/emu10k1/emufx.c
1018 @@ -2520,7 +2520,7 @@ static int snd_emu10k1_fx8010_ioctl(struct snd_hwdep * hw, struct file *file, un
1019 emu->support_tlv = 1;
1020 return put_user(SNDRV_EMU10K1_VERSION, (int __user *)argp);
1021 case SNDRV_EMU10K1_IOCTL_INFO:
1022 - info = kmalloc(sizeof(*info), GFP_KERNEL);
1023 + info = kzalloc(sizeof(*info), GFP_KERNEL);
1024 if (!info)
1025 return -ENOMEM;
1026 snd_emu10k1_fx8010_info(emu, info);
1027 diff --git a/sound/soc/codecs/cs4265.c b/sound/soc/codecs/cs4265.c
1028 index fd966bb851cb..6e8eb1f5a041 100644
1029 --- a/sound/soc/codecs/cs4265.c
1030 +++ b/sound/soc/codecs/cs4265.c
1031 @@ -157,8 +157,8 @@ static const struct snd_kcontrol_new cs4265_snd_controls[] = {
1032 SOC_SINGLE("Validity Bit Control Switch", CS4265_SPDIF_CTL2,
1033 3, 1, 0),
1034 SOC_ENUM("SPDIF Mono/Stereo", spdif_mono_stereo_enum),
1035 - SOC_SINGLE("MMTLR Data Switch", 0,
1036 - 1, 1, 0),
1037 + SOC_SINGLE("MMTLR Data Switch", CS4265_SPDIF_CTL2,
1038 + 0, 1, 0),
1039 SOC_ENUM("Mono Channel Select", spdif_mono_select_enum),
1040 SND_SOC_BYTES("C Data Buffer", CS4265_C_DATA_BUFF, 24),
1041 };