[libvirt] [PATCH v2] tpm: adapt sysfs cancel path for new TPM driver
Cole Robinson
crobinso at redhat.com
Wed Nov 18 01:54:39 UTC 2015
On 11/17/2015 08:14 PM, Cole Robinson wrote:
> On 11/17/2015 07:44 PM, Stefan Berger wrote:
>> This patch addresses BZ 1244895.
>>
>> Adapt the sysfs TPM command cancel path for the TPM driver that
>> does not use a miscdevice anymore since Linux 4.0. Support old
>> and new paths and check their availability.
>>
>> Add a mockup for the test cases to avoid the testing for
>> availability of the cancel path.
>>
>> Signed-off-by: Stefan Berger <stefanb at linux.vnet.ibm.com>
>> ---
>> src/util/virtpm.c | 21 ++++++++++++++++++---
>> tests/qemuxml2argvmock.c | 15 +++++++++++++++
>> 2 files changed, 33 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/util/virtpm.c b/src/util/virtpm.c
>> index 88f8361..6d9b065 100644
>> --- a/src/util/virtpm.c
>> +++ b/src/util/virtpm.c
>> @@ -26,6 +26,8 @@
>>
>> #include "virstring.h"
>> #include "virerror.h"
>> +#include "viralloc.h"
>> +#include "virfile.h"
>> #include "virtpm.h"
>>
>> #define VIR_FROM_THIS VIR_FROM_NONE
>> @@ -41,14 +43,27 @@ virTPMCreateCancelPath(const char *devpath)
>> {
>> char *path = NULL;
>> const char *dev;
>> + const char *prefix[] = {"misc/", "tpm/"};
>> + size_t i;
>>
>> if (devpath) {
>> dev = strrchr(devpath, '/');
>> if (dev) {
>> dev++;
>> - if (virAsprintf(&path, "/sys/class/misc/%s/device/cancel",
>> - dev) < 0)
>> - goto cleanup;
>> + for (i = 0; i < ARRAY_CARDINALITY(prefix); i++) {
>> + if (virAsprintf(&path, "/sys/class/%s%s/device/cancel",
>> + prefix[i], dev) < 0)
>> + goto cleanup;
>> +
>> + if (virFileExists(path))
>> + break;
>> +
>> + VIR_FREE(path);
>> + }
>> + if (!path)
>> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>> + _("No usable sysfs TPM cancel file could be "
>> + "found"));
>> } else {
>> virReportError(VIR_ERR_INTERNAL_ERROR,
>> _("TPM device path %s is invalid"), devpath);
>> diff --git a/tests/qemuxml2argvmock.c b/tests/qemuxml2argvmock.c
>> index d24725e..e58b8ce 100644
>> --- a/tests/qemuxml2argvmock.c
>> +++ b/tests/qemuxml2argvmock.c
>> @@ -24,9 +24,13 @@
>> #include "virnuma.h"
>> #include "virmock.h"
>> #include "virutil.h"
>> +#include "virstring.h"
>> +#include "virtpm.h"
>> #include <time.h>
>> #include <unistd.h>
>>
>> +#define VIR_FROM_THIS VIR_FROM_NONE
>> +
>> long virGetSystemPageSize(void)
>> {
>> return 4096;
>> @@ -59,3 +63,14 @@ virNumaNodeIsAvailable(int node)
>> return node >= 0 && node <= virNumaGetMaxNode();
>> }
>> #endif /* WITH_NUMACTL && HAVE_NUMA_BITMASK_ISBITSET */
>> +
>> +char *
>> +virTPMCreateCancelPath(const char *devpath)
>> +{
>> + char *path;
>> + (void)devpath;
>> +
>> + ignore_value(VIR_STRDUP(path, "/sys/class/misc/tpm0/device/cancel"));
>> +
>> + return path;
>> +}
>>
>
> ACK
>
Pushed now
Thanks,
Cole
More information about the libvir-list
mailing list