Skip to content
  • Herbert Xu's avatar
    net: Move rx skb_orphan call to where needed · d55d87fd
    Herbert Xu authored
    
    
    In order to get the tun driver to account packets, we need to be
    able to receive packets with destructors set.  To be on the safe
    side, I added an skb_orphan call for all protocols by default since
    some of them (IP in particular) cannot handle receiving packets
    destructors properly.
    
    Now it seems that at least one protocol (CAN) expects to be able
    to pass skb->sk through the rx path without getting clobbered.
    
    So this patch attempts to fix this properly by moving the skb_orphan
    call to where it's actually needed.  In particular, I've added it
    to skb_set_owner_[rw] which is what most users of skb->destructor
    call.
    
    This is actually an improvement for tun too since it means that
    we only give back the amount charged to the socket when the skb
    is passed to another socket that will also be charged accordingly.
    
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    Tested-by: default avatarOliver Hartkopp <olver@hartkopp.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d55d87fd