|
|
Re: [PATCH net-next] net: take care of cloned skbs in tcp_try_coalesce() |
On Wed, 2012-05-02 at 11:05 -0700, Alexander Duyck wrote: > You're correct about the fragstolen case, I actually was thinking of the > first patch you sent, not this second one. > > However we still have a problem. What we end up with now is a case of > sharing in which the clone skb no longer knows that it is sharing the > head with another skb. The dataref will drop to 1 when we call > __kfree_skb. This means that any other function out there that tries to > see if the skb is shared would return false. This could lead to issues > if there is anything out there that manipulates the data in head based > on the false assumption that it is not cloned. What we would probably > need to do in this case is tweak the logic for skb_cloned. If you are > using a head_frag you should probably add a check that returns true if > cloned is true and page_count is greater than 1. We should be safe in > the case of skb_header_cloned since we already dropped are dataref when > we stole the page and freed the skb. I really dont understand this concern. When skb is cloned, we copy in head_frag __skb_clone() So both skbs have the bit set, and dataref = 2. first skb is freed, dataref becomes 1 and nothing special happen >From this point, skb->head is not 'shared' anymore (taken your own words). And we are free to do whatever we want. second skb is freed, dataref becomes 0 and we call the right destructor. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
[Linux Kernel Discussion] [Ethernet Bridging] [Linux Wireless Networking] [Linux Bluetooth Networking] [Linux Networking Users] [VLAN] [Git] [IETF Annouce] [Linux Assembly] [Security] [Bugtraq] [Photo] [Singles Social Networking] [Yosemite Information] [MIPS Linux] [ARM Linux Kernel] [ARM Linux] [Linux Virtualization] [Linux Security] [Linux IDE] [Linux RAID] [Linux SCSI] [Free Dating]
![]() |
![]() |