ABI: refuse non-matching ABI minor version on event registration stable-2.7
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Mon, 6 Nov 2017 21:10:44 +0000 (16:10 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 6 Nov 2017 21:36:32 +0000 (16:36 -0500)
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 of 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@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
liblttng-ust-ctl/ustctl.c

index 6b6f295b38bd81ff4ce3e26ad47f7ea37c351fc0..5a7fa61fa17064be30a524a3c8dd04c28b7c1da6 100644 (file)
@@ -1737,6 +1737,17 @@ int ustctl_recv_reg_msg(int sock,
                return -LTTNG_UST_ERR_UNSUP_MAJOR;
        }
 
+       /*
+        * Addition of enumeration inside _ustclt_basic_type should have been
+        * 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
+        * versions 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;
 }
 
This page took 0.02599 seconds and 4 git commands to generate.