mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-02 01:45:17 +00:00
Don't use enums in TPM struct fields
When using an enum in a struct field, the compiler is free to decide to make it an unsigned type if it desires. This in turn leads to bugs when code does if ((def->foo = virDomainFooTypeFromString(str)) < 0) ... because 'def->foo' can't technically have an unsigned value from the compiler's POV. While it is possible to add (int) casts in the code example above, this is not desirable because it is easy to miss out such casts. eg the code fixed here caused an error with clang builds ../../src/conf/domain_conf.c:12838:73: error: comparison of unsigned enum expression < 0 is always false [-Werror,-Wtautological-compare] if ((def->version = virDomainTPMVersionTypeFromString(version)) < 0) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~ Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
fab2e49d3c
commit
ed29219f21
@ -12795,7 +12795,7 @@ virDomainTPMDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
|
||||
model = virXMLPropString(node, "model");
|
||||
if (model != NULL &&
|
||||
(int)(def->model = virDomainTPMModelTypeFromString(model)) < 0) {
|
||||
(def->model = virDomainTPMModelTypeFromString(model)) < 0) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Unknown TPM frontend model '%s'"), model);
|
||||
goto error;
|
||||
@ -12824,7 +12824,7 @@ virDomainTPMDefParseXML(virDomainXMLOptionPtr xmlopt,
|
||||
goto error;
|
||||
}
|
||||
|
||||
if ((int)(def->type = virDomainTPMBackendTypeFromString(backend)) < 0) {
|
||||
if ((def->type = virDomainTPMBackendTypeFromString(backend)) < 0) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Unknown TPM backend type '%s'"),
|
||||
backend);
|
||||
|
@ -1307,10 +1307,10 @@ typedef enum {
|
||||
# define VIR_DOMAIN_TPM_DEFAULT_DEVICE "/dev/tpm0"
|
||||
|
||||
struct _virDomainTPMDef {
|
||||
virDomainTPMBackendType type;
|
||||
int type; /* virDomainTPMBackendType */
|
||||
virDomainDeviceInfo info;
|
||||
virDomainTPMModel model;
|
||||
virDomainTPMVersion version;
|
||||
int model; /* virDomainTPMModel */
|
||||
int version; /* virDomainTPMVersion */
|
||||
union {
|
||||
struct {
|
||||
virDomainChrSourceDef source;
|
||||
|
Loading…
x
Reference in New Issue
Block a user