tpm: lookup cancel path under tpm device class
Since Linux commit 313d21eeab9282e, tpm devices have their own device class "tpm" and the cancel path must be looked up under /sys/class/tpm/ instead of /sys/class/misc/. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com> Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
This commit is contained in:
		
							parent
							
								
									cc1b6c5533
								
							
						
					
					
						commit
						05b71fb207
					
				| 
						 | 
				
			
			@ -214,7 +214,8 @@ static size_t tpm_passthrough_get_buffer_size(TPMBackend *tb)
 | 
			
		|||
 * Unless path or file descriptor set has been provided by user,
 | 
			
		||||
 * determine the sysfs cancel file following kernel documentation
 | 
			
		||||
 * in Documentation/ABI/stable/sysfs-class-tpm.
 | 
			
		||||
 * From /dev/tpm0 create /sys/class/misc/tpm0/device/cancel
 | 
			
		||||
 * From /dev/tpm0 create /sys/class/tpm/tpm0/device/cancel
 | 
			
		||||
 * before 4.0: /sys/class/misc/tpm0/device/cancel
 | 
			
		||||
 */
 | 
			
		||||
static int tpm_passthrough_open_sysfs_cancel(TPMPassthruState *tpm_pt)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -225,26 +226,35 @@ static int tpm_passthrough_open_sysfs_cancel(TPMPassthruState *tpm_pt)
 | 
			
		|||
    if (tpm_pt->options->cancel_path) {
 | 
			
		||||
        fd = qemu_open(tpm_pt->options->cancel_path, O_WRONLY);
 | 
			
		||||
        if (fd < 0) {
 | 
			
		||||
            error_report("Could not open TPM cancel path : %s",
 | 
			
		||||
            error_report("tpm_passthrough: Could not open TPM cancel path: %s",
 | 
			
		||||
                         strerror(errno));
 | 
			
		||||
        }
 | 
			
		||||
        return fd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    dev = strrchr(tpm_pt->tpm_dev, '/');
 | 
			
		||||
    if (dev) {
 | 
			
		||||
        dev++;
 | 
			
		||||
        if (snprintf(path, sizeof(path), "/sys/class/misc/%s/device/cancel",
 | 
			
		||||
                     dev) < sizeof(path)) {
 | 
			
		||||
            fd = qemu_open(path, O_WRONLY);
 | 
			
		||||
            if (fd < 0) {
 | 
			
		||||
                error_report("tpm_passthrough: Could not open TPM cancel "
 | 
			
		||||
                             "path %s : %s", path, strerror(errno));
 | 
			
		||||
    if (!dev) {
 | 
			
		||||
        error_report("tpm_passthrough: Bad TPM device path %s",
 | 
			
		||||
                     tpm_pt->tpm_dev);
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    dev++;
 | 
			
		||||
    if (snprintf(path, sizeof(path), "/sys/class/tpm/%s/device/cancel",
 | 
			
		||||
                 dev) < sizeof(path)) {
 | 
			
		||||
        fd = qemu_open(path, O_WRONLY);
 | 
			
		||||
        if (fd < 0) {
 | 
			
		||||
            if (snprintf(path, sizeof(path), "/sys/class/misc/%s/device/cancel",
 | 
			
		||||
                         dev) < sizeof(path)) {
 | 
			
		||||
                fd = qemu_open(path, O_WRONLY);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (fd < 0) {
 | 
			
		||||
        error_report("tpm_passthrough: Could not guess TPM cancel path");
 | 
			
		||||
    } else {
 | 
			
		||||
       error_report("tpm_passthrough: Bad TPM device path %s",
 | 
			
		||||
                    tpm_pt->tpm_dev);
 | 
			
		||||
        tpm_pt->options->cancel_path = g_strdup(path);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return fd;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue