Cole Robinson <[email protected]> wrote on 11/17/2015 04:37:56 PM:

> From: Cole Robinson <[email protected]>
> To: Stefan Berger/Watson/IBM@IBMUS, [email protected], 
> [email protected]
> Cc: Stefan Berger <[email protected]>
> 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 <[email protected]>
> > ---
> >  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


--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to