This is the failing function

 221 /* returns -1 on error or profile for libvirtd is unconfined, 0 if 
complain      
 222  * mode and 1 if enforcing. This is required because at present you cannot 
      
 223  * aa_change_profile() from a process that is unconfined.                  
      
 224  */                                                                        
      
 225 static int                                                                 
      
 226 use_apparmor(void)                                                         
      
 227 {                                                                          
      
 228     int rc = -1;                                                           
      
 229     char *libvirt_daemon = NULL;                                           
      
 230                                                                            
      
 231     if (virFileResolveLink("/proc/self/exe", &libvirt_daemon) < 0) {       
      
 232         virReportError(VIR_ERR_INTERNAL_ERROR,                             
      
 233                        "%s", _("could not find libvirtd"));                
      
 234         return rc;                                                         
      
 235     }                                                                      
      
 236                                                                            
      
 237     /* If libvirt_lxc is calling us, then consider apparmor is used        
      
 238      * and enforced. */                                                    
      
 239     if (strstr(libvirt_daemon, "libvirt_lxc"))                             
      
 240         return 1;                                                          
      
 241                                                                            
      
 242     if (access(APPARMOR_PROFILES_PATH, R_OK) != 0)                         
      
 243         goto cleanup;                                                      
      
 244                                                                            
      
 245     /* First check profile status using full binary path. If that fails    
      
 246      * check using profile name.                                           
      
 247      */                                                                    
      
 248     rc = profile_status(libvirt_daemon, 1);                                
      
 249     if (rc < 0) {                                                          
      
 250         rc = profile_status("libvirtd", 1);                                
      
 251         /* Error or unconfined should all result in -1 */                  
      
 252         if (rc < 0)                                                        
      
 253             rc = -1;                                                       
      
 254     }                                                                      
      
 255                                                                            
      
 256  cleanup:                                                                  
      
 257     VIR_FREE(libvirt_daemon);                                              
      
 258     return rc;                                                             
      
 259 }

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to apparmor in Ubuntu.
https://bugs.launchpad.net/bugs/1895967

Title:
  3.0.0~beta1-0ubuntu1 in Groovy breaks Libvirt/Qemu/KVM

Status in apparmor package in Ubuntu:
  Incomplete

Bug description:
  Hi,
  I stumbled over this due to automatic tests checking proposed.
  I found that Focal no more could migrate to Groovy with:

  $ virsh migrate --unsafe --live fguest qemu+ssh://10.162.30.163/system
  error: unsupported configuration: Security driver model 'apparmor' is not 
available

  I looked after it and found that while all former releases detected
  apparmor correctly:

  $ virsh capabilities | grep -C 3 secmodel
      <cache>
        <bank id='0' level='3' type='both' size='15' unit='MiB' cpus='0-11'/>
      </cache>
      <secmodel>
        <model>apparmor</model>
        <doi>0</doi>
      </secmodel>
      <secmodel>
        <model>dac</model>
        <doi>0</doi>
        <baselabel type='kvm'>+64055:+108</baselabel>
        <baselabel type='qemu'>+64055:+108</baselabel>
      </secmodel>

  Now on groovy that didn't work anymore:

      <secmodel>
        <model>none</model>
        <doi>0</doi>
      </secmodel>
      <secmodel>
        <model>dac</model>
        <doi>0</doi>
        <baselabel type='kvm'>+64055:+108</baselabel>
        <baselabel type='qemu'>+64055:+108</baselabel>
      </secmodel>

  Since 3.0 is only in proposed:
  # apt-cache policy apparmor
  apparmor:
    Installed: 2.13.3-7ubuntu6
    Candidate: 3.0.0~beta1-0ubuntu1
    Version table:
       3.0.0~beta1-0ubuntu1 500
          500 http://archive.ubuntu.com/ubuntu groovy-proposed/main amd64 
Packages
   *** 2.13.3-7ubuntu6 500
          500 http://archive.ubuntu.com/ubuntu groovy/main amd64 Packages
          100 /var/lib/dpkg/status
  I installed the former version.

  
  $ apt install apparmor=2.13.3-7ubuntu6
  $ rm /var/cache/libvirt/qemu/capabilities/*
  $ systemctl restart libvirtd

  And it works again.

  Interestingly going back to 3.0 then works and keeps working.
  Therefore maybe it is a red-herring and I'll consider it incomplete & low 
prio for now until I know more (allowing others that might see the same to find 
this bug and chime in).

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apparmor/+bug/1895967/+subscriptions

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to