This is the 4.9.308 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmI606YACgkQONu9yGCS aT5dSRAAtz62QUqav1HUNF6ACm5NkPwb1qGuvtKdSYq+HU6FKSD41u4ZfRyydDn2 +LTrmDPu8+3m05CIDN4rzLZiynM01/F4qKVwU0Ib1bK7wlydgLdtX0InjXkgKcNK q888fTI4DiONeSDhb8NRBscGmHLB2q/8R2gJqtRTEGvGXflIaIqt01Ye99wE6g5f FVJfHfo+HCuSXZcJwP0DfCOSELld/GaRmg082GVhMVx8+R/6qF5WoVjyjR0KlG4b JLSp5W6ycQY9SoPsWM0GpQ/Kb1vkh7kd/KVioB1Goh09jTq8n1eDcUW2E6aZldSD UnO83F9dSAp/1VenQZSAfguCjZIv03sXN2QbGkmqhqawbV9AS+Aih/aokCLz9GqQ WCZ07/wd71RJsKG2dYEvtPZ6+iUxjRiA7zq4wzYGTmgWPRz3IYQ2VyuLVsgk4VnD 46IAlsj9ovp5cdP6SeQCCHq491UEXNXSur6b2c7SXdQtk34n09S96b9+9NzQduDn mucQHUwcUpyqCC/7TTMSiJ0xhqfcxQth7sexHqByUvrsUOkJdXM6wp/UGBzbT2F5 M0M+SxJMfE9vtWD3s5kjurFZ+/O/sVXCLplAF3h8SyPuFxoWgq1wy7xX/nioShPv dx0CEMTlzZ138E6oeK5EFWFMDWUrTic6ExGTGdGC1SvEigNiSWE= =0jcw -----END PGP SIGNATURE----- Merge 4.9.308 into android-4.9-q Changes in 4.9.308 xfrm: Fix xfrm migrate issues when address family changes ARM: dts: rockchip: fix a typo on rk3288 crypto-controller MIPS: smp: fill in sibling and core maps earlier ARM: 9178/1: fix unmet dependency on BITREVERSE for HAVE_ARCH_BITREVERSE can: rcar_canfd: rcar_canfd_channel_probe(): register the CAN device when fully ready atm: firestream: check the return value of ioremap() in fs_init() nl80211: Update bss channel on channel switch for P2P_CLIENT tcp: make tcp_read_sock() more robust sfc: extend the locking on mcdi->seqno kselftest/vm: fix tests build with old libc fs: sysfs_emit: Remove PAGE_SIZE alignment check net/packet: fix slab-out-of-bounds access in packet_recvmsg() atm: eni: Add check for dma_map_single usb: gadget: rndis: prevent integer overflow in rndis_set_response() usb: gadget: Fix use-after-free bug by not setting udc->dev.driver Input: aiptek - properly check endpoint type Linux 4.9.308 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I80ac58ecf47a1f78794ed37626b7a0c28f700f7c
This commit is contained in:
commit
76da5ffb3c
17 changed files with 43 additions and 30 deletions
2
Makefile
2
Makefile
|
|
@ -1,6 +1,6 @@
|
|||
VERSION = 4
|
||||
PATCHLEVEL = 9
|
||||
SUBLEVEL = 307
|
||||
SUBLEVEL = 308
|
||||
EXTRAVERSION =
|
||||
NAME = Roaring Lionus
|
||||
|
||||
|
|
|
|||
|
|
@ -918,7 +918,7 @@
|
|||
status = "disabled";
|
||||
};
|
||||
|
||||
crypto: cypto-controller@ff8a0000 {
|
||||
crypto: crypto@ff8a0000 {
|
||||
compatible = "rockchip,rk3288-crypto";
|
||||
reg = <0xff8a0000 0x4000>;
|
||||
interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>;
|
||||
|
|
|
|||
|
|
@ -369,6 +369,9 @@ asmlinkage void start_secondary(void)
|
|||
cpu = smp_processor_id();
|
||||
cpu_data[cpu].udelay_val = loops_per_jiffy;
|
||||
|
||||
set_cpu_sibling_map(cpu);
|
||||
set_cpu_core_map(cpu);
|
||||
|
||||
cpumask_set_cpu(cpu, &cpu_coherent_mask);
|
||||
notify_cpu_starting(cpu);
|
||||
|
||||
|
|
@ -380,9 +383,6 @@ asmlinkage void start_secondary(void)
|
|||
/* The CPU is running and counters synchronised, now mark it online */
|
||||
set_cpu_online(cpu, true);
|
||||
|
||||
set_cpu_sibling_map(cpu);
|
||||
set_cpu_core_map(cpu);
|
||||
|
||||
calculate_cpu_foreign_map();
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1114,6 +1114,8 @@ DPRINTK("iovcnt = %d\n",skb_shinfo(skb)->nr_frags);
|
|||
}
|
||||
paddr = dma_map_single(&eni_dev->pci_dev->dev,skb->data,skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(&eni_dev->pci_dev->dev, paddr))
|
||||
return enq_next;
|
||||
ENI_PRV_PADDR(skb) = paddr;
|
||||
/* prepare DMA queue entries */
|
||||
j = 0;
|
||||
|
|
|
|||
|
|
@ -1692,6 +1692,8 @@ static int fs_init(struct fs_dev *dev)
|
|||
dev->hw_base = pci_resource_start(pci_dev, 0);
|
||||
|
||||
dev->base = ioremap(dev->hw_base, 0x1000);
|
||||
if (!dev->base)
|
||||
return 1;
|
||||
|
||||
reset_chip (dev);
|
||||
|
||||
|
|
|
|||
|
|
@ -1821,15 +1821,13 @@ aiptek_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
input_set_abs_params(inputdev, ABS_TILT_Y, AIPTEK_TILT_MIN, AIPTEK_TILT_MAX, 0, 0);
|
||||
input_set_abs_params(inputdev, ABS_WHEEL, AIPTEK_WHEEL_MIN, AIPTEK_WHEEL_MAX - 1, 0, 0);
|
||||
|
||||
/* Verify that a device really has an endpoint */
|
||||
if (intf->cur_altsetting->desc.bNumEndpoints < 1) {
|
||||
err = usb_find_common_endpoints(intf->cur_altsetting,
|
||||
NULL, NULL, &endpoint, NULL);
|
||||
if (err) {
|
||||
dev_err(&intf->dev,
|
||||
"interface has %d endpoints, but must have minimum 1\n",
|
||||
intf->cur_altsetting->desc.bNumEndpoints);
|
||||
err = -EINVAL;
|
||||
"interface has no int in endpoints, but must have minimum 1\n");
|
||||
goto fail3;
|
||||
}
|
||||
endpoint = &intf->cur_altsetting->endpoint[0].desc;
|
||||
|
||||
/* Go set up our URB, which is called when the tablet receives
|
||||
* input.
|
||||
|
|
|
|||
|
|
@ -1601,15 +1601,15 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,
|
|||
|
||||
netif_napi_add(ndev, &priv->napi, rcar_canfd_rx_poll,
|
||||
RCANFD_NAPI_WEIGHT);
|
||||
spin_lock_init(&priv->tx_lock);
|
||||
devm_can_led_init(ndev);
|
||||
gpriv->ch[priv->channel] = priv;
|
||||
err = register_candev(ndev);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev,
|
||||
"register_candev() failed, error %d\n", err);
|
||||
goto fail_candev;
|
||||
}
|
||||
spin_lock_init(&priv->tx_lock);
|
||||
devm_can_led_init(ndev);
|
||||
gpriv->ch[priv->channel] = priv;
|
||||
dev_info(&pdev->dev, "device registered (channel %u)\n", priv->channel);
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -162,9 +162,9 @@ static void efx_mcdi_send_request(struct efx_nic *efx, unsigned cmd,
|
|||
/* Serialise with efx_mcdi_ev_cpl() and efx_mcdi_ev_death() */
|
||||
spin_lock_bh(&mcdi->iface_lock);
|
||||
++mcdi->seqno;
|
||||
seqno = mcdi->seqno & SEQ_MASK;
|
||||
spin_unlock_bh(&mcdi->iface_lock);
|
||||
|
||||
seqno = mcdi->seqno & SEQ_MASK;
|
||||
xflags = 0;
|
||||
if (mcdi->mode == MCDI_MODE_EVENTS)
|
||||
xflags |= MCDI_HEADER_XFLAGS_EVREQ;
|
||||
|
|
|
|||
|
|
@ -645,6 +645,7 @@ static int rndis_set_response(struct rndis_params *params,
|
|||
BufLength = le32_to_cpu(buf->InformationBufferLength);
|
||||
BufOffset = le32_to_cpu(buf->InformationBufferOffset);
|
||||
if ((BufLength > RNDIS_MAX_TOTAL_SIZE) ||
|
||||
(BufOffset > RNDIS_MAX_TOTAL_SIZE) ||
|
||||
(BufOffset + 8 >= RNDIS_MAX_TOTAL_SIZE))
|
||||
return -EINVAL;
|
||||
|
||||
|
|
|
|||
|
|
@ -1253,7 +1253,6 @@ static void usb_gadget_remove_driver(struct usb_udc *udc)
|
|||
usb_gadget_udc_stop(udc);
|
||||
|
||||
udc->driver = NULL;
|
||||
udc->dev.driver = NULL;
|
||||
udc->gadget->dev.driver = NULL;
|
||||
}
|
||||
|
||||
|
|
@ -1301,7 +1300,6 @@ static int udc_bind_to_driver(struct usb_udc *udc, struct usb_gadget_driver *dri
|
|||
driver->function);
|
||||
|
||||
udc->driver = driver;
|
||||
udc->dev.driver = &driver->driver;
|
||||
udc->gadget->dev.driver = &driver->driver;
|
||||
|
||||
ret = driver->bind(udc->gadget, driver);
|
||||
|
|
@ -1321,7 +1319,6 @@ err1:
|
|||
dev_err(&udc->dev, "failed to start %s: %d\n",
|
||||
udc->driver->function, ret);
|
||||
udc->driver = NULL;
|
||||
udc->dev.driver = NULL;
|
||||
udc->gadget->dev.driver = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -565,8 +565,7 @@ int sysfs_emit(char *buf, const char *fmt, ...)
|
|||
va_list args;
|
||||
int len;
|
||||
|
||||
if (WARN(!buf || offset_in_page(buf),
|
||||
"invalid sysfs_emit: buf:%p\n", buf))
|
||||
if (WARN(!buf, "invalid sysfs_emit: buf:%p\n", buf))
|
||||
return 0;
|
||||
|
||||
va_start(args, fmt);
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ config BITREVERSE
|
|||
config HAVE_ARCH_BITREVERSE
|
||||
bool
|
||||
default n
|
||||
depends on BITREVERSE
|
||||
help
|
||||
This option enables the use of hardware bit-reversal instructions on
|
||||
architectures which support such operations.
|
||||
|
|
|
|||
|
|
@ -1584,11 +1584,13 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
|
|||
if (!copied)
|
||||
copied = used;
|
||||
break;
|
||||
} else if (used <= len) {
|
||||
seq += used;
|
||||
copied += used;
|
||||
offset += used;
|
||||
}
|
||||
if (WARN_ON_ONCE(used > len))
|
||||
used = len;
|
||||
seq += used;
|
||||
copied += used;
|
||||
offset += used;
|
||||
|
||||
/* If recv_actor drops the lock (e.g. TCP splice
|
||||
* receive) the skb pointer might be invalid when
|
||||
* getting here: tcp_collapse might have deleted it
|
||||
|
|
|
|||
|
|
@ -2244,8 +2244,11 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
|
|||
copy_skb = skb_get(skb);
|
||||
skb_head = skb->data;
|
||||
}
|
||||
if (copy_skb)
|
||||
if (copy_skb) {
|
||||
memset(&PACKET_SKB_CB(copy_skb)->sa.ll, 0,
|
||||
sizeof(PACKET_SKB_CB(copy_skb)->sa.ll));
|
||||
skb_set_owner_r(copy_skb, sk);
|
||||
}
|
||||
}
|
||||
snaplen = po->rx_ring.frame_size - macoff;
|
||||
if ((int)snaplen < 0) {
|
||||
|
|
@ -3422,6 +3425,8 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
|
|||
sock_recv_ts_and_drops(msg, sk, skb);
|
||||
|
||||
if (msg->msg_name) {
|
||||
const size_t max_len = min(sizeof(skb->cb),
|
||||
sizeof(struct sockaddr_storage));
|
||||
int copy_len;
|
||||
|
||||
/* If the address length field is there to be filled
|
||||
|
|
@ -3444,6 +3449,10 @@ static int packet_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
|
|||
msg->msg_namelen = sizeof(struct sockaddr_ll);
|
||||
}
|
||||
}
|
||||
if (WARN_ON_ONCE(copy_len > max_len)) {
|
||||
copy_len = max_len;
|
||||
msg->msg_namelen = copy_len;
|
||||
}
|
||||
memcpy(msg->msg_name, &PACKET_SKB_CB(skb)->sa, copy_len);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14068,7 +14068,8 @@ void cfg80211_ch_switch_notify(struct net_device *dev,
|
|||
wdev->chandef = *chandef;
|
||||
wdev->preset_chandef = *chandef;
|
||||
|
||||
if (wdev->iftype == NL80211_IFTYPE_STATION &&
|
||||
if ((wdev->iftype == NL80211_IFTYPE_STATION ||
|
||||
wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) &&
|
||||
!WARN_ON(!wdev->current_bss))
|
||||
wdev->current_bss->pub.channel = chandef->chan;
|
||||
|
||||
|
|
|
|||
|
|
@ -1247,9 +1247,6 @@ static struct xfrm_state *xfrm_state_clone(struct xfrm_state *orig)
|
|||
memcpy(&x->mark, &orig->mark, sizeof(x->mark));
|
||||
memcpy(&x->props.smark, &orig->props.smark, sizeof(x->props.smark));
|
||||
|
||||
if (xfrm_init_state(x) < 0)
|
||||
goto error;
|
||||
|
||||
x->props.flags = orig->props.flags;
|
||||
x->props.extra_flags = orig->props.extra_flags;
|
||||
|
||||
|
|
@ -1327,6 +1324,11 @@ struct xfrm_state *xfrm_state_migrate(struct xfrm_state *x,
|
|||
if (!xc)
|
||||
return NULL;
|
||||
|
||||
xc->props.family = m->new_family;
|
||||
|
||||
if (xfrm_init_state(xc) < 0)
|
||||
goto error;
|
||||
|
||||
memcpy(&xc->id.daddr, &m->new_daddr, sizeof(xc->id.daddr));
|
||||
memcpy(&xc->props.saddr, &m->new_saddr, sizeof(xc->props.saddr));
|
||||
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@
|
|||
#include <signal.h>
|
||||
#include <poll.h>
|
||||
#include <string.h>
|
||||
#include <linux/mman.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/syscall.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
|
|
|||
Loading…
Reference in a new issue