skb_orphan(9)
π skb_orphan β orphan a buffer π
okay so bestie, welcome to the skb_orphan(9) page, the Kernel API Manual's most emotionally complicated entry, no cap. it's short, it's iconic, it's giving "cutting ties with your ex but make it kernel networking" π¦
β¨ SYNOPSIS β¨
void skb_orphan (struct sk_buff *skb );
that's it. that's the whole signature. literally one function, zero return value, maximum emotional impact π
πΈ ARGUMENTS πΈ
skbβ the buffer you're about to orphan. yes, that's the whole description. it's giving "one line, and that line ate" π this is the skb that's catching these hands (metaphorically β it survives, don't worry)
π DESCRIPTION π
okay so here's the tea, bestie π β if this buffer currently has an owner, we call that owner's destructor function and then make the skb unowned. periodt.
and the important part, the part you gotta remember for the exam: the buffer continues to exist β¨ it's not freed, it's not gone, nobody killed it. it's just no longer charged to its former owner. think of it as moving out of your parents' house β still very much alive, just not on their tab anymore π«Ά
so:
- had an owner β destructor gets called, owner says bye π
- then the skb is ownerless π
- the buffer lives on, just unfinanced π
ngl that's the entire description. the manpage gave us two sentences and expected us to be normal about it. it's giving "confident and mysterious" π
π¦ SEE ALSO π¦
the extended universe, the whole friend group, the entire skb cinematic universe β all of it, iykyk. also there's a file worth knowing about: ./include/linux/skbuff.h π
skb checksums(9), skb_frag_size(9), skb_frag_size_set(9), skb_frag_size_add(9), skb_frag_size_sub(9), skb_frag_must_loop(9), skb_frag_foreach_page(9), struct skb_shared_hwtstamps(9), dataref and headerless skbs(9), Basic sk_buff geometry(9), struct sk_buff(9), skb_pfmemalloc(9), skb_dst(9), skb_dstref_steal(9), skb_dstref_restore(9), skb_dst_set(9), skb_dst_set_noref(9), skb_dst_is_noref(9), skb_napi_id(9), skb_unref(9), kfree_skb(9), alloc_skb(9), skb_fclone_busy(9), alloc_skb_fclone(9), skb_pad(9), skb_queue_empty(9), skb_queue_empty_lockless(9), skb_queue_is_last(9), skb_queue_is_first(9), skb_queue_next(9), skb_queue_prev(9), skb_get(9), skb_cloned(9), skb_header_cloned(9), __skb_header_release(9), skb_shared(9), skb_share_check(9), skb_unshare(9), skb_peek(9), __skb_peek(9), skb_peek_next(9), skb_peek_tail(9), skb_queue_len(9), skb_queue_len_lockless(9), __skb_queue_head_init(9), skb_queue_splice(9), skb_queue_splice_init(9), skb_queue_splice_tail(9), skb_queue_splice_tail_init(9), __skb_queue_after(9), __skb_queue_head(9), __skb_queue_tail(9), __skb_dequeue(9), __skb_dequeue_tail(9), skb_len_add(9), __skb_fill_netmem_desc(9), skb_fill_page_desc(9), skb_fill_page_desc_noacc(9), skb_headroom(9), skb_tailroom(9), skb_availroom(9), skb_reserve(9), skb_tailroom_reserve(9), skb_reset_transport_header_careful(9), skb_set_transport_header_careful(9), pskb_trim_unique(9), skb_orphan_frags(9), __skb_queue_purge_reason(9), netdev_alloc_frag(9), netdev_alloc_skb(9), __dev_alloc_pages(9), __dev_alloc_page(9), dev_page_is_reusable(9), skb_propagate_pfmemalloc(9), skb_frag_off(9), skb_frag_off_add(9), skb_frag_off_set(9), skb_frag_off_copy(9), skb_frag_net_iov(9), skb_frag_page(9), skb_frag_netmem(9), skb_frag_address(9), skb_frag_address_safe(9), skb_frag_phys(9), skb_frag_page_copy(9), __skb_frag_dma_map(9), skb_clone_writable(9), skb_cow(9), skb_cow_head(9), skb_padto(9), __skb_put_padto(9), skb_put_padto(9), skb_linearize(9), skb_has_shared_frag(9), skb_linearize_cow(9), skb_postpull_rcsum(9), skb_postpush_rcsum(9), skb_push_rcsum(9), pskb_trim_rcsum(9), skb_needs_linearize(9), skb_get_timestamp(9), skb_data_move(9), skb_postpull_data_move(9), skb_postpush_data_move(9), skb_complete_tx_timestamp(9), skb_tstamp_tx(9), skb_tx_timestamp(9), skb_complete_wifi_ack(9), skb_checksum_complete(9), struct skb_ext(9), skb_checksum_none_assert(9), skb_head_is_locked(9)
π and yes, that's every single one, in order, unedited. i counted. twice. you're welcome bestie π«Ά
also like, sidenote: skb_orphan_frags(9) is right there in the list and the name is SO close to this page's name β pls don't mix them up, that would be so embarrassing π they are different entries, both listed, both real.
π one last vibe check π
- takes a
struct sk_buff *and gives you back nothing (void) β main character energy, needs no validation π - orphan = unowned, NOT freed β
- destructor runs only if there was an owner π
and that's the page, bestie! this little gem comes to you from the source tree at ./include/linux π β dated October 2026, living its best life as skb_orphan(9) in the Kernel API Manual. slay, honestly. go orphan a buffer responsibly π§β¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms