diff mbox series

ebtables: Fix build errors and warnings

Message ID 20180514222643.16148-1-duncan_roe@optusnet.com.au
State Accepted
Headers show
Series ebtables: Fix build errors and warnings | expand

Commit Message

Duncan Roe May 14, 2018, 10:26 p.m. UTC
Since commit b1cdae87f25021eb835872d86d6e7206bd421c3f, make fails thusly:

> libebtc.c: In function 'ebt_reinit_extensions':
> libebtc.c:275:11: error: 'union <anonymous>' has no member named 'revision'
>     m->m->u.revision = m->revision;
>            ^
> libebtc.c: In function 'ebt_check_rule_exists':
> libebtc.c:555:21: error: 'union <anonymous>' has no member named 'revision'
>            m_l2->m->u.revision != m->m->u.revision)) {
>                      ^
> libebtc.c:555:41: error: 'union <anonymous>' has no member named 'revision'
>            m_l2->m->u.revision != m->m->u.revision)) {
>                                          ^
> libebtc.c: In function 'ebt_register_match':
> libebtc.c:1215:9: error: 'union <anonymous>' has no member named 'revision'
>   m->m->u.revision = m->revision;
>          ^
The cause of this failure is that the commit updated include/ebtables.h but
libebtc.c uses include/linux/netfilter_bridge/ebtables.h via
include/ebtables_u.h (gcc -E -C verifies this).

The 2 versions of ebtables.h looked to me to be otherwise close enough, so
amended ebtables_u.h to use the newer one.

Makefile insists on being warning-free, so cleared up warnings. Apart from
unused variables, there was also the issue that the diagnostic macro
ebt_print_error2 *returns* (i.e. makes its caller return) and returns -1. This
is unsuitable for use in functions which do not return a value, so introduced
ebt_print_error3 to do this.

Signed-off-by: Duncan Roe <duncan_roe@optusnet.com.au>
---
 extensions/ebt_string.c | 25 +++++++++++--------------
 include/ebtables_u.h    |  4 +++-
 2 files changed, 14 insertions(+), 15 deletions(-)

Comments

Florian Westphal May 14, 2018, 10:42 p.m. UTC | #1
Duncan Roe <duncan_roe@optusnet.com.au> wrote:
> Since commit b1cdae87f25021eb835872d86d6e7206bd421c3f, make fails thusly:
> 
> > libebtc.c: In function 'ebt_reinit_extensions':
> > libebtc.c:275:11: error: 'union <anonymous>' has no member named 'revision'
> >     m->m->u.revision = m->revision;
> >            ^
> > libebtc.c: In function 'ebt_check_rule_exists':
> > libebtc.c:555:21: error: 'union <anonymous>' has no member named 'revision'
> >            m_l2->m->u.revision != m->m->u.revision)) {
> >                      ^
> > libebtc.c:555:41: error: 'union <anonymous>' has no member named 'revision'
> >            m_l2->m->u.revision != m->m->u.revision)) {
> >                                          ^
> > libebtc.c: In function 'ebt_register_match':
> > libebtc.c:1215:9: error: 'union <anonymous>' has no member named 'revision'
> >   m->m->u.revision = m->revision;
> >          ^
> The cause of this failure is that the commit updated include/ebtables.h but
> libebtc.c uses include/linux/netfilter_bridge/ebtables.h via
> include/ebtables_u.h (gcc -E -C verifies this).
> 
> The 2 versions of ebtables.h looked to me to be otherwise close enough, so
> amended ebtables_u.h to use the newer one.
> 
> Makefile insists on being warning-free, so cleared up warnings. Apart from
> unused variables, there was also the issue that the diagnostic macro
> ebt_print_error2 *returns* (i.e. makes its caller return) and returns -1. This
> is unsuitable for use in functions which do not return a value, so introduced
> ebt_print_error3 to do this.

Applied, thanks Duncan.
I made one change, build still failed for me on FC28 due to strncpy
warning:

extensions/ebt_string.c:171:3: error: ‘strncpy’ specified bound 16
equals destination size [-Werror=stringop-truncation]
strncpy(info->algo, optarg, XT_STRING_MAX_ALGO_NAME_SIZE);
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Duncan Roe May 21, 2018, 5:53 a.m. UTC | #2
On Tue, May 15, 2018 at 12:42:09AM +0200, Florian Westphal wrote:
> Duncan Roe <duncan_roe@optusnet.com.au> wrote:
> > Since commit b1cdae87f25021eb835872d86d6e7206bd421c3f, make fails thusly:
> >
> > > libebtc.c: In function 'ebt_reinit_extensions':
> > > libebtc.c:275:11: error: 'union <anonymous>' has no member named 'revision'
> > >     m->m->u.revision = m->revision;
> > >            ^
> > > libebtc.c: In function 'ebt_check_rule_exists':
> > > libebtc.c:555:21: error: 'union <anonymous>' has no member named 'revision'
> > >            m_l2->m->u.revision != m->m->u.revision)) {
> > >                      ^
> > > libebtc.c:555:41: error: 'union <anonymous>' has no member named 'revision'
> > >            m_l2->m->u.revision != m->m->u.revision)) {
> > >                                          ^
> > > libebtc.c: In function 'ebt_register_match':
> > > libebtc.c:1215:9: error: 'union <anonymous>' has no member named 'revision'
> > >   m->m->u.revision = m->revision;
> > >          ^
> > The cause of this failure is that the commit updated include/ebtables.h but
> > libebtc.c uses include/linux/netfilter_bridge/ebtables.h via
> > include/ebtables_u.h (gcc -E -C verifies this).
> >
> > The 2 versions of ebtables.h looked to me to be otherwise close enough, so
> > amended ebtables_u.h to use the newer one.
> >
> > Makefile insists on being warning-free, so cleared up warnings. Apart from
> > unused variables, there was also the issue that the diagnostic macro
> > ebt_print_error2 *returns* (i.e. makes its caller return) and returns -1. This
> > is unsuitable for use in functions which do not return a value, so introduced
> > ebt_print_error3 to do this.
>
> Applied, thanks Duncan.
> I made one change, build still failed for me on FC28 due to strncpy
> warning:
>
> extensions/ebt_string.c:171:3: error: ???strncpy??? specified bound 16
> equals destination size [-Werror=stringop-truncation]
> strncpy(info->algo, optarg, XT_STRING_MAX_ALGO_NAME_SIZE);
>    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Odd that. I didn't see this line being changed, but am not getting a warning
from gcc8.1 (that FC28 has, right?).

Cheers ... Duncan.
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Duncan Roe June 12, 2018, 2:22 a.m. UTC | #3
On Mon, May 21, 2018 at 03:53:11PM +1000, Duncan Roe wrote:
> On Tue, May 15, 2018 at 12:42:09AM +0200, Florian Westphal wrote:
> > Duncan Roe <duncan_roe@optusnet.com.au> wrote:
> > > Since commit b1cdae87f25021eb835872d86d6e7206bd421c3f, make fails thusly:
> > >
> > > > libebtc.c: In function 'ebt_reinit_extensions':
> > > > libebtc.c:275:11: error: 'union <anonymous>' has no member named 'revision'
> > > >     m->m->u.revision = m->revision;
> > > >            ^
> > > > libebtc.c: In function 'ebt_check_rule_exists':
> > > > libebtc.c:555:21: error: 'union <anonymous>' has no member named 'revision'
> > > >            m_l2->m->u.revision != m->m->u.revision)) {
> > > >                      ^
> > > > libebtc.c:555:41: error: 'union <anonymous>' has no member named 'revision'
> > > >            m_l2->m->u.revision != m->m->u.revision)) {
> > > >                                          ^
> > > > libebtc.c: In function 'ebt_register_match':
> > > > libebtc.c:1215:9: error: 'union <anonymous>' has no member named 'revision'
> > > >   m->m->u.revision = m->revision;
> > > >          ^
> > > The cause of this failure is that the commit updated include/ebtables.h but
> > > libebtc.c uses include/linux/netfilter_bridge/ebtables.h via
> > > include/ebtables_u.h (gcc -E -C verifies this).
> > >
> > > The 2 versions of ebtables.h looked to me to be otherwise close enough, so
> > > amended ebtables_u.h to use the newer one.
> > >
> > > Makefile insists on being warning-free, so cleared up warnings. Apart from
> > > unused variables, there was also the issue that the diagnostic macro
> > > ebt_print_error2 *returns* (i.e. makes its caller return) and returns -1. This
> > > is unsuitable for use in functions which do not return a value, so introduced
> > > ebt_print_error3 to do this.
> >
> > Applied, thanks Duncan.
> > I made one change, build still failed for me on FC28 due to strncpy
> > warning:
> >
> > extensions/ebt_string.c:171:3: error: ???strncpy??? specified bound 16
> > equals destination size [-Werror=stringop-truncation]
> > strncpy(info->algo, optarg, XT_STRING_MAX_ALGO_NAME_SIZE);
> >    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> Odd that. I didn't see this line being changed, but am not getting a warning
> from gcc8.1 (that FC28 has, right?).

I am now able to reproduce this in an FC28 VM. Expect a patch soon,

Cheers ... Duncan.
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox series

Patch

diff --git a/extensions/ebt_string.c b/extensions/ebt_string.c
index 793f5df..9550c41 100644
--- a/extensions/ebt_string.c
+++ b/extensions/ebt_string.c
@@ -71,7 +71,7 @@  static void parse_string(const char *s, struct xt_string_info *info)
 		info->patlen = strnlen(s, XT_STRING_MAX_PATTERN_SIZE);
 		return;
 	}
