[lttng-dev] [PATCH lttng-ust 2.7 2.8] ABI: refuse non-matching ABI minor version on event registration

Jonathan Rajotte jonathan.rajotte-julien at efficios.com
Mon Nov 6 21:10:44 UTC 2017


---
Apply to stable 2.7 and stable 2.8 ONLY.
Both are considered EOL but this is a major issue that need to be fixed.
---

In scenarios where a lttng-tools 2.8 (lttng-ust 2.8) stack is running
and an application linked against a lttng-ust 2.7, event registration
will fail on fields size validation [1]. This is not expected based on the
ABI versioning exposed by lttng-ust 2.7 (6.0) and lttng-ust 2.8 (6.1).

The same happen if the scenario is reversed

This is the result off a change in _ustctl_basic_type.
2.8 introduced enumeration to _ustctl_basic_type. The defined padding is
of 296 while the new union member is 312 (310 of real data + 2 for
alignment) pushing the structure size to 312 instead of the previous
296. This should have been an major ABI break but until now the problem
did not surface.

To prevent this, refuse non matching minor version. No need to check for
particular major,minor version since only 6.0 (ust 2.7) and 6.1 (ust
2.8) exist until a major ABI break.

Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien at efficios.com>
---
 liblttng-ust-ctl/ustctl.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/liblttng-ust-ctl/ustctl.c b/liblttng-ust-ctl/ustctl.c
index d08e7edc..bc7cccaf 100644
--- a/liblttng-ust-ctl/ustctl.c
+++ b/liblttng-ust-ctl/ustctl.c
@@ -1824,6 +1824,17 @@ int ustctl_recv_reg_msg(int sock,
 		return -LTTNG_UST_ERR_UNSUP_MAJOR;
 	}
 
+	/*
+	 * Addition of enumeration inside _ustclt_basic_type should have been a
+	 * marked as a breaking ABI change since it blows past the included
+	 * padding hence result in bigger than expected struct. Refuse
+	 * registration for non-matching minor version since only two minor
+	 * version exist for ust-2.7(6.0) and 2.8(6.1).
+	 */
+	if (reg_msg.minor != LTTNG_UST_ABI_MINOR_VERSION) {
+		return -LTTNG_UST_ERR_UNSUP_MAJOR;
+	}
+
 	return 0;
 }
 
-- 
2.11.0



More information about the lttng-dev mailing list