Skip to content
  • Markus Armbruster's avatar
    a22528b9
    numa: Fix QMP command set-numa-node error handling · a22528b9
    Markus Armbruster authored
    
    
    Calling error_report() in a function that takes an Error ** argument
    is suspicious.  parse_numa_node() does that, and then exit()s.  It
    also passes &error_fatal to machine_set_cpu_numa_node().  Both wrong.
    Attempting to configure numa when the machine doesn't support it kills
    the VM:
    
        $ qemu-system-x86_64 -nodefaults -S -display none -M none -preconfig -qmp stdio
        {"QMP": {"version": {"qemu": {"micro": 50, "minor": 0, "major": 3}, "package": "v3.0.0-837-gc5e4e49258"}, "capabilities": []}}
        {"execute": "qmp_capabilities"}
        {"return": {}}
        {"execute": "set-numa-node", "arguments": {"type": "node"}}
        NUMA is not supported by this machine-type
        $ echo $?
        1
    
    Messed up when commit 64c2a8f6 and 7c88e65d (v2.10.0) added
    incorrect error handling right next to correct examples.  Latent bug
    until commit f3be6781 (v3.0.0) made it accessible via QMP.  Fairly
    harmless in practice, because it's limited to RUN_STATE_PRECONFIG.
    The fix is obvious: replace error_report(); exit() by error_setg();
    return.
    
    This affects parse_numa_node()'s other caller
    numa_complete_configuration(): since it ignores errors, the "NUMA is
    not supported by this machine-type" is now ignored, too.  But that
    error is as unexpected there as any other.  Change it to abort on
    error instead.
    
    Fixes: f3be6781
    Cc: Igor Mammedov <imammedo@redhat.com>
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarIgor Mammedov <imammedo@redhat.com>
    Message-Id: <20181017082702.5581-16-armbru@redhat.com>
    a22528b9
    numa: Fix QMP command set-numa-node error handling
    Markus Armbruster authored
    
    
    Calling error_report() in a function that takes an Error ** argument
    is suspicious.  parse_numa_node() does that, and then exit()s.  It
    also passes &error_fatal to machine_set_cpu_numa_node().  Both wrong.
    Attempting to configure numa when the machine doesn't support it kills
    the VM:
    
        $ qemu-system-x86_64 -nodefaults -S -display none -M none -preconfig -qmp stdio
        {"QMP": {"version": {"qemu": {"micro": 50, "minor": 0, "major": 3}, "package": "v3.0.0-837-gc5e4e49258"}, "capabilities": []}}
        {"execute": "qmp_capabilities"}
        {"return": {}}
        {"execute": "set-numa-node", "arguments": {"type": "node"}}
        NUMA is not supported by this machine-type
        $ echo $?
        1
    
    Messed up when commit 64c2a8f6 and 7c88e65d (v2.10.0) added
    incorrect error handling right next to correct examples.  Latent bug
    until commit f3be6781 (v3.0.0) made it accessible via QMP.  Fairly
    harmless in practice, because it's limited to RUN_STATE_PRECONFIG.
    The fix is obvious: replace error_report(); exit() by error_setg();
    return.
    
    This affects parse_numa_node()'s other caller
    numa_complete_configuration(): since it ignores errors, the "NUMA is
    not supported by this machine-type" is now ignored, too.  But that
    error is as unexpected there as any other.  Change it to abort on
    error instead.
    
    Fixes: f3be6781
    Cc: Igor Mammedov <imammedo@redhat.com>
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarIgor Mammedov <imammedo@redhat.com>
    Message-Id: <20181017082702.5581-16-armbru@redhat.com>
Loading