Annotation of /trunk/kernel-alx-legacy/patches-4.9/0411-4.9.312-all-fixes.patch
Parent Directory | Revision Log
Revision 3713 -
(hide annotations)
(download)
Mon Oct 24 14:08:25 2022 UTC (22 months, 4 weeks ago) by niro
File size: 15714 byte(s)
Mon Oct 24 14:08:25 2022 UTC (22 months, 4 weeks ago) by niro
File size: 15714 byte(s)
-linux-4.9.312
1 | niro | 3713 | diff --git a/Makefile b/Makefile |
2 | index c1a20e4a2d136..a9f16c9c9614f 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 9 | ||
8 | -SUBLEVEL = 311 | ||
9 | +SUBLEVEL = 312 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Roaring Lionus | ||
12 | |||
13 | diff --git a/arch/arc/kernel/entry.S b/arch/arc/kernel/entry.S | ||
14 | index 37ad245cf9899..fb458623f3860 100644 | ||
15 | --- a/arch/arc/kernel/entry.S | ||
16 | +++ b/arch/arc/kernel/entry.S | ||
17 | @@ -191,6 +191,7 @@ tracesys_exit: | ||
18 | st r0, [sp, PT_r0] ; sys call return value in pt_regs | ||
19 | |||
20 | ;POST Sys Call Ptrace Hook | ||
21 | + mov r0, sp ; pt_regs needed | ||
22 | bl @syscall_trace_exit | ||
23 | b ret_from_exception ; NOT ret_from_system_call at is saves r0 which | ||
24 | ; we'd done before calling post hook above | ||
25 | diff --git a/arch/arm/mach-vexpress/spc.c b/arch/arm/mach-vexpress/spc.c | ||
26 | index 635b0d5494874..c16f396140032 100644 | ||
27 | --- a/arch/arm/mach-vexpress/spc.c | ||
28 | +++ b/arch/arm/mach-vexpress/spc.c | ||
29 | @@ -584,7 +584,7 @@ static int __init ve_spc_clk_init(void) | ||
30 | } | ||
31 | |||
32 | cluster = topology_physical_package_id(cpu_dev->id); | ||
33 | - if (init_opp_table[cluster]) | ||
34 | + if (cluster < 0 || init_opp_table[cluster]) | ||
35 | continue; | ||
36 | |||
37 | if (ve_init_opp_table(cpu_dev)) | ||
38 | diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c | ||
39 | index b6e5447d563ee..f538bac4ac66a 100644 | ||
40 | --- a/block/compat_ioctl.c | ||
41 | +++ b/block/compat_ioctl.c | ||
42 | @@ -394,7 +394,7 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg) | ||
43 | return 0; | ||
44 | case BLKGETSIZE: | ||
45 | size = i_size_read(bdev->bd_inode); | ||
46 | - if ((size >> 9) > ~0UL) | ||
47 | + if ((size >> 9) > ~(compat_ulong_t)0) | ||
48 | return -EFBIG; | ||
49 | return compat_put_ulong(arg, size >> 9); | ||
50 | |||
51 | diff --git a/drivers/ata/pata_marvell.c b/drivers/ata/pata_marvell.c | ||
52 | index ff468a6fd8ddc..677f582cf3d6c 100644 | ||
53 | --- a/drivers/ata/pata_marvell.c | ||
54 | +++ b/drivers/ata/pata_marvell.c | ||
55 | @@ -82,6 +82,8 @@ static int marvell_cable_detect(struct ata_port *ap) | ||
56 | switch(ap->port_no) | ||
57 | { | ||
58 | case 0: | ||
59 | + if (!ap->ioaddr.bmdma_addr) | ||
60 | + return ATA_CBL_PATA_UNK; | ||
61 | if (ioread8(ap->ioaddr.bmdma_addr + 1) & 1) | ||
62 | return ATA_CBL_PATA40; | ||
63 | return ATA_CBL_PATA80; | ||
64 | diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c | ||
65 | index c15ca560fe60d..ca266fcca186c 100644 | ||
66 | --- a/drivers/dma/at_xdmac.c | ||
67 | +++ b/drivers/dma/at_xdmac.c | ||
68 | @@ -1392,7 +1392,7 @@ at_xdmac_tx_status(struct dma_chan *chan, dma_cookie_t cookie, | ||
69 | { | ||
70 | struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan); | ||
71 | struct at_xdmac *atxdmac = to_at_xdmac(atchan->chan.device); | ||
72 | - struct at_xdmac_desc *desc, *_desc; | ||
73 | + struct at_xdmac_desc *desc, *_desc, *iter; | ||
74 | struct list_head *descs_list; | ||
75 | enum dma_status ret; | ||
76 | int residue, retry; | ||
77 | @@ -1507,11 +1507,13 @@ at_xdmac_tx_status(struct dma_chan *chan, dma_cookie_t cookie, | ||
78 | * microblock. | ||
79 | */ | ||
80 | descs_list = &desc->descs_list; | ||
81 | - list_for_each_entry_safe(desc, _desc, descs_list, desc_node) { | ||
82 | - dwidth = at_xdmac_get_dwidth(desc->lld.mbr_cfg); | ||
83 | - residue -= (desc->lld.mbr_ubc & 0xffffff) << dwidth; | ||
84 | - if ((desc->lld.mbr_nda & 0xfffffffc) == cur_nda) | ||
85 | + list_for_each_entry_safe(iter, _desc, descs_list, desc_node) { | ||
86 | + dwidth = at_xdmac_get_dwidth(iter->lld.mbr_cfg); | ||
87 | + residue -= (iter->lld.mbr_ubc & 0xffffff) << dwidth; | ||
88 | + if ((iter->lld.mbr_nda & 0xfffffffc) == cur_nda) { | ||
89 | + desc = iter; | ||
90 | break; | ||
91 | + } | ||
92 | } | ||
93 | residue += cur_ubc << dwidth; | ||
94 | |||
95 | diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c | ||
96 | index 558d509b7d855..4337cf9defc24 100644 | ||
97 | --- a/drivers/dma/imx-sdma.c | ||
98 | +++ b/drivers/dma/imx-sdma.c | ||
99 | @@ -1528,7 +1528,7 @@ static int sdma_event_remap(struct sdma_engine *sdma) | ||
100 | u32 reg, val, shift, num_map, i; | ||
101 | int ret = 0; | ||
102 | |||
103 | - if (IS_ERR(np) || IS_ERR(gpr_np)) | ||
104 | + if (IS_ERR(np) || !gpr_np) | ||
105 | goto out; | ||
106 | |||
107 | event_remap = of_find_property(np, propname, NULL); | ||
108 | @@ -1576,7 +1576,7 @@ static int sdma_event_remap(struct sdma_engine *sdma) | ||
109 | } | ||
110 | |||
111 | out: | ||
112 | - if (!IS_ERR(gpr_np)) | ||
113 | + if (gpr_np) | ||
114 | of_node_put(gpr_np); | ||
115 | |||
116 | return ret; | ||
117 | diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | ||
118 | index 83bf997dda03c..e14bfbdbaf2bf 100644 | ||
119 | --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | ||
120 | +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | ||
121 | @@ -192,7 +192,10 @@ static void mdp5_plane_reset(struct drm_plane *plane) | ||
122 | drm_framebuffer_unreference(plane->state->fb); | ||
123 | |||
124 | kfree(to_mdp5_plane_state(plane->state)); | ||
125 | + plane->state = NULL; | ||
126 | mdp5_state = kzalloc(sizeof(*mdp5_state), GFP_KERNEL); | ||
127 | + if (!mdp5_state) | ||
128 | + return; | ||
129 | |||
130 | /* assign default blend parameters */ | ||
131 | mdp5_state->alpha = 255; | ||
132 | diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c | ||
133 | index 500016209ae0c..3ed40bde796b7 100644 | ||
134 | --- a/drivers/net/ethernet/intel/e1000e/ich8lan.c | ||
135 | +++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c | ||
136 | @@ -1010,8 +1010,8 @@ static s32 e1000_platform_pm_pch_lpt(struct e1000_hw *hw, bool link) | ||
137 | { | ||
138 | u32 reg = link << (E1000_LTRV_REQ_SHIFT + E1000_LTRV_NOSNOOP_SHIFT) | | ||
139 | link << E1000_LTRV_REQ_SHIFT | E1000_LTRV_SEND; | ||
140 | - u16 max_ltr_enc_d = 0; /* maximum LTR decoded by platform */ | ||
141 | - u16 lat_enc_d = 0; /* latency decoded */ | ||
142 | + u32 max_ltr_enc_d = 0; /* maximum LTR decoded by platform */ | ||
143 | + u32 lat_enc_d = 0; /* latency decoded */ | ||
144 | u16 lat_enc = 0; /* latency encoded */ | ||
145 | |||
146 | if (link) { | ||
147 | diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c | ||
148 | index 0bfadec8b79c9..d59cb381e80b1 100644 | ||
149 | --- a/drivers/net/vxlan.c | ||
150 | +++ b/drivers/net/vxlan.c | ||
151 | @@ -490,11 +490,11 @@ static int vxlan_fdb_append(struct vxlan_fdb *f, | ||
152 | |||
153 | rd = kmalloc(sizeof(*rd), GFP_ATOMIC); | ||
154 | if (rd == NULL) | ||
155 | - return -ENOBUFS; | ||
156 | + return -ENOMEM; | ||
157 | |||
158 | if (dst_cache_init(&rd->dst_cache, GFP_ATOMIC)) { | ||
159 | kfree(rd); | ||
160 | - return -ENOBUFS; | ||
161 | + return -ENOMEM; | ||
162 | } | ||
163 | |||
164 | rd->remote_ip = *ip; | ||
165 | diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | ||
166 | index 998a4bd6db78a..d8f34883c0960 100644 | ||
167 | --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | ||
168 | +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | ||
169 | @@ -547,7 +547,7 @@ enum brcmf_sdio_frmtype { | ||
170 | BRCMF_SDIO_FT_SUB, | ||
171 | }; | ||
172 | |||
173 | -#define SDIOD_DRVSTR_KEY(chip, pmu) (((chip) << 16) | (pmu)) | ||
174 | +#define SDIOD_DRVSTR_KEY(chip, pmu) (((unsigned int)(chip) << 16) | (pmu)) | ||
175 | |||
176 | /* SDIO Pad drive strength to select value mappings */ | ||
177 | struct sdiod_drive_str { | ||
178 | diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c | ||
179 | index 8c146e2b6727a..4664d3e191c81 100644 | ||
180 | --- a/drivers/platform/x86/samsung-laptop.c | ||
181 | +++ b/drivers/platform/x86/samsung-laptop.c | ||
182 | @@ -1125,8 +1125,6 @@ static void kbd_led_set(struct led_classdev *led_cdev, | ||
183 | |||
184 | if (value > samsung->kbd_led.max_brightness) | ||
185 | value = samsung->kbd_led.max_brightness; | ||
186 | - else if (value < 0) | ||
187 | - value = 0; | ||
188 | |||
189 | samsung->kbd_led_wk = value; | ||
190 | queue_work(samsung->led_workqueue, &samsung->kbd_led_work); | ||
191 | diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c | ||
192 | index 95e4f074b7665..b85c283ad08b3 100644 | ||
193 | --- a/fs/cifs/cifsfs.c | ||
194 | +++ b/fs/cifs/cifsfs.c | ||
195 | @@ -766,7 +766,7 @@ cifs_loose_read_iter(struct kiocb *iocb, struct iov_iter *iter) | ||
196 | ssize_t rc; | ||
197 | struct inode *inode = file_inode(iocb->ki_filp); | ||
198 | |||
199 | - if (iocb->ki_filp->f_flags & O_DIRECT) | ||
200 | + if (iocb->ki_flags & IOCB_DIRECT) | ||
201 | return cifs_user_readv(iocb, iter); | ||
202 | |||
203 | rc = cifs_revalidate_mapping(inode); | ||
204 | diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c | ||
205 | index e66aa8918dee2..754b33828853d 100644 | ||
206 | --- a/fs/ext4/inode.c | ||
207 | +++ b/fs/ext4/inode.c | ||
208 | @@ -3980,7 +3980,8 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length) | ||
209 | struct super_block *sb = inode->i_sb; | ||
210 | ext4_lblk_t first_block, stop_block; | ||
211 | struct address_space *mapping = inode->i_mapping; | ||
212 | - loff_t first_block_offset, last_block_offset; | ||
213 | + loff_t first_block_offset, last_block_offset, max_length; | ||
214 | + struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); | ||
215 | handle_t *handle; | ||
216 | unsigned int credits; | ||
217 | int ret = 0; | ||
218 | @@ -4026,6 +4027,14 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length) | ||
219 | offset; | ||
220 | } | ||
221 | |||
222 | + /* | ||
223 | + * For punch hole the length + offset needs to be within one block | ||
224 | + * before last range. Adjust the length if it goes beyond that limit. | ||
225 | + */ | ||
226 | + max_length = sbi->s_bitmap_maxbytes - inode->i_sb->s_blocksize; | ||
227 | + if (offset + length > max_length) | ||
228 | + length = max_length - offset; | ||
229 | + | ||
230 | if (offset & (sb->s_blocksize - 1) || | ||
231 | (offset + length) & (sb->s_blocksize - 1)) { | ||
232 | /* | ||
233 | diff --git a/fs/ext4/super.c b/fs/ext4/super.c | ||
234 | index e17a6396bde6c..c50ba683a570a 100644 | ||
235 | --- a/fs/ext4/super.c | ||
236 | +++ b/fs/ext4/super.c | ||
237 | @@ -3241,9 +3241,11 @@ static int count_overhead(struct super_block *sb, ext4_group_t grp, | ||
238 | ext4_fsblk_t first_block, last_block, b; | ||
239 | ext4_group_t i, ngroups = ext4_get_groups_count(sb); | ||
240 | int s, j, count = 0; | ||
241 | + int has_super = ext4_bg_has_super(sb, grp); | ||
242 | |||
243 | if (!ext4_has_feature_bigalloc(sb)) | ||
244 | - return (ext4_bg_has_super(sb, grp) + ext4_bg_num_gdb(sb, grp) + | ||
245 | + return (has_super + ext4_bg_num_gdb(sb, grp) + | ||
246 | + (has_super ? le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) : 0) + | ||
247 | sbi->s_itb_per_group + 2); | ||
248 | |||
249 | first_block = le32_to_cpu(sbi->s_es->s_first_data_block) + | ||
250 | @@ -4162,9 +4164,18 @@ no_journal: | ||
251 | * Get the # of file system overhead blocks from the | ||
252 | * superblock if present. | ||
253 | */ | ||
254 | - if (es->s_overhead_clusters) | ||
255 | - sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters); | ||
256 | - else { | ||
257 | + sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters); | ||
258 | + /* ignore the precalculated value if it is ridiculous */ | ||
259 | + if (sbi->s_overhead > ext4_blocks_count(es)) | ||
260 | + sbi->s_overhead = 0; | ||
261 | + /* | ||
262 | + * If the bigalloc feature is not enabled recalculating the | ||
263 | + * overhead doesn't take long, so we might as well just redo | ||
264 | + * it to make sure we are using the correct value. | ||
265 | + */ | ||
266 | + if (!ext4_has_feature_bigalloc(sb)) | ||
267 | + sbi->s_overhead = 0; | ||
268 | + if (sbi->s_overhead == 0) { | ||
269 | err = ext4_calculate_overhead(sb); | ||
270 | if (err) | ||
271 | goto failed_mount_wq; | ||
272 | diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c | ||
273 | index a4182b150bb07..9f83a4c602f99 100644 | ||
274 | --- a/fs/gfs2/rgrp.c | ||
275 | +++ b/fs/gfs2/rgrp.c | ||
276 | @@ -917,15 +917,15 @@ static int read_rindex_entry(struct gfs2_inode *ip) | ||
277 | rgd->rd_bitbytes = be32_to_cpu(buf.ri_bitbytes); | ||
278 | spin_lock_init(&rgd->rd_rsspin); | ||
279 | |||
280 | - error = compute_bitstructs(rgd); | ||
281 | - if (error) | ||
282 | - goto fail; | ||
283 | - | ||
284 | error = gfs2_glock_get(sdp, rgd->rd_addr, | ||
285 | &gfs2_rgrp_glops, CREATE, &rgd->rd_gl); | ||
286 | if (error) | ||
287 | goto fail; | ||
288 | |||
289 | + error = compute_bitstructs(rgd); | ||
290 | + if (error) | ||
291 | + goto fail_glock; | ||
292 | + | ||
293 | rgd->rd_rgl = (struct gfs2_rgrp_lvb *)rgd->rd_gl->gl_lksb.sb_lvbptr; | ||
294 | rgd->rd_flags &= ~(GFS2_RDF_UPTODATE | GFS2_RDF_PREFERRED); | ||
295 | if (rgd->rd_data > sdp->sd_max_rg_data) | ||
296 | @@ -942,6 +942,7 @@ static int read_rindex_entry(struct gfs2_inode *ip) | ||
297 | } | ||
298 | |||
299 | error = 0; /* someone else read in the rgrp; free it and ignore it */ | ||
300 | +fail_glock: | ||
301 | gfs2_glock_put(rgd->rd_gl); | ||
302 | |||
303 | fail: | ||
304 | diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h | ||
305 | index 6fec9e81bd70d..1979298fdca9e 100644 | ||
306 | --- a/include/linux/etherdevice.h | ||
307 | +++ b/include/linux/etherdevice.h | ||
308 | @@ -125,7 +125,7 @@ static inline bool is_multicast_ether_addr(const u8 *addr) | ||
309 | #endif | ||
310 | } | ||
311 | |||
312 | -static inline bool is_multicast_ether_addr_64bits(const u8 addr[6+2]) | ||
313 | +static inline bool is_multicast_ether_addr_64bits(const u8 *addr) | ||
314 | { | ||
315 | #if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64 | ||
316 | #ifdef __BIG_ENDIAN | ||
317 | @@ -339,8 +339,7 @@ static inline bool ether_addr_equal(const u8 *addr1, const u8 *addr2) | ||
318 | * Please note that alignment of addr1 & addr2 are only guaranteed to be 16 bits. | ||
319 | */ | ||
320 | |||
321 | -static inline bool ether_addr_equal_64bits(const u8 addr1[6+2], | ||
322 | - const u8 addr2[6+2]) | ||
323 | +static inline bool ether_addr_equal_64bits(const u8 *addr1, const u8 *addr2) | ||
324 | { | ||
325 | #if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && BITS_PER_LONG == 64 | ||
326 | u64 fold = (*(const u64 *)addr1) ^ (*(const u64 *)addr2); | ||
327 | diff --git a/mm/page_alloc.c b/mm/page_alloc.c | ||
328 | index 25c21aa398f8c..a6e682569e5b9 100644 | ||
329 | --- a/mm/page_alloc.c | ||
330 | +++ b/mm/page_alloc.c | ||
331 | @@ -6504,7 +6504,7 @@ void __init mem_init_print_info(const char *str) | ||
332 | */ | ||
333 | #define adj_init_size(start, end, size, pos, adj) \ | ||
334 | do { \ | ||
335 | - if (start <= pos && pos < end && size > adj) \ | ||
336 | + if (&start[0] <= &pos[0] && &pos[0] < &end[0] && size > adj) \ | ||
337 | size -= adj; \ | ||
338 | } while (0) | ||
339 | |||
340 | diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c | ||
341 | index 8aef475fef310..a8674e9ff37b7 100644 | ||
342 | --- a/net/netlink/af_netlink.c | ||
343 | +++ b/net/netlink/af_netlink.c | ||
344 | @@ -2194,6 +2194,13 @@ static int netlink_dump(struct sock *sk) | ||
345 | * single netdev. The outcome is MSG_TRUNC error. | ||
346 | */ | ||
347 | skb_reserve(skb, skb_tailroom(skb) - alloc_size); | ||
348 | + | ||
349 | + /* Make sure malicious BPF programs can not read unitialized memory | ||
350 | + * from skb->head -> skb->data | ||
351 | + */ | ||
352 | + skb_reset_network_header(skb); | ||
353 | + skb_reset_mac_header(skb); | ||
354 | + | ||
355 | netlink_skb_set_owner_r(skb, sk); | ||
356 | |||
357 | if (nlk->dump_done_errno > 0) | ||
358 | diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c | ||
359 | index 28471cfad9225..26921f755f3a9 100644 | ||
360 | --- a/net/openvswitch/flow_netlink.c | ||
361 | +++ b/net/openvswitch/flow_netlink.c | ||
362 | @@ -1863,7 +1863,7 @@ static struct nlattr *reserve_sfa_size(struct sw_flow_actions **sfa, | ||
363 | new_acts_size = max(next_offset + req_size, ksize(*sfa) * 2); | ||
364 | |||
365 | if (new_acts_size > MAX_ACTIONS_BUFSIZE) { | ||
366 | - if ((MAX_ACTIONS_BUFSIZE - next_offset) < req_size) { | ||
367 | + if ((next_offset + req_size) > MAX_ACTIONS_BUFSIZE) { | ||
368 | OVS_NLERR(log, "Flow action size exceeds max %u", | ||
369 | MAX_ACTIONS_BUFSIZE); | ||
370 | return ERR_PTR(-EMSGSIZE); | ||
371 | diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c | ||
372 | index e79d6881a97eb..2ae2801dd7bee 100644 | ||
373 | --- a/net/packet/af_packet.c | ||
374 | +++ b/net/packet/af_packet.c | ||
375 | @@ -2808,8 +2808,9 @@ tpacket_error: | ||
376 | |||
377 | status = TP_STATUS_SEND_REQUEST; | ||
378 | err = po->xmit(skb); | ||
379 | - if (unlikely(err > 0)) { | ||
380 | - err = net_xmit_errno(err); | ||
381 | + if (unlikely(err != 0)) { | ||
382 | + if (err > 0) | ||
383 | + err = net_xmit_errno(err); | ||
384 | if (err && __packet_get_status(po, ph) == | ||
385 | TP_STATUS_AVAILABLE) { | ||
386 | /* skb was destructed already */ | ||
387 | @@ -3009,8 +3010,12 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len) | ||
388 | skb->no_fcs = 1; | ||
389 | |||
390 | err = po->xmit(skb); | ||
391 | - if (err > 0 && (err = net_xmit_errno(err)) != 0) | ||
392 | - goto out_unlock; | ||
393 | + if (unlikely(err != 0)) { | ||
394 | + if (err > 0) | ||
395 | + err = net_xmit_errno(err); | ||
396 | + if (err) | ||
397 | + goto out_unlock; | ||
398 | + } | ||
399 | |||
400 | dev_put(dev); | ||
401 | |||
402 | diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c | ||
403 | index 21b0368c2a3bc..878a4fc97f042 100644 | ||
404 | --- a/sound/soc/soc-dapm.c | ||
405 | +++ b/sound/soc/soc-dapm.c | ||
406 | @@ -1569,8 +1569,7 @@ static void dapm_seq_run(struct snd_soc_card *card, | ||
407 | switch (w->id) { | ||
408 | case snd_soc_dapm_pre: | ||
409 | if (!w->event) | ||
410 | - list_for_each_entry_safe_continue(w, n, list, | ||
411 | - power_list); | ||
412 | + continue; | ||
413 | |||
414 | if (event == SND_SOC_DAPM_STREAM_START) | ||
415 | ret = w->event(w, | ||
416 | @@ -1582,8 +1581,7 @@ static void dapm_seq_run(struct snd_soc_card *card, | ||
417 | |||
418 | case snd_soc_dapm_post: | ||
419 | if (!w->event) | ||
420 | - list_for_each_entry_safe_continue(w, n, list, | ||
421 | - power_list); | ||
422 | + continue; | ||
423 | |||
424 | if (event == SND_SOC_DAPM_STREAM_START) | ||
425 | ret = w->event(w, | ||
426 | diff --git a/sound/usb/midi.c b/sound/usb/midi.c | ||
427 | index f0b41fee71304..83da676519a8d 100644 | ||
428 | --- a/sound/usb/midi.c | ||
429 | +++ b/sound/usb/midi.c | ||
430 | @@ -1210,6 +1210,7 @@ static void snd_usbmidi_output_drain(struct snd_rawmidi_substream *substream) | ||
431 | } while (drain_urbs && timeout); | ||
432 | finish_wait(&ep->drain_wait, &wait); | ||
433 | } | ||
434 | + port->active = 0; | ||
435 | spin_unlock_irq(&ep->buffer_lock); | ||
436 | } | ||
437 | |||
438 | diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h | ||
439 | index 62456a806bb4d..4b8f1c46420d4 100644 | ||
440 | --- a/sound/usb/usbaudio.h | ||
441 | +++ b/sound/usb/usbaudio.h | ||
442 | @@ -22,7 +22,7 @@ | ||
443 | */ | ||
444 | |||
445 | /* handling of USB vendor/product ID pairs as 32-bit numbers */ | ||
446 | -#define USB_ID(vendor, product) (((vendor) << 16) | (product)) | ||
447 | +#define USB_ID(vendor, product) (((unsigned int)(vendor) << 16) | (product)) | ||
448 | #define USB_ID_VENDOR(id) ((id) >> 16) | ||
449 | #define USB_ID_PRODUCT(id) ((u16)(id)) | ||
450 |