Add kernel module version validation
[lttng-tools.git] / src / bin / lttng-sessiond / kernel.c
index afa5e604fbefff9a9a2465fb5809cfe884d19f60..3b0d6e5f5ee05146aff5d2e31b61517577eed62b 100644 (file)
@@ -28,6 +28,7 @@
 #include <common/kernel-ctl/kernel-ctl.h>
 
 #include "kernel.h"
+#include "kern-modules.h"
 
 /*
  * Add context on a kernel channel.
@@ -606,3 +607,47 @@ error_fp:
 error:
        return -1;
 }
+
+/*
+ * Get kernel version and validate it.
+ */
+int kernel_validate_version(int tracer_fd)
+{
+       int ret;
+       struct lttng_kernel_tracer_version version;
+
+       ret = kernctl_tracer_version(tracer_fd, &version);
+       if (ret < 0) {
+               ERR("Failed at getting the lttng-modules version");
+               goto error;
+       }
+
+       /* Validate version */
+       if (version.version > KERN_MODULES_VERSION) {
+               goto error_version;
+       } else {
+               if (version.patchlevel > KERN_MODULES_PATCHLEVEL) {
+                       goto error_version;
+               }
+               else {
+                       if (version.sublevel > KERN_MODULES_SUBLEVEL) {
+                               goto error_version;
+                       }
+               }
+       }
+
+       DBG2("Kernel tracer version validated (%d.%d.%d)", version.version,
+                       version.patchlevel, version.sublevel);
+
+       return 0;
+
+error_version:
+       ERR("Kernel version is not compatible %d.%d.%d (supporting <= %d.%d.%d)",
+                       version.version, version.patchlevel, version.sublevel,
+                       KERN_MODULES_VERSION, KERN_MODULES_PATCHLEVEL,
+                       KERN_MODULES_SUBLEVEL);
+       ret = -1;
+
+error:
+       return ret;
+}
This page took 0.023686 seconds and 4 git commands to generate.