From 867cda50716d393e132001484c6f0a4ae50e7eb9 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Thu, 16 Jul 2009 11:04:56 +0200 Subject: dccp: fix endianess in handshake_seq This patch fixes missing endianess conversion of the new attribute ATTR_HANDSHAKE_SEQ that was included in 19f35b21dbe2bb4386eeced4e0d87f3b2e1d. Signed-off-by: Pablo Neira Ayuso --- src/conntrack/build.c | 11 +++++++++-- src/conntrack/parse.c | 5 +++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/conntrack/build.c b/src/conntrack/build.c index dea0c75..623774f 100644 --- a/src/conntrack/build.c +++ b/src/conntrack/build.c @@ -160,11 +160,18 @@ static void __build_protoinfo(struct nfnlhdr *req, size_t size, CTA_PROTOINFO_DCCP_ROLE, &ct->protoinfo.dccp.role, sizeof(u_int8_t)); - if (test_bit(ATTR_DCCP_HANDSHAKE_SEQ, ct->set)) + if (test_bit(ATTR_DCCP_HANDSHAKE_SEQ, ct->set)) { + /* FIXME: use __cpu_to_be64() instead which is the + * correct operation. This is a semantic abuse but + * we have no function to do it in libnfnetlink. */ + u_int64_t handshake_seq = + __be64_to_cpu(ct->protoinfo.dccp.handshake_seq); + nfnl_addattr_l(&req->nlh, size, CTA_PROTOINFO_DCCP_SEQ, - &ct->protoinfo.dccp.handshake_seq, + &handshake_seq, sizeof(u_int64_t)); + } nfnl_nest_end(&req->nlh, nest_proto); nfnl_nest_end(&req->nlh, nest); default: diff --git a/src/conntrack/parse.c b/src/conntrack/parse.c index ce4b673..bf72545 100644 --- a/src/conntrack/parse.c +++ b/src/conntrack/parse.c @@ -262,8 +262,9 @@ static void __parse_protoinfo_dccp(const struct nfattr *attr, set_bit(ATTR_DCCP_ROLE, ct->set); } if (tb[CTA_PROTOINFO_DCCP_SEQ-1]) { - ct->protoinfo.dccp.handshake_seq = - *(u_int64_t *)NFA_DATA(tb[CTA_PROTOINFO_DCCP_SEQ-1]); + ct->protoinfo.dccp.handshake_seq = + __be64_to_cpu(*(u_int64_t *) + NFA_DATA(tb[CTA_PROTOINFO_DCCP_SEQ-1])); set_bit(ATTR_DCCP_HANDSHAKE_SEQ, ct->set); } } -- cgit v1.2.3