@@ -538,47 +538,9 @@ func (h *Host) CreateContainer(ctx context.Context, id string, settings *prot.VM
538538 settings .OCISpecification .Process .Capabilities = capsToKeep
539539 }
540540
541- // Write security policy, signed UVM reference and host AMD certificate to
542- // container's rootfs, so that application and sidecar containers can have
543- // access to it. The security policy is required by containers which need to
544- // extract init-time claims found in the security policy. The directory path
545- // containing the files is exposed via UVM_SECURITY_CONTEXT_DIR env var.
546- // It may be an error to have a security policy but not expose it to the
547- // container as in that case it can never be checked as correct by a verifier.
548541 if oci .ParseAnnotationsBool (ctx , settings .OCISpecification .Annotations , annotations .LCOWSecurityPolicyEnv , true ) {
549- encodedPolicy := h .securityOptions .PolicyEnforcer .EncodedSecurityPolicy ()
550- hostAMDCert := settings .OCISpecification .Annotations [annotations .LCOWHostAMDCertificate ]
551- if len (encodedPolicy ) > 0 || len (hostAMDCert ) > 0 || len (h .securityOptions .UvmReferenceInfo ) > 0 {
552- // Use os.MkdirTemp to make sure that the directory is unique.
553- securityContextDir , err := os .MkdirTemp (settings .OCISpecification .Root .Path , securitypolicy .SecurityContextDirTemplate )
554- if err != nil {
555- return nil , fmt .Errorf ("failed to create security context directory: %w" , err )
556- }
557- // Make sure that files inside directory are readable
558- if err := os .Chmod (securityContextDir , 0755 ); err != nil {
559- return nil , fmt .Errorf ("failed to chmod security context directory: %w" , err )
560- }
561-
562- if len (encodedPolicy ) > 0 {
563- if err := writeFileInDir (securityContextDir , securitypolicy .PolicyFilename , []byte (encodedPolicy ), 0744 ); err != nil {
564- return nil , fmt .Errorf ("failed to write security policy: %w" , err )
565- }
566- }
567- if len (h .securityOptions .UvmReferenceInfo ) > 0 {
568- if err := writeFileInDir (securityContextDir , securitypolicy .ReferenceInfoFilename , []byte (h .securityOptions .UvmReferenceInfo ), 0744 ); err != nil {
569- return nil , fmt .Errorf ("failed to write UVM reference info: %w" , err )
570- }
571- }
572-
573- if len (hostAMDCert ) > 0 {
574- if err := writeFileInDir (securityContextDir , securitypolicy .HostAMDCertFilename , []byte (hostAMDCert ), 0744 ); err != nil {
575- return nil , fmt .Errorf ("failed to write host AMD certificate: %w" , err )
576- }
577- }
578-
579- containerCtxDir := fmt .Sprintf ("/%s" , filepath .Base (securityContextDir ))
580- secCtxEnv := fmt .Sprintf ("UVM_SECURITY_CONTEXT_DIR=%s" , containerCtxDir )
581- settings .OCISpecification .Process .Env = append (settings .OCISpecification .Process .Env , secCtxEnv )
542+ if err := h .securityOptions .WriteSecurityContextDir (settings .OCISpecification ); err != nil {
543+ return nil , fmt .Errorf ("failed to write security context dir: %w" , err )
582544 }
583545 }
584546
@@ -1320,20 +1282,6 @@ func isPrivilegedContainerCreationRequest(ctx context.Context, spec *specs.Spec)
13201282 return oci .ParseAnnotationsBool (ctx , spec .Annotations , annotations .LCOWPrivileged , false )
13211283}
13221284
1323- func writeFileInDir (dir string , filename string , data []byte , perm os.FileMode ) error {
1324- st , err := os .Stat (dir )
1325- if err != nil {
1326- return err
1327- }
1328-
1329- if ! st .IsDir () {
1330- return fmt .Errorf ("not a directory %q" , dir )
1331- }
1332-
1333- targetFilename := filepath .Join (dir , filename )
1334- return os .WriteFile (targetFilename , data , perm )
1335- }
1336-
13371285// Virtual Pod Management Methods
13381286
13391287// InitializeVirtualPodSupport sets up the parent cgroup for virtual pods
0 commit comments