Merge 4.9.307 into android-4.9
Changes in 4.9.307 net: qlogic: check the return value of dma_alloc_coherent() in qed_vf_hw_prepare() qed: return status of qed_iov_get_link ethernet: Fix error handling in xemaclite_of_probe net: ethernet: lpc_eth: Handle error for clk_enable ax25: Fix NULL pointer dereference in ax25_kill_by_device net/mlx5: Fix size field in bufferx_reg struct NFC: port100: fix use-after-free in port100_send_complete gpio: ts4900: Do not set DAT and OE together sctp: fix kernel-infoleak for SCTP sockets net-sysfs: add check for netdevice being present to speed_show Revert "xen-netback: Check for hotplug-status existence before watching" tracing: Ensure trace buffer is at least 4096 bytes large selftests/memfd: clean up mapping in mfd_fail_write ARM: Spectre-BHB: provide empty stub for non-config staging: gdm724x: fix use after free in gdm_lte_rx() batman-adv: Request iflink once in batadv-on-batadv check batman-adv: Don't expect inter-netns unique iflink indices ARM: fix Thumb2 regression with Spectre BHB btrfs: unlock newly allocated extent buffer after error Linux 4.9.307 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I2ddea75b801bb11688f30b0c7554bd7aac4036aa
This commit is contained in:
committed by
Andrey Zolotarev
parent
d1e5b107e0
commit
a217a4402e
Makefile
arch/arm
drivers
gpio
net
nfc
staging/gdm724x
fs/btrfs
include/linux/mlx5
kernel/trace
net
tools/testing/selftests/memfd
2
Makefile
2
Makefile
@ -1,6 +1,6 @@
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 9
|
||||
SUBLEVEL = 306
|
||||
SUBLEVEL = 307
|
||||
EXTRAVERSION =
|
||||
NAME = Roaring Lionus
|
||||
|
||||
|
@ -25,7 +25,13 @@ enum {
|
||||
SPECTRE_V2_METHOD_LOOP8 = BIT(__SPECTRE_V2_METHOD_LOOP8),
|
||||
};
|
||||
|
||||
#ifdef CONFIG_GENERIC_CPU_VULNERABILITIES
|
||||
void spectre_v2_update_state(unsigned int state, unsigned int methods);
|
||||
#else
|
||||
static inline void spectre_v2_update_state(unsigned int state,
|
||||
unsigned int methods)
|
||||
{}
|
||||
#endif
|
||||
|
||||
int spectre_bhb_update_vectors(unsigned int method);
|
||||
|
||||
|
@ -1074,9 +1074,9 @@ vector_bhb_loop8_\name:
|
||||
|
||||
@ bhb workaround
|
||||
mov r0, #8
|
||||
1: b . + 4
|
||||
3: b . + 4
|
||||
subs r0, r0, #1
|
||||
bne 1b
|
||||
bne 3b
|
||||
dsb
|
||||
isb
|
||||
b 2b
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Digital I/O driver for Technologic Systems I2C FPGA Core
|
||||
*
|
||||
* Copyright (C) 2015 Technologic Systems
|
||||
* Copyright (C) 2015, 2018 Technologic Systems
|
||||
* Copyright (C) 2016 Savoir-Faire Linux
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@ -52,19 +52,33 @@ static int ts4900_gpio_direction_input(struct gpio_chip *chip,
|
||||
{
|
||||
struct ts4900_gpio_priv *priv = gpiochip_get_data(chip);
|
||||
|
||||
/*
|
||||
* This will clear the output enable bit, the other bits are
|
||||
* dontcare when this is cleared
|
||||
/* Only clear the OE bit here, requires a RMW. Prevents potential issue
|
||||
* with OE and data getting to the physical pin at different times.
|
||||
*/
|
||||
return regmap_write(priv->regmap, offset, 0);
|
||||
return regmap_update_bits(priv->regmap, offset, TS4900_GPIO_OE, 0);
|
||||
}
|
||||
|
||||
static int ts4900_gpio_direction_output(struct gpio_chip *chip,
|
||||
unsigned int offset, int value)
|
||||
{
|
||||
struct ts4900_gpio_priv *priv = gpiochip_get_data(chip);
|
||||
unsigned int reg;
|
||||
int ret;
|
||||
|
||||
/* If changing from an input to an output, we need to first set the
|
||||
* proper data bit to what is requested and then set OE bit. This
|
||||
* prevents a glitch that can occur on the IO line
|
||||
*/
|
||||
regmap_read(priv->regmap, offset, ®);
|
||||
if (!(reg & TS4900_GPIO_OE)) {
|
||||
if (value)
|
||||
reg = TS4900_GPIO_OUT;
|
||||
else
|
||||
reg &= ~TS4900_GPIO_OUT;
|
||||
|
||||
regmap_write(priv->regmap, offset, reg);
|
||||
}
|
||||
|
||||
if (value)
|
||||
ret = regmap_write(priv->regmap, offset, TS4900_GPIO_OE |
|
||||
TS4900_GPIO_OUT);
|
||||
|
@ -1515,6 +1515,7 @@ static int lpc_eth_drv_resume(struct platform_device *pdev)
|
||||
{
|
||||
struct net_device *ndev = platform_get_drvdata(pdev);
|
||||
struct netdata_local *pldat;
|
||||
int ret;
|
||||
|
||||
if (device_may_wakeup(&pdev->dev))
|
||||
disable_irq_wake(ndev->irq);
|
||||
@ -1524,7 +1525,9 @@ static int lpc_eth_drv_resume(struct platform_device *pdev)
|
||||
pldat = netdev_priv(ndev);
|
||||
|
||||
/* Enable interface clock */
|
||||
clk_enable(pldat->clk);
|
||||
ret = clk_enable(pldat->clk);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Reset and initialize */
|
||||
__lpc_eth_reset(pldat);
|
||||
|
@ -2899,11 +2899,11 @@ int qed_iov_mark_vf_flr(struct qed_hwfn *p_hwfn, u32 *p_disabled_vfs)
|
||||
return found;
|
||||
}
|
||||
|
||||
static void qed_iov_get_link(struct qed_hwfn *p_hwfn,
|
||||
u16 vfid,
|
||||
struct qed_mcp_link_params *p_params,
|
||||
struct qed_mcp_link_state *p_link,
|
||||
struct qed_mcp_link_capabilities *p_caps)
|
||||
static int qed_iov_get_link(struct qed_hwfn *p_hwfn,
|
||||
u16 vfid,
|
||||
struct qed_mcp_link_params *p_params,
|
||||
struct qed_mcp_link_state *p_link,
|
||||
struct qed_mcp_link_capabilities *p_caps)
|
||||
{
|
||||
struct qed_vf_info *p_vf = qed_iov_get_vf_info(p_hwfn,
|
||||
vfid,
|
||||
@ -2911,7 +2911,7 @@ static void qed_iov_get_link(struct qed_hwfn *p_hwfn,
|
||||
struct qed_bulletin_content *p_bulletin;
|
||||
|
||||
if (!p_vf)
|
||||
return;
|
||||
return -EINVAL;
|
||||
|
||||
p_bulletin = p_vf->bulletin.p_virt;
|
||||
|
||||
@ -2921,6 +2921,7 @@ static void qed_iov_get_link(struct qed_hwfn *p_hwfn,
|
||||
__qed_vf_get_link_state(p_hwfn, p_link, p_bulletin);
|
||||
if (p_caps)
|
||||
__qed_vf_get_link_caps(p_hwfn, p_caps, p_bulletin);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void qed_iov_process_mbx_req(struct qed_hwfn *p_hwfn,
|
||||
@ -3538,6 +3539,7 @@ static int qed_get_vf_config(struct qed_dev *cdev,
|
||||
struct qed_public_vf_info *vf_info;
|
||||
struct qed_mcp_link_state link;
|
||||
u32 tx_rate;
|
||||
int ret;
|
||||
|
||||
/* Sanitize request */
|
||||
if (IS_VF(cdev))
|
||||
@ -3551,7 +3553,9 @@ static int qed_get_vf_config(struct qed_dev *cdev,
|
||||
|
||||
vf_info = qed_iov_get_public_vf_info(hwfn, vf_id, true);
|
||||
|
||||
qed_iov_get_link(hwfn, vf_id, NULL, &link, NULL);
|
||||
ret = qed_iov_get_link(hwfn, vf_id, NULL, &link, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Fill information about VF */
|
||||
ivi->vf = vf_id;
|
||||
|
@ -384,6 +384,9 @@ int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn)
|
||||
p_iov->bulletin.size,
|
||||
&p_iov->bulletin.phys,
|
||||
GFP_KERNEL);
|
||||
if (!p_iov->bulletin.p_virt)
|
||||
goto free_pf2vf_reply;
|
||||
|
||||
DP_VERBOSE(p_hwfn, QED_MSG_IOV,
|
||||
"VF's bulletin Board [%p virt 0x%llx phys 0x%08x bytes]\n",
|
||||
p_iov->bulletin.p_virt,
|
||||
@ -397,6 +400,10 @@ int qed_vf_hw_prepare(struct qed_hwfn *p_hwfn)
|
||||
|
||||
return qed_vf_pf_acquire(p_hwfn);
|
||||
|
||||
free_pf2vf_reply:
|
||||
dma_free_coherent(&p_hwfn->cdev->pdev->dev,
|
||||
sizeof(union pfvf_tlvs),
|
||||
p_iov->pf2vf_reply, p_iov->pf2vf_reply_phys);
|
||||
free_vf2pf_request:
|
||||
dma_free_coherent(&p_hwfn->cdev->pdev->dev,
|
||||
sizeof(union vfpf_tlvs),
|
||||
|
@ -1175,7 +1175,7 @@ static int xemaclite_of_probe(struct platform_device *ofdev)
|
||||
if (rc) {
|
||||
dev_err(dev,
|
||||
"Cannot register network device, aborting\n");
|
||||
goto error;
|
||||
goto put_node;
|
||||
}
|
||||
|
||||
dev_info(dev,
|
||||
@ -1183,6 +1183,8 @@ static int xemaclite_of_probe(struct platform_device *ofdev)
|
||||
(unsigned int __force)ndev->mem_start, lp->base_addr, ndev->irq);
|
||||
return 0;
|
||||
|
||||
put_node:
|
||||
of_node_put(lp->phy_node);
|
||||
error:
|
||||
xemaclite_remove_ndev(ndev);
|
||||
return rc;
|
||||
|
@ -1040,15 +1040,11 @@ static void connect(struct backend_info *be)
|
||||
xenvif_carrier_on(be->vif);
|
||||
|
||||
unregister_hotplug_status_watch(be);
|
||||
if (xenbus_exists(XBT_NIL, dev->nodename, "hotplug-status")) {
|
||||
err = xenbus_watch_pathfmt(dev, &be->hotplug_status_watch,
|
||||
NULL, hotplug_status_changed,
|
||||
"%s/%s", dev->nodename,
|
||||
"hotplug-status");
|
||||
if (err)
|
||||
goto err;
|
||||
err = xenbus_watch_pathfmt(dev, &be->hotplug_status_watch, NULL,
|
||||
hotplug_status_changed,
|
||||
"%s/%s", dev->nodename, "hotplug-status");
|
||||
if (!err)
|
||||
be->have_hotplug_status_watch = 1;
|
||||
}
|
||||
|
||||
netif_tx_wake_all_queues(be->vif->dev);
|
||||
|
||||
|
@ -1617,7 +1617,9 @@ free_nfc_dev:
|
||||
nfc_digital_free_device(dev->nfc_digital_dev);
|
||||
|
||||
error:
|
||||
usb_kill_urb(dev->in_urb);
|
||||
usb_free_urb(dev->in_urb);
|
||||
usb_kill_urb(dev->out_urb);
|
||||
usb_free_urb(dev->out_urb);
|
||||
usb_put_dev(dev->udev);
|
||||
|
||||
|
@ -85,14 +85,15 @@ static void tx_complete(void *arg)
|
||||
|
||||
static int gdm_lte_rx(struct sk_buff *skb, struct nic *nic, int nic_type)
|
||||
{
|
||||
int ret;
|
||||
int ret, len;
|
||||
|
||||
len = skb->len + ETH_HLEN;
|
||||
ret = netif_rx_ni(skb);
|
||||
if (ret == NET_RX_DROP) {
|
||||
nic->stats.rx_dropped++;
|
||||
} else {
|
||||
nic->stats.rx_packets++;
|
||||
nic->stats.rx_bytes += skb->len + ETH_HLEN;
|
||||
nic->stats.rx_bytes += len;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -8457,6 +8457,7 @@ struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans,
|
||||
out_free_delayed:
|
||||
btrfs_free_delayed_extent_op(extent_op);
|
||||
out_free_buf:
|
||||
btrfs_tree_unlock(buf);
|
||||
free_extent_buffer(buf);
|
||||
out_free_reserved:
|
||||
btrfs_free_reserved_extent(root, ins.objectid, ins.offset, 0);
|
||||
|
@ -7327,8 +7327,8 @@ struct mlx5_ifc_bufferx_reg_bits {
|
||||
u8 reserved_at_0[0x6];
|
||||
u8 lossy[0x1];
|
||||
u8 epsb[0x1];
|
||||
u8 reserved_at_8[0xc];
|
||||
u8 size[0xc];
|
||||
u8 reserved_at_8[0x8];
|
||||
u8 size[0x10];
|
||||
|
||||
u8 xoff_threshold[0x10];
|
||||
u8 xon_threshold[0x10];
|
||||
|
@ -1077,10 +1077,12 @@ static int __init set_buf_size(char *str)
|
||||
if (!str)
|
||||
return 0;
|
||||
buf_size = memparse(str, &str);
|
||||
/* nr_entries can not be zero */
|
||||
if (buf_size == 0)
|
||||
return 0;
|
||||
trace_buf_size = buf_size;
|
||||
/*
|
||||
* nr_entries can not be zero and the startup
|
||||
* tests require some buffer space. Therefore
|
||||
* ensure we have at least 4096 bytes of buffer.
|
||||
*/
|
||||
trace_buf_size = max(4096UL, buf_size);
|
||||
return 1;
|
||||
}
|
||||
__setup("trace_buf_size=", set_buf_size);
|
||||
|
@ -90,6 +90,13 @@ again:
|
||||
ax25_for_each(s, &ax25_list) {
|
||||
if (s->ax25_dev == ax25_dev) {
|
||||
sk = s->sk;
|
||||
if (!sk) {
|
||||
spin_unlock_bh(&ax25_list_lock);
|
||||
s->ax25_dev = NULL;
|
||||
ax25_disconnect(s, ENETUNREACH);
|
||||
spin_lock_bh(&ax25_list_lock);
|
||||
goto again;
|
||||
}
|
||||
sock_hold(sk);
|
||||
spin_unlock_bh(&ax25_list_lock);
|
||||
lock_sock(sk);
|
||||
|
@ -155,22 +155,25 @@ static bool batadv_is_on_batman_iface(const struct net_device *net_dev)
|
||||
struct net *net = dev_net(net_dev);
|
||||
struct net_device *parent_dev;
|
||||
const struct net *parent_net;
|
||||
int iflink;
|
||||
bool ret;
|
||||
|
||||
/* check if this is a batman-adv mesh interface */
|
||||
if (batadv_softif_is_valid(net_dev))
|
||||
return true;
|
||||
|
||||
/* no more parents..stop recursion */
|
||||
if (dev_get_iflink(net_dev) == 0 ||
|
||||
dev_get_iflink(net_dev) == net_dev->ifindex)
|
||||
iflink = dev_get_iflink(net_dev);
|
||||
if (iflink == 0)
|
||||
return false;
|
||||
|
||||
parent_net = batadv_getlink_net(net_dev, net);
|
||||
|
||||
/* iflink to itself, most likely physical device */
|
||||
if (net == parent_net && iflink == net_dev->ifindex)
|
||||
return false;
|
||||
|
||||
/* recurse over the parent device */
|
||||
parent_dev = __dev_get_by_index((struct net *)parent_net,
|
||||
dev_get_iflink(net_dev));
|
||||
parent_dev = __dev_get_by_index((struct net *)parent_net, iflink);
|
||||
/* if we got a NULL parent_dev there is something broken.. */
|
||||
if (!parent_dev) {
|
||||
pr_err("Cannot find parent device\n");
|
||||
|
@ -198,7 +198,7 @@ static ssize_t speed_show(struct device *dev,
|
||||
if (!rtnl_trylock())
|
||||
return restart_syscall();
|
||||
|
||||
if (netif_running(netdev)) {
|
||||
if (netif_running(netdev) && netif_device_present(netdev)) {
|
||||
struct ethtool_link_ksettings cmd;
|
||||
|
||||
if (!__ethtool_get_link_ksettings(netdev, &cmd))
|
||||
|
@ -45,10 +45,6 @@ static void inet_diag_msg_sctpasoc_fill(struct inet_diag_msg *r,
|
||||
r->idiag_timer = SCTP_EVENT_TIMEOUT_T3_RTX;
|
||||
r->idiag_retrans = asoc->rtx_data_chunks;
|
||||
r->idiag_expires = jiffies_to_msecs(t3_rtx->expires - jiffies);
|
||||
} else {
|
||||
r->idiag_timer = 0;
|
||||
r->idiag_retrans = 0;
|
||||
r->idiag_expires = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -128,13 +124,14 @@ static int inet_sctp_diag_fill(struct sock *sk, struct sctp_association *asoc,
|
||||
r = nlmsg_data(nlh);
|
||||
BUG_ON(!sk_fullsock(sk));
|
||||
|
||||
r->idiag_timer = 0;
|
||||
r->idiag_retrans = 0;
|
||||
r->idiag_expires = 0;
|
||||
if (asoc) {
|
||||
inet_diag_msg_sctpasoc_fill(r, sk, asoc);
|
||||
} else {
|
||||
inet_diag_msg_common_fill(r, sk);
|
||||
r->idiag_state = sk->sk_state;
|
||||
r->idiag_timer = 0;
|
||||
r->idiag_retrans = 0;
|
||||
}
|
||||
|
||||
if (inet_diag_msg_attrs_fill(sk, skb, r, ext, user_ns, net_admin))
|
||||
|
@ -373,6 +373,7 @@ static void mfd_fail_write(int fd)
|
||||
printf("mmap()+mprotect() didn't fail as expected\n");
|
||||
abort();
|
||||
}
|
||||
munmap(p, mfd_def_size);
|
||||
}
|
||||
|
||||
/* verify PUNCH_HOLE fails */
|
||||
|
Reference in New Issue
Block a user