[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:
parent
48918a4dbd
commit
edc9e81917
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue