Skip to contentSkip to conversation

iptables: fix userspace compilation of ip tables with C++

PATCH New Matt Weber 4 participants 6 messages Oct 13, 2014 – Nov 18, 2014

lore
Share & tools
lore

Matt Weber

author
#0 lore raw

PATCH 1/1 iptables: fix userspace compilation of ip tables with C++

---
 ...ix-userspace-compilation-of-ip_tables_c_h.patch |   43 ++++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 package/iptables/iptables-03-fix-userspace-compilation-of-ip_tables_c_h.patch
package/iptables/iptables-03-fix-userspace-compilation-of-ip_tables_c_h.patch new file +43 -0
new file mode 100644
index 0000000..5b769b1
@@ -0,0 +1,43 @@
+From: Jason Gunthorpe <[email protected]>
+Date: Sun, 30 Sep 2012 22:49:11 -0600
+Subject: [PATCH] Fix userspace compilation of ip_tables.h/ip6_tables.h in
+	C++ mode
+
+The implicit cast from void * is not allowed for C++ compilers, and the
+arithmetic on void * generates warnings in C++ mode.
+
+$ g++ -c t.cc
+ip_tables.h:221:24: warning: pointer of type 'void *' used in arithmetic
+ip_tables.h:221:24: error: invalid conversion from 'void*' to 'xt_entry_target*'
+
+Signed-off-by: Jason Gunthorpe <[email protected]>
+---
+ include/linux/netfilter_ipv4/ip_tables.h  |    2 +-
+ include/linux/netfilter_ipv6/ip6_tables.h |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h
+index db79231..050ad8a 100644
+--- a/include/linux/netfilter_ipv4/ip_tables.h
++++ b/include/linux/netfilter_ipv4/ip_tables.h
+@@ -226,7 +226,7 @@ struct ipt_get_entries {
+ static __inline__ struct xt_entry_target *
+ ipt_get_target(struct ipt_entry *e)
+ {
+-	return (void *)e + e->target_offset;
++	return (struct xt_entry_target *)((__u8 *)e + e->target_offset);
+ }
+ 
+ /*
+diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h
+index 08c2cbb..3349bf1 100644
+--- a/include/linux/netfilter_ipv6/ip6_tables.h
++++ b/include/linux/netfilter_ipv6/ip6_tables.h
+@@ -263,7 +263,7 @@ struct ip6t_get_entries {
+ static __inline__ struct xt_entry_target *
+ ip6t_get_target(struct ip6t_entry *e)
+ {
+-	return (void *)e + e->target_offset;
++	return (struct xt_entry_target *)((__u8 *)e + e->target_offset);
+ }
+ 
+ /*
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH 1/1 iptables: fix userspace compilation of ip tables with C++

Dear Matt Weber,

Quoted 6 lines · Matt Weber
---
 ...ix-userspace-compilation-of-ip_tables_c_h.patch |   43 ++++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 package/iptables/iptables-03-fix-userspace-compilation-of-ip_tables_c_h.patch

This patch apparently dates back from 2012. Why has it never been merged upstream? Also, I don't really understand the interaction between the kernel headers, and this include/linux/ header in iptables.

Has the problem been reported upstream to iptables?

Gustavo, an opinion?

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH 1/1 iptables: fix userspace compilation of ip tables with C++

Quoted 10 lines · Thomas Petazzoni

Dear Matt Weber,

Quoted 6 lines · Matt Weber
---
 ...ix-userspace-compilation-of-ip_tables_c_h.patch |   43 ++++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 package/iptables/iptables-03-fix-userspace-compilation-of-ip_tables_c_h.patch
Quoted 7 lines

This patch apparently dates back from 2012. Why has it never been merged upstream? Also, I don't really understand the interaction between the kernel headers, and this include/linux/ header in iptables.

Has the problem been reported upstream to iptables?

Gustavo, an opinion?

It was posted to lkml & linux-netdev at first, Davem told to post to netfilter-devel. That was done:

http://marc.info/?t=134904906300003&r=1&w=1

The logic seems right, C++ is more strict and triggers the issue. It's an issue when dealing with netfilter rules from custom C++ code.

But it seems to have been rejected without much explanation:
http://patchwork.ozlabs.org/patch/188216/

Regards.

#3 lore raw

PATCH 1/1 iptables: fix userspace compilation of ip tables with C++

All,

Quoted 24 lines · Gustavo Zacarias
Quoted 10 lines · Thomas Petazzoni

Dear Matt Weber,

Quoted 6 lines · Matt Weber
---
 ...ix-userspace-compilation-of-ip_tables_c_h.patch |   43 ++++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 package/iptables/iptables-03-fix-userspace-compilation-of-ip_tables_c_h.patch
Quoted 7 lines

This patch apparently dates back from 2012. Why has it never been merged upstream? Also, I don't really understand the interaction between the kernel headers, and this include/linux/ header in iptables.

Has the problem been reported upstream to iptables?

Gustavo, an opinion?

It was posted to lkml & linux-netdev at first, Davem told to post to netfilter-devel. That was done:

Quoted 8 lines

http://marc.info/?t=134904906300003&r=1&w=1

The logic seems right, C++ is more strict and triggers the issue. It's an issue when dealing with netfilter rules from custom C++ code.

But it seems to have been rejected without much explanation:
http://patchwork.ozlabs.org/patch/188216/

Should I repost it to netfilter-devel and update my patch to reference the above information plus the new submission thread?

Signature · 8 lines
Matthew L Weber / Pr Software Engineer
Airborne Information Systems / Security Systems and Software
MS 131-100, C Ave NE, Cedar Rapids, IA, 52498, USA
www.rockwellcollins.com

Note: Any Export License Required Information and License Restricted
Third Party Intellectual Property (TPIP) content must be encrypted and
sent to matthew.weber at corp.rockwellcollins.com.
#4 lore raw

PATCH 1/1 iptables: fix userspace compilation of ip tables with C++

All,

Quoted 33 lines · Matthew Weber

All,

Quoted 29 lines · Gustavo Zacarias
Quoted 10 lines · Thomas Petazzoni

Dear Matt Weber,

Quoted 6 lines · Matt Weber
---
 ...ix-userspace-compilation-of-ip_tables_c_h.patch |   43 ++++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 package/iptables/iptables-03-fix-userspace-compilation-of-ip_tables_c_h.patch
Quoted 7 lines

This patch apparently dates back from 2012. Why has it never been merged upstream? Also, I don't really understand the interaction between the kernel headers, and this include/linux/ header in iptables.

Has the problem been reported upstream to iptables?

Gustavo, an opinion?

It was posted to lkml & linux-netdev at first, Davem told to post to netfilter-devel. That was done:

http://marc.info/?t=134904906300003&r=1&w=1

The logic seems right, C++ is more strict and triggers the issue. It's an issue when dealing with netfilter rules from custom C++ code.

Quoted 6 lines
Quoted 3 lines

But it seems to have been rejected without much explanation:
http://patchwork.ozlabs.org/patch/188216/

Should I repost it to netfilter-devel and update my patch to reference the above information plus the new submission thread?

I reposted on netfilter-devel and got clarification that the patch should probably have been a kernel patch, but the binary interface to iptables in the kernel has actually been replaced so this issue is deprecated. I'll carry the patch in my build locally until we update our use of the API.

http://www.spinics.net/lists/netfilter-devel/msg33996.html

Signature · 8 lines
Matthew L Weber / Pr Software Engineer
Airborne Information Systems / Security Systems and Software
MS 131-100, C Ave NE, Cedar Rapids, IA, 52498, USA
www.rockwellcollins.com

Note: Any Export License Required Information and License Restricted
Third Party Intellectual Property (TPIP) content must be encrypted and
sent to matthew.weber at corp.rockwellcollins.com.
#5 lore raw

PATCH 1/1 iptables: fix userspace compilation of ip tables with C++

Matthew, All,

On 2014-11-18 07:48 -0600, Matthew Weber spake thusly:
[--SNIP--]

Quoted 5 lines

I reposted on netfilter-devel and got clarification that the patch should probably have been a kernel patch, but the binary interface to iptables in the kernel has actually been replaced so this issue is deprecated. I'll carry the patch in my build locally until we update our use of the API.

Well, the patch seems sensible. So maybe we could carry it in Buildroot?

Quoted 1 line

http://www.spinics.net/lists/netfilter-devel/msg33996.html

Still, there is a valid point in this reply: do we know of a FLOSS C++ package that uses the iptables binary interface?

If so, that would be interesting to see how they handle that situation. And it would be a nice shoe to stick in the door so that patch can enter the kernel.

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'