On 04/21/2016 06:08 AM, Martin Kletzander wrote:
On Wed, Apr 20, 2016 at 07:57:05PM -0400, Cole Robinson wrote:
> I'm looking in the code to see why runtime VM dac seclabel values aren't
> printed in the active XML. They are filled in, but the domain XML formatter
> explicitly skips it:
>
> /* To avoid backward compatibility issues, suppress DAC and 'none' labels
> * that are automatically generated.
> */
> if ((STREQ_NULLABLE(def->model, "dac") ||
> STREQ_NULLABLE(def->model, "none")) &&
def->implicit)
> return;
>
> The relevant bit is from here:
>
> commit 990e46c4542349f838e001d30638872576c389e9
> Author: Marcelo Cerri <mhcerri(a)linux.vnet.ibm.com>
> Date: Fri Aug 31 13:40:41 2012 +0200
>
> conf: Avoid formatting auto-generated DAC labels
>
> And I think comment elsewhere in domain_conf.c explains what that's all about:
>
> /* libvirt versions prior to 0.10.0 support just a single seclabel element
> * in guest's XML and model attribute can be suppressed if type is none or
> * type is dynamic, baselabel is not defined and INACTIVE flag is set.
> *
> * To avoid compatibility issues, for this specific case the first model
> * defined in host's capabilities is used as model for the seclabel.
> */
>
> Just dropping the the model == "dac" check above seems to accomplish what
I'm
> after, but it's not strictly back compatible. That said, libvirt has supported
I think this has nothing to do with backward compatibility, but forward
compatibility (which we care about for "some" time).
That's not my reading of the patch + thread. I think it was that new libvirt
starting printing two <seclabel> blocks for active XML. If you then do a
managedsave, downgrade libvirt, and attempt a restore (or live migration to an
older version), old libvirt errors when it sees 2 <seclabel> blocks. So back
compat here to me meant 'generate XML that old libvirt will accept'
What are you trying to achieve? It works for me, the default
seclabel
is not exposed, but if I change it, it is dumped for running, shut-off
or whatever domain there is.
the issue: start a VM with no explicit seclabel config, dump the running XML,
you'll see something like this:
<seclabel type='dynamic' model='selinux' relabel='yes'>
<label>unconfined_u:unconfined_r:svirt_t:s0:c325,c747</label>
<imagelabel>unconfined_u:object_r:svirt_image_t:s0:c325,c747</imagelabel>
</seclabel>
but no <seclabel> block for DAC labels, which seems inconsistent
> multiple seclabels for a loooong time now, so I wonder do we even
care? Do we
Probably migration to older versions, but I'm not sure that there's that
many people who care about it. And it won't work because of other
things too -- I think it's just not supported use-case anyway.
> have a target for how far back we try to maintain XML compat? Or does anyone
> else have other ideas?
>
Back-compat has now something like a 10½ years now and I think it will
reach around 15 in next 5 years...
I should have been more explicit. Certainly for things like XML input we aim
to maintain back compat to the beginning, which is why tools like virt-install
can reliably work across versions.
In this case though I meant XML output back compat/migration back compat: do
we still think it's a worthy goal to maintain XML output compat with libvirt
<= 0.10.0 ? (and if so, I imagine there's a better place to handle this...
somewhere migration specific? but I'm not really familiar with the latest
infrastructure for that)
- Cole