[DCCP]: Set socket owner iff packet is not data

Here is a complimentary insurance policy for those feeling a bit insecure.
You don't have to accept this.  However, if you do, you can't blame me for
it :)
  
> 1) dccp_transmit_skb sets the owner for all packets except data packets.
  
We can actually verify this by looking at pkt_type.
  
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
This commit is contained in:
Herbert Xu 2005-10-30 11:20:59 +11:00 committed by Arnaldo Carvalho de Melo
parent 48918a4dbd
commit edc9e81917
1 changed files with 11 additions and 6 deletions

View File

@ -58,10 +58,21 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
switch (dcb->dccpd_type) { switch (dcb->dccpd_type) {
case DCCP_PKT_DATA: case DCCP_PKT_DATA:
set_ack = 0; set_ack = 0;
/* fall through */
case DCCP_PKT_DATAACK:
break; break;
case DCCP_PKT_SYNC: case DCCP_PKT_SYNC:
case DCCP_PKT_SYNCACK: case DCCP_PKT_SYNCACK:
ackno = dcb->dccpd_seq; ackno = dcb->dccpd_seq;
/* fall through */
default:
/*
* Only data packets should come through with skb->sk
* set.
*/
WARN_ON(skb->sk);
skb_set_owner_w(skb, sk);
break; break;
} }
@ -71,12 +82,6 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb)
skb->h.raw = skb_push(skb, dccp_header_size); skb->h.raw = skb_push(skb, dccp_header_size);
dh = dccp_hdr(skb); dh = dccp_hdr(skb);
/*
* Only data packets should come through with skb->sk set.
*/
if (!skb->sk)
skb_set_owner_w(skb, sk);
/* Build DCCP header and checksum it. */ /* Build DCCP header and checksum it. */
memset(dh, 0, dccp_header_size); memset(dh, 0, dccp_header_size);
dh->dccph_type = dcb->dccpd_type; dh->dccph_type = dcb->dccpd_type;