Now that we have a 3rd extension, add a new helper that drops the extension space and use it when we need to scrub an sk_buff. At this time, scrubbing clears secpath and bridge netfilter data, but retains the tc skb extension, after this patch all three get cleared. NAPI reuse/free assumes we can only have a secpath attached to skb, but it seems better to clear all extensions there as well. v2: add unlikely hint (Eric Dumazet)
Showing the changes to include/linux (1 of 3 files). Show all
Unified · Split
| @@ -4144,8 +4144,17 @@ static inline void *skb_ext_find(const struct sk_buff *skb, enum skb_ext_id id) · 4143 unmodified lines | ||
| 4144 | 4144 | |
| 4145 | 4145 | return NULL; |
| 4146 | 4146 | } |
| 4147 | + | |
| 4148 | +static inline void skb_ext_reset(struct sk_buff *skb) | |
| 4149 | +{ | |
| 4150 | + if (unlikely(skb->active_extensions)) { | |
| 4151 | + __skb_ext_put(skb->extensions); | |
| 4152 | + skb->active_extensions = 0; | |
| 4153 | + } | |
| 4154 | +} | |
| 4147 | 4155 | #else |
| 4148 | 4156 | static inline void skb_ext_put(struct sk_buff *skb) {} |
| 4157 | +static inline void skb_ext_reset(struct sk_buff *skb) {} | |
| 4149 | 4158 | static inline void skb_ext_del(struct sk_buff *skb, int unused) {} |
| 4150 | 4159 | static inline void __skb_ext_copy(struct sk_buff *d, const struct sk_buff *s) {} |
| 4151 | 4160 | static inline void skb_ext_copy(struct sk_buff *dst, const struct sk_buff *s) {} |