Commit 137b529e authored by Linus Torvalds's avatar Linus Torvalds

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
parents 221a09d5 9abbffee
...@@ -914,7 +914,7 @@ static void decode_prio_command(struct sixpack *sp, unsigned char cmd) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment