On Mon, Jul 20, 2020 at 2:27 PM Lakshmi Ramasubramanian <nramas@xxxxxxxxxxxxxxxxxxx> wrote: > > On 7/20/20 10:49 AM, Stephen Smalley wrote: > > >>> > >>> Looks like the template used is ima-ng which doesn't include the > >>> measured buffer. Please set template to "ima-buf" in the policy. > >>> > >>> For example, > >>> measure func=LSM_STATE template=ima-buf > >> > >> It seems like one shouldn't need to manually specify it if it is the > >> only template that yields a useful result for the LSM_STATE function? > > > > Actually, if we used ima-ng template for selinux-policy-hash, then > > instead of needing to hash the policy > > first and passing the hash to IMA, we could just pass the policy as > > the buffer and IMA would take care of the hashing, right? > > That is correct. > > The IMA hook I've added to measure LSM structures is a generic one that > can be used by any security module (SM). I feel it would be better to > not have policy or state or any such SM specific logic in IMA, but leave > that to the individual SM to handle. > > What do you think? It is correct to remain security module agnostic. However, I think you can remain LSM-neutral while still avoiding the double hashing of the policy here. Can't you just pass in the policy itself as the buffer and let IMA hash it? Then you can let the policy author decide on the template to be used (ima-buf versus ima-ng). If you want to support the use of different templates for different "kinds" of LSM state (e.g. state versus policy) you could either provide two funcs (LSM_STATE, LSM_POLICY) or otherwise support selection based on some other attribute.