Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/renesas/ravb_main.c kernel/bpf/syscall.c net/ipv4/ipmr.c All three conflicts were cases of overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -972,7 +972,7 @@ static int sctp_setsockopt_bindx(struct sock *sk,
|
||||
return -EFAULT;
|
||||
|
||||
/* Alloc space for the address array in kernel memory. */
|
||||
kaddrs = kmalloc(addrs_size, GFP_KERNEL);
|
||||
kaddrs = kmalloc(addrs_size, GFP_USER | __GFP_NOWARN);
|
||||
if (unlikely(!kaddrs))
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -4928,7 +4928,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
|
||||
to = optval + offsetof(struct sctp_getaddrs, addrs);
|
||||
space_left = len - offsetof(struct sctp_getaddrs, addrs);
|
||||
|
||||
addrs = kmalloc(space_left, GFP_KERNEL);
|
||||
addrs = kmalloc(space_left, GFP_USER | __GFP_NOWARN);
|
||||
if (!addrs)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -6458,7 +6458,7 @@ unsigned int sctp_poll(struct file *file, struct socket *sock, poll_table *wait)
|
||||
if (sctp_writeable(sk)) {
|
||||
mask |= POLLOUT | POLLWRNORM;
|
||||
} else {
|
||||
set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
|
||||
sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);
|
||||
/*
|
||||
* Since the socket is not locked, the buffer
|
||||
* might be made available after the writeable check and
|
||||
@@ -6801,26 +6801,30 @@ no_packet:
|
||||
static void __sctp_write_space(struct sctp_association *asoc)
|
||||
{
|
||||
struct sock *sk = asoc->base.sk;
|
||||
struct socket *sock = sk->sk_socket;
|
||||
|
||||
if ((sctp_wspace(asoc) > 0) && sock) {
|
||||
if (waitqueue_active(&asoc->wait))
|
||||
wake_up_interruptible(&asoc->wait);
|
||||
if (sctp_wspace(asoc) <= 0)
|
||||
return;
|
||||
|
||||
if (sctp_writeable(sk)) {
|
||||
wait_queue_head_t *wq = sk_sleep(sk);
|
||||
if (waitqueue_active(&asoc->wait))
|
||||
wake_up_interruptible(&asoc->wait);
|
||||
|
||||
if (wq && waitqueue_active(wq))
|
||||
wake_up_interruptible(wq);
|
||||
if (sctp_writeable(sk)) {
|
||||
struct socket_wq *wq;
|
||||
|
||||
rcu_read_lock();
|
||||
wq = rcu_dereference(sk->sk_wq);
|
||||
if (wq) {
|
||||
if (waitqueue_active(&wq->wait))
|
||||
wake_up_interruptible(&wq->wait);
|
||||
|
||||
/* Note that we try to include the Async I/O support
|
||||
* here by modeling from the current TCP/UDP code.
|
||||
* We have not tested with it yet.
|
||||
*/
|
||||
if (!(sk->sk_shutdown & SEND_SHUTDOWN))
|
||||
sock_wake_async(sock,
|
||||
SOCK_WAKE_SPACE, POLL_OUT);
|
||||
sock_wake_async(wq, SOCK_WAKE_SPACE, POLL_OUT);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7375,6 +7379,13 @@ struct proto sctp_prot = {
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
|
||||
#include <net/transp_v6.h>
|
||||
static void sctp_v6_destroy_sock(struct sock *sk)
|
||||
{
|
||||
sctp_destroy_sock(sk);
|
||||
inet6_destroy_sock(sk);
|
||||
}
|
||||
|
||||
struct proto sctpv6_prot = {
|
||||
.name = "SCTPv6",
|
||||
.owner = THIS_MODULE,
|
||||
@@ -7384,7 +7395,7 @@ struct proto sctpv6_prot = {
|
||||
.accept = sctp_accept,
|
||||
.ioctl = sctp_ioctl,
|
||||
.init = sctp_init_sock,
|
||||
.destroy = sctp_destroy_sock,
|
||||
.destroy = sctp_v6_destroy_sock,
|
||||
.shutdown = sctp_shutdown,
|
||||
.setsockopt = sctp_setsockopt,
|
||||
.getsockopt = sctp_getsockopt,
|
||||
|
Reference in New Issue
Block a user