diff --git a/lib/backend.py b/lib/backend.py
index f1474b71cf666fb7cb5eafa80b5dc5f584a62bd9..769e6a66fa0b72cecd3e85c2faaa015db3c63ef8 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -1851,7 +1851,7 @@ def _TryOSFromDisk(name, base_dir=None):
         return False, ("File '%s' under path '%s' is not executable" %
                        (filename, os_dir))
 
-  variants = None
+  variants = []
   if constants.OS_VARIANTS_FILE in os_files:
     variants_file = os_files[constants.OS_VARIANTS_FILE]
     try:
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 8f58243e38b7c9a85272e083af8fe079442b87d4..baa0a9ab82cf3b15f1bdcfd294a2578d62fb7772 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -2782,14 +2782,14 @@ class LUDiagnoseOS(NoHooksLU):
         for osl in os_data.values():
           valid = valid and osl and osl[0][1]
           if not valid:
-            variants = None
+            variants = set()
             break
           if calc_variants:
             node_variants = osl[0][3]
             if variants is None:
-              variants = node_variants
+              variants = set(node_variants)
             else:
-              variants = [v for v in variants if v in node_variants]
+              variants.intersection_update(node_variants)
 
       for field in self.op.output_fields:
         if field == "name":
@@ -2802,7 +2802,7 @@ class LUDiagnoseOS(NoHooksLU):
           for node_name, nos_list in os_data.items():
             val[node_name] = nos_list
         elif field == "variants":
-          val =  variants
+          val = list(variants)
         else:
           raise errors.ParameterError(field)
         row.append(val)