-	ebt_print_error2("STRING too long \"%s\"", s);
+	ebt_print_error3("STRING too long \"%s\"", s);
 }
 
 static void parse_hex_string(const char *s, struct xt_string_info *info)
@@ -83,14 +83,14 @@  static void parse_hex_string(const char *s, struct xt_string_info *info)
 	slen = strlen(s);
 
 	if (slen == 0) {
-		ebt_print_error2("STRING must contain at least one char");
+		ebt_print_error3("STRING must contain at least one char");
 	}
 
 	while (i < slen) {
 		if (s[i] == '\\' && !hex_f) {
 			literal_f = 1;
 		} else if (s[i] == '\\') {
-			ebt_print_error2("Cannot include literals in hex data");
+			ebt_print_error3("Cannot include literals in hex data");
 		} else if (s[i] == '|') {
 			if (hex_f)
 				hex_f = 0;
@@ -108,28 +108,28 @@  static void parse_hex_string(const char *s, struct xt_string_info *info)
 
 		if (literal_f) {
 			if (i+1 >= slen) {
-				ebt_print_error2("Bad literal placement at end of string");
+				ebt_print_error3("Bad literal placement at end of string");
 			}
 			info->pattern[sindex] = s[i+1];
 			i += 2;  /* skip over literal char */
 			literal_f = 0;
 		} else if (hex_f) {
 			if (i+1 >= slen) {
-				ebt_print_error2("Odd number of hex digits");
+				ebt_print_error3("Odd number of hex digits");
 			}
 			if (i+2 >= slen) {
 				/* must end with a "|" */
-				ebt_print_error2("Invalid hex block");
+				ebt_print_error3("Invalid hex block");
 			}
 			if (! isxdigit(s[i])) /* check for valid hex char */
-				ebt_print_error2("Invalid hex char '%c'", s[i]);
+				ebt_print_error3("Invalid hex char '%c'", s[i]);
 			if (! isxdigit(s[i+1])) /* check for valid hex char */
-				ebt_print_error2("Invalid hex char '%c'", s[i+1]);
+				ebt_print_error3("Invalid hex char '%c'", s[i+1]);
 			hextmp[0] = s[i];
 			hextmp[1] = s[i+1];
 			hextmp[2] = '\0';
 			if (! sscanf(hextmp, "%x", &schar))
-				ebt_print_error2("Invalid hex char `%c'", s[i]);
+				ebt_print_error3("Invalid hex char `%c'", s[i]);
 			info->pattern[sindex] = (char) schar;
 			if (s[i+2] == ' ')
 				i += 3;  /* spaces included in the hex block */
@@ -140,7 +140,7 @@  static void parse_hex_string(const char *s, struct xt_string_info *info)
 			i++;
 		}
 		if (sindex > XT_STRING_MAX_PATTERN_SIZE)
-			ebt_print_error2("STRING too long \"%s\"", s);
+			ebt_print_error3("STRING too long \"%s\"", s);
 		sindex++;
 	}
 	info->patlen = sindex;
@@ -150,9 +150,6 @@  static int parse(int c, char **argv, int argc, const struct ebt_u_entry *entry,
 		 unsigned int *flags, struct ebt_entry_match **match)
 {
 	struct xt_string_info *info = (struct xt_string_info *)(*match)->data;
-	int i;
-	int input_string_length = 0;
-	char buf[3] = { 0 };
 
 	switch (c) {
 	case STRING_FROM:
@@ -206,7 +203,7 @@  static void final_check(const struct ebt_u_entry *entry,
 	struct xt_string_info *info = (struct xt_string_info *)match->data;
 
 	if (info->to_offset < info->from_offset) {
-		ebt_print_error2("'to' offset should not be less than 'from' "
+		ebt_print_error3("'to' offset should not be less than 'from' "
 				 "offset");
 	}
 }
diff --git a/include/ebtables_u.h b/include/ebtables_u.h
index 4824a14..7adc5a2 100644
--- a/include/ebtables_u.h
+++ b/include/ebtables_u.h
@@ -25,7 +25,7 @@ 
 #define EBTABLES_U_H
 #include <netinet/in.h>
 #include <netinet/ether.h>
-#include <linux/netfilter_bridge/ebtables.h>
+#include <ebtables.h>
 #include <linux/netfilter/x_tables.h>
 
 #ifndef IPPROTO_SCTP
@@ -338,6 +338,8 @@  _ch;})
 #define ebt_print_error(format,args...) __ebt_print_error(format, ##args);
 #define ebt_print_error2(format, args...) do {__ebt_print_error(format, ##args); \
    return -1;} while (0)
+#define ebt_print_error3(format, args...) do {__ebt_print_error(format, ##args); \
+   return;} while (0)
 #define ebt_check_option2(flags,mask)	\
 ({ebt_check_option(flags,mask);		\
  if (ebt_errormsg[0] != '\0')		\