From 2f6bc4c8cbef84a4268b9ff011eca74a859b7d7e Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Mon, 7 Apr 2008 08:38:46 +0200 Subject: [PATCH] TEE: reenable header_ops check --- extensions/xt_TEE.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/extensions/xt_TEE.c b/extensions/xt_TEE.c index c006913..fa4305b 100644 --- a/extensions/xt_TEE.c +++ b/extensions/xt_TEE.c @@ -85,6 +85,15 @@ static bool tee_routing(struct sk_buff *skb, return true; } +static bool dev_hh_avail(const struct net_device *dev) +{ +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 23) + return dev->hard_header != NULL; +#else + return dev->header_ops != NULL; +#endif +} + /* * Stolen from ip_finish_output2 * PRE : skb->dev is set to the device we are leaving by @@ -99,8 +108,7 @@ static void tee_ip_direct_send(struct sk_buff *skb) unsigned int hh_len = LL_RESERVED_SPACE(dev); /* Be paranoid, rather than too clever. */ - if (unlikely(skb_headroom(skb) < hh_len)) { - /* if (dev->header_ops != NULL) */ + if (unlikely(skb_headroom(skb) < hh_len) && dev_hh_avail(dev)) { struct sk_buff *skb2; skb2 = skb_realloc_headroom(skb, LL_RESERVED_SPACE(dev));