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
2 messages, 2 authors, 2020-10-12 · open the first message on its own page
From: Johannes Berg <johannes@sipsolutions.net>
Date: 2020-10-12 07:12:32
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
From: Aleksandr Nogikh <hidden>
Date: 2020-10-12 10:10:19
On Mon, 12 Oct 2020 at 10:12, Johannes Berg [off-list ref] wrote: [...]
quoted
@@ -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.