Skip to content
  • Markus Armbruster's avatar
    cb77d192
    qemu-option: Guard against qemu_opts_set_defaults() misuse · cb77d192
    Markus Armbruster authored
    
    
    Commit 6d4cd408 fixed qemu_opts_set_defaults() for an existing corner
    case, but broke it for another one that can't be reached in current
    code.
    
    Quote from its commit message:
    
        I believe [opts_parse()] attempts to do the following:
    
            If options don't yet exist, create new options
            Else, if defaults, modify the existing options
            Else, if list->merge_lists, modify the existing options
            Else, fail
    
    The only caller that passes true for defaults is
    qemu_opts_set_defaults().
    
    The commit message then claims:
    
        A straightforward call of qemu_opts_create() does exactly that.
    
    Wrong.  When !list->merge_lists, and the option string doesn't contain
    id=, and options without ID exist, then we don't actually modify the
    existing options, we create new ones.
    
    Not reachable, because we never pass lists with !list->merge_lists to
    qemu_opts_set_defaults().
    
    Guard against possible (if unlikely) future misuse with assert().
    
    Reported-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Message-id: 1375428840-5275-1-git-send-email-armbru@redhat.com
    Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
    cb77d192
    qemu-option: Guard against qemu_opts_set_defaults() misuse
    Markus Armbruster authored
    
    
    Commit 6d4cd408 fixed qemu_opts_set_defaults() for an existing corner
    case, but broke it for another one that can't be reached in current
    code.
    
    Quote from its commit message:
    
        I believe [opts_parse()] attempts to do the following:
    
            If options don't yet exist, create new options
            Else, if defaults, modify the existing options
            Else, if list->merge_lists, modify the existing options
            Else, fail
    
    The only caller that passes true for defaults is
    qemu_opts_set_defaults().
    
    The commit message then claims:
    
        A straightforward call of qemu_opts_create() does exactly that.
    
    Wrong.  When !list->merge_lists, and the option string doesn't contain
    id=, and options without ID exist, then we don't actually modify the
    existing options, we create new ones.
    
    Not reachable, because we never pass lists with !list->merge_lists to
    qemu_opts_set_defaults().
    
    Guard against possible (if unlikely) future misuse with assert().
    
    Reported-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Message-id: 1375428840-5275-1-git-send-email-armbru@redhat.com
    Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
Loading