[ovs-dev] [PATCH] datapath: Enforce matching of kernel releases on loading openvswitch.ko

Yifeng Sun pkusunyifeng at gmail.com
Tue Dec 12 15:59:49 UTC 2017


Deployment and upgrade failure is quite often caused by that openvswitch.ko was
built upon kernel x.y.z-release-A while it is loaded into a running kernel
of x.y.z-release-B. This patch proposes to enforce the matching of the two
kernel release numbers at the moment of deployment and upgrading.

Signed-off-by: Yifeng Sun <pkusunyifeng at gmail.com>
---
 datapath/datapath.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/datapath/datapath.c b/datapath/datapath.c
index 178081993b42..0e3a1db63847 100644
--- a/datapath/datapath.c
+++ b/datapath/datapath.c
@@ -51,6 +51,8 @@
 #include <net/genetlink.h>
 #include <net/net_namespace.h>
 #include <net/netns/generic.h>
+#include <generated/utsrelease.h>
+#include <linux/utsname.h>
 
 #include "datapath.h"
 #include "conntrack.h"
@@ -61,6 +63,8 @@
 #include "vport-internal_dev.h"
 #include "vport-netdev.h"
 
+static const char *build_kernel_release = UTS_RELEASE;
+
 unsigned int ovs_net_id __read_mostly;
 
 static struct genl_family dp_packet_genl_family;
@@ -2406,6 +2410,15 @@ static int __init dp_init(void)
 
 	BUILD_BUG_ON(sizeof(struct ovs_skb_cb) > FIELD_SIZEOF(struct sk_buff, cb));
 
+	if (strcmp(build_kernel_release, utsname()->release)) {
+		pr_err("Failed to load Open vSwitch kernel module: "
+				"the modules' built-on kernel release (%s) "
+				"doesn't match the running kernel's release (%s)\n",
+				build_kernel_release, utsname()->release);
+		err = -EINVAL;
+		goto error;
+	}
+
 	pr_info("Open vSwitch switching datapath %s\n", VERSION);
 
 	err = action_fifos_init();
-- 
2.7.4



More information about the dev mailing list