While the FW_CFG_DATA_GENERATOR_INTERFACE is only consumed
by a device only available using system-mode (fw_cfg), it is
implemented by a crypto component (tls-cipher-suites) which
is always available when crypto is used.
Commit 69699f3055 introduced the following error in the
qemu-storage-daemon binary:
  $ echo -e \
    '{"execute": "qmp_capabilities"}\r\n{"execute": "qom-list-types"}\r\n{"execute": "quit"}\r\n' \
    | storage-daemon/qemu-storage-daemon --chardev stdio,id=qmp0  --monitor qmp0
  {"QMP": {"version": {"qemu": {"micro": 50, "minor": 1, "major": 5}, "package": ""}, "capabilities": ["oob"]}}
  {"return": {}}
  missing interface 'fw_cfg-data-generator' for object 'tls-creds'
  Aborted (core dumped)
Since QOM dependencies are resolved at runtime, this issue
could not be triggered at linktime, and we don't have test
running the qemu-storage-daemon binary.
Fix by always registering the QOM interface.
Reported-by: Kevin Wolf <kwolf@redhat.com>
Fixes: 69699f3055 ("crypto/tls-cipher-suites: Produce fw_cfg consumable blob")
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-Id: <20201006111909.2302081-2-philmd@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
	
			
		
			
				
	
	
		
			24 lines
		
	
	
		
			561 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			24 lines
		
	
	
		
			561 B
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * QEMU Firmware configuration device emulation (QOM interfaces)
 | 
						|
 *
 | 
						|
 * Copyright 2020 Red Hat, Inc.
 | 
						|
 *
 | 
						|
 * SPDX-License-Identifier: GPL-2.0-or-later
 | 
						|
 */
 | 
						|
 | 
						|
#include "qemu/osdep.h"
 | 
						|
#include "hw/nvram/fw_cfg.h"
 | 
						|
 | 
						|
static const TypeInfo fw_cfg_data_generator_interface_info = {
 | 
						|
    .parent = TYPE_INTERFACE,
 | 
						|
    .name = TYPE_FW_CFG_DATA_GENERATOR_INTERFACE,
 | 
						|
    .class_size = sizeof(FWCfgDataGeneratorClass),
 | 
						|
};
 | 
						|
 | 
						|
static void fw_cfg_register_interfaces(void)
 | 
						|
{
 | 
						|
    type_register_static(&fw_cfg_data_generator_interface_info);
 | 
						|
}
 | 
						|
 | 
						|
type_init(fw_cfg_register_interfaces)
 |