Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.14/0101-4.14.2-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3028 - (hide annotations) (download)
Tue Nov 28 13:16:20 2017 UTC (6 years, 6 months ago) by niro
File size: 19682 byte(s)
-linux-4.14.2
1 niro 3028 diff --git a/Makefile b/Makefile
2     index 01f9df1af256..75d89dc2b94a 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 4
8     PATCHLEVEL = 14
9     -SUBLEVEL = 1
10     +SUBLEVEL = 2
11     EXTRAVERSION =
12     NAME = Petit Gorille
13    
14     diff --git a/block/bio.c b/block/bio.c
15     index 101c2a9b5481..33fa6b4af312 100644
16     --- a/block/bio.c
17     +++ b/block/bio.c
18     @@ -597,6 +597,7 @@ void __bio_clone_fast(struct bio *bio, struct bio *bio_src)
19     * so we don't set nor calculate new physical/hw segment counts here
20     */
21     bio->bi_disk = bio_src->bi_disk;
22     + bio->bi_partno = bio_src->bi_partno;
23     bio_set_flag(bio, BIO_CLONED);
24     bio->bi_opf = bio_src->bi_opf;
25     bio->bi_write_hint = bio_src->bi_write_hint;
26     diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
27     index 810b138f5897..c82d9fd2f05a 100644
28     --- a/drivers/char/ipmi/ipmi_msghandler.c
29     +++ b/drivers/char/ipmi/ipmi_msghandler.c
30     @@ -4030,7 +4030,8 @@ smi_from_recv_msg(ipmi_smi_t intf, struct ipmi_recv_msg *recv_msg,
31     }
32    
33     static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
34     - struct list_head *timeouts, long timeout_period,
35     + struct list_head *timeouts,
36     + unsigned long timeout_period,
37     int slot, unsigned long *flags,
38     unsigned int *waiting_msgs)
39     {
40     @@ -4043,8 +4044,8 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
41     if (!ent->inuse)
42     return;
43    
44     - ent->timeout -= timeout_period;
45     - if (ent->timeout > 0) {
46     + if (timeout_period < ent->timeout) {
47     + ent->timeout -= timeout_period;
48     (*waiting_msgs)++;
49     return;
50     }
51     @@ -4110,7 +4111,8 @@ static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
52     }
53     }
54    
55     -static unsigned int ipmi_timeout_handler(ipmi_smi_t intf, long timeout_period)
56     +static unsigned int ipmi_timeout_handler(ipmi_smi_t intf,
57     + unsigned long timeout_period)
58     {
59     struct list_head timeouts;
60     struct ipmi_recv_msg *msg, *msg2;
61     diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
62     index 36f47e8d06a3..bc3984ffe867 100644
63     --- a/drivers/char/ipmi/ipmi_si_intf.c
64     +++ b/drivers/char/ipmi/ipmi_si_intf.c
65     @@ -3424,7 +3424,7 @@ static inline void wait_for_timer_and_thread(struct smi_info *smi_info)
66     del_timer_sync(&smi_info->si_timer);
67     }
68    
69     -static int is_new_interface(struct smi_info *info)
70     +static struct smi_info *find_dup_si(struct smi_info *info)
71     {
72     struct smi_info *e;
73    
74     @@ -3439,24 +3439,36 @@ static int is_new_interface(struct smi_info *info)
75     */
76     if (info->slave_addr && !e->slave_addr)
77     e->slave_addr = info->slave_addr;
78     - return 0;
79     + return e;
80     }
81     }
82    
83     - return 1;
84     + return NULL;
85     }
86    
87     static int add_smi(struct smi_info *new_smi)
88     {
89     int rv = 0;
90     + struct smi_info *dup;
91    
92     mutex_lock(&smi_infos_lock);
93     - if (!is_new_interface(new_smi)) {
94     - pr_info(PFX "%s-specified %s state machine: duplicate\n",
95     - ipmi_addr_src_to_str(new_smi->addr_source),
96     - si_to_str[new_smi->si_type]);
97     - rv = -EBUSY;
98     - goto out_err;
99     + dup = find_dup_si(new_smi);
100     + if (dup) {
101     + if (new_smi->addr_source == SI_ACPI &&
102     + dup->addr_source == SI_SMBIOS) {
103     + /* We prefer ACPI over SMBIOS. */
104     + dev_info(dup->dev,
105     + "Removing SMBIOS-specified %s state machine in favor of ACPI\n",
106     + si_to_str[new_smi->si_type]);
107     + cleanup_one_si(dup);
108     + } else {
109     + dev_info(new_smi->dev,
110     + "%s-specified %s state machine: duplicate\n",
111     + ipmi_addr_src_to_str(new_smi->addr_source),
112     + si_to_str[new_smi->si_type]);
113     + rv = -EBUSY;
114     + goto out_err;
115     + }
116     }
117    
118     pr_info(PFX "Adding %s-specified %s state machine\n",
119     @@ -3865,7 +3877,8 @@ static void cleanup_one_si(struct smi_info *to_clean)
120     poll(to_clean);
121     schedule_timeout_uninterruptible(1);
122     }
123     - disable_si_irq(to_clean, false);
124     + if (to_clean->handlers)
125     + disable_si_irq(to_clean, false);
126     while (to_clean->curr_msg || (to_clean->si_state != SI_NORMAL)) {
127     poll(to_clean);
128     schedule_timeout_uninterruptible(1);
129     diff --git a/drivers/char/tpm/tpm-dev-common.c b/drivers/char/tpm/tpm-dev-common.c
130     index 610638a80383..461bf0b8a094 100644
131     --- a/drivers/char/tpm/tpm-dev-common.c
132     +++ b/drivers/char/tpm/tpm-dev-common.c
133     @@ -110,6 +110,12 @@ ssize_t tpm_common_write(struct file *file, const char __user *buf,
134     return -EFAULT;
135     }
136    
137     + if (in_size < 6 ||
138     + in_size < be32_to_cpu(*((__be32 *) (priv->data_buffer + 2)))) {
139     + mutex_unlock(&priv->buffer_mutex);
140     + return -EINVAL;
141     + }
142     +
143     /* atomic tpm command send and result receive. We only hold the ops
144     * lock during this period so that the tpm can be unregistered even if
145     * the char dev is held open.
146     diff --git a/drivers/net/ethernet/fealnx.c b/drivers/net/ethernet/fealnx.c
147     index e92859dab7ae..e191c4ebeaf4 100644
148     --- a/drivers/net/ethernet/fealnx.c
149     +++ b/drivers/net/ethernet/fealnx.c
150     @@ -257,8 +257,8 @@ enum rx_desc_status_bits {
151     RXFSD = 0x00000800, /* first descriptor */
152     RXLSD = 0x00000400, /* last descriptor */
153     ErrorSummary = 0x80, /* error summary */
154     - RUNT = 0x40, /* runt packet received */
155     - LONG = 0x20, /* long packet received */
156     + RUNTPKT = 0x40, /* runt packet received */
157     + LONGPKT = 0x20, /* long packet received */
158     FAE = 0x10, /* frame align error */
159     CRC = 0x08, /* crc error */
160     RXER = 0x04, /* receive error */
161     @@ -1632,7 +1632,7 @@ static int netdev_rx(struct net_device *dev)
162     dev->name, rx_status);
163    
164     dev->stats.rx_errors++; /* end of a packet. */
165     - if (rx_status & (LONG | RUNT))
166     + if (rx_status & (LONGPKT | RUNTPKT))
167     dev->stats.rx_length_errors++;
168     if (rx_status & RXER)
169     dev->stats.rx_frame_errors++;
170     diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
171     index 47cab1bde065..9e1b74590682 100644
172     --- a/drivers/net/usb/cdc_ncm.c
173     +++ b/drivers/net/usb/cdc_ncm.c
174     @@ -771,7 +771,7 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
175     int err;
176     u8 iface_no;
177     struct usb_cdc_parsed_header hdr;
178     - u16 curr_ntb_format;
179     + __le16 curr_ntb_format;
180    
181     ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
182     if (!ctx)
183     @@ -889,7 +889,7 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
184     goto error2;
185     }
186    
187     - if (curr_ntb_format == USB_CDC_NCM_NTB32_FORMAT) {
188     + if (curr_ntb_format == cpu_to_le16(USB_CDC_NCM_NTB32_FORMAT)) {
189     dev_info(&intf->dev, "resetting NTB format to 16-bit");
190     err = usbnet_write_cmd(dev, USB_CDC_SET_NTB_FORMAT,
191     USB_TYPE_CLASS | USB_DIR_OUT
192     diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
193     index d7c49cf1d5e9..a2f4e52fadb5 100644
194     --- a/drivers/net/vxlan.c
195     +++ b/drivers/net/vxlan.c
196     @@ -1623,26 +1623,19 @@ static struct sk_buff *vxlan_na_create(struct sk_buff *request,
197     static int neigh_reduce(struct net_device *dev, struct sk_buff *skb, __be32 vni)
198     {
199     struct vxlan_dev *vxlan = netdev_priv(dev);
200     - struct nd_msg *msg;
201     - const struct ipv6hdr *iphdr;
202     const struct in6_addr *daddr;
203     - struct neighbour *n;
204     + const struct ipv6hdr *iphdr;
205     struct inet6_dev *in6_dev;
206     + struct neighbour *n;
207     + struct nd_msg *msg;
208    
209     in6_dev = __in6_dev_get(dev);
210     if (!in6_dev)
211     goto out;
212    
213     - if (!pskb_may_pull(skb, sizeof(struct ipv6hdr) + sizeof(struct nd_msg)))
214     - goto out;
215     -
216     iphdr = ipv6_hdr(skb);
217     daddr = &iphdr->daddr;
218     -
219     msg = (struct nd_msg *)(iphdr + 1);
220     - if (msg->icmph.icmp6_code != 0 ||
221     - msg->icmph.icmp6_type != NDISC_NEIGHBOUR_SOLICITATION)
222     - goto out;
223    
224     if (ipv6_addr_loopback(daddr) ||
225     ipv6_addr_is_multicast(&msg->target))
226     @@ -2240,11 +2233,11 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
227     static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
228     {
229     struct vxlan_dev *vxlan = netdev_priv(dev);
230     + struct vxlan_rdst *rdst, *fdst = NULL;
231     const struct ip_tunnel_info *info;
232     - struct ethhdr *eth;
233     bool did_rsc = false;
234     - struct vxlan_rdst *rdst, *fdst = NULL;
235     struct vxlan_fdb *f;
236     + struct ethhdr *eth;
237     __be32 vni = 0;
238    
239     info = skb_tunnel_info(skb);
240     @@ -2269,12 +2262,14 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
241     if (ntohs(eth->h_proto) == ETH_P_ARP)
242     return arp_reduce(dev, skb, vni);
243     #if IS_ENABLED(CONFIG_IPV6)
244     - else if (ntohs(eth->h_proto) == ETH_P_IPV6) {
245     - struct ipv6hdr *hdr, _hdr;
246     - if ((hdr = skb_header_pointer(skb,
247     - skb_network_offset(skb),
248     - sizeof(_hdr), &_hdr)) &&
249     - hdr->nexthdr == IPPROTO_ICMPV6)
250     + else if (ntohs(eth->h_proto) == ETH_P_IPV6 &&
251     + pskb_may_pull(skb, sizeof(struct ipv6hdr) +
252     + sizeof(struct nd_msg)) &&
253     + ipv6_hdr(skb)->nexthdr == IPPROTO_ICMPV6) {
254     + struct nd_msg *m = (struct nd_msg *)(ipv6_hdr(skb) + 1);
255     +
256     + if (m->icmph.icmp6_code == 0 &&
257     + m->icmph.icmp6_type == NDISC_NEIGHBOUR_SOLICITATION)
258     return neigh_reduce(dev, skb, vni);
259     }
260     #endif
261     diff --git a/drivers/tty/serial/8250/8250_fintek.c b/drivers/tty/serial/8250/8250_fintek.c
262     index e500f7dd2470..4bd376c08b59 100644
263     --- a/drivers/tty/serial/8250/8250_fintek.c
264     +++ b/drivers/tty/serial/8250/8250_fintek.c
265     @@ -118,6 +118,9 @@ static int fintek_8250_enter_key(u16 base_port, u8 key)
266     if (!request_muxed_region(base_port, 2, "8250_fintek"))
267     return -EBUSY;
268    
269     + /* Force to deactive all SuperIO in this base_port */
270     + outb(EXIT_KEY, base_port + ADDR_PORT);
271     +
272     outb(key, base_port + ADDR_PORT);
273     outb(key, base_port + ADDR_PORT);
274     return 0;
275     diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
276     index 7754053deeda..26a22b100df1 100644
277     --- a/drivers/tty/serial/omap-serial.c
278     +++ b/drivers/tty/serial/omap-serial.c
279     @@ -693,7 +693,7 @@ static void serial_omap_set_mctrl(struct uart_port *port, unsigned int mctrl)
280     if ((mctrl & TIOCM_RTS) && (port->status & UPSTAT_AUTORTS))
281     up->efr |= UART_EFR_RTS;
282     else
283     - up->efr &= UART_EFR_RTS;
284     + up->efr &= ~UART_EFR_RTS;
285     serial_out(up, UART_EFR, up->efr);
286     serial_out(up, UART_LCR, lcr);
287    
288     diff --git a/fs/coda/upcall.c b/fs/coda/upcall.c
289     index a37f003530d7..1175a1722411 100644
290     --- a/fs/coda/upcall.c
291     +++ b/fs/coda/upcall.c
292     @@ -447,8 +447,7 @@ int venus_fsync(struct super_block *sb, struct CodaFid *fid)
293     UPARG(CODA_FSYNC);
294    
295     inp->coda_fsync.VFid = *fid;
296     - error = coda_upcall(coda_vcp(sb), sizeof(union inputArgs),
297     - &outsize, inp);
298     + error = coda_upcall(coda_vcp(sb), insize, &outsize, inp);
299    
300     CODA_FREE(inp, insize);
301     return error;
302     diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
303     index 74407c6dd592..ec8f75813beb 100644
304     --- a/fs/ocfs2/dlm/dlmrecovery.c
305     +++ b/fs/ocfs2/dlm/dlmrecovery.c
306     @@ -2419,6 +2419,7 @@ static void dlm_do_local_recovery_cleanup(struct dlm_ctxt *dlm, u8 dead_node)
307     dlm_lockres_put(res);
308     continue;
309     }
310     + dlm_move_lockres_to_recovery_list(dlm, res);
311     } else if (res->owner == dlm->node_num) {
312     dlm_free_dead_locks(dlm, res, dead_node);
313     __dlm_lockres_calc_usage(dlm, res);
314     diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
315     index 6e41fc8fabbe..dc455d45a66a 100644
316     --- a/fs/ocfs2/file.c
317     +++ b/fs/ocfs2/file.c
318     @@ -1161,6 +1161,13 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
319     }
320     size_change = S_ISREG(inode->i_mode) && attr->ia_valid & ATTR_SIZE;
321     if (size_change) {
322     + /*
323     + * Here we should wait dio to finish before inode lock
324     + * to avoid a deadlock between ocfs2_setattr() and
325     + * ocfs2_dio_end_io_write()
326     + */
327     + inode_dio_wait(inode);
328     +
329     status = ocfs2_rw_lock(inode, 1);
330     if (status < 0) {
331     mlog_errno(status);
332     @@ -1200,8 +1207,6 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
333     if (status)
334     goto bail_unlock;
335    
336     - inode_dio_wait(inode);
337     -
338     if (i_size_read(inode) >= attr->ia_size) {
339     if (ocfs2_should_order_data(inode)) {
340     status = ocfs2_begin_ordered_truncate(inode,
341     diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
342     index c9c4a81b9767..18b06983131a 100644
343     --- a/include/linux/mmzone.h
344     +++ b/include/linux/mmzone.h
345     @@ -700,7 +700,8 @@ typedef struct pglist_data {
346     * is the first PFN that needs to be initialised.
347     */
348     unsigned long first_deferred_pfn;
349     - unsigned long static_init_size;
350     + /* Number of non-deferred pages */
351     + unsigned long static_init_pgcnt;
352     #endif /* CONFIG_DEFERRED_STRUCT_PAGE_INIT */
353    
354     #ifdef CONFIG_TRANSPARENT_HUGEPAGE
355     diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
356     index e012b9be777e..fed95fa941e6 100644
357     --- a/kernel/rcu/tree_plugin.h
358     +++ b/kernel/rcu/tree_plugin.h
359     @@ -1507,7 +1507,7 @@ static void rcu_prepare_for_idle(void)
360     rdtp->last_accelerate = jiffies;
361     for_each_rcu_flavor(rsp) {
362     rdp = this_cpu_ptr(rsp->rda);
363     - if (rcu_segcblist_pend_cbs(&rdp->cblist))
364     + if (!rcu_segcblist_pend_cbs(&rdp->cblist))
365     continue;
366     rnp = rdp->mynode;
367     raw_spin_lock_rcu_node(rnp); /* irqs already disabled. */
368     diff --git a/mm/page_alloc.c b/mm/page_alloc.c
369     index 77e4d3c5c57b..82a6270c9743 100644
370     --- a/mm/page_alloc.c
371     +++ b/mm/page_alloc.c
372     @@ -290,28 +290,37 @@ EXPORT_SYMBOL(nr_online_nodes);
373     int page_group_by_mobility_disabled __read_mostly;
374    
375     #ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
376     +
377     +/*
378     + * Determine how many pages need to be initialized durig early boot
379     + * (non-deferred initialization).
380     + * The value of first_deferred_pfn will be set later, once non-deferred pages
381     + * are initialized, but for now set it ULONG_MAX.
382     + */
383     static inline void reset_deferred_meminit(pg_data_t *pgdat)
384     {
385     - unsigned long max_initialise;
386     - unsigned long reserved_lowmem;
387     + phys_addr_t start_addr, end_addr;
388     + unsigned long max_pgcnt;
389     + unsigned long reserved;
390    
391     /*
392     * Initialise at least 2G of a node but also take into account that
393     * two large system hashes that can take up 1GB for 0.25TB/node.
394     */
395     - max_initialise = max(2UL << (30 - PAGE_SHIFT),
396     - (pgdat->node_spanned_pages >> 8));
397     + max_pgcnt = max(2UL << (30 - PAGE_SHIFT),
398     + (pgdat->node_spanned_pages >> 8));
399    
400     /*
401     * Compensate the all the memblock reservations (e.g. crash kernel)
402     * from the initial estimation to make sure we will initialize enough
403     * memory to boot.
404     */
405     - reserved_lowmem = memblock_reserved_memory_within(pgdat->node_start_pfn,
406     - pgdat->node_start_pfn + max_initialise);
407     - max_initialise += reserved_lowmem;
408     + start_addr = PFN_PHYS(pgdat->node_start_pfn);
409     + end_addr = PFN_PHYS(pgdat->node_start_pfn + max_pgcnt);
410     + reserved = memblock_reserved_memory_within(start_addr, end_addr);
411     + max_pgcnt += PHYS_PFN(reserved);
412    
413     - pgdat->static_init_size = min(max_initialise, pgdat->node_spanned_pages);
414     + pgdat->static_init_pgcnt = min(max_pgcnt, pgdat->node_spanned_pages);
415     pgdat->first_deferred_pfn = ULONG_MAX;
416     }
417    
418     @@ -338,7 +347,7 @@ static inline bool update_defer_init(pg_data_t *pgdat,
419     if (zone_end < pgdat_end_pfn(pgdat))
420     return true;
421     (*nr_initialised)++;
422     - if ((*nr_initialised > pgdat->static_init_size) &&
423     + if ((*nr_initialised > pgdat->static_init_pgcnt) &&
424     (pfn & (PAGES_PER_SECTION - 1)) == 0) {
425     pgdat->first_deferred_pfn = pfn;
426     return false;
427     diff --git a/mm/page_ext.c b/mm/page_ext.c
428     index 4f0367d472c4..2c16216c29b6 100644
429     --- a/mm/page_ext.c
430     +++ b/mm/page_ext.c
431     @@ -125,7 +125,6 @@ struct page_ext *lookup_page_ext(struct page *page)
432     struct page_ext *base;
433    
434     base = NODE_DATA(page_to_nid(page))->node_page_ext;
435     -#if defined(CONFIG_DEBUG_VM)
436     /*
437     * The sanity checks the page allocator does upon freeing a
438     * page can reach here before the page_ext arrays are
439     @@ -134,7 +133,6 @@ struct page_ext *lookup_page_ext(struct page *page)
440     */
441     if (unlikely(!base))
442     return NULL;
443     -#endif
444     index = pfn - round_down(node_start_pfn(page_to_nid(page)),
445     MAX_ORDER_NR_PAGES);
446     return get_entry(base, index);
447     @@ -199,7 +197,6 @@ struct page_ext *lookup_page_ext(struct page *page)
448     {
449     unsigned long pfn = page_to_pfn(page);
450     struct mem_section *section = __pfn_to_section(pfn);
451     -#if defined(CONFIG_DEBUG_VM)
452     /*
453     * The sanity checks the page allocator does upon freeing a
454     * page can reach here before the page_ext arrays are
455     @@ -208,7 +205,6 @@ struct page_ext *lookup_page_ext(struct page *page)
456     */
457     if (!section->page_ext)
458     return NULL;
459     -#endif
460     return get_entry(section->page_ext, pfn);
461     }
462    
463     diff --git a/mm/pagewalk.c b/mm/pagewalk.c
464     index 8bd4afa83cb8..23a3e415ac2c 100644
465     --- a/mm/pagewalk.c
466     +++ b/mm/pagewalk.c
467     @@ -188,8 +188,12 @@ static int walk_hugetlb_range(unsigned long addr, unsigned long end,
468     do {
469     next = hugetlb_entry_end(h, addr, end);
470     pte = huge_pte_offset(walk->mm, addr & hmask, sz);
471     - if (pte && walk->hugetlb_entry)
472     +
473     + if (pte)
474     err = walk->hugetlb_entry(pte, hmask, addr, next, walk);
475     + else if (walk->pte_hole)
476     + err = walk->pte_hole(addr, next, walk);
477     +
478     if (err)
479     break;
480     } while (addr = next, addr != end);
481     diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
482     index b93148e8e9fb..15c99dfa3d72 100644
483     --- a/net/netlink/af_netlink.c
484     +++ b/net/netlink/af_netlink.c
485     @@ -2136,7 +2136,7 @@ static int netlink_dump(struct sock *sk)
486     struct sk_buff *skb = NULL;
487     struct nlmsghdr *nlh;
488     struct module *module;
489     - int len, err = -ENOBUFS;
490     + int err = -ENOBUFS;
491     int alloc_min_size;
492     int alloc_size;
493    
494     @@ -2183,9 +2183,11 @@ static int netlink_dump(struct sock *sk)
495     skb_reserve(skb, skb_tailroom(skb) - alloc_size);
496     netlink_skb_set_owner_r(skb, sk);
497    
498     - len = cb->dump(skb, cb);
499     + if (nlk->dump_done_errno > 0)
500     + nlk->dump_done_errno = cb->dump(skb, cb);
501    
502     - if (len > 0) {
503     + if (nlk->dump_done_errno > 0 ||
504     + skb_tailroom(skb) < nlmsg_total_size(sizeof(nlk->dump_done_errno))) {
505     mutex_unlock(nlk->cb_mutex);
506    
507     if (sk_filter(sk, skb))
508     @@ -2195,13 +2197,15 @@ static int netlink_dump(struct sock *sk)
509     return 0;
510     }
511    
512     - nlh = nlmsg_put_answer(skb, cb, NLMSG_DONE, sizeof(len), NLM_F_MULTI);
513     - if (!nlh)
514     + nlh = nlmsg_put_answer(skb, cb, NLMSG_DONE,
515     + sizeof(nlk->dump_done_errno), NLM_F_MULTI);
516     + if (WARN_ON(!nlh))
517     goto errout_skb;
518    
519     nl_dump_check_consistent(cb, nlh);
520    
521     - memcpy(nlmsg_data(nlh), &len, sizeof(len));
522     + memcpy(nlmsg_data(nlh), &nlk->dump_done_errno,
523     + sizeof(nlk->dump_done_errno));
524    
525     if (sk_filter(sk, skb))
526     kfree_skb(skb);
527     @@ -2273,6 +2277,7 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
528     }
529    
530     nlk->cb_running = true;
531     + nlk->dump_done_errno = INT_MAX;
532    
533     mutex_unlock(nlk->cb_mutex);
534    
535     diff --git a/net/netlink/af_netlink.h b/net/netlink/af_netlink.h
536     index 028188597eaa..962de7b3c023 100644
537     --- a/net/netlink/af_netlink.h
538     +++ b/net/netlink/af_netlink.h
539     @@ -34,6 +34,7 @@ struct netlink_sock {
540     wait_queue_head_t wait;
541     bool bound;
542     bool cb_running;
543     + int dump_done_errno;
544     struct netlink_callback cb;
545     struct mutex *cb_mutex;
546     struct mutex cb_def_mutex;
547     diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c
548     index a6dfa86c0201..3b18085e3b10 100644
549     --- a/net/sctp/ipv6.c
550     +++ b/net/sctp/ipv6.c
551     @@ -807,9 +807,10 @@ static void sctp_inet6_skb_msgname(struct sk_buff *skb, char *msgname,
552     addr->v6.sin6_flowinfo = 0;
553     addr->v6.sin6_port = sh->source;
554     addr->v6.sin6_addr = ipv6_hdr(skb)->saddr;
555     - if (ipv6_addr_type(&addr->v6.sin6_addr) & IPV6_ADDR_LINKLOCAL) {
556     + if (ipv6_addr_type(&addr->v6.sin6_addr) & IPV6_ADDR_LINKLOCAL)
557     addr->v6.sin6_scope_id = sctp_v6_skb_iif(skb);
558     - }
559     + else
560     + addr->v6.sin6_scope_id = 0;
561     }
562    
563     *addr_len = sctp_v6_addr_to_user(sctp_sk(skb->sk), addr);
564     diff --git a/security/integrity/ima/ima_appraise.c b/security/integrity/ima/ima_appraise.c
565     index 809ba70fbbbf..7d769b948de8 100644
566     --- a/security/integrity/ima/ima_appraise.c
567     +++ b/security/integrity/ima/ima_appraise.c
568     @@ -320,6 +320,9 @@ void ima_update_xattr(struct integrity_iint_cache *iint, struct file *file)
569     if (iint->flags & IMA_DIGSIG)
570     return;
571    
572     + if (iint->ima_file_status != INTEGRITY_PASS)
573     + return;
574     +
575     rc = ima_collect_measurement(iint, file, NULL, 0, ima_hash_algo);
576     if (rc < 0)
577     return;