[libvirt] [PATCH v2] tpm: adapt sysfs cancel path for new TPM driver

Stefan Berger stefanb at us.ibm.com
Tue Nov 17 21:59:13 UTC 2015


Cole Robinson <crobinso at redhat.com> wrote on 11/17/2015 04:37:56 PM:

> From: Cole Robinson <crobinso at redhat.com>
> To: Stefan Berger/Watson/IBM at IBMUS, libvir-list at redhat.com, 
> berrange at redhat.com
> Cc: Stefan Berger <stefanb at linux.vnet.ibm.com>
> Date: 11/17/2015 04:38 PM
> Subject: Re: [PATCH v2] tpm: adapt sysfs cancel path for new TPM driver
> 
> On 11/17/2015 10:46 AM, Stefan Berger wrote:
> > 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        | 22 ++++++++++++++++++++--
> >  tests/qemuxml2argvmock.c | 15 +++++++++++++++
> >  2 files changed, 35 insertions(+), 2 deletions(-)
> > 
> > diff --git a/src/util/virtpm.c b/src/util/virtpm.c
> > index 88f8361..3872a31 100644
> > --- a/src/util/virtpm.c
> > +++ b/src/util/virtpm.c
> > @@ -23,9 +23,12 @@
> >  #include <config.h>
> > 
> >  #include <sys/stat.h>
> > +#include <fcntl.h>
> > 
> >  #include "virstring.h"
> >  #include "virerror.h"
> > +#include "viralloc.h"
> > +#include "virfile.h"
> >  #include "virtpm.h"
> > 
> >  #define VIR_FROM_THIS VIR_FROM_NONE
> > @@ -41,13 +44,28 @@ virTPMCreateCancelPath(const char *devpath)
> >  {
> >      char *path = NULL;
> >      const char *dev;
> > +    const char *prefix[] = {"misc/", "tpm/"};
> > +    size_t i;
> > +    int fd;
> > 
> >      if (devpath) {
> >          dev = strrchr(devpath, '/');
> >          if (dev) {
> >              dev++;
> > -            if (virAsprintf(&path, 
"/sys/class/misc/%s/device/cancel",
> > -                            dev) < 0)
> > +            for (i = 0; i < ARRAY_CARDINALITY(prefix); i++) {
> > +                if (virAsprintf(&path, 
"/sys/class/%s%s/device/cancel",
> > +                                prefix[i], dev) < 0)
> > +                     goto cleanup;
> > +
> > +                fd = open(path, O_WRONLY);
> > +                if (fd >= 0) {
> > +                    VIR_FORCE_CLOSE(fd);
> > +                    break;
> > +                }
> > +                VIR_FREE(path);
> > +            }
> 
> You can use virFileExists(path) to simplify this

Right.

> 
> > +            /* /dev/null does not allow to cancel cmds but it canbe 
used */
> > +            if (!path && virAsprintf(&path, "/dev/null") < 0)
> >                  goto cleanup;
> >          } else {
> 
> Hmm, does this mean we might selinux relabel /dev/null? Maybe just fall 
back
> to no cancel-path if we want this to be non-fatal

We have to pass something on the command line otherwise QEMU will try to 
find a path and SELinux will not allow it to open the file. Basically 
either one of these sysfs files has to be there.

I'll resort to displaying an error instead.

Regards,
   Stefan


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20151117/8d7b2c91/attachment-0001.htm>


More information about the libvir-list mailing list