Magellan Linux

Annotation of /trunk/kernel-alx-legacy/patches-4.9/0389-4.9.290-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3691 - (hide annotations) (download)
Mon Oct 24 14:08:05 2022 UTC (18 months, 3 weeks ago) by niro
File size: 30936 byte(s)
-linux-4.9.290
1 niro 3691 diff --git a/Makefile b/Makefile
2     index 76e6507e4145f..9f1647076926d 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 289
9     +SUBLEVEL = 290
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h
14     index c10f5cb203e61..81198a6773c60 100644
15     --- a/arch/arc/include/asm/pgtable.h
16     +++ b/arch/arc/include/asm/pgtable.h
17     @@ -137,8 +137,10 @@
18    
19     #ifdef CONFIG_ARC_HAS_PAE40
20     #define PTE_BITS_NON_RWX_IN_PD1 (0xff00000000 | PAGE_MASK | _PAGE_CACHEABLE)
21     +#define MAX_POSSIBLE_PHYSMEM_BITS 40
22     #else
23     #define PTE_BITS_NON_RWX_IN_PD1 (PAGE_MASK | _PAGE_CACHEABLE)
24     +#define MAX_POSSIBLE_PHYSMEM_BITS 32
25     #endif
26    
27     /**************************************************************************
28     diff --git a/arch/arm/include/asm/pgtable-2level.h b/arch/arm/include/asm/pgtable-2level.h
29     index 92fd2c8a9af06..6154902bed83d 100644
30     --- a/arch/arm/include/asm/pgtable-2level.h
31     +++ b/arch/arm/include/asm/pgtable-2level.h
32     @@ -78,6 +78,8 @@
33     #define PTE_HWTABLE_OFF (PTE_HWTABLE_PTRS * sizeof(pte_t))
34     #define PTE_HWTABLE_SIZE (PTRS_PER_PTE * sizeof(u32))
35    
36     +#define MAX_POSSIBLE_PHYSMEM_BITS 32
37     +
38     /*
39     * PMD_SHIFT determines the size of the area a second-level page table can map
40     * PGDIR_SHIFT determines what a third-level page table entry can map
41     diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
42     index 2a029bceaf2f8..35807e611b6e0 100644
43     --- a/arch/arm/include/asm/pgtable-3level.h
44     +++ b/arch/arm/include/asm/pgtable-3level.h
45     @@ -37,6 +37,8 @@
46     #define PTE_HWTABLE_OFF (0)
47     #define PTE_HWTABLE_SIZE (PTRS_PER_PTE * sizeof(u64))
48    
49     +#define MAX_POSSIBLE_PHYSMEM_BITS 40
50     +
51     /*
52     * PGDIR_SHIFT determines the size a top-level page table entry can map.
53     */
54     diff --git a/arch/mips/include/asm/pgtable-32.h b/arch/mips/include/asm/pgtable-32.h
55     index c0be540e83cb3..2c6df5a92e1e4 100644
56     --- a/arch/mips/include/asm/pgtable-32.h
57     +++ b/arch/mips/include/asm/pgtable-32.h
58     @@ -110,6 +110,7 @@ static inline void pmd_clear(pmd_t *pmdp)
59    
60     #if defined(CONFIG_XPA)
61    
62     +#define MAX_POSSIBLE_PHYSMEM_BITS 40
63     #define pte_pfn(x) (((unsigned long)((x).pte_high >> _PFN_SHIFT)) | (unsigned long)((x).pte_low << _PAGE_PRESENT_SHIFT))
64     static inline pte_t
65     pfn_pte(unsigned long pfn, pgprot_t prot)
66     @@ -125,6 +126,7 @@ pfn_pte(unsigned long pfn, pgprot_t prot)
67    
68     #elif defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32)
69    
70     +#define MAX_POSSIBLE_PHYSMEM_BITS 36
71     #define pte_pfn(x) ((unsigned long)((x).pte_high >> 6))
72    
73     static inline pte_t pfn_pte(unsigned long pfn, pgprot_t prot)
74     @@ -139,6 +141,7 @@ static inline pte_t pfn_pte(unsigned long pfn, pgprot_t prot)
75    
76     #else
77    
78     +#define MAX_POSSIBLE_PHYSMEM_BITS 32
79     #ifdef CONFIG_CPU_VR41XX
80     #define pte_pfn(x) ((unsigned long)((x).pte >> (PAGE_SHIFT + 2)))
81     #define pfn_pte(pfn, prot) __pte(((pfn) << (PAGE_SHIFT + 2)) | pgprot_val(prot))
82     diff --git a/arch/powerpc/include/asm/pte-common.h b/arch/powerpc/include/asm/pte-common.h
83     index 4ba26dd259fd8..0d81cd9dd60e9 100644
84     --- a/arch/powerpc/include/asm/pte-common.h
85     +++ b/arch/powerpc/include/asm/pte-common.h
86     @@ -101,8 +101,10 @@ static inline bool pte_user(pte_t pte)
87     */
88     #if defined(CONFIG_PPC32) && defined(CONFIG_PTE_64BIT)
89     #define PTE_RPN_MASK (~((1ULL<<PTE_RPN_SHIFT)-1))
90     +#define MAX_POSSIBLE_PHYSMEM_BITS 36
91     #else
92     #define PTE_RPN_MASK (~((1UL<<PTE_RPN_SHIFT)-1))
93     +#define MAX_POSSIBLE_PHYSMEM_BITS 32
94     #endif
95    
96     /* _PAGE_CHG_MASK masks of bits that are to be preserved across
97     diff --git a/arch/x86/include/asm/pgtable-3level_types.h b/arch/x86/include/asm/pgtable-3level_types.h
98     index bcc89625ebe53..f3f719d59e61b 100644
99     --- a/arch/x86/include/asm/pgtable-3level_types.h
100     +++ b/arch/x86/include/asm/pgtable-3level_types.h
101     @@ -42,5 +42,6 @@ typedef union {
102     */
103     #define PTRS_PER_PTE 512
104    
105     +#define MAX_POSSIBLE_PHYSMEM_BITS 36
106    
107     #endif /* _ASM_X86_PGTABLE_3LEVEL_DEFS_H */
108     diff --git a/arch/x86/kvm/ioapic.c b/arch/x86/kvm/ioapic.c
109     index a069d0dd3ded4..aa34b16e62c24 100644
110     --- a/arch/x86/kvm/ioapic.c
111     +++ b/arch/x86/kvm/ioapic.c
112     @@ -96,7 +96,7 @@ static unsigned long ioapic_read_indirect(struct kvm_ioapic *ioapic,
113     static void rtc_irq_eoi_tracking_reset(struct kvm_ioapic *ioapic)
114     {
115     ioapic->rtc_status.pending_eoi = 0;
116     - bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID + 1);
117     + bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID);
118     }
119    
120     static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic);
121     diff --git a/arch/x86/kvm/ioapic.h b/arch/x86/kvm/ioapic.h
122     index 2f3df43489f22..1cc6e54436dba 100644
123     --- a/arch/x86/kvm/ioapic.h
124     +++ b/arch/x86/kvm/ioapic.h
125     @@ -42,13 +42,13 @@ struct kvm_vcpu;
126    
127     struct dest_map {
128     /* vcpu bitmap where IRQ has been sent */
129     - DECLARE_BITMAP(map, KVM_MAX_VCPU_ID + 1);
130     + DECLARE_BITMAP(map, KVM_MAX_VCPU_ID);
131    
132     /*
133     * Vector sent to a given vcpu, only valid when
134     * the vcpu's bit in map is set
135     */
136     - u8 vectors[KVM_MAX_VCPU_ID + 1];
137     + u8 vectors[KVM_MAX_VCPU_ID];
138     };
139    
140    
141     diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
142     index 5bc8d588d1460..22bf8133fd2af 100644
143     --- a/drivers/amba/bus.c
144     +++ b/drivers/amba/bus.c
145     @@ -356,9 +356,6 @@ static int amba_device_try_add(struct amba_device *dev, struct resource *parent)
146     void __iomem *tmp;
147     int i, ret;
148    
149     - WARN_ON(dev->irq[0] == (unsigned int)-1);
150     - WARN_ON(dev->irq[1] == (unsigned int)-1);
151     -
152     ret = request_resource(parent, &dev->res);
153     if (ret)
154     goto err_out;
155     diff --git a/drivers/infiniband/hw/qib/qib_user_sdma.c b/drivers/infiniband/hw/qib/qib_user_sdma.c
156     index 3e0677c512768..0dc15f95e7626 100644
157     --- a/drivers/infiniband/hw/qib/qib_user_sdma.c
158     +++ b/drivers/infiniband/hw/qib/qib_user_sdma.c
159     @@ -41,6 +41,7 @@
160     #include <linux/rbtree.h>
161     #include <linux/spinlock.h>
162     #include <linux/delay.h>
163     +#include <linux/overflow.h>
164    
165     #include "qib.h"
166     #include "qib_user_sdma.h"
167     @@ -606,7 +607,7 @@ done:
168     /*
169     * How many pages in this iovec element?
170     */
171     -static int qib_user_sdma_num_pages(const struct iovec *iov)
172     +static size_t qib_user_sdma_num_pages(const struct iovec *iov)
173     {
174     const unsigned long addr = (unsigned long) iov->iov_base;
175     const unsigned long len = iov->iov_len;
176     @@ -662,7 +663,7 @@ static void qib_user_sdma_free_pkt_frag(struct device *dev,
177     static int qib_user_sdma_pin_pages(const struct qib_devdata *dd,
178     struct qib_user_sdma_queue *pq,
179     struct qib_user_sdma_pkt *pkt,
180     - unsigned long addr, int tlen, int npages)
181     + unsigned long addr, int tlen, size_t npages)
182     {
183     struct page *pages[8];
184     int i, j;
185     @@ -726,7 +727,7 @@ static int qib_user_sdma_pin_pkt(const struct qib_devdata *dd,
186     unsigned long idx;
187    
188     for (idx = 0; idx < niov; idx++) {
189     - const int npages = qib_user_sdma_num_pages(iov + idx);
190     + const size_t npages = qib_user_sdma_num_pages(iov + idx);
191     const unsigned long addr = (unsigned long) iov[idx].iov_base;
192    
193     ret = qib_user_sdma_pin_pages(dd, pq, pkt, addr,
194     @@ -828,8 +829,8 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
195     unsigned pktnw;
196     unsigned pktnwc;
197     int nfrags = 0;
198     - int npages = 0;
199     - int bytes_togo = 0;
200     + size_t npages = 0;
201     + size_t bytes_togo = 0;
202     int tiddma = 0;
203     int cfur;
204    
205     @@ -889,7 +890,11 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
206    
207     npages += qib_user_sdma_num_pages(&iov[idx]);
208    
209     - bytes_togo += slen;
210     + if (check_add_overflow(bytes_togo, slen, &bytes_togo) ||
211     + bytes_togo > type_max(typeof(pkt->bytes_togo))) {
212     + ret = -EINVAL;
213     + goto free_pbc;
214     + }
215     pktnwc += slen >> 2;
216     idx++;
217     nfrags++;
218     @@ -908,10 +913,10 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
219     }
220    
221     if (frag_size) {
222     - int pktsize, tidsmsize, n;
223     + size_t tidsmsize, n, pktsize, sz, addrlimit;
224    
225     n = npages*((2*PAGE_SIZE/frag_size)+1);
226     - pktsize = sizeof(*pkt) + sizeof(pkt->addr[0])*n;
227     + pktsize = struct_size(pkt, addr, n);
228    
229     /*
230     * Determine if this is tid-sdma or just sdma.
231     @@ -926,14 +931,24 @@ static int qib_user_sdma_queue_pkts(const struct qib_devdata *dd,
232     else
233     tidsmsize = 0;
234    
235     - pkt = kmalloc(pktsize+tidsmsize, GFP_KERNEL);
236     + if (check_add_overflow(pktsize, tidsmsize, &sz)) {
237     + ret = -EINVAL;
238     + goto free_pbc;
239     + }
240     + pkt = kmalloc(sz, GFP_KERNEL);
241     if (!pkt) {
242     ret = -ENOMEM;
243     goto free_pbc;
244     }
245     pkt->largepkt = 1;
246     pkt->frag_size = frag_size;
247     - pkt->addrlimit = n + ARRAY_SIZE(pkt->addr);
248     + if (check_add_overflow(n, ARRAY_SIZE(pkt->addr),
249     + &addrlimit) ||
250     + addrlimit > type_max(typeof(pkt->addrlimit))) {
251     + ret = -EINVAL;
252     + goto free_pbc;
253     + }
254     + pkt->addrlimit = addrlimit;
255    
256     if (tiddma) {
257     char *tidsm = (char *)pkt + pktsize;
258     diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
259     index bde19425e9c10..a3a3d4b40a7cc 100644
260     --- a/drivers/net/usb/hso.c
261     +++ b/drivers/net/usb/hso.c
262     @@ -2512,7 +2512,7 @@ static struct hso_device *hso_create_net_device(struct usb_interface *interface,
263     hso_net_init);
264     if (!net) {
265     dev_err(&interface->dev, "Unable to create ethernet device\n");
266     - goto exit;
267     + goto err_hso_dev;
268     }
269    
270     hso_net = netdev_priv(net);
271     @@ -2525,50 +2525,63 @@ static struct hso_device *hso_create_net_device(struct usb_interface *interface,
272     USB_DIR_IN);
273     if (!hso_net->in_endp) {
274     dev_err(&interface->dev, "Can't find BULK IN endpoint\n");
275     - goto exit;
276     + goto err_net;
277     }
278     hso_net->out_endp = hso_get_ep(interface, USB_ENDPOINT_XFER_BULK,
279     USB_DIR_OUT);
280     if (!hso_net->out_endp) {
281     dev_err(&interface->dev, "Can't find BULK OUT endpoint\n");
282     - goto exit;
283     + goto err_net;
284     }
285     SET_NETDEV_DEV(net, &interface->dev);
286     SET_NETDEV_DEVTYPE(net, &hso_type);
287    
288     - /* registering our net device */
289     - result = register_netdev(net);
290     - if (result) {
291     - dev_err(&interface->dev, "Failed to register device\n");
292     - goto exit;
293     - }
294     -
295     /* start allocating */
296     for (i = 0; i < MUX_BULK_RX_BUF_COUNT; i++) {
297     hso_net->mux_bulk_rx_urb_pool[i] = usb_alloc_urb(0, GFP_KERNEL);
298     if (!hso_net->mux_bulk_rx_urb_pool[i])
299     - goto exit;
300     + goto err_mux_bulk_rx;
301     hso_net->mux_bulk_rx_buf_pool[i] = kzalloc(MUX_BULK_RX_BUF_SIZE,
302     GFP_KERNEL);
303     if (!hso_net->mux_bulk_rx_buf_pool[i])
304     - goto exit;
305     + goto err_mux_bulk_rx;
306     }
307     hso_net->mux_bulk_tx_urb = usb_alloc_urb(0, GFP_KERNEL);
308     if (!hso_net->mux_bulk_tx_urb)
309     - goto exit;
310     + goto err_mux_bulk_rx;
311     hso_net->mux_bulk_tx_buf = kzalloc(MUX_BULK_TX_BUF_SIZE, GFP_KERNEL);
312     if (!hso_net->mux_bulk_tx_buf)
313     - goto exit;
314     + goto err_free_tx_urb;
315    
316     add_net_device(hso_dev);
317    
318     + /* registering our net device */
319     + result = register_netdev(net);
320     + if (result) {
321     + dev_err(&interface->dev, "Failed to register device\n");
322     + goto err_free_tx_buf;
323     + }
324     +
325     hso_log_port(hso_dev);
326    
327     hso_create_rfkill(hso_dev, interface);
328    
329     return hso_dev;
330     -exit:
331     - hso_free_net_device(hso_dev);
332     +
333     +err_free_tx_buf:
334     + remove_net_device(hso_dev);
335     + kfree(hso_net->mux_bulk_tx_buf);
336     +err_free_tx_urb:
337     + usb_free_urb(hso_net->mux_bulk_tx_urb);
338     +err_mux_bulk_rx:
339     + for (i = 0; i < MUX_BULK_RX_BUF_COUNT; i++) {
340     + usb_free_urb(hso_net->mux_bulk_rx_urb_pool[i]);
341     + kfree(hso_net->mux_bulk_rx_buf_pool[i]);
342     + }
343     +err_net:
344     + free_netdev(net);
345     +err_hso_dev:
346     + kfree(hso_dev);
347     return NULL;
348     }
349    
350     diff --git a/drivers/net/wireless/rsi/rsi_91x_usb.c b/drivers/net/wireless/rsi/rsi_91x_usb.c
351     index 974387ad1e8c5..83cbaac877ea3 100644
352     --- a/drivers/net/wireless/rsi/rsi_91x_usb.c
353     +++ b/drivers/net/wireless/rsi/rsi_91x_usb.c
354     @@ -42,7 +42,7 @@ static int rsi_usb_card_write(struct rsi_hw *adapter,
355     buf,
356     len,
357     &transfer,
358     - HZ * 5);
359     + USB_CTRL_SET_TIMEOUT);
360    
361     if (status < 0) {
362     rsi_dbg(ERR_ZONE,
363     diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
364     index 1deb6adc411f7..4c9c1a8db8c30 100644
365     --- a/drivers/scsi/scsi.c
366     +++ b/drivers/scsi/scsi.c
367     @@ -951,8 +951,10 @@ EXPORT_SYMBOL(scsi_device_get);
368     */
369     void scsi_device_put(struct scsi_device *sdev)
370     {
371     - module_put(sdev->host->hostt->module);
372     + struct module *mod = sdev->host->hostt->module;
373     +
374     put_device(&sdev->sdev_gendev);
375     + module_put(mod);
376     }
377     EXPORT_SYMBOL(scsi_device_put);
378    
379     diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
380     index 38830818bfb6f..eae43a85e9b0e 100644
381     --- a/drivers/scsi/scsi_sysfs.c
382     +++ b/drivers/scsi/scsi_sysfs.c
383     @@ -427,9 +427,12 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work)
384     struct device *parent;
385     struct list_head *this, *tmp;
386     unsigned long flags;
387     + struct module *mod;
388    
389     sdev = container_of(work, struct scsi_device, ew.work);
390    
391     + mod = sdev->host->hostt->module;
392     +
393     scsi_dh_release_device(sdev);
394    
395     parent = sdev->sdev_gendev.parent;
396     @@ -461,11 +464,17 @@ static void scsi_device_dev_release_usercontext(struct work_struct *work)
397    
398     if (parent)
399     put_device(parent);
400     + module_put(mod);
401     }
402    
403     static void scsi_device_dev_release(struct device *dev)
404     {
405     struct scsi_device *sdp = to_scsi_device(dev);
406     +
407     + /* Set module pointer as NULL in case of module unloading */
408     + if (!try_module_get(sdp->host->hostt->module))
409     + sdp->host->hostt->module = NULL;
410     +
411     execute_in_process_context(scsi_device_dev_release_usercontext,
412     &sdp->ew);
413     }
414     diff --git a/drivers/staging/comedi/drivers/dt9812.c b/drivers/staging/comedi/drivers/dt9812.c
415     index 7ebca862ecaa3..e758eb3d2d19f 100644
416     --- a/drivers/staging/comedi/drivers/dt9812.c
417     +++ b/drivers/staging/comedi/drivers/dt9812.c
418     @@ -41,6 +41,7 @@
419     #include <linux/kernel.h>
420     #include <linux/module.h>
421     #include <linux/errno.h>
422     +#include <linux/slab.h>
423     #include <linux/uaccess.h>
424    
425     #include "../comedi_usb.h"
426     @@ -246,22 +247,42 @@ static int dt9812_read_info(struct comedi_device *dev,
427     {
428     struct usb_device *usb = comedi_to_usb_dev(dev);
429     struct dt9812_private *devpriv = dev->private;
430     - struct dt9812_usb_cmd cmd;
431     + struct dt9812_usb_cmd *cmd;
432     + size_t tbuf_size;
433     int count, ret;
434     + void *tbuf;
435    
436     - cmd.cmd = cpu_to_le32(DT9812_R_FLASH_DATA);
437     - cmd.u.flash_data_info.address =
438     + tbuf_size = max(sizeof(*cmd), buf_size);
439     +
440     + tbuf = kzalloc(tbuf_size, GFP_KERNEL);
441     + if (!tbuf)
442     + return -ENOMEM;
443     +
444     + cmd = tbuf;
445     +
446     + cmd->cmd = cpu_to_le32(DT9812_R_FLASH_DATA);
447     + cmd->u.flash_data_info.address =
448     cpu_to_le16(DT9812_DIAGS_BOARD_INFO_ADDR + offset);
449     - cmd.u.flash_data_info.numbytes = cpu_to_le16(buf_size);
450     + cmd->u.flash_data_info.numbytes = cpu_to_le16(buf_size);
451    
452     /* DT9812 only responds to 32 byte writes!! */
453     ret = usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
454     - &cmd, 32, &count, DT9812_USB_TIMEOUT);
455     + cmd, sizeof(*cmd), &count, DT9812_USB_TIMEOUT);
456     if (ret)
457     - return ret;
458     + goto out;
459     +
460     + ret = usb_bulk_msg(usb, usb_rcvbulkpipe(usb, devpriv->cmd_rd.addr),
461     + tbuf, buf_size, &count, DT9812_USB_TIMEOUT);
462     + if (!ret) {
463     + if (count == buf_size)
464     + memcpy(buf, tbuf, buf_size);
465     + else
466     + ret = -EREMOTEIO;
467     + }
468     +out:
469     + kfree(tbuf);
470    
471     - return usb_bulk_msg(usb, usb_rcvbulkpipe(usb, devpriv->cmd_rd.addr),
472     - buf, buf_size, &count, DT9812_USB_TIMEOUT);
473     + return ret;
474     }
475    
476     static int dt9812_read_multiple_registers(struct comedi_device *dev,
477     @@ -270,22 +291,42 @@ static int dt9812_read_multiple_registers(struct comedi_device *dev,
478     {
479     struct usb_device *usb = comedi_to_usb_dev(dev);
480     struct dt9812_private *devpriv = dev->private;
481     - struct dt9812_usb_cmd cmd;
482     + struct dt9812_usb_cmd *cmd;
483     int i, count, ret;
484     + size_t buf_size;
485     + void *buf;
486    
487     - cmd.cmd = cpu_to_le32(DT9812_R_MULTI_BYTE_REG);
488     - cmd.u.read_multi_info.count = reg_count;
489     + buf_size = max_t(size_t, sizeof(*cmd), reg_count);
490     +
491     + buf = kzalloc(buf_size, GFP_KERNEL);
492     + if (!buf)
493     + return -ENOMEM;
494     +
495     + cmd = buf;
496     +
497     + cmd->cmd = cpu_to_le32(DT9812_R_MULTI_BYTE_REG);
498     + cmd->u.read_multi_info.count = reg_count;
499     for (i = 0; i < reg_count; i++)
500     - cmd.u.read_multi_info.address[i] = address[i];
501     + cmd->u.read_multi_info.address[i] = address[i];
502    
503     /* DT9812 only responds to 32 byte writes!! */
504     ret = usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
505     - &cmd, 32, &count, DT9812_USB_TIMEOUT);
506     + cmd, sizeof(*cmd), &count, DT9812_USB_TIMEOUT);
507     if (ret)
508     - return ret;
509     + goto out;
510     +
511     + ret = usb_bulk_msg(usb, usb_rcvbulkpipe(usb, devpriv->cmd_rd.addr),
512     + buf, reg_count, &count, DT9812_USB_TIMEOUT);
513     + if (!ret) {
514     + if (count == reg_count)
515     + memcpy(value, buf, reg_count);
516     + else
517     + ret = -EREMOTEIO;
518     + }
519     +out:
520     + kfree(buf);
521    
522     - return usb_bulk_msg(usb, usb_rcvbulkpipe(usb, devpriv->cmd_rd.addr),
523     - value, reg_count, &count, DT9812_USB_TIMEOUT);
524     + return ret;
525     }
526    
527     static int dt9812_write_multiple_registers(struct comedi_device *dev,
528     @@ -294,19 +335,27 @@ static int dt9812_write_multiple_registers(struct comedi_device *dev,
529     {
530     struct usb_device *usb = comedi_to_usb_dev(dev);
531     struct dt9812_private *devpriv = dev->private;
532     - struct dt9812_usb_cmd cmd;
533     + struct dt9812_usb_cmd *cmd;
534     int i, count;
535     + int ret;
536     +
537     + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
538     + if (!cmd)
539     + return -ENOMEM;
540    
541     - cmd.cmd = cpu_to_le32(DT9812_W_MULTI_BYTE_REG);
542     - cmd.u.read_multi_info.count = reg_count;
543     + cmd->cmd = cpu_to_le32(DT9812_W_MULTI_BYTE_REG);
544     + cmd->u.read_multi_info.count = reg_count;
545     for (i = 0; i < reg_count; i++) {
546     - cmd.u.write_multi_info.write[i].address = address[i];
547     - cmd.u.write_multi_info.write[i].value = value[i];
548     + cmd->u.write_multi_info.write[i].address = address[i];
549     + cmd->u.write_multi_info.write[i].value = value[i];
550     }
551    
552     /* DT9812 only responds to 32 byte writes!! */
553     - return usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
554     - &cmd, 32, &count, DT9812_USB_TIMEOUT);
555     + ret = usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
556     + cmd, sizeof(*cmd), &count, DT9812_USB_TIMEOUT);
557     + kfree(cmd);
558     +
559     + return ret;
560     }
561    
562     static int dt9812_rmw_multiple_registers(struct comedi_device *dev,
563     @@ -315,17 +364,25 @@ static int dt9812_rmw_multiple_registers(struct comedi_device *dev,
564     {
565     struct usb_device *usb = comedi_to_usb_dev(dev);
566     struct dt9812_private *devpriv = dev->private;
567     - struct dt9812_usb_cmd cmd;
568     + struct dt9812_usb_cmd *cmd;
569     int i, count;
570     + int ret;
571     +
572     + cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
573     + if (!cmd)
574     + return -ENOMEM;
575    
576     - cmd.cmd = cpu_to_le32(DT9812_RMW_MULTI_BYTE_REG);
577     - cmd.u.rmw_multi_info.count = reg_count;
578     + cmd->cmd = cpu_to_le32(DT9812_RMW_MULTI_BYTE_REG);
579     + cmd->u.rmw_multi_info.count = reg_count;
580     for (i = 0; i < reg_count; i++)
581     - cmd.u.rmw_multi_info.rmw[i] = rmw[i];
582     + cmd->u.rmw_multi_info.rmw[i] = rmw[i];
583    
584     /* DT9812 only responds to 32 byte writes!! */
585     - return usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
586     - &cmd, 32, &count, DT9812_USB_TIMEOUT);
587     + ret = usb_bulk_msg(usb, usb_sndbulkpipe(usb, devpriv->cmd_wr.addr),
588     + cmd, sizeof(*cmd), &count, DT9812_USB_TIMEOUT);
589     + kfree(cmd);
590     +
591     + return ret;
592     }
593    
594     static int dt9812_digital_in(struct comedi_device *dev, u8 *bits)
595     diff --git a/drivers/staging/comedi/drivers/ni_usb6501.c b/drivers/staging/comedi/drivers/ni_usb6501.c
596     index 2f174a34d9e9b..7f647d80ec050 100644
597     --- a/drivers/staging/comedi/drivers/ni_usb6501.c
598     +++ b/drivers/staging/comedi/drivers/ni_usb6501.c
599     @@ -153,6 +153,10 @@ static const u8 READ_COUNTER_RESPONSE[] = {0x00, 0x01, 0x00, 0x10,
600     0x00, 0x00, 0x00, 0x02,
601     0x00, 0x00, 0x00, 0x00};
602    
603     +/* Largest supported packets */
604     +static const size_t TX_MAX_SIZE = sizeof(SET_PORT_DIR_REQUEST);
605     +static const size_t RX_MAX_SIZE = sizeof(READ_PORT_RESPONSE);
606     +
607     enum commands {
608     READ_PORT,
609     WRITE_PORT,
610     @@ -510,6 +514,12 @@ static int ni6501_find_endpoints(struct comedi_device *dev)
611     if (!devpriv->ep_rx || !devpriv->ep_tx)
612     return -ENODEV;
613    
614     + if (usb_endpoint_maxp(devpriv->ep_rx) < RX_MAX_SIZE)
615     + return -ENODEV;
616     +
617     + if (usb_endpoint_maxp(devpriv->ep_tx) < TX_MAX_SIZE)
618     + return -ENODEV;
619     +
620     return 0;
621     }
622    
623     diff --git a/drivers/staging/comedi/drivers/vmk80xx.c b/drivers/staging/comedi/drivers/vmk80xx.c
624     index cdf86284dd047..36470ee065967 100644
625     --- a/drivers/staging/comedi/drivers/vmk80xx.c
626     +++ b/drivers/staging/comedi/drivers/vmk80xx.c
627     @@ -99,6 +99,9 @@ enum {
628     #define IC3_VERSION BIT(0)
629     #define IC6_VERSION BIT(1)
630    
631     +#define MIN_BUF_SIZE 64
632     +#define PACKET_TIMEOUT 10000 /* ms */
633     +
634     enum vmk80xx_model {
635     VMK8055_MODEL,
636     VMK8061_MODEL
637     @@ -166,22 +169,21 @@ static void vmk80xx_do_bulk_msg(struct comedi_device *dev)
638     __u8 rx_addr;
639     unsigned int tx_pipe;
640     unsigned int rx_pipe;
641     - size_t size;
642     + size_t tx_size;
643     + size_t rx_size;
644    
645     tx_addr = devpriv->ep_tx->bEndpointAddress;
646     rx_addr = devpriv->ep_rx->bEndpointAddress;
647     tx_pipe = usb_sndbulkpipe(usb, tx_addr);
648     rx_pipe = usb_rcvbulkpipe(usb, rx_addr);
649     + tx_size = usb_endpoint_maxp(devpriv->ep_tx);
650     + rx_size = usb_endpoint_maxp(devpriv->ep_rx);
651    
652     - /*
653     - * The max packet size attributes of the K8061
654     - * input/output endpoints are identical
655     - */
656     - size = usb_endpoint_maxp(devpriv->ep_tx);
657     + usb_bulk_msg(usb, tx_pipe, devpriv->usb_tx_buf, tx_size, NULL,
658     + PACKET_TIMEOUT);
659    
660     - usb_bulk_msg(usb, tx_pipe, devpriv->usb_tx_buf,
661     - size, NULL, devpriv->ep_tx->bInterval);
662     - usb_bulk_msg(usb, rx_pipe, devpriv->usb_rx_buf, size, NULL, HZ * 10);
663     + usb_bulk_msg(usb, rx_pipe, devpriv->usb_rx_buf, rx_size, NULL,
664     + PACKET_TIMEOUT);
665     }
666    
667     static int vmk80xx_read_packet(struct comedi_device *dev)
668     @@ -200,7 +202,7 @@ static int vmk80xx_read_packet(struct comedi_device *dev)
669     pipe = usb_rcvintpipe(usb, ep->bEndpointAddress);
670     return usb_interrupt_msg(usb, pipe, devpriv->usb_rx_buf,
671     usb_endpoint_maxp(ep), NULL,
672     - HZ * 10);
673     + PACKET_TIMEOUT);
674     }
675    
676     static int vmk80xx_write_packet(struct comedi_device *dev, int cmd)
677     @@ -221,7 +223,7 @@ static int vmk80xx_write_packet(struct comedi_device *dev, int cmd)
678     pipe = usb_sndintpipe(usb, ep->bEndpointAddress);
679     return usb_interrupt_msg(usb, pipe, devpriv->usb_tx_buf,
680     usb_endpoint_maxp(ep), NULL,
681     - HZ * 10);
682     + PACKET_TIMEOUT);
683     }
684    
685     static int vmk80xx_reset_device(struct comedi_device *dev)
686     @@ -687,12 +689,12 @@ static int vmk80xx_alloc_usb_buffers(struct comedi_device *dev)
687     struct vmk80xx_private *devpriv = dev->private;
688     size_t size;
689    
690     - size = usb_endpoint_maxp(devpriv->ep_rx);
691     + size = max(usb_endpoint_maxp(devpriv->ep_rx), MIN_BUF_SIZE);
692     devpriv->usb_rx_buf = kzalloc(size, GFP_KERNEL);
693     if (!devpriv->usb_rx_buf)
694     return -ENOMEM;
695    
696     - size = usb_endpoint_maxp(devpriv->ep_tx);
697     + size = max(usb_endpoint_maxp(devpriv->ep_rx), MIN_BUF_SIZE);
698     devpriv->usb_tx_buf = kzalloc(size, GFP_KERNEL);
699     if (!devpriv->usb_tx_buf)
700     return -ENOMEM;
701     diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c
702     index 53b77c8ae328a..95cbf7cf55e61 100644
703     --- a/drivers/staging/rtl8192u/r8192U_core.c
704     +++ b/drivers/staging/rtl8192u/r8192U_core.c
705     @@ -266,7 +266,7 @@ int write_nic_byte_E(struct net_device *dev, int indx, u8 data)
706    
707     status = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
708     RTL8187_REQ_SET_REGS, RTL8187_REQT_WRITE,
709     - indx | 0xfe00, 0, usbdata, 1, HZ / 2);
710     + indx | 0xfe00, 0, usbdata, 1, 500);
711     kfree(usbdata);
712    
713     if (status < 0){
714     @@ -289,7 +289,7 @@ int read_nic_byte_E(struct net_device *dev, int indx, u8 *data)
715    
716     status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
717     RTL8187_REQ_GET_REGS, RTL8187_REQT_READ,
718     - indx | 0xfe00, 0, usbdata, 1, HZ / 2);
719     + indx | 0xfe00, 0, usbdata, 1, 500);
720     *data = *usbdata;
721     kfree(usbdata);
722    
723     @@ -317,7 +317,7 @@ int write_nic_byte(struct net_device *dev, int indx, u8 data)
724     status = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
725     RTL8187_REQ_SET_REGS, RTL8187_REQT_WRITE,
726     (indx & 0xff) | 0xff00, (indx >> 8) & 0x0f,
727     - usbdata, 1, HZ / 2);
728     + usbdata, 1, 500);
729     kfree(usbdata);
730    
731     if (status < 0) {
732     @@ -344,7 +344,7 @@ int write_nic_word(struct net_device *dev, int indx, u16 data)
733     status = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
734     RTL8187_REQ_SET_REGS, RTL8187_REQT_WRITE,
735     (indx & 0xff) | 0xff00, (indx >> 8) & 0x0f,
736     - usbdata, 2, HZ / 2);
737     + usbdata, 2, 500);
738     kfree(usbdata);
739    
740     if (status < 0) {
741     @@ -371,7 +371,7 @@ int write_nic_dword(struct net_device *dev, int indx, u32 data)
742     status = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
743     RTL8187_REQ_SET_REGS, RTL8187_REQT_WRITE,
744     (indx & 0xff) | 0xff00, (indx >> 8) & 0x0f,
745     - usbdata, 4, HZ / 2);
746     + usbdata, 4, 500);
747     kfree(usbdata);
748    
749    
750     @@ -399,7 +399,7 @@ int read_nic_byte(struct net_device *dev, int indx, u8 *data)
751     status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
752     RTL8187_REQ_GET_REGS, RTL8187_REQT_READ,
753     (indx & 0xff) | 0xff00, (indx >> 8) & 0x0f,
754     - usbdata, 1, HZ / 2);
755     + usbdata, 1, 500);
756     *data = *usbdata;
757     kfree(usbdata);
758    
759     @@ -426,7 +426,7 @@ int read_nic_word(struct net_device *dev, int indx, u16 *data)
760     status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
761     RTL8187_REQ_GET_REGS, RTL8187_REQT_READ,
762     (indx & 0xff) | 0xff00, (indx >> 8) & 0x0f,
763     - usbdata, 2, HZ / 2);
764     + usbdata, 2, 500);
765     *data = *usbdata;
766     kfree(usbdata);
767    
768     @@ -450,7 +450,7 @@ static int read_nic_word_E(struct net_device *dev, int indx, u16 *data)
769    
770     status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
771     RTL8187_REQ_GET_REGS, RTL8187_REQT_READ,
772     - indx | 0xfe00, 0, usbdata, 2, HZ / 2);
773     + indx | 0xfe00, 0, usbdata, 2, 500);
774     *data = *usbdata;
775     kfree(usbdata);
776    
777     @@ -476,7 +476,7 @@ int read_nic_dword(struct net_device *dev, int indx, u32 *data)
778     status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
779     RTL8187_REQ_GET_REGS, RTL8187_REQT_READ,
780     (indx & 0xff) | 0xff00, (indx >> 8) & 0x0f,
781     - usbdata, 4, HZ / 2);
782     + usbdata, 4, 500);
783     *data = *usbdata;
784     kfree(usbdata);
785    
786     diff --git a/drivers/staging/rtl8712/usb_ops_linux.c b/drivers/staging/rtl8712/usb_ops_linux.c
787     index fc6bb0be2a28c..2919498fd8089 100644
788     --- a/drivers/staging/rtl8712/usb_ops_linux.c
789     +++ b/drivers/staging/rtl8712/usb_ops_linux.c
790     @@ -504,7 +504,7 @@ int r8712_usbctrl_vendorreq(struct intf_priv *pintfpriv, u8 request, u16 value,
791     memcpy(pIo_buf, pdata, len);
792     }
793     status = usb_control_msg(udev, pipe, request, reqtype, value, index,
794     - pIo_buf, len, HZ / 2);
795     + pIo_buf, len, 500);
796     if (status > 0) { /* Success this control transfer. */
797     if (requesttype == 0x01) {
798     /* For Control read transfer, we have to copy the read
799     diff --git a/drivers/usb/gadget/udc/Kconfig b/drivers/usb/gadget/udc/Kconfig
800     index 658b8da609152..cff7dae51aabb 100644
801     --- a/drivers/usb/gadget/udc/Kconfig
802     +++ b/drivers/usb/gadget/udc/Kconfig
803     @@ -278,6 +278,7 @@ config USB_AMD5536UDC
804     config USB_FSL_QE
805     tristate "Freescale QE/CPM USB Device Controller"
806     depends on FSL_SOC && (QUICC_ENGINE || CPM)
807     + depends on !64BIT || BROKEN
808     help
809     Some of Freescale PowerPC processors have a Full Speed
810     QE/CPM2 USB controller, which support device mode with 4
811     diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
812     index 60540a8ac431d..8eb3a291ca9d8 100644
813     --- a/drivers/usb/musb/musb_gadget.c
814     +++ b/drivers/usb/musb/musb_gadget.c
815     @@ -1284,9 +1284,11 @@ static int musb_gadget_queue(struct usb_ep *ep, struct usb_request *req,
816     status = musb_queue_resume_work(musb,
817     musb_ep_restart_resume_work,
818     request);
819     - if (status < 0)
820     + if (status < 0) {
821     dev_err(musb->controller, "%s resume work: %i\n",
822     __func__, status);
823     + list_del(&request->list);
824     + }
825     }
826    
827     unlock:
828     diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
829     index ed94496cdc5b3..ec2b7f5c900c2 100644
830     --- a/drivers/usb/storage/unusual_devs.h
831     +++ b/drivers/usb/storage/unusual_devs.h
832     @@ -425,6 +425,16 @@ UNUSUAL_DEV( 0x04b8, 0x0602, 0x0110, 0x0110,
833     "785EPX Storage",
834     USB_SC_SCSI, USB_PR_BULK, NULL, US_FL_SINGLE_LUN),
835    
836     +/*
837     + * Reported by James Buren <braewoods+lkml@braewoods.net>
838     + * Virtual ISOs cannot be remounted if ejected while the device is locked
839     + * Disable locking to mimic Windows behavior that bypasses the issue
840     + */
841     +UNUSUAL_DEV( 0x04c5, 0x2028, 0x0001, 0x0001,
842     + "iODD",
843     + "2531/2541",
844     + USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NOT_LOCKABLE),
845     +
846     /*
847     * Not sure who reported this originally but
848     * Pavel Machek <pavel@ucw.cz> reported that the extra US_FL_SINGLE_LUN
849     diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
850     index 871c8b3920991..2d1d41c94e376 100644
851     --- a/fs/isofs/inode.c
852     +++ b/fs/isofs/inode.c
853     @@ -1265,6 +1265,8 @@ static int isofs_read_inode(struct inode *inode, int relocated)
854    
855     de = (struct iso_directory_record *) (bh->b_data + offset);
856     de_len = *(unsigned char *) de;
857     + if (de_len < sizeof(struct iso_directory_record))
858     + goto fail;
859    
860     if (offset + de_len > bufsize) {
861     int frag1 = bufsize - offset;
862     diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
863     index 0a4c2d4d9f8d5..b43fa9d95a7a6 100644
864     --- a/include/asm-generic/pgtable.h
865     +++ b/include/asm-generic/pgtable.h
866     @@ -847,6 +847,19 @@ static inline bool arch_has_pfn_modify_check(void)
867     #define io_remap_pfn_range remap_pfn_range
868     #endif
869    
870     +#if !defined(MAX_POSSIBLE_PHYSMEM_BITS) && !defined(CONFIG_64BIT)
871     +#ifdef CONFIG_PHYS_ADDR_T_64BIT
872     +/*
873     + * ZSMALLOC needs to know the highest PFN on 32-bit architectures
874     + * with physical address space extension, but falls back to
875     + * BITS_PER_LONG otherwise.
876     + */
877     +#error Missing MAX_POSSIBLE_PHYSMEM_BITS definition
878     +#else
879     +#define MAX_POSSIBLE_PHYSMEM_BITS 32
880     +#endif
881     +#endif
882     +
883     #ifndef has_transparent_hugepage
884     #ifdef CONFIG_TRANSPARENT_HUGEPAGE
885     #define has_transparent_hugepage() 1
886     diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
887     index 7acae2f2478d9..9c17a26555512 100644
888     --- a/kernel/printk/printk.c
889     +++ b/kernel/printk/printk.c
890     @@ -2035,8 +2035,15 @@ static int __init console_setup(char *str)
891     char *s, *options, *brl_options = NULL;
892     int idx;
893    
894     - if (str[0] == 0)
895     + /*
896     + * console="" or console=null have been suggested as a way to
897     + * disable console output. Use ttynull that has been created
898     + * for exacly this purpose.
899     + */
900     + if (str[0] == 0 || strcmp(str, "null") == 0) {
901     + __add_preferred_console("ttynull", 0, NULL, NULL);
902     return 1;
903     + }
904    
905     if (_braille_console_setup(&str, &brl_options))
906     return 1;
907     diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c
908     index 8db3c2b27a175..2b7bfd97587a0 100644
909     --- a/mm/zsmalloc.c
910     +++ b/mm/zsmalloc.c
911     @@ -83,18 +83,19 @@
912     * This is made more complicated by various memory models and PAE.
913     */
914    
915     -#ifndef MAX_PHYSMEM_BITS
916     -#ifdef CONFIG_HIGHMEM64G
917     -#define MAX_PHYSMEM_BITS 36
918     -#else /* !CONFIG_HIGHMEM64G */
919     +#ifndef MAX_POSSIBLE_PHYSMEM_BITS
920     +#ifdef MAX_PHYSMEM_BITS
921     +#define MAX_POSSIBLE_PHYSMEM_BITS MAX_PHYSMEM_BITS
922     +#else
923     /*
924     * If this definition of MAX_PHYSMEM_BITS is used, OBJ_INDEX_BITS will just
925     * be PAGE_SHIFT
926     */
927     -#define MAX_PHYSMEM_BITS BITS_PER_LONG
928     +#define MAX_POSSIBLE_PHYSMEM_BITS BITS_PER_LONG
929     #endif
930     #endif
931     -#define _PFN_BITS (MAX_PHYSMEM_BITS - PAGE_SHIFT)
932     +
933     +#define _PFN_BITS (MAX_POSSIBLE_PHYSMEM_BITS - PAGE_SHIFT)
934    
935     /*
936     * Memory for allocating for handle keeps object position by