lxd/apparmor.go
func AADestroy(c container) error {
	state := c.DaemonState()
	if !state.OS.AppArmorAdmin {
		return nil
	}

	if state.OS.AppArmorStacking && !state.OS.AppArmorStacked {
		p := path.Join("/sys/kernel/security/apparmor/policy/namespaces", AANamespace(c))
		if err := os.Remove(p); err != nil {
			logger.Error("Error removing apparmor namespace", log.Ctx{"err": err, "ns": p})
		}
	}

	return runApparmor(APPARMOR_CMD_UNLOAD, c)
}
func AADestroy(c container) error {
	state := c.DaemonState()
	if !state.OS.AppArmorAdmin {
		return nil
	}

	if state.OS.AppArmorStacking && !state.OS.AppArmorStacked {
		p := path.Join("/sys/kernel/security/apparmor/policy/namespaces", AANamespace(c))
		if err := os.Remove(p); err != nil {
			logger.Error("Error removing apparmor namespace", log.Ctx{"err": err, "ns": p})
		}
	}

	return runApparmor(APPARMOR_CMD_UNLOAD, c)
}
func AADestroy ( c container ) error { state := c . DaemonState ( ) if ! state . OS . AppArmorAdmin { return nil } if state . OS . AppArmorStacking && ! state . OS . AppArmorStacked { p := path . Join ( " " , AANamespace ( c ) ) if err := os . Remove ( p ) ; err != nil { logger . Error ( " " , log . Ctx { " " : err , " " : p } ) } } return runApparmor ( APPARMOR_CMD_UNLOAD , c ) }
// Ensure that the container's policy namespace is unloaded to free kernel
// memory. This does not delete the policy from disk or cache.
Ensure that the container s policy namespace is unloaded to free kernel memory . This does not delete the policy from disk or cache .