mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1699 commits) bnx2/bnx2x: Unsupported Ethtool operations should return -EINVAL. vlan: Calling vlan_hwaccel_do_receive() is always valid. tproxy: use the interface primary IP address as a default value for --on-ip tproxy: added IPv6 support to the socket match cxgb3: function namespace cleanup tproxy: added IPv6 support to the TPROXY target tproxy: added IPv6 socket lookup function to nf_tproxy_core be2net: Changes to use only priority codes allowed by f/w tproxy: allow non-local binds of IPv6 sockets if IP_TRANSPARENT is enabled tproxy: added tproxy sockopt interface in the IPV6 layer tproxy: added udp6_lib_lookup function tproxy: added const specifiers to udp lookup functions tproxy: split off ipv6 defragmentation to a separate module l2tp: small cleanup nf_nat: restrict ICMP translation for embedded header can: mcp251x: fix generation of error frames can: mcp251x: fix endless loop in interrupt handler if CANINTF_MERRF is set can-raw: add msg_flags to distinguish local traffic 9p: client code cleanup rds: make local functions/variables static ... Fix up conflicts in net/core/dev.c, drivers/net/pcmcia/smc91c92_cs.c and drivers/net/wireless/ath/ath9k/debug.c as per David
This commit is contained in:
commit
5f05647dd8
1341 changed files with 157282 additions and 84033 deletions
|
|
@ -48,6 +48,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/fcntl.h>
|
||||
#include <linux/poll.h>
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/net.h>
|
||||
|
|
|
|||
|
|
@ -43,6 +43,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <net/sctp/sctp.h>
|
||||
#include <net/sctp/sm.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/types.h>
|
||||
|
|
@ -336,7 +338,7 @@ static void sctp_v6_get_saddr(struct sctp_sock *sk,
|
|||
memcpy(saddr, baddr, sizeof(union sctp_addr));
|
||||
SCTP_DEBUG_PRINTK("saddr: %pI6\n", &saddr->v6.sin6_addr);
|
||||
} else {
|
||||
printk(KERN_ERR "%s: asoc:%p Could not find a valid source "
|
||||
pr_err("%s: asoc:%p Could not find a valid source "
|
||||
"address for the dest:%pI6\n",
|
||||
__func__, asoc, &daddr->v6.sin6_addr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <net/sctp/sctp.h>
|
||||
|
||||
|
|
@ -134,8 +136,7 @@ void sctp_dbg_objcnt_init(void)
|
|||
ent = proc_create("sctp_dbg_objcnt", 0,
|
||||
proc_net_sctp, &sctp_objcnt_ops);
|
||||
if (!ent)
|
||||
printk(KERN_WARNING
|
||||
"sctp_dbg_objcnt: Unable to create /proc entry.\n");
|
||||
pr_warn("sctp_dbg_objcnt: Unable to create /proc entry.\n");
|
||||
}
|
||||
|
||||
/* Cleanup the objcount entry in the proc filesystem. */
|
||||
|
|
|
|||
|
|
@ -41,6 +41,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/wait.h>
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/list.h> /* For struct list_head */
|
||||
#include <linux/socket.h>
|
||||
|
|
@ -1463,23 +1465,23 @@ static void sctp_check_transmitted(struct sctp_outq *q,
|
|||
/* Display the end of the
|
||||
* current range.
|
||||
*/
|
||||
SCTP_DEBUG_PRINTK("-%08x",
|
||||
dbg_last_ack_tsn);
|
||||
SCTP_DEBUG_PRINTK_CONT("-%08x",
|
||||
dbg_last_ack_tsn);
|
||||
}
|
||||
|
||||
/* Start a new range. */
|
||||
SCTP_DEBUG_PRINTK(",%08x", tsn);
|
||||
SCTP_DEBUG_PRINTK_CONT(",%08x", tsn);
|
||||
dbg_ack_tsn = tsn;
|
||||
break;
|
||||
|
||||
case 1: /* The last TSN was NOT ACKed. */
|
||||
if (dbg_last_kept_tsn != dbg_kept_tsn) {
|
||||
/* Display the end of current range. */
|
||||
SCTP_DEBUG_PRINTK("-%08x",
|
||||
dbg_last_kept_tsn);
|
||||
SCTP_DEBUG_PRINTK_CONT("-%08x",
|
||||
dbg_last_kept_tsn);
|
||||
}
|
||||
|
||||
SCTP_DEBUG_PRINTK("\n");
|
||||
SCTP_DEBUG_PRINTK_CONT("\n");
|
||||
|
||||
/* FALL THROUGH... */
|
||||
default:
|
||||
|
|
@ -1526,18 +1528,18 @@ static void sctp_check_transmitted(struct sctp_outq *q,
|
|||
break;
|
||||
|
||||
if (dbg_last_kept_tsn != dbg_kept_tsn)
|
||||
SCTP_DEBUG_PRINTK("-%08x",
|
||||
dbg_last_kept_tsn);
|
||||
SCTP_DEBUG_PRINTK_CONT("-%08x",
|
||||
dbg_last_kept_tsn);
|
||||
|
||||
SCTP_DEBUG_PRINTK(",%08x", tsn);
|
||||
SCTP_DEBUG_PRINTK_CONT(",%08x", tsn);
|
||||
dbg_kept_tsn = tsn;
|
||||
break;
|
||||
|
||||
case 0:
|
||||
if (dbg_last_ack_tsn != dbg_ack_tsn)
|
||||
SCTP_DEBUG_PRINTK("-%08x",
|
||||
dbg_last_ack_tsn);
|
||||
SCTP_DEBUG_PRINTK("\n");
|
||||
SCTP_DEBUG_PRINTK_CONT("-%08x",
|
||||
dbg_last_ack_tsn);
|
||||
SCTP_DEBUG_PRINTK_CONT("\n");
|
||||
|
||||
/* FALL THROUGH... */
|
||||
default:
|
||||
|
|
@ -1556,17 +1558,17 @@ static void sctp_check_transmitted(struct sctp_outq *q,
|
|||
switch (dbg_prt_state) {
|
||||
case 0:
|
||||
if (dbg_last_ack_tsn != dbg_ack_tsn) {
|
||||
SCTP_DEBUG_PRINTK("-%08x\n", dbg_last_ack_tsn);
|
||||
SCTP_DEBUG_PRINTK_CONT("-%08x\n", dbg_last_ack_tsn);
|
||||
} else {
|
||||
SCTP_DEBUG_PRINTK("\n");
|
||||
SCTP_DEBUG_PRINTK_CONT("\n");
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (dbg_last_kept_tsn != dbg_kept_tsn) {
|
||||
SCTP_DEBUG_PRINTK("-%08x\n", dbg_last_kept_tsn);
|
||||
SCTP_DEBUG_PRINTK_CONT("-%08x\n", dbg_last_kept_tsn);
|
||||
} else {
|
||||
SCTP_DEBUG_PRINTK("\n");
|
||||
SCTP_DEBUG_PRINTK_CONT("\n");
|
||||
}
|
||||
}
|
||||
#endif /* SCTP_DEBUG */
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/kprobes.h>
|
||||
#include <linux/socket.h>
|
||||
|
|
@ -193,7 +195,7 @@ static __init int sctpprobe_init(void)
|
|||
if (ret)
|
||||
goto remove_proc;
|
||||
|
||||
pr_info("SCTP probe registered (port=%d)\n", port);
|
||||
pr_info("probe registered (port=%d)\n", port);
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/netdevice.h>
|
||||
|
|
@ -707,8 +709,7 @@ static int sctp_ctl_sock_init(void)
|
|||
&init_net);
|
||||
|
||||
if (err < 0) {
|
||||
printk(KERN_ERR
|
||||
"SCTP: Failed to create the SCTP control socket.\n");
|
||||
pr_err("Failed to create the SCTP control socket\n");
|
||||
return err;
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -798,7 +799,7 @@ static void sctp_inet_skb_msgname(struct sk_buff *skb, char *msgname, int *len)
|
|||
static int sctp_inet_af_supported(sa_family_t family, struct sctp_sock *sp)
|
||||
{
|
||||
/* PF_INET only supports AF_INET addresses. */
|
||||
return (AF_INET == family);
|
||||
return AF_INET == family;
|
||||
}
|
||||
|
||||
/* Address matching with wildcards allowed. */
|
||||
|
|
@ -1206,7 +1207,7 @@ SCTP_STATIC __init int sctp_init(void)
|
|||
__get_free_pages(GFP_ATOMIC, order);
|
||||
} while (!sctp_assoc_hashtable && --order > 0);
|
||||
if (!sctp_assoc_hashtable) {
|
||||
printk(KERN_ERR "SCTP: Failed association hash alloc.\n");
|
||||
pr_err("Failed association hash alloc\n");
|
||||
status = -ENOMEM;
|
||||
goto err_ahash_alloc;
|
||||
}
|
||||
|
|
@ -1220,7 +1221,7 @@ SCTP_STATIC __init int sctp_init(void)
|
|||
sctp_ep_hashtable = (struct sctp_hashbucket *)
|
||||
kmalloc(64 * sizeof(struct sctp_hashbucket), GFP_KERNEL);
|
||||
if (!sctp_ep_hashtable) {
|
||||
printk(KERN_ERR "SCTP: Failed endpoint_hash alloc.\n");
|
||||
pr_err("Failed endpoint_hash alloc\n");
|
||||
status = -ENOMEM;
|
||||
goto err_ehash_alloc;
|
||||
}
|
||||
|
|
@ -1239,7 +1240,7 @@ SCTP_STATIC __init int sctp_init(void)
|
|||
__get_free_pages(GFP_ATOMIC, order);
|
||||
} while (!sctp_port_hashtable && --order > 0);
|
||||
if (!sctp_port_hashtable) {
|
||||
printk(KERN_ERR "SCTP: Failed bind hash alloc.");
|
||||
pr_err("Failed bind hash alloc\n");
|
||||
status = -ENOMEM;
|
||||
goto err_bhash_alloc;
|
||||
}
|
||||
|
|
@ -1248,8 +1249,7 @@ SCTP_STATIC __init int sctp_init(void)
|
|||
INIT_HLIST_HEAD(&sctp_port_hashtable[i].chain);
|
||||
}
|
||||
|
||||
printk(KERN_INFO "SCTP: Hash tables configured "
|
||||
"(established %d bind %d)\n",
|
||||
pr_info("Hash tables configured (established %d bind %d)\n",
|
||||
sctp_assoc_hashsize, sctp_port_hashsize);
|
||||
|
||||
/* Disable ADDIP by default. */
|
||||
|
|
@ -1290,8 +1290,7 @@ SCTP_STATIC __init int sctp_init(void)
|
|||
|
||||
/* Initialize the control inode/socket for handling OOTB packets. */
|
||||
if ((status = sctp_ctl_sock_init())) {
|
||||
printk (KERN_ERR
|
||||
"SCTP: Failed to initialize the SCTP control sock.\n");
|
||||
pr_err("Failed to initialize the SCTP control sock\n");
|
||||
goto err_ctl_sock_init;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/ip.h>
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/socket.h>
|
||||
|
|
@ -1146,26 +1148,23 @@ static int sctp_side_effects(sctp_event_t event_type, sctp_subtype_t subtype,
|
|||
|
||||
case SCTP_DISPOSITION_VIOLATION:
|
||||
if (net_ratelimit())
|
||||
printk(KERN_ERR "sctp protocol violation state %d "
|
||||
"chunkid %d\n", state, subtype.chunk);
|
||||
pr_err("protocol violation state %d chunkid %d\n",
|
||||
state, subtype.chunk);
|
||||
break;
|
||||
|
||||
case SCTP_DISPOSITION_NOT_IMPL:
|
||||
printk(KERN_WARNING "sctp unimplemented feature in state %d, "
|
||||
"event_type %d, event_id %d\n",
|
||||
state, event_type, subtype.chunk);
|
||||
pr_warn("unimplemented feature in state %d, event_type %d, event_id %d\n",
|
||||
state, event_type, subtype.chunk);
|
||||
break;
|
||||
|
||||
case SCTP_DISPOSITION_BUG:
|
||||
printk(KERN_ERR "sctp bug in state %d, "
|
||||
"event_type %d, event_id %d\n",
|
||||
pr_err("bug in state %d, event_type %d, event_id %d\n",
|
||||
state, event_type, subtype.chunk);
|
||||
BUG();
|
||||
break;
|
||||
|
||||
default:
|
||||
printk(KERN_ERR "sctp impossible disposition %d "
|
||||
"in state %d, event_type %d, event_id %d\n",
|
||||
pr_err("impossible disposition %d in state %d, event_type %d, event_id %d\n",
|
||||
status, state, event_type, subtype.chunk);
|
||||
BUG();
|
||||
break;
|
||||
|
|
@ -1679,8 +1678,8 @@ static int sctp_cmd_interpreter(sctp_event_t event_type,
|
|||
sctp_cmd_send_asconf(asoc);
|
||||
break;
|
||||
default:
|
||||
printk(KERN_WARNING "Impossible command: %u, %p\n",
|
||||
cmd->verb, cmd->obj.ptr);
|
||||
pr_warn("Impossible command: %u, %p\n",
|
||||
cmd->verb, cmd->obj.ptr);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/ip.h>
|
||||
|
|
@ -1138,18 +1140,16 @@ sctp_disposition_t sctp_sf_backbeat_8_3(const struct sctp_endpoint *ep,
|
|||
if (unlikely(!link)) {
|
||||
if (from_addr.sa.sa_family == AF_INET6) {
|
||||
if (net_ratelimit())
|
||||
printk(KERN_WARNING
|
||||
"%s association %p could not find address %pI6\n",
|
||||
__func__,
|
||||
asoc,
|
||||
&from_addr.v6.sin6_addr);
|
||||
pr_warn("%s association %p could not find address %pI6\n",
|
||||
__func__,
|
||||
asoc,
|
||||
&from_addr.v6.sin6_addr);
|
||||
} else {
|
||||
if (net_ratelimit())
|
||||
printk(KERN_WARNING
|
||||
"%s association %p could not find address %pI4\n",
|
||||
__func__,
|
||||
asoc,
|
||||
&from_addr.v4.sin_addr.s_addr);
|
||||
pr_warn("%s association %p could not find address %pI4\n",
|
||||
__func__,
|
||||
asoc,
|
||||
&from_addr.v4.sin_addr.s_addr);
|
||||
}
|
||||
return SCTP_DISPOSITION_DISCARD;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/skbuff.h>
|
||||
#include <net/sctp/sctp.h>
|
||||
#include <net/sctp/sm.h>
|
||||
|
|
@ -66,15 +68,19 @@ static const sctp_sm_table_entry_t bug = {
|
|||
.name = "sctp_sf_bug"
|
||||
};
|
||||
|
||||
#define DO_LOOKUP(_max, _type, _table) \
|
||||
if ((event_subtype._type > (_max))) { \
|
||||
printk(KERN_WARNING \
|
||||
"sctp table %p possible attack:" \
|
||||
" event %d exceeds max %d\n", \
|
||||
_table, event_subtype._type, _max); \
|
||||
return &bug; \
|
||||
} \
|
||||
return &_table[event_subtype._type][(int)state];
|
||||
#define DO_LOOKUP(_max, _type, _table) \
|
||||
({ \
|
||||
const sctp_sm_table_entry_t *rtn; \
|
||||
\
|
||||
if ((event_subtype._type > (_max))) { \
|
||||
pr_warn("table %p possible attack: event %d exceeds max %d\n", \
|
||||
_table, event_subtype._type, _max); \
|
||||
rtn = &bug; \
|
||||
} else \
|
||||
rtn = &_table[event_subtype._type][(int)state]; \
|
||||
\
|
||||
rtn; \
|
||||
})
|
||||
|
||||
const sctp_sm_table_entry_t *sctp_sm_lookup_event(sctp_event_t event_type,
|
||||
sctp_state_t state,
|
||||
|
|
@ -83,21 +89,15 @@ const sctp_sm_table_entry_t *sctp_sm_lookup_event(sctp_event_t event_type,
|
|||
switch (event_type) {
|
||||
case SCTP_EVENT_T_CHUNK:
|
||||
return sctp_chunk_event_lookup(event_subtype.chunk, state);
|
||||
break;
|
||||
case SCTP_EVENT_T_TIMEOUT:
|
||||
DO_LOOKUP(SCTP_EVENT_TIMEOUT_MAX, timeout,
|
||||
timeout_event_table);
|
||||
break;
|
||||
|
||||
return DO_LOOKUP(SCTP_EVENT_TIMEOUT_MAX, timeout,
|
||||
timeout_event_table);
|
||||
case SCTP_EVENT_T_OTHER:
|
||||
DO_LOOKUP(SCTP_EVENT_OTHER_MAX, other, other_event_table);
|
||||
break;
|
||||
|
||||
return DO_LOOKUP(SCTP_EVENT_OTHER_MAX, other,
|
||||
other_event_table);
|
||||
case SCTP_EVENT_T_PRIMITIVE:
|
||||
DO_LOOKUP(SCTP_EVENT_PRIMITIVE_MAX, primitive,
|
||||
primitive_event_table);
|
||||
break;
|
||||
|
||||
return DO_LOOKUP(SCTP_EVENT_PRIMITIVE_MAX, primitive,
|
||||
primitive_event_table);
|
||||
default:
|
||||
/* Yikes! We got an illegal event type. */
|
||||
return &bug;
|
||||
|
|
|
|||
|
|
@ -57,6 +57,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/wait.h>
|
||||
|
|
@ -2469,9 +2471,8 @@ static int sctp_setsockopt_delayed_ack(struct sock *sk,
|
|||
if (params.sack_delay == 0 && params.sack_freq == 0)
|
||||
return 0;
|
||||
} else if (optlen == sizeof(struct sctp_assoc_value)) {
|
||||
printk(KERN_WARNING "SCTP: Use of struct sctp_assoc_value "
|
||||
"in delayed_ack socket option deprecated\n");
|
||||
printk(KERN_WARNING "SCTP: Use struct sctp_sack_info instead\n");
|
||||
pr_warn("Use of struct sctp_assoc_value in delayed_ack socket option deprecated\n");
|
||||
pr_warn("Use struct sctp_sack_info instead\n");
|
||||
if (copy_from_user(¶ms, optval, optlen))
|
||||
return -EFAULT;
|
||||
|
||||
|
|
@ -2879,10 +2880,8 @@ static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, unsigned
|
|||
int val;
|
||||
|
||||
if (optlen == sizeof(int)) {
|
||||
printk(KERN_WARNING
|
||||
"SCTP: Use of int in maxseg socket option deprecated\n");
|
||||
printk(KERN_WARNING
|
||||
"SCTP: Use struct sctp_assoc_value instead\n");
|
||||
pr_warn("Use of int in maxseg socket option deprecated\n");
|
||||
pr_warn("Use struct sctp_assoc_value instead\n");
|
||||
if (copy_from_user(&val, optval, optlen))
|
||||
return -EFAULT;
|
||||
params.assoc_id = 0;
|
||||
|
|
@ -3132,10 +3131,8 @@ static int sctp_setsockopt_maxburst(struct sock *sk,
|
|||
int assoc_id = 0;
|
||||
|
||||
if (optlen == sizeof(int)) {
|
||||
printk(KERN_WARNING
|
||||
"SCTP: Use of int in max_burst socket option deprecated\n");
|
||||
printk(KERN_WARNING
|
||||
"SCTP: Use struct sctp_assoc_value instead\n");
|
||||
pr_warn("Use of int in max_burst socket option deprecated\n");
|
||||
pr_warn("Use struct sctp_assoc_value instead\n");
|
||||
if (copy_from_user(&val, optval, optlen))
|
||||
return -EFAULT;
|
||||
} else if (optlen == sizeof(struct sctp_assoc_value)) {
|
||||
|
|
@ -3606,7 +3603,40 @@ out:
|
|||
/* The SCTP ioctl handler. */
|
||||
SCTP_STATIC int sctp_ioctl(struct sock *sk, int cmd, unsigned long arg)
|
||||
{
|
||||
return -ENOIOCTLCMD;
|
||||
int rc = -ENOTCONN;
|
||||
|
||||
sctp_lock_sock(sk);
|
||||
|
||||
/*
|
||||
* SEQPACKET-style sockets in LISTENING state are valid, for
|
||||
* SCTP, so only discard TCP-style sockets in LISTENING state.
|
||||
*/
|
||||
if (sctp_style(sk, TCP) && sctp_sstate(sk, LISTENING))
|
||||
goto out;
|
||||
|
||||
switch (cmd) {
|
||||
case SIOCINQ: {
|
||||
struct sk_buff *skb;
|
||||
unsigned int amount = 0;
|
||||
|
||||
skb = skb_peek(&sk->sk_receive_queue);
|
||||
if (skb != NULL) {
|
||||
/*
|
||||
* We will only return the amount of this packet since
|
||||
* that is all that will be read.
|
||||
*/
|
||||
amount = skb->len;
|
||||
}
|
||||
rc = put_user(amount, (int __user *)arg);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
rc = -ENOIOCTLCMD;
|
||||
break;
|
||||
}
|
||||
out:
|
||||
sctp_release_sock(sk);
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* This is the function which gets called during socket creation to
|
||||
|
|
@ -3865,7 +3895,7 @@ static int sctp_getsockopt_sctp_status(struct sock *sk, int len,
|
|||
}
|
||||
|
||||
out:
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -3921,7 +3951,7 @@ static int sctp_getsockopt_peer_addr_info(struct sock *sk, int len,
|
|||
}
|
||||
|
||||
out:
|
||||
return (retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* 7.1.12 Enable/Disable message fragmentation (SCTP_DISABLE_FRAGMENTS)
|
||||
|
|
@ -4292,9 +4322,8 @@ static int sctp_getsockopt_delayed_ack(struct sock *sk, int len,
|
|||
if (copy_from_user(¶ms, optval, len))
|
||||
return -EFAULT;
|
||||
} else if (len == sizeof(struct sctp_assoc_value)) {
|
||||
printk(KERN_WARNING "SCTP: Use of struct sctp_assoc_value "
|
||||
"in delayed_ack socket option deprecated\n");
|
||||
printk(KERN_WARNING "SCTP: Use struct sctp_sack_info instead\n");
|
||||
pr_warn("Use of struct sctp_assoc_value in delayed_ack socket option deprecated\n");
|
||||
pr_warn("Use struct sctp_sack_info instead\n");
|
||||
if (copy_from_user(¶ms, optval, len))
|
||||
return -EFAULT;
|
||||
} else
|
||||
|
|
@ -4940,10 +4969,8 @@ static int sctp_getsockopt_maxseg(struct sock *sk, int len,
|
|||
struct sctp_association *asoc;
|
||||
|
||||
if (len == sizeof(int)) {
|
||||
printk(KERN_WARNING
|
||||
"SCTP: Use of int in maxseg socket option deprecated\n");
|
||||
printk(KERN_WARNING
|
||||
"SCTP: Use struct sctp_assoc_value instead\n");
|
||||
pr_warn("Use of int in maxseg socket option deprecated\n");
|
||||
pr_warn("Use struct sctp_assoc_value instead\n");
|
||||
params.assoc_id = 0;
|
||||
} else if (len >= sizeof(struct sctp_assoc_value)) {
|
||||
len = sizeof(struct sctp_assoc_value);
|
||||
|
|
@ -5034,10 +5061,8 @@ static int sctp_getsockopt_maxburst(struct sock *sk, int len,
|
|||
struct sctp_association *asoc;
|
||||
|
||||
if (len == sizeof(int)) {
|
||||
printk(KERN_WARNING
|
||||
"SCTP: Use of int in max_burst socket option deprecated\n");
|
||||
printk(KERN_WARNING
|
||||
"SCTP: Use struct sctp_assoc_value instead\n");
|
||||
pr_warn("Use of int in max_burst socket option deprecated\n");
|
||||
pr_warn("Use struct sctp_assoc_value instead\n");
|
||||
params.assoc_id = 0;
|
||||
} else if (len >= sizeof(struct sctp_assoc_value)) {
|
||||
len = sizeof(struct sctp_assoc_value);
|
||||
|
|
@ -5580,7 +5605,7 @@ static int sctp_get_port(struct sock *sk, unsigned short snum)
|
|||
/* Note: sk->sk_num gets filled in if ephemeral port request. */
|
||||
ret = sctp_get_port_local(sk, &addr);
|
||||
|
||||
return (ret ? 1 : 0);
|
||||
return ret ? 1 : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -5597,8 +5622,7 @@ SCTP_STATIC int sctp_listen_start(struct sock *sk, int backlog)
|
|||
tfm = crypto_alloc_hash(sctp_hmac_alg, 0, CRYPTO_ALG_ASYNC);
|
||||
if (IS_ERR(tfm)) {
|
||||
if (net_ratelimit()) {
|
||||
printk(KERN_INFO
|
||||
"SCTP: failed to load transform for %s: %ld\n",
|
||||
pr_info("failed to load transform for %s: %ld\n",
|
||||
sctp_hmac_alg, PTR_ERR(tfm));
|
||||
}
|
||||
return -ENOSYS;
|
||||
|
|
@ -5727,13 +5751,12 @@ unsigned int sctp_poll(struct file *file, struct socket *sock, poll_table *wait)
|
|||
if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
|
||||
mask |= POLLERR;
|
||||
if (sk->sk_shutdown & RCV_SHUTDOWN)
|
||||
mask |= POLLRDHUP;
|
||||
mask |= POLLRDHUP | POLLIN | POLLRDNORM;
|
||||
if (sk->sk_shutdown == SHUTDOWN_MASK)
|
||||
mask |= POLLHUP;
|
||||
|
||||
/* Is it readable? Reconsider this code with TCP-style support. */
|
||||
if (!skb_queue_empty(&sk->sk_receive_queue) ||
|
||||
(sk->sk_shutdown & RCV_SHUTDOWN))
|
||||
if (!skb_queue_empty(&sk->sk_receive_queue))
|
||||
mask |= POLLIN | POLLRDNORM;
|
||||
|
||||
/* The association is either gone or not ready. */
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@
|
|||
* be incorporated into the next SCTP release.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
||||
#include <linux/slab.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/random.h>
|
||||
|
|
@ -244,10 +246,9 @@ void sctp_transport_update_pmtu(struct sctp_transport *t, u32 pmtu)
|
|||
struct dst_entry *dst;
|
||||
|
||||
if (unlikely(pmtu < SCTP_DEFAULT_MINSEGMENT)) {
|
||||
printk(KERN_WARNING "%s: Reported pmtu %d too low, "
|
||||
"using default minimum of %d\n",
|
||||
__func__, pmtu,
|
||||
SCTP_DEFAULT_MINSEGMENT);
|
||||
pr_warn("%s: Reported pmtu %d too low, using default minimum of %d\n",
|
||||
__func__, pmtu,
|
||||
SCTP_DEFAULT_MINSEGMENT);
|
||||
/* Use default minimum segment size and disable
|
||||
* pmtu discovery on this transport.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue