public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: net-libs/libnftnl/, net-libs/libnftnl/files/
@ 2018-09-17 20:57 Matt Turner
  0 siblings, 0 replies; only message in thread
From: Matt Turner @ 2018-09-17 20:57 UTC (permalink / raw
  To: gentoo-commits

commit:     3907aa4b9821fc607aa7838202010bb5cc044cb1
Author:     Matt Turner <mattst88 <AT> gentoo <DOT> org>
AuthorDate: Mon Sep 17 20:53:09 2018 +0000
Commit:     Matt Turner <mattst88 <AT> gentoo <DOT> org>
CommitDate: Mon Sep 17 20:56:41 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3907aa4b

net-libs/libnftnl: add upstream patches to fix endianness issues

Also drop the unused USE=threads at the same time for bug 643958.

Closes: https://bugs.gentoo.org/640218
Closes: https://bugs.gentoo.org/643958

 .../files/libnftnl-1.1.1-big-endian-1.patch        | 93 ++++++++++++++++++++++
 .../files/libnftnl-1.1.1-big-endian-2.patch        | 37 +++++++++
 .../files/libnftnl-1.1.1-big-endian-3.patch        | 33 ++++++++
 net-libs/libnftnl/libnftnl-1.1.1-r1.ebuild         | 67 ++++++++++++++++
 4 files changed, 230 insertions(+)

diff --git a/net-libs/libnftnl/files/libnftnl-1.1.1-big-endian-1.patch b/net-libs/libnftnl/files/libnftnl-1.1.1-big-endian-1.patch
new file mode 100644
index 00000000000..e91333e21bb
--- /dev/null
+++ b/net-libs/libnftnl/files/libnftnl-1.1.1-big-endian-1.patch
@@ -0,0 +1,93 @@
+From 9737856067b97cbb869e04fc6b6e65c1d859f521 Mon Sep 17 00:00:00 2001
+From: Phil Sutter <phil@nwl.cc>
+Date: Fri, 22 Jun 2018 14:18:57 +0200
+Subject: utils: Fix nftnl_get_value() on big endian
+
+This function basically did:
+
+| memcpy(out, val, <len of requested type>);
+
+which works only for little endian integer types. Fix this by assigning
+the 64bit input value to a variable of the right size and use that as
+input for above memcpy() call.
+
+Signed-off-by: Phil Sutter <phil@nwl.cc>
+---
+ src/utils.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 42 insertions(+), 2 deletions(-)
+
+diff --git a/src/utils.c b/src/utils.c
+index 3e44960..4d9ee78 100644
+--- a/src/utils.c
++++ b/src/utils.c
+@@ -72,6 +72,15 @@ static struct {
+ 
+ int nftnl_get_value(enum nftnl_type type, void *val, void *out)
+ {
++	union {
++		uint8_t u8;
++		uint16_t u16;
++		uint32_t u32;
++		int8_t s8;
++		int16_t s16;
++		int32_t s32;
++	} values;
++	void *valuep = NULL;
+ 	int64_t sval;
+ 	uint64_t uval;
+ 
+@@ -85,7 +94,6 @@ int nftnl_get_value(enum nftnl_type type, void *val, void *out)
+ 			errno = ERANGE;
+ 			return -1;
+ 		}
+-		memcpy(out, &uval, basetype[type].len);
+ 		break;
+ 	case NFTNL_TYPE_S8:
+ 	case NFTNL_TYPE_S16:
+@@ -97,10 +105,42 @@ int nftnl_get_value(enum nftnl_type type, void *val, void *out)
+ 			errno = ERANGE;
+ 			return -1;
+ 		}
+-		memcpy(out, &sval, basetype[type].len);
+ 		break;
+ 	}
+ 
++	switch (type) {
++	case NFTNL_TYPE_U8:
++		values.u8 = uval;
++		valuep = &values.u8;
++		break;
++	case NFTNL_TYPE_U16:
++		values.u16 = uval;
++		valuep = &values.u16;
++		break;
++	case NFTNL_TYPE_U32:
++		values.u32 = uval;
++		valuep = &values.u32;
++		break;
++	case NFTNL_TYPE_U64:
++		valuep = &uval;
++		break;
++	case NFTNL_TYPE_S8:
++		values.s8 = sval;
++		valuep = &values.s8;
++		break;
++	case NFTNL_TYPE_S16:
++		values.s16 = sval;
++		valuep = &values.s16;
++		break;
++	case NFTNL_TYPE_S32:
++		values.s32 = sval;
++		valuep = &values.s32;
++		break;
++	case NFTNL_TYPE_S64:
++		valuep = &sval;
++		break;
++	}
++	memcpy(out, valuep, basetype[type].len);
+ 	return 0;
+ }
+ 
+-- 
+cgit v1.2.1
+

diff --git a/net-libs/libnftnl/files/libnftnl-1.1.1-big-endian-2.patch b/net-libs/libnftnl/files/libnftnl-1.1.1-big-endian-2.patch
new file mode 100644
index 00000000000..c6fb5a25a89
--- /dev/null
+++ b/net-libs/libnftnl/files/libnftnl-1.1.1-big-endian-2.patch
@@ -0,0 +1,37 @@
+From 5d592ce6c4596b25d5779a224d03c096bc25db54 Mon Sep 17 00:00:00 2001
+From: Phil Sutter <phil@nwl.cc>
+Date: Fri, 22 Jun 2018 14:18:58 +0200
+Subject: expr/data_reg: Fix JSON parsing on big endian
+
+Since reg->len is a 32bit variable, one needs to pass NFTNL_TYPE_U32 to
+nftnl_jansson_parse_val(). Otherwise, only the most significant byte in
+that variable is being written to.
+
+Since the value could potentially be larger than 255, increase node_name
+buffer to avoid a compiler warning.
+
+Signed-off-by: Phil Sutter <phil@nwl.cc>
+---
+ src/expr/data_reg.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/expr/data_reg.c b/src/expr/data_reg.c
+index 1b28b29..ad7f4cb 100644
+--- a/src/expr/data_reg.c
++++ b/src/expr/data_reg.c
+@@ -59,10 +59,10 @@ static int nftnl_data_reg_verdict_json_parse(union nftnl_data_reg *reg, json_t *
+ static int nftnl_data_reg_value_json_parse(union nftnl_data_reg *reg, json_t *data,
+ 					 struct nftnl_parse_err *err)
+ {
+-	char node_name[8] = {};	/* strlen("data256") + 1 == 8 */
++	char node_name[32] = {};
+ 	int ret, remain = sizeof(node_name), offset = 0, i;
+ 
+-	if (nftnl_jansson_parse_val(data, "len", NFTNL_TYPE_U8, &reg->len, err) < 0)
++	if (nftnl_jansson_parse_val(data, "len", NFTNL_TYPE_U32, &reg->len, err) < 0)
+ 			return DATA_NONE;
+ 
+ 	for (i = 0; i < div_round_up(reg->len, sizeof(uint32_t)); i++) {
+-- 
+cgit v1.2.1
+

diff --git a/net-libs/libnftnl/files/libnftnl-1.1.1-big-endian-3.patch b/net-libs/libnftnl/files/libnftnl-1.1.1-big-endian-3.patch
new file mode 100644
index 00000000000..d726ccfdc2d
--- /dev/null
+++ b/net-libs/libnftnl/files/libnftnl-1.1.1-big-endian-3.patch
@@ -0,0 +1,33 @@
+From 043060b18d27f24fe723e39bc2c9e5f50dde60dd Mon Sep 17 00:00:00 2001
+From: Phil Sutter <phil@nwl.cc>
+Date: Fri, 22 Jun 2018 14:18:59 +0200
+Subject: expr/exthdr: Fix JSON parsing on big endian
+
+When setting NFTNL_EXPR_EXTHDR_TYPE, one needs to call
+nftnl_expr_set_u8() and not nftnl_expr_set_u32(). Otherwise 'type'
+variable is assigned to uint32_t parameter before being passed to
+nftnl_expr_exthdr_set() as void pointer which casts it to uint8_t.
+On big endian systems, the latter would only consider the most
+significant byte instead of the least significant one.
+
+Signed-off-by: Phil Sutter <phil@nwl.cc>
+---
+ src/expr/exthdr.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/expr/exthdr.c b/src/expr/exthdr.c
+index 75cafbc..a351835 100644
+--- a/src/expr/exthdr.c
++++ b/src/expr/exthdr.c
+@@ -270,7 +270,7 @@ nftnl_expr_exthdr_json_parse(struct nftnl_expr *e, json_t *root,
+ 		type = str2exthdr_type(exthdr_type);
+ 		if (type < 0)
+ 			return -1;
+-		nftnl_expr_set_u32(e, NFTNL_EXPR_EXTHDR_TYPE, type);
++		nftnl_expr_set_u8(e, NFTNL_EXPR_EXTHDR_TYPE, type);
+ 	}
+ 
+ 	if (nftnl_jansson_parse_val(root, "offset", NFTNL_TYPE_U32, &uval32,
+-- 
+cgit v1.2.1
+

diff --git a/net-libs/libnftnl/libnftnl-1.1.1-r1.ebuild b/net-libs/libnftnl/libnftnl-1.1.1-r1.ebuild
new file mode 100644
index 00000000000..0cd0aa9c581
--- /dev/null
+++ b/net-libs/libnftnl/libnftnl-1.1.1-r1.ebuild
@@ -0,0 +1,67 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit autotools linux-info toolchain-funcs
+
+DESCRIPTION="Netlink API to the in-kernel nf_tables subsystem"
+HOMEPAGE="https://netfilter.org/projects/nftables/"
+SRC_URI="https://netfilter.org/projects/${PN}/files/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0/7" # libnftnl.so version
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~x86"
+IUSE="examples json static-libs test"
+
+RDEPEND=">=net-libs/libmnl-1.0.3
+	json? ( >=dev-libs/jansson-2.3 )"
+DEPEND="virtual/pkgconfig
+	${RDEPEND}"
+
+REQUIRED_USE="test? ( json )"
+
+PATCHES=(
+	"${FILESDIR}"/${P}-big-endian-1.patch
+	"${FILESDIR}"/${P}-big-endian-2.patch
+	"${FILESDIR}"/${P}-big-endian-3.patch
+)
+
+pkg_setup() {
+	if kernel_is ge 3 13; then
+		CONFIG_CHECK="~NF_TABLES"
+		linux-info_pkg_setup
+	else
+		eerror "This package requires kernel version 3.13 or newer to work properly."
+	fi
+}
+src_prepare() {
+	default
+	eautoreconf
+}
+
+src_configure() {
+	local myeconfargs=(
+		$(use_enable static-libs static)
+		$(use_with json json-parsing)
+	)
+	econf "${myeconfargs[@]}"
+}
+
+src_test() {
+	default
+	cd tests || die
+	./test-script.sh || die
+}
+
+src_install() {
+	default
+	gen_usr_ldscript -a nftnl
+	find "${D}" -name '*.la' -delete || die "Could not rm libtool files"
+
+	if use examples; then
+		find examples/ -name 'Makefile*' -delete || die "Could not rm examples"
+		dodoc -r examples
+		docompress -x /usr/share/doc/${PF}/examples
+	fi
+}


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2018-09-17 20:57 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-09-17 20:57 [gentoo-commits] repo/gentoo:master commit in: net-libs/libnftnl/, net-libs/libnftnl/files/ Matt Turner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox