As Eric noted, the current wrapper for ptype func hook inside
__netif_receive_skb_list_ptype() has no chance of avoiding the indirect
call: we enter such code path only for protocols other than ipv4 and
ipv6.

Instead we can wrap the list_func invocation.

Fixes: 92884ca8830b ("net: fix indirect calls helpers for ptype list hooks.")
Suggested-by: Eric Dumazet <eric.duma...@gmail.com>
Signed-off-by: Paolo Abeni <pab...@redhat.com>
---
 net/core/dev.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 66f7508825bd..1c4593ec4409 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5025,12 +5025,12 @@ static inline void 
__netif_receive_skb_list_ptype(struct list_head *head,
        if (list_empty(head))
                return;
        if (pt_prev->list_func != NULL)
-               pt_prev->list_func(head, pt_prev, orig_dev);
+               INDIRECT_CALL_INET(pt_prev->list_func, ipv6_list_rcv,
+                                  ip_list_rcv, head, pt_prev, orig_dev);
        else
                list_for_each_entry_safe(skb, next, head, list) {
                        skb_list_del_init(skb);
-                       INDIRECT_CALL_INET(pt_prev->func, ipv6_rcv, ip_rcv, skb,
-                                          skb->dev, pt_prev, orig_dev);
+                       pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
                }
 }
 
-- 
2.20.1

Reply via email to