# Re: \[PATCH 1/2\] net: store KCOV remote handle in sk\_buff

- List: netdev
- 2 messages, 2 authors
- Page: https://ratatoskr.run/netdev/2020/10/6136563/t

## Re: \[PATCH 1/2\] net: store KCOV remote handle in sk\_buff

- From: Johannes Berg \<johannes@sipsolutions.net\>
- Date: 2020-10-12 07:12:32 
- Message: https://ratatoskr.run/netdev/2020/10/6136563.md

```text
On Wed, 2020-10-07 at 10:17 +0000, Aleksandr Nogikh wrote:
> 
> @@ -904,6 +905,10 @@ struct sk_buff {
>  	__u16			network_header;
>  	__u16			mac_header;
>  
> +#ifdef CONFIG_KCOV
> +	u64			kcov_handle;
> +#endif
[...] 

> @@ -233,6 +233,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
>  	skb->end = skb->tail + size;
>  	skb->mac_header = (typeof(skb->mac_header))~0U;
>  	skb->transport_header = (typeof(skb->transport_header))~0U;
> +	skb_set_kcov_handle(skb, kcov_common_handle());

Btw, you're only setting this here. It seems to me it would make sense
to copy it when the skb is copied, rather than then having it set to the
kcov handle of the (interrupted) task that was copying the skb?

johannes

```

## Re: \[PATCH 1/2\] net: store KCOV remote handle in sk\_buff

- From: Aleksandr Nogikh \<hidden\>
- Date: 2020-10-12 10:10:19 
- Message: https://ratatoskr.run/netdev/2020/10/6136707.md

```text
On Mon, 12 Oct 2020 at 10:12, Johannes Berg [ref] wrote:
[...]
> > @@ -233,6 +233,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
> >       skb->end = skb->tail + size;
> >       skb->mac_header = (typeof(skb->mac_header))~0U;
> >       skb->transport_header = (typeof(skb->transport_header))~0U;
> > +     skb_set_kcov_handle(skb, kcov_common_handle());
>
> Btw, you're only setting this here. It seems to me it would make sense
> to copy it when the skb is copied, rather than then having it set to the
> kcov handle of the (interrupted) task that was copying the skb?
>
> johannes
>

The field is added to the part of sk_buff that is between
headers_start and headers_end, therefore skb_copy will copy the field
to the newly created buffer. So in the case of copying it will be
initialized, and then overwritten. Probably, it's not the most
efficient way, but it seems to be the same for some other
fields that are initialized in __alloc_skb.
```
