Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 15569
b: refs/heads/master
c: 25995ff
h: refs/heads/master
i:
  15567: 82e2a28
v: v3
  • Loading branch information
Arnaldo Carvalho de Melo authored and David S. Miller committed Jan 3, 2006
1 parent bc62cb3 commit bba7839
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 74 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ce1d4d3e88b3a69d23c3feb436a0b36b6ca0642b
refs/heads/master: 25995ff577675b58dbd848b7758e7bad87411947
22 changes: 2 additions & 20 deletions trunk/drivers/net/pppoe.c
Original file line number Diff line number Diff line change
Expand Up @@ -383,8 +383,6 @@ static int pppoe_rcv(struct sk_buff *skb,
{
struct pppoe_hdr *ph;
struct pppox_sock *po;
struct sock *sk;
int ret;

if (!pskb_may_pull(skb, sizeof(struct pppoe_hdr)))
goto drop;
Expand All @@ -395,24 +393,8 @@ static int pppoe_rcv(struct sk_buff *skb,
ph = (struct pppoe_hdr *) skb->nh.raw;

po = get_item((unsigned long) ph->sid, eth_hdr(skb)->h_source);
if (!po)
goto drop;

sk = sk_pppox(po);
bh_lock_sock(sk);

/* Socket state is unknown, must put skb into backlog. */
if (sock_owned_by_user(sk) != 0) {
sk_add_backlog(sk, skb);
ret = NET_RX_SUCCESS;
} else {
ret = pppoe_rcv_core(sk, skb);
}

bh_unlock_sock(sk);
sock_put(sk);

return ret;
if (po != NULL)
return sk_receive_skb(sk_pppox(po), skb);
drop:
kfree_skb(skb);
out:
Expand Down
23 changes: 23 additions & 0 deletions trunk/include/net/sock.h
Original file line number Diff line number Diff line change
Expand Up @@ -926,6 +926,29 @@ static inline void sock_put(struct sock *sk)
sk_free(sk);
}

static inline int sk_receive_skb(struct sock *sk, struct sk_buff *skb)
{
int rc = NET_RX_SUCCESS;

if (sk_filter(sk, skb, 0))
goto discard_and_relse;

skb->dev = NULL;

bh_lock_sock(sk);
if (!sock_owned_by_user(sk))
rc = sk->sk_backlog_rcv(sk, skb);
else
sk_add_backlog(sk, skb);
bh_unlock_sock(sk);
out:
sock_put(sk);
return rc;
discard_and_relse:
kfree_skb(skb);
goto out;
}

/* Detach socket from process context.
* Announce socket dead, detach it from wait queue and inode.
* Note that parent inode held reference count on this struct sock,
Expand Down
23 changes: 2 additions & 21 deletions trunk/net/dccp/ipv4.c
Original file line number Diff line number Diff line change
Expand Up @@ -914,7 +914,6 @@ int dccp_v4_rcv(struct sk_buff *skb)
{
const struct dccp_hdr *dh;
struct sock *sk;
int rc;

/* Step 1: Check header basics: */

Expand Down Expand Up @@ -984,28 +983,10 @@ int dccp_v4_rcv(struct sk_buff *skb)
goto do_time_wait;
}

if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) {
dccp_pr_debug("xfrm4_policy_check failed\n");
if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
goto discard_and_relse;
}

if (sk_filter(sk, skb, 0)) {
dccp_pr_debug("sk_filter failed\n");
goto discard_and_relse;
}

skb->dev = NULL;

bh_lock_sock(sk);
rc = 0;
if (!sock_owned_by_user(sk))
rc = dccp_v4_do_rcv(sk, skb);
else
sk_add_backlog(sk, skb);
bh_unlock_sock(sk);

sock_put(sk);
return rc;
return sk_receive_skb(sk, skb);

no_dccp_socket:
if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb))
Expand Down
17 changes: 1 addition & 16 deletions trunk/net/dccp/ipv6.c
Original file line number Diff line number Diff line change
Expand Up @@ -1032,7 +1032,6 @@ static int dccp_v6_rcv(struct sk_buff **pskb, unsigned int *nhoffp)
const struct dccp_hdr *dh;
struct sk_buff *skb = *pskb;
struct sock *sk;
int rc;

/* Step 1: Check header basics: */

Expand Down Expand Up @@ -1077,21 +1076,7 @@ static int dccp_v6_rcv(struct sk_buff **pskb, unsigned int *nhoffp)
if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
goto discard_and_relse;

if (sk_filter(sk, skb, 0))
goto discard_and_relse;

skb->dev = NULL;

bh_lock_sock(sk);
rc = 0;
if (!sock_owned_by_user(sk))
rc = dccp_v6_do_rcv(sk, skb);
else
sk_add_backlog(sk, skb);
bh_unlock_sock(sk);

sock_put(sk);
return rc ? -1 : 0;
return sk_receive_skb(sk, skb) ? -1 : 0;

no_dccp_socket:
if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb))
Expand Down
17 changes: 1 addition & 16 deletions trunk/net/decnet/dn_nsp_in.c
Original file line number Diff line number Diff line change
Expand Up @@ -793,7 +793,6 @@ static int dn_nsp_rx_packet(struct sk_buff *skb)
got_it:
if (sk != NULL) {
struct dn_scp *scp = DN_SK(sk);
int ret;

/* Reset backoff */
scp->nsp_rxtshift = 0;
Expand All @@ -807,21 +806,7 @@ static int dn_nsp_rx_packet(struct sk_buff *skb)
goto free_out;
}

bh_lock_sock(sk);
ret = NET_RX_SUCCESS;
if (decnet_debug_level & 8)
printk(KERN_DEBUG "NSP: 0x%02x 0x%02x 0x%04x 0x%04x %d\n",
(int)cb->rt_flags, (int)cb->nsp_flags,
(int)cb->src_port, (int)cb->dst_port,
!!sock_owned_by_user(sk));
if (!sock_owned_by_user(sk))
ret = dn_nsp_backlog_rcv(sk, skb);
else
sk_add_backlog(sk, skb);
bh_unlock_sock(sk);
sock_put(sk);

return ret;
return sk_receive_skb(sk, skb);
}

return dn_nsp_no_socket(skb, reason);
Expand Down

0 comments on commit bba7839

Please sign in to comment.