Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.4/0146-4.4.47-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2882 - (hide annotations) (download)
Mon Mar 27 13:49:21 2017 UTC (7 years, 1 month ago) by niro
File size: 19163 byte(s)
linux-4.4.47
1 niro 2882 diff --git a/Makefile b/Makefile
2     index 2dd5cb2fe182..7b233ac7f86c 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 4
8     -SUBLEVEL = 46
9     +SUBLEVEL = 47
10     EXTRAVERSION =
11     NAME = Blurry Fish Butt
12    
13     diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
14     index 858106352ce9..8860e74aa28f 100644
15     --- a/drivers/net/ethernet/broadcom/bcmsysport.c
16     +++ b/drivers/net/ethernet/broadcom/bcmsysport.c
17     @@ -732,11 +732,8 @@ static unsigned int __bcm_sysport_tx_reclaim(struct bcm_sysport_priv *priv,
18     unsigned int c_index, last_c_index, last_tx_cn, num_tx_cbs;
19     unsigned int pkts_compl = 0, bytes_compl = 0;
20     struct bcm_sysport_cb *cb;
21     - struct netdev_queue *txq;
22     u32 hw_ind;
23    
24     - txq = netdev_get_tx_queue(ndev, ring->index);
25     -
26     /* Compute how many descriptors have been processed since last call */
27     hw_ind = tdma_readl(priv, TDMA_DESC_RING_PROD_CONS_INDEX(ring->index));
28     c_index = (hw_ind >> RING_CONS_INDEX_SHIFT) & RING_CONS_INDEX_MASK;
29     @@ -767,9 +764,6 @@ static unsigned int __bcm_sysport_tx_reclaim(struct bcm_sysport_priv *priv,
30    
31     ring->c_index = c_index;
32    
33     - if (netif_tx_queue_stopped(txq) && pkts_compl)
34     - netif_tx_wake_queue(txq);
35     -
36     netif_dbg(priv, tx_done, ndev,
37     "ring=%d c_index=%d pkts_compl=%d, bytes_compl=%d\n",
38     ring->index, ring->c_index, pkts_compl, bytes_compl);
39     @@ -781,16 +775,33 @@ static unsigned int __bcm_sysport_tx_reclaim(struct bcm_sysport_priv *priv,
40     static unsigned int bcm_sysport_tx_reclaim(struct bcm_sysport_priv *priv,
41     struct bcm_sysport_tx_ring *ring)
42     {
43     + struct netdev_queue *txq;
44     unsigned int released;
45     unsigned long flags;
46    
47     + txq = netdev_get_tx_queue(priv->netdev, ring->index);
48     +
49     spin_lock_irqsave(&ring->lock, flags);
50     released = __bcm_sysport_tx_reclaim(priv, ring);
51     + if (released)
52     + netif_tx_wake_queue(txq);
53     +
54     spin_unlock_irqrestore(&ring->lock, flags);
55    
56     return released;
57     }
58    
59     +/* Locked version of the per-ring TX reclaim, but does not wake the queue */
60     +static void bcm_sysport_tx_clean(struct bcm_sysport_priv *priv,
61     + struct bcm_sysport_tx_ring *ring)
62     +{
63     + unsigned long flags;
64     +
65     + spin_lock_irqsave(&ring->lock, flags);
66     + __bcm_sysport_tx_reclaim(priv, ring);
67     + spin_unlock_irqrestore(&ring->lock, flags);
68     +}
69     +
70     static int bcm_sysport_tx_poll(struct napi_struct *napi, int budget)
71     {
72     struct bcm_sysport_tx_ring *ring =
73     @@ -1275,7 +1286,7 @@ static void bcm_sysport_fini_tx_ring(struct bcm_sysport_priv *priv,
74     napi_disable(&ring->napi);
75     netif_napi_del(&ring->napi);
76    
77     - bcm_sysport_tx_reclaim(priv, ring);
78     + bcm_sysport_tx_clean(priv, ring);
79    
80     kfree(ring->cbs);
81     ring->cbs = NULL;
82     diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.h b/drivers/net/ethernet/mellanox/mlxsw/pci.h
83     index 142f33d978c5..a0fbe00dd690 100644
84     --- a/drivers/net/ethernet/mellanox/mlxsw/pci.h
85     +++ b/drivers/net/ethernet/mellanox/mlxsw/pci.h
86     @@ -206,21 +206,21 @@ MLXSW_ITEM32(pci, eqe, owner, 0x0C, 0, 1);
87     /* pci_eqe_cmd_token
88     * Command completion event - token
89     */
90     -MLXSW_ITEM32(pci, eqe, cmd_token, 0x08, 16, 16);
91     +MLXSW_ITEM32(pci, eqe, cmd_token, 0x00, 16, 16);
92    
93     /* pci_eqe_cmd_status
94     * Command completion event - status
95     */
96     -MLXSW_ITEM32(pci, eqe, cmd_status, 0x08, 0, 8);
97     +MLXSW_ITEM32(pci, eqe, cmd_status, 0x00, 0, 8);
98    
99     /* pci_eqe_cmd_out_param_h
100     * Command completion event - output parameter - higher part
101     */
102     -MLXSW_ITEM32(pci, eqe, cmd_out_param_h, 0x0C, 0, 32);
103     +MLXSW_ITEM32(pci, eqe, cmd_out_param_h, 0x04, 0, 32);
104    
105     /* pci_eqe_cmd_out_param_l
106     * Command completion event - output parameter - lower part
107     */
108     -MLXSW_ITEM32(pci, eqe, cmd_out_param_l, 0x10, 0, 32);
109     +MLXSW_ITEM32(pci, eqe, cmd_out_param_l, 0x08, 0, 32);
110    
111     #endif
112     diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
113     index 3be4a2355ead..cb165c2d4803 100644
114     --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
115     +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
116     @@ -390,6 +390,7 @@ static netdev_tx_t mlxsw_sp_port_xmit(struct sk_buff *skb,
117     dev_kfree_skb_any(skb_orig);
118     return NETDEV_TX_OK;
119     }
120     + dev_consume_skb_any(skb_orig);
121     }
122    
123     if (eth_skb_pad(skb)) {
124     diff --git a/drivers/net/ethernet/mellanox/mlxsw/switchx2.c b/drivers/net/ethernet/mellanox/mlxsw/switchx2.c
125     index d85960cfb694..fb2d9a82ce3d 100644
126     --- a/drivers/net/ethernet/mellanox/mlxsw/switchx2.c
127     +++ b/drivers/net/ethernet/mellanox/mlxsw/switchx2.c
128     @@ -313,6 +313,7 @@ static netdev_tx_t mlxsw_sx_port_xmit(struct sk_buff *skb,
129     dev_kfree_skb_any(skb_orig);
130     return NETDEV_TX_OK;
131     }
132     + dev_consume_skb_any(skb_orig);
133     }
134     mlxsw_sx_txhdr_construct(skb, &tx_info);
135     len = skb->len;
136     diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
137     index 467d41698fd5..549ad2018e7f 100644
138     --- a/drivers/net/ethernet/renesas/ravb_main.c
139     +++ b/drivers/net/ethernet/renesas/ravb_main.c
140     @@ -1330,6 +1330,19 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
141     buffer = PTR_ALIGN(priv->tx_align[q], DPTR_ALIGN) +
142     entry / NUM_TX_DESC * DPTR_ALIGN;
143     len = PTR_ALIGN(skb->data, DPTR_ALIGN) - skb->data;
144     + /* Zero length DMA descriptors are problematic as they seem to
145     + * terminate DMA transfers. Avoid them by simply using a length of
146     + * DPTR_ALIGN (4) when skb data is aligned to DPTR_ALIGN.
147     + *
148     + * As skb is guaranteed to have at least ETH_ZLEN (60) bytes of
149     + * data by the call to skb_put_padto() above this is safe with
150     + * respect to both the length of the first DMA descriptor (len)
151     + * overflowing the available data and the length of the second DMA
152     + * descriptor (skb->len - len) being negative.
153     + */
154     + if (len == 0)
155     + len = DPTR_ALIGN;
156     +
157     memcpy(buffer, skb->data, len);
158     dma_addr = dma_map_single(ndev->dev.parent, buffer, len, DMA_TO_DEVICE);
159     if (dma_mapping_error(ndev->dev.parent, dma_addr))
160     diff --git a/drivers/net/phy/bcm63xx.c b/drivers/net/phy/bcm63xx.c
161     index 86b28052bf06..9b709f78bb03 100644
162     --- a/drivers/net/phy/bcm63xx.c
163     +++ b/drivers/net/phy/bcm63xx.c
164     @@ -21,6 +21,23 @@ MODULE_DESCRIPTION("Broadcom 63xx internal PHY driver");
165     MODULE_AUTHOR("Maxime Bizon <mbizon@freebox.fr>");
166     MODULE_LICENSE("GPL");
167    
168     +static int bcm63xx_config_intr(struct phy_device *phydev)
169     +{
170     + int reg, err;
171     +
172     + reg = phy_read(phydev, MII_BCM63XX_IR);
173     + if (reg < 0)
174     + return reg;
175     +
176     + if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
177     + reg &= ~MII_BCM63XX_IR_GMASK;
178     + else
179     + reg |= MII_BCM63XX_IR_GMASK;
180     +
181     + err = phy_write(phydev, MII_BCM63XX_IR, reg);
182     + return err;
183     +}
184     +
185     static int bcm63xx_config_init(struct phy_device *phydev)
186     {
187     int reg, err;
188     @@ -55,7 +72,7 @@ static struct phy_driver bcm63xx_driver[] = {
189     .config_aneg = genphy_config_aneg,
190     .read_status = genphy_read_status,
191     .ack_interrupt = bcm_phy_ack_intr,
192     - .config_intr = bcm_phy_config_intr,
193     + .config_intr = bcm63xx_config_intr,
194     .driver = { .owner = THIS_MODULE },
195     }, {
196     /* same phy as above, with just a different OUI */
197     @@ -68,7 +85,7 @@ static struct phy_driver bcm63xx_driver[] = {
198     .config_aneg = genphy_config_aneg,
199     .read_status = genphy_read_status,
200     .ack_interrupt = bcm_phy_ack_intr,
201     - .config_intr = bcm_phy_config_intr,
202     + .config_intr = bcm63xx_config_intr,
203     .driver = { .owner = THIS_MODULE },
204     } };
205    
206     diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c
207     index 7cba2c3759df..8c408aa2f208 100644
208     --- a/drivers/net/usb/cdc_ether.c
209     +++ b/drivers/net/usb/cdc_ether.c
210     @@ -462,6 +462,7 @@ static const struct driver_info wwan_info = {
211     #define SAMSUNG_VENDOR_ID 0x04e8
212     #define LENOVO_VENDOR_ID 0x17ef
213     #define NVIDIA_VENDOR_ID 0x0955
214     +#define HP_VENDOR_ID 0x03f0
215    
216     static const struct usb_device_id products[] = {
217     /* BLACKLIST !!
218     @@ -608,6 +609,13 @@ static const struct usb_device_id products[] = {
219     .driver_info = 0,
220     },
221    
222     +/* HP lt2523 (Novatel E371) - handled by qmi_wwan */
223     +{
224     + USB_DEVICE_AND_INTERFACE_INFO(HP_VENDOR_ID, 0x421d, USB_CLASS_COMM,
225     + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE),
226     + .driver_info = 0,
227     +},
228     +
229     /* AnyDATA ADU960S - handled by qmi_wwan */
230     {
231     USB_DEVICE_AND_INTERFACE_INFO(0x16d5, 0x650a, USB_CLASS_COMM,
232     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
233     index a34f491224c1..09052f9e324f 100644
234     --- a/drivers/net/usb/qmi_wwan.c
235     +++ b/drivers/net/usb/qmi_wwan.c
236     @@ -485,6 +485,13 @@ static const struct usb_device_id products[] = {
237     USB_CDC_PROTO_NONE),
238     .driver_info = (unsigned long)&qmi_wwan_info,
239     },
240     + { /* HP lt2523 (Novatel E371) */
241     + USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0x421d,
242     + USB_CLASS_COMM,
243     + USB_CDC_SUBCLASS_ETHERNET,
244     + USB_CDC_PROTO_NONE),
245     + .driver_info = (unsigned long)&qmi_wwan_info,
246     + },
247     { /* HP lt4112 LTE/HSPA+ Gobi 4G Module (Huawei me906e) */
248     USB_DEVICE_AND_INTERFACE_INFO(0x03f0, 0x581d, USB_CLASS_VENDOR_SPEC, 1, 7),
249     .driver_info = (unsigned long)&qmi_wwan_info,
250     diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
251     index 32b7ec976dcc..fbb1867ff25c 100644
252     --- a/drivers/net/usb/r8152.c
253     +++ b/drivers/net/usb/r8152.c
254     @@ -1645,7 +1645,7 @@ static u8 r8152_rx_csum(struct r8152 *tp, struct rx_desc *rx_desc)
255     u8 checksum = CHECKSUM_NONE;
256     u32 opts2, opts3;
257    
258     - if (tp->version == RTL_VER_01)
259     + if (!(tp->netdev->features & NETIF_F_RXCSUM))
260     goto return_result;
261    
262     opts2 = le32_to_cpu(rx_desc->opts2);
263     @@ -3442,6 +3442,8 @@ static bool delay_autosuspend(struct r8152 *tp)
264     */
265     if (!sw_linking && tp->rtl_ops.in_nway(tp))
266     return true;
267     + else if (!skb_queue_empty(&tp->tx_queue))
268     + return true;
269     else
270     return false;
271     }
272     @@ -4221,6 +4223,11 @@ static int rtl8152_probe(struct usb_interface *intf,
273     NETIF_F_HIGHDMA | NETIF_F_FRAGLIST |
274     NETIF_F_IPV6_CSUM | NETIF_F_TSO6;
275    
276     + if (tp->version == RTL_VER_01) {
277     + netdev->features &= ~NETIF_F_RXCSUM;
278     + netdev->hw_features &= ~NETIF_F_RXCSUM;
279     + }
280     +
281     netdev->ethtool_ops = &ops;
282     netif_set_gso_max_size(netdev, RTL_LIMITED_TSO_SIZE);
283    
284     diff --git a/include/linux/tcp.h b/include/linux/tcp.h
285     index b386361ba3e8..318c24612458 100644
286     --- a/include/linux/tcp.h
287     +++ b/include/linux/tcp.h
288     @@ -56,8 +56,13 @@ static inline unsigned int tcp_optlen(const struct sk_buff *skb)
289    
290     /* TCP Fast Open Cookie as stored in memory */
291     struct tcp_fastopen_cookie {
292     + union {
293     + u8 val[TCP_FASTOPEN_COOKIE_MAX];
294     +#if IS_ENABLED(CONFIG_IPV6)
295     + struct in6_addr addr;
296     +#endif
297     + };
298     s8 len;
299     - u8 val[TCP_FASTOPEN_COOKIE_MAX];
300     bool exp; /* In RFC6994 experimental option format */
301     };
302    
303     diff --git a/net/ax25/ax25_subr.c b/net/ax25/ax25_subr.c
304     index 655a7d4c96e1..983f0b5e14f1 100644
305     --- a/net/ax25/ax25_subr.c
306     +++ b/net/ax25/ax25_subr.c
307     @@ -264,7 +264,7 @@ void ax25_disconnect(ax25_cb *ax25, int reason)
308     {
309     ax25_clear_queues(ax25);
310    
311     - if (!sock_flag(ax25->sk, SOCK_DESTROY))
312     + if (!ax25->sk || !sock_flag(ax25->sk, SOCK_DESTROY))
313     ax25_stop_heartbeat(ax25);
314     ax25_stop_t1timer(ax25);
315     ax25_stop_t2timer(ax25);
316     diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
317     index 40197ff8918a..413d18e37083 100644
318     --- a/net/bridge/br_netlink.c
319     +++ b/net/bridge/br_netlink.c
320     @@ -773,20 +773,6 @@ static int br_validate(struct nlattr *tb[], struct nlattr *data[])
321     return 0;
322     }
323    
324     -static int br_dev_newlink(struct net *src_net, struct net_device *dev,
325     - struct nlattr *tb[], struct nlattr *data[])
326     -{
327     - struct net_bridge *br = netdev_priv(dev);
328     -
329     - if (tb[IFLA_ADDRESS]) {
330     - spin_lock_bh(&br->lock);
331     - br_stp_change_bridge_id(br, nla_data(tb[IFLA_ADDRESS]));
332     - spin_unlock_bh(&br->lock);
333     - }
334     -
335     - return register_netdevice(dev);
336     -}
337     -
338     static int br_port_slave_changelink(struct net_device *brdev,
339     struct net_device *dev,
340     struct nlattr *tb[],
341     @@ -1068,6 +1054,25 @@ static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
342     return 0;
343     }
344    
345     +static int br_dev_newlink(struct net *src_net, struct net_device *dev,
346     + struct nlattr *tb[], struct nlattr *data[])
347     +{
348     + struct net_bridge *br = netdev_priv(dev);
349     + int err;
350     +
351     + if (tb[IFLA_ADDRESS]) {
352     + spin_lock_bh(&br->lock);
353     + br_stp_change_bridge_id(br, nla_data(tb[IFLA_ADDRESS]));
354     + spin_unlock_bh(&br->lock);
355     + }
356     +
357     + err = br_changelink(dev, tb, data);
358     + if (err)
359     + return err;
360     +
361     + return register_netdevice(dev);
362     +}
363     +
364     static size_t br_get_size(const struct net_device *brdev)
365     {
366     return nla_total_size(sizeof(u32)) + /* IFLA_BR_FORWARD_DELAY */
367     diff --git a/net/core/dev.c b/net/core/dev.c
368     index 6f203c7fb166..0798a0f1b395 100644
369     --- a/net/core/dev.c
370     +++ b/net/core/dev.c
371     @@ -2650,9 +2650,9 @@ static netdev_features_t harmonize_features(struct sk_buff *skb,
372     if (skb->ip_summed != CHECKSUM_NONE &&
373     !can_checksum_protocol(features, type)) {
374     features &= ~NETIF_F_ALL_CSUM;
375     - } else if (illegal_highdma(skb->dev, skb)) {
376     - features &= ~NETIF_F_SG;
377     }
378     + if (illegal_highdma(skb->dev, skb))
379     + features &= ~NETIF_F_SG;
380    
381     return features;
382     }
383     diff --git a/net/dsa/slave.c b/net/dsa/slave.c
384     index 7bc787b095c8..8dfe9fb7ad36 100644
385     --- a/net/dsa/slave.c
386     +++ b/net/dsa/slave.c
387     @@ -1101,6 +1101,8 @@ int dsa_slave_suspend(struct net_device *slave_dev)
388     {
389     struct dsa_slave_priv *p = netdev_priv(slave_dev);
390    
391     + netif_device_detach(slave_dev);
392     +
393     if (p->phy) {
394     phy_stop(p->phy);
395     p->old_pause = -1;
396     diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
397     index 840b450aab46..67d44aa9e09f 100644
398     --- a/net/ipv4/fib_semantics.c
399     +++ b/net/ipv4/fib_semantics.c
400     @@ -1277,8 +1277,9 @@ int fib_dump_info(struct sk_buff *skb, u32 portid, u32 seq, int event,
401     nla_put_u32(skb, RTA_FLOW, fi->fib_nh[0].nh_tclassid))
402     goto nla_put_failure;
403     #endif
404     - if (fi->fib_nh->nh_lwtstate)
405     - lwtunnel_fill_encap(skb, fi->fib_nh->nh_lwtstate);
406     + if (fi->fib_nh->nh_lwtstate &&
407     + lwtunnel_fill_encap(skb, fi->fib_nh->nh_lwtstate) < 0)
408     + goto nla_put_failure;
409     }
410     #ifdef CONFIG_IP_ROUTE_MULTIPATH
411     if (fi->fib_nhs > 1) {
412     @@ -1314,8 +1315,10 @@ int fib_dump_info(struct sk_buff *skb, u32 portid, u32 seq, int event,
413     nla_put_u32(skb, RTA_FLOW, nh->nh_tclassid))
414     goto nla_put_failure;
415     #endif
416     - if (nh->nh_lwtstate)
417     - lwtunnel_fill_encap(skb, nh->nh_lwtstate);
418     + if (nh->nh_lwtstate &&
419     + lwtunnel_fill_encap(skb, nh->nh_lwtstate) < 0)
420     + goto nla_put_failure;
421     +
422     /* length of rtnetlink header + attributes */
423     rtnh->rtnh_len = nlmsg_get_pos(skb) - (void *) rtnh;
424     } endfor_nexthops(fi);
425     diff --git a/net/ipv4/route.c b/net/ipv4/route.c
426     index 7ceb8a574a50..ef2f527a119b 100644
427     --- a/net/ipv4/route.c
428     +++ b/net/ipv4/route.c
429     @@ -2430,7 +2430,7 @@ static int rt_fill_info(struct net *net, __be32 dst, __be32 src, u32 table_id,
430     r->rtm_dst_len = 32;
431     r->rtm_src_len = 0;
432     r->rtm_tos = fl4->flowi4_tos;
433     - r->rtm_table = table_id;
434     + r->rtm_table = table_id < 256 ? table_id : RT_TABLE_COMPAT;
435     if (nla_put_u32(skb, RTA_TABLE, table_id))
436     goto nla_put_failure;
437     r->rtm_type = rt->rt_type;
438     diff --git a/net/ipv4/tcp_fastopen.c b/net/ipv4/tcp_fastopen.c
439     index 55be6ac70cff..fca618272a01 100644
440     --- a/net/ipv4/tcp_fastopen.c
441     +++ b/net/ipv4/tcp_fastopen.c
442     @@ -112,7 +112,7 @@ static bool tcp_fastopen_cookie_gen(struct request_sock *req,
443     struct tcp_fastopen_cookie tmp;
444    
445     if (__tcp_fastopen_cookie_gen(&ip6h->saddr, &tmp)) {
446     - struct in6_addr *buf = (struct in6_addr *) tmp.val;
447     + struct in6_addr *buf = &tmp.addr;
448     int i;
449    
450     for (i = 0; i < 4; i++)
451     @@ -161,6 +161,7 @@ static struct sock *tcp_fastopen_create_child(struct sock *sk,
452     * scaled. So correct it appropriately.
453     */
454     tp->snd_wnd = ntohs(tcp_hdr(skb)->window);
455     + tp->max_window = tp->snd_wnd;
456    
457     /* Activate the retrans timer so that SYNACK can be retransmitted.
458     * The request socket is not added to the ehash
459     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
460     index cb8bb5988c03..253186a35567 100644
461     --- a/net/ipv6/addrconf.c
462     +++ b/net/ipv6/addrconf.c
463     @@ -5244,8 +5244,7 @@ static void addrconf_disable_change(struct net *net, __s32 newf)
464     struct net_device *dev;
465     struct inet6_dev *idev;
466    
467     - rcu_read_lock();
468     - for_each_netdev_rcu(net, dev) {
469     + for_each_netdev(net, dev) {
470     idev = __in6_dev_get(dev);
471     if (idev) {
472     int changed = (!idev->cnf.disable_ipv6) ^ (!newf);
473     @@ -5254,7 +5253,6 @@ static void addrconf_disable_change(struct net *net, __s32 newf)
474     dev_disable_change(idev);
475     }
476     }
477     - rcu_read_unlock();
478     }
479    
480     static int addrconf_disable_ipv6(struct ctl_table *table, int *p, int newf)
481     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
482     index dbffc9de184b..36bf4c3fe4f5 100644
483     --- a/net/ipv6/route.c
484     +++ b/net/ipv6/route.c
485     @@ -3196,7 +3196,8 @@ static int rt6_fill_node(struct net *net,
486     if (nla_put_u8(skb, RTA_PREF, IPV6_EXTRACT_PREF(rt->rt6i_flags)))
487     goto nla_put_failure;
488    
489     - lwtunnel_fill_encap(skb, rt->dst.lwtstate);
490     + if (lwtunnel_fill_encap(skb, rt->dst.lwtstate) < 0)
491     + goto nla_put_failure;
492    
493     nlmsg_end(skb, nlh);
494     return 0;
495     diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
496     index e004067ec24a..ad58d2a6284e 100644
497     --- a/net/openvswitch/conntrack.c
498     +++ b/net/openvswitch/conntrack.c
499     @@ -501,7 +501,7 @@ int ovs_ct_execute(struct net *net, struct sk_buff *skb,
500    
501     /* The conntrack module expects to be working at L3. */
502     nh_ofs = skb_network_offset(skb);
503     - skb_pull(skb, nh_ofs);
504     + skb_pull_rcsum(skb, nh_ofs);
505    
506     if (key->ip.frag != OVS_FRAG_TYPE_NONE) {
507     err = handle_fragments(net, key, info->zone.id, skb);
508     @@ -527,6 +527,7 @@ int ovs_ct_execute(struct net *net, struct sk_buff *skb,
509     &info->labels.mask);
510     err:
511     skb_push(skb, nh_ofs);
512     + skb_postpush_rcsum(skb, skb->data, nh_ofs);
513     if (err)
514     kfree_skb(skb);
515     return err;
516     diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
517     index 73f75258ce46..b2e934ff2448 100644
518     --- a/net/unix/af_unix.c
519     +++ b/net/unix/af_unix.c
520     @@ -994,6 +994,7 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
521     unsigned int hash;
522     struct unix_address *addr;
523     struct hlist_head *list;
524     + struct path path = { NULL, NULL };
525    
526     err = -EINVAL;
527     if (sunaddr->sun_family != AF_UNIX)
528     @@ -1009,9 +1010,20 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
529     goto out;
530     addr_len = err;
531    
532     + if (sun_path[0]) {
533     + umode_t mode = S_IFSOCK |
534     + (SOCK_INODE(sock)->i_mode & ~current_umask());
535     + err = unix_mknod(sun_path, mode, &path);
536     + if (err) {
537     + if (err == -EEXIST)
538     + err = -EADDRINUSE;
539     + goto out;
540     + }
541     + }
542     +
543     err = mutex_lock_interruptible(&u->bindlock);
544     if (err)
545     - goto out;
546     + goto out_put;
547    
548     err = -EINVAL;
549     if (u->addr)
550     @@ -1028,16 +1040,6 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
551     atomic_set(&addr->refcnt, 1);
552    
553     if (sun_path[0]) {
554     - struct path path;
555     - umode_t mode = S_IFSOCK |
556     - (SOCK_INODE(sock)->i_mode & ~current_umask());
557     - err = unix_mknod(sun_path, mode, &path);
558     - if (err) {
559     - if (err == -EEXIST)
560     - err = -EADDRINUSE;
561     - unix_release_addr(addr);
562     - goto out_up;
563     - }
564     addr->hash = UNIX_HASH_SIZE;
565     hash = d_real_inode(path.dentry)->i_ino & (UNIX_HASH_SIZE - 1);
566     spin_lock(&unix_table_lock);
567     @@ -1064,6 +1066,9 @@ out_unlock:
568     spin_unlock(&unix_table_lock);
569     out_up:
570     mutex_unlock(&u->bindlock);
571     +out_put:
572     + if (err)
573     + path_put(&path);
574     out:
575     return err;
576     }