skb_clone(9)
π¦ NAME
skb_clone β duplicate an sk_buff π
hi bestie, welcome to the skb_clone(9) page, straight out of the Kernel API Manual β¨ yes, the whole thing is about making a twin of a socket buffer, and it's lowkey iconic how much drama one struct can hold πΈ
π SYNOPSIS
struct sk_buff * skb_clone (struct sk_buff *skb , gfp_t gfp_mask );
that's the whole signature, no cap π
π ARGUMENTS
skbβ the buffer you're cloning, aka the one getting a twin π«Άgfp_maskβ the allocation priority, like how hard you're willing to try to get memory π
π₯ DESCRIPTION
okay so, you want a duplicate of an sk_buff? say less πββοΈ The new one is not owned by a socket β it's out here living its own life, no socket holding its hand π
The way it works is genuinely so cute: both copies share the same packet data but not structure. So they're matching outfits on the data but they each have their own personality in the structure department π slay.
The new buffer comes out with a reference count of 1 β brand new main character energy, zero baggage π
And about failure? If the allocation fails, the function returns NULL. Otherwise you get the new buffer back. That's it. That's the whole vibe π
β οΈ bestie, listen to me: if this function is called from an interrupt,gfp_maskmust beGFP_ATOMIC. not "should", not "probably", must π don't be the one who finds out why.
π SEE ALSO
It's giving family reunion, fr fr β the kernel file is ./net/core/skbuff.c and here's everyone at the party π:
drop_reasons_register_subsys(9)drop_reasons_unregister_subsys(9)skb_panic(9)napi_skb_cache_get_bulk(9)__build_skb(9)build_skb_around(9)__napi_build_skb(9)napi_build_skb(9)__alloc_skb(9)__netdev_alloc_skb(9)napi_alloc_skb(9)skb_pp_cow_data(9)skb_pp_frag_ref(9)__kfree_skb(9)sk_skb_reason_drop(9)skb_tx_error(9)consume_skb(9)__consume_stateless_skb(9)napi_consume_skb(9)alloc_skb_for_msg(9)skb_morph(9)skb_copy_ubufs(9)skb_copy(9)__pskb_copy_fclone(9)pskb_expand_head(9)skb_expand_head(9)skb_copy_expand(9)__skb_pad(9)pskb_put(9)skb_put(9)skb_push(9)skb_pull(9)skb_pull_data(9)skb_trim(9)__pskb_pull_tail(9)skb_copy_bits(9)skb_store_bits(9)skb_zerocopy(9)skb_dequeue(9)skb_dequeue_tail(9)skb_queue_purge_reason(9)skb_rbtree_purge(9)skb_queue_head(9)skb_queue_tail(9)skb_unlink(9)skb_append(9)skb_split(9)skb_shift(9)skb_prepare_seq_read(9)skb_seq_read(9)skb_abort_seq_read(9)skb_copy_seq_read(9)skb_find_text(9)skb_pull_rcsum(9)skb_segment(9)skb_to_sgvec(9)skb_cow_data(9)skb_clone_sk(9)skb_partial_csum_set(9)skb_checksum_setup(9)skb_checksum_maybe_trim(9)skb_checksum_trimmed(9)skb_try_coalesce(9)skb_scrub_packet(9)skb_eth_pop(9)skb_eth_push(9)skb_mpls_push(9)skb_mpls_pop(9)skb_mpls_update_lse(9)skb_mpls_dec_ttl(9)alloc_skb_with_frags(9)skb_condense(9)__skb_ext_alloc(9)__skb_ext_set(9)skb_ext_add(9)skb_attempt_defer_free(9)skb_splice_from_iter(9)
and that's the page, bestie π mwah π
little sign-off moment: this one comes from ./net/core, dated October 2026, and the page is skb_clone(9) β go forth and clone 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