skb_clone_sk(9)
π skb_clone_sk(9) β Kernel API Manual
okay so bestie, welcome to the Kernel API Manual entry for skb_clone_sk β¨ this one's short, sweet, and lowkey a whole refcount situation, so pay attention π
πΈ NAME πΈ
skb_clone_sk β create clone of skb, and take reference to socket π«Ά
β¨ SYNOPSIS β¨
struct sk_buff * skb_clone_sk (struct sk_buff *skb );
π ARGUMENTS π
skbβ the skb to clone. that's it, that's the whole argument list, iconic π
π¦ DESCRIPTION π¦
So this function creates a clone of a buffer that holds a reference on sk_refcnt β yes bestie, we're doing refcounts, the main character of kernel memory management π
Buffers created via this function are meant to be returned using sock_queue_err_skb, or free via kfree_skb. pick your path, both are valid, no cap π₯
β οΈ okay so here's the part where you actually listen π β when passing buffers allocated with this function tosock_queue_err_skb, it is necessary to wrap the call withsock_hold/sock_putin order to prevent the socket from being released prior to being enqueued on thesk_error_queue. like literally, wrap it. don't skip this. this is the vibe check and if you fail it your socket dips out before it ever gets enqueued ππ
π SEE ALSO π
Kernel file ./net/core/skbuff.c, plus a whole friend group of skb functions fr fr β 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_clone(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_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) π¦
like yes, that's a lot of friends. read them all. iykyk π
that's the whole page bestie, you ate π this one came from ./net/core and it's dated October 2026, filed under skb_clone_sk(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