mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-29 10:01:25 +00:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6: [XFRM] STATE: Fix to respond error to get operation if no matching entry exists. [NET]: Re-fix of doc-comment in sock.h [6PACK]: Masking bug in 6pack driver. [NET]: Fix kfifo_alloc() error check. [UDP]: Make udp_encap_rcv use pskb_may_pull [NETFILTER]: H.323 conntrack: fix crash with CONFIG_IP_NF_CT_ACCT
This commit is contained in:
commit
137b529e4d
7 changed files with 32 additions and 13 deletions
|
@ -914,7 +914,7 @@ static void decode_prio_command(struct sixpack *sp, unsigned char cmd)
|
||||||
printk(KERN_DEBUG "6pack: protocol violation\n");
|
printk(KERN_DEBUG "6pack: protocol violation\n");
|
||||||
else
|
else
|
||||||
sp->status = 0;
|
sp->status = 0;
|
||||||
cmd &= !SIXP_RX_DCD_MASK;
|
cmd &= ~SIXP_RX_DCD_MASK;
|
||||||
}
|
}
|
||||||
sp->status = cmd & SIXP_PRIO_DATA_MASK;
|
sp->status = cmd & SIXP_PRIO_DATA_MASK;
|
||||||
} else { /* output watchdog char if idle */
|
} else { /* output watchdog char if idle */
|
||||||
|
|
|
@ -883,18 +883,23 @@ static inline int sk_filter(struct sock *sk, struct sk_buff *skb)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sk_filter_release: Release a socket filter
|
* sk_filter_rcu_free: Free a socket filter
|
||||||
* @rcu: rcu_head that contains the sk_filter info to remove
|
* @rcu: rcu_head that contains the sk_filter to free
|
||||||
*
|
|
||||||
* Remove a filter from a socket and release its resources.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static inline void sk_filter_rcu_free(struct rcu_head *rcu)
|
static inline void sk_filter_rcu_free(struct rcu_head *rcu)
|
||||||
{
|
{
|
||||||
struct sk_filter *fp = container_of(rcu, struct sk_filter, rcu);
|
struct sk_filter *fp = container_of(rcu, struct sk_filter, rcu);
|
||||||
kfree(fp);
|
kfree(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sk_filter_release: Release a socket filter
|
||||||
|
* @sk: socket
|
||||||
|
* @fp: filter to remove
|
||||||
|
*
|
||||||
|
* Remove a filter from a socket and release its resources.
|
||||||
|
*/
|
||||||
|
|
||||||
static inline void sk_filter_release(struct sock *sk, struct sk_filter *fp)
|
static inline void sk_filter_release(struct sock *sk, struct sk_filter *fp)
|
||||||
{
|
{
|
||||||
unsigned int size = sk_filter_len(fp);
|
unsigned int size = sk_filter_len(fp);
|
||||||
|
|
|
@ -160,6 +160,8 @@ static __init int dccpprobe_init(void)
|
||||||
init_waitqueue_head(&dccpw.wait);
|
init_waitqueue_head(&dccpw.wait);
|
||||||
spin_lock_init(&dccpw.lock);
|
spin_lock_init(&dccpw.lock);
|
||||||
dccpw.fifo = kfifo_alloc(bufsize, GFP_KERNEL, &dccpw.lock);
|
dccpw.fifo = kfifo_alloc(bufsize, GFP_KERNEL, &dccpw.lock);
|
||||||
|
if (IS_ERR(dccpw.fifo))
|
||||||
|
return PTR_ERR(dccpw.fifo);
|
||||||
|
|
||||||
if (!proc_net_fops_create(procname, S_IRUSR, &dccpprobe_fops))
|
if (!proc_net_fops_create(procname, S_IRUSR, &dccpprobe_fops))
|
||||||
goto err0;
|
goto err0;
|
||||||
|
|
|
@ -1417,7 +1417,7 @@ static int process_rcf(struct sk_buff **pskb, struct ip_conntrack *ct,
|
||||||
DEBUGP
|
DEBUGP
|
||||||
("ip_ct_ras: set RAS connection timeout to %u seconds\n",
|
("ip_ct_ras: set RAS connection timeout to %u seconds\n",
|
||||||
info->timeout);
|
info->timeout);
|
||||||
ip_ct_refresh_acct(ct, ctinfo, NULL, info->timeout * HZ);
|
ip_ct_refresh(ct, *pskb, info->timeout * HZ);
|
||||||
|
|
||||||
/* Set expect timeout */
|
/* Set expect timeout */
|
||||||
read_lock_bh(&ip_conntrack_lock);
|
read_lock_bh(&ip_conntrack_lock);
|
||||||
|
@ -1465,7 +1465,7 @@ static int process_urq(struct sk_buff **pskb, struct ip_conntrack *ct,
|
||||||
info->sig_port[!dir] = 0;
|
info->sig_port[!dir] = 0;
|
||||||
|
|
||||||
/* Give it 30 seconds for UCF or URJ */
|
/* Give it 30 seconds for UCF or URJ */
|
||||||
ip_ct_refresh_acct(ct, ctinfo, NULL, 30 * HZ);
|
ip_ct_refresh(ct, *pskb, 30 * HZ);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,6 +156,8 @@ static __init int tcpprobe_init(void)
|
||||||
init_waitqueue_head(&tcpw.wait);
|
init_waitqueue_head(&tcpw.wait);
|
||||||
spin_lock_init(&tcpw.lock);
|
spin_lock_init(&tcpw.lock);
|
||||||
tcpw.fifo = kfifo_alloc(bufsize, GFP_KERNEL, &tcpw.lock);
|
tcpw.fifo = kfifo_alloc(bufsize, GFP_KERNEL, &tcpw.lock);
|
||||||
|
if (IS_ERR(tcpw.fifo))
|
||||||
|
return PTR_ERR(tcpw.fifo);
|
||||||
|
|
||||||
if (!proc_net_fops_create(procname, S_IRUSR, &tcpprobe_fops))
|
if (!proc_net_fops_create(procname, S_IRUSR, &tcpprobe_fops))
|
||||||
goto err0;
|
goto err0;
|
||||||
|
|
|
@ -928,23 +928,32 @@ static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb)
|
||||||
return 1;
|
return 1;
|
||||||
#else
|
#else
|
||||||
struct udp_sock *up = udp_sk(sk);
|
struct udp_sock *up = udp_sk(sk);
|
||||||
struct udphdr *uh = skb->h.uh;
|
struct udphdr *uh;
|
||||||
struct iphdr *iph;
|
struct iphdr *iph;
|
||||||
int iphlen, len;
|
int iphlen, len;
|
||||||
|
|
||||||
__u8 *udpdata = (__u8 *)uh + sizeof(struct udphdr);
|
__u8 *udpdata;
|
||||||
__be32 *udpdata32 = (__be32 *)udpdata;
|
__be32 *udpdata32;
|
||||||
__u16 encap_type = up->encap_type;
|
__u16 encap_type = up->encap_type;
|
||||||
|
|
||||||
/* if we're overly short, let UDP handle it */
|
/* if we're overly short, let UDP handle it */
|
||||||
if (udpdata > skb->tail)
|
len = skb->len - sizeof(struct udphdr);
|
||||||
|
if (len <= 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* if this is not encapsulated socket, then just return now */
|
/* if this is not encapsulated socket, then just return now */
|
||||||
if (!encap_type)
|
if (!encap_type)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
len = skb->tail - udpdata;
|
/* If this is a paged skb, make sure we pull up
|
||||||
|
* whatever data we need to look at. */
|
||||||
|
if (!pskb_may_pull(skb, sizeof(struct udphdr) + min(len, 8)))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* Now we can get the pointers */
|
||||||
|
uh = skb->h.uh;
|
||||||
|
udpdata = (__u8 *)uh + sizeof(struct udphdr);
|
||||||
|
udpdata32 = (__be32 *)udpdata;
|
||||||
|
|
||||||
switch (encap_type) {
|
switch (encap_type) {
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -495,6 +495,7 @@ static struct xfrm_state *xfrm_user_state_lookup(struct xfrm_usersa_id *p,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = -ESRCH;
|
||||||
x = xfrm_state_lookup_byaddr(&p->daddr, saddr, p->proto,
|
x = xfrm_state_lookup_byaddr(&p->daddr, saddr, p->proto,
|
||||||
p->family);
|
p->family);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue