Message ID | 20200714181638.45751-8-mic@digikod.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add support for O_MAYEXEC | expand |
On Tue, Jul 14, 2020 at 08:16:38PM +0200, Mickaël Salaün wrote: > From: Mimi Zohar <zohar@linux.ibm.com> > > The kernel has no way of differentiating between a file containing data > or code being opened by an interpreter. The proposed O_MAYEXEC > openat2(2) flag bridges this gap by defining and enabling the > MAY_OPENEXEC flag. > > This patch adds IMA policy support for the new MAY_OPENEXEC flag. > > Example: > measure func=FILE_CHECK mask=^MAY_OPENEXEC > appraise func=FILE_CHECK appraise_type=imasig mask=^MAY_OPENEXEC > > Signed-off-by: Mimi Zohar <zohar@linux.ibm.com> > Reviewed-by: Lakshmi Ramasubramanian <nramas@linux.microsoft.com> > Acked-by: Mickaël Salaün <mic@digikod.net> (Process nit: if you're sending this on behalf of another author, then this should be Signed-off-by rather than Acked-by.)
On 15/07/2020 22:40, Kees Cook wrote: > On Tue, Jul 14, 2020 at 08:16:38PM +0200, Mickaël Salaün wrote: >> From: Mimi Zohar <zohar@linux.ibm.com> >> >> The kernel has no way of differentiating between a file containing data >> or code being opened by an interpreter. The proposed O_MAYEXEC >> openat2(2) flag bridges this gap by defining and enabling the >> MAY_OPENEXEC flag. >> >> This patch adds IMA policy support for the new MAY_OPENEXEC flag. >> >> Example: >> measure func=FILE_CHECK mask=^MAY_OPENEXEC >> appraise func=FILE_CHECK appraise_type=imasig mask=^MAY_OPENEXEC >> >> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com> >> Reviewed-by: Lakshmi Ramasubramanian <nramas@linux.microsoft.com> >> Acked-by: Mickaël Salaün <mic@digikod.net> > > (Process nit: if you're sending this on behalf of another author, then > this should be Signed-off-by rather than Acked-by.) I'm not a co-author of this patch.
On 7/16/20 7:40 AM, Mickaël Salaün wrote: > > On 15/07/2020 22:40, Kees Cook wrote: >> On Tue, Jul 14, 2020 at 08:16:38PM +0200, Mickaël Salaün wrote: >>> From: Mimi Zohar <zohar@linux.ibm.com> >>> >>> The kernel has no way of differentiating between a file containing data >>> or code being opened by an interpreter. The proposed O_MAYEXEC >>> openat2(2) flag bridges this gap by defining and enabling the >>> MAY_OPENEXEC flag. >>> >>> This patch adds IMA policy support for the new MAY_OPENEXEC flag. >>> >>> Example: >>> measure func=FILE_CHECK mask=^MAY_OPENEXEC >>> appraise func=FILE_CHECK appraise_type=imasig mask=^MAY_OPENEXEC >>> >>> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com> >>> Reviewed-by: Lakshmi Ramasubramanian <nramas@linux.microsoft.com> >>> Acked-by: Mickaël Salaün <mic@digikod.net> >> >> (Process nit: if you're sending this on behalf of another author, then >> this should be Signed-off-by rather than Acked-by.) > > I'm not a co-author of this patch. > from Documentation/process/submitting-patches.rst: The Signed-off-by: tag indicates that the signer was involved in the development of the patch, or that he/she was in the patch's delivery path. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
On 16/07/2020 16:59, Randy Dunlap wrote: > On 7/16/20 7:40 AM, Mickaël Salaün wrote: >> >> On 15/07/2020 22:40, Kees Cook wrote: >>> On Tue, Jul 14, 2020 at 08:16:38PM +0200, Mickaël Salaün wrote: >>>> From: Mimi Zohar <zohar@linux.ibm.com> >>>> >>>> The kernel has no way of differentiating between a file containing data >>>> or code being opened by an interpreter. The proposed O_MAYEXEC >>>> openat2(2) flag bridges this gap by defining and enabling the >>>> MAY_OPENEXEC flag. >>>> >>>> This patch adds IMA policy support for the new MAY_OPENEXEC flag. >>>> >>>> Example: >>>> measure func=FILE_CHECK mask=^MAY_OPENEXEC >>>> appraise func=FILE_CHECK appraise_type=imasig mask=^MAY_OPENEXEC >>>> >>>> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com> >>>> Reviewed-by: Lakshmi Ramasubramanian <nramas@linux.microsoft.com> >>>> Acked-by: Mickaël Salaün <mic@digikod.net> >>> >>> (Process nit: if you're sending this on behalf of another author, then >>> this should be Signed-off-by rather than Acked-by.) >> >> I'm not a co-author of this patch. >> > > from Documentation/process/submitting-patches.rst: > > The Signed-off-by: tag indicates that the signer was involved in the > development of the patch, or that he/she was in the patch's delivery path. > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > OK, I though such tag had to go along with the From/Author, the Committer or a Co-developed-by tag, but there is also this specific case. I'll fix that in the next series.
On Thu, Jul 16, 2020 at 04:40:15PM +0200, Mickaël Salaün wrote: > > On 15/07/2020 22:40, Kees Cook wrote: > > On Tue, Jul 14, 2020 at 08:16:38PM +0200, Mickaël Salaün wrote: > >> From: Mimi Zohar <zohar@linux.ibm.com> > >> > >> The kernel has no way of differentiating between a file containing data > >> or code being opened by an interpreter. The proposed O_MAYEXEC > >> openat2(2) flag bridges this gap by defining and enabling the > >> MAY_OPENEXEC flag. > >> > >> This patch adds IMA policy support for the new MAY_OPENEXEC flag. > >> > >> Example: > >> measure func=FILE_CHECK mask=^MAY_OPENEXEC > >> appraise func=FILE_CHECK appraise_type=imasig mask=^MAY_OPENEXEC > >> > >> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com> > >> Reviewed-by: Lakshmi Ramasubramanian <nramas@linux.microsoft.com> > >> Acked-by: Mickaël Salaün <mic@digikod.net> > > > > (Process nit: if you're sending this on behalf of another author, then > > this should be Signed-off-by rather than Acked-by.) > > I'm not a co-author of this patch. Correct, but you are part of the delivery path to its entry to the tree. If you were co-author, you would include "Co-developed-by" with a Signed-off-by. (So my nit stands) For excruciating details: https://www.kernel.org/doc/html/latest/process/submitting-patches.html#when-to-use-acked-by-cc-and-co-developed-by "The Signed-off-by: tag indicates that the signer was ... in the patch’s delivery path." "Co-developed-by: ... is a used to give attribution to co-authors ..."
On Thu, Jul 16, 2020 at 07:59:20AM -0700, Randy Dunlap wrote: > On 7/16/20 7:40 AM, Mickaël Salaün wrote: > > > > On 15/07/2020 22:40, Kees Cook wrote: > >> On Tue, Jul 14, 2020 at 08:16:38PM +0200, Mickaël Salaün wrote: > >>> From: Mimi Zohar <zohar@linux.ibm.com> > >>> > >>> The kernel has no way of differentiating between a file containing data > >>> or code being opened by an interpreter. The proposed O_MAYEXEC > >>> openat2(2) flag bridges this gap by defining and enabling the > >>> MAY_OPENEXEC flag. > >>> > >>> This patch adds IMA policy support for the new MAY_OPENEXEC flag. > >>> > >>> Example: > >>> measure func=FILE_CHECK mask=^MAY_OPENEXEC > >>> appraise func=FILE_CHECK appraise_type=imasig mask=^MAY_OPENEXEC > >>> > >>> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com> > >>> Reviewed-by: Lakshmi Ramasubramanian <nramas@linux.microsoft.com> > >>> Acked-by: Mickaël Salaün <mic@digikod.net> > >> > >> (Process nit: if you're sending this on behalf of another author, then > >> this should be Signed-off-by rather than Acked-by.) > > > > I'm not a co-author of this patch. > > > > from Documentation/process/submitting-patches.rst: > > The Signed-off-by: tag indicates that the signer was involved in the > development of the patch, or that he/she was in the patch's delivery path. > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Randy beat me to it. :)
diff --git a/Documentation/ABI/testing/ima_policy b/Documentation/ABI/testing/ima_policy index cd572912c593..caca46125fe0 100644 --- a/Documentation/ABI/testing/ima_policy +++ b/Documentation/ABI/testing/ima_policy @@ -31,7 +31,7 @@ Description: [KEXEC_KERNEL_CHECK] [KEXEC_INITRAMFS_CHECK] [KEXEC_CMDLINE] [KEY_CHECK] mask:= [[^]MAY_READ] [[^]MAY_WRITE] [[^]MAY_APPEND] - [[^]MAY_EXEC] + [[^]MAY_EXEC] [[^]MAY_OPENEXEC] fsmagic:= hex value fsuuid:= file system UUID (e.g 8bcbe394-4f13-4144-be8e-5aa9ea2ce2f6) uid:= decimal value diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c index c1583d98c5e5..59fd1658a203 100644 --- a/security/integrity/ima/ima_main.c +++ b/security/integrity/ima/ima_main.c @@ -490,7 +490,8 @@ int ima_file_check(struct file *file, int mask) security_task_getsecid(current, &secid); return process_measurement(file, current_cred(), secid, NULL, 0, - mask & (MAY_READ | MAY_WRITE | MAY_EXEC | + mask & (MAY_READ | MAY_WRITE | + MAY_EXEC | MAY_OPENEXEC | MAY_APPEND), FILE_CHECK); } EXPORT_SYMBOL_GPL(ima_file_check); diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index e493063a3c34..6487f0b2afdd 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c @@ -406,7 +406,8 @@ static bool ima_match_keyring(struct ima_rule_entry *rule, * @cred: a pointer to a credentials structure for user validation * @secid: the secid of the task to be validated * @func: LIM hook identifier - * @mask: requested action (MAY_READ | MAY_WRITE | MAY_APPEND | MAY_EXEC) + * @mask: requested action (MAY_READ | MAY_WRITE | MAY_APPEND | MAY_EXEC | + * MAY_OPENEXEC) * @keyring: keyring name to check in policy for KEY_CHECK func * * Returns true on rule match, false on failure. @@ -527,7 +528,8 @@ static int get_subaction(struct ima_rule_entry *rule, enum ima_hooks func) * being made * @secid: LSM secid of the task to be validated * @func: IMA hook identifier - * @mask: requested action (MAY_READ | MAY_WRITE | MAY_APPEND | MAY_EXEC) + * @mask: requested action (MAY_READ | MAY_WRITE | MAY_APPEND | MAY_EXEC | + * MAY_OPENEXEC) * @pcr: set the pcr to extend * @template_desc: the template that should be used for this rule * @keyring: the keyring name, if given, to be used to check in the policy. @@ -1091,6 +1093,8 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry) entry->mask = MAY_READ; else if (strcmp(from, "MAY_APPEND") == 0) entry->mask = MAY_APPEND; + else if (strcmp(from, "MAY_OPENEXEC") == 0) + entry->mask = MAY_OPENEXEC; else result = -EINVAL; if (!result) @@ -1422,14 +1426,15 @@ const char *const func_tokens[] = { #ifdef CONFIG_IMA_READ_POLICY enum { - mask_exec = 0, mask_write, mask_read, mask_append + mask_exec = 0, mask_write, mask_read, mask_append, mask_openexec }; static const char *const mask_tokens[] = { "^MAY_EXEC", "^MAY_WRITE", "^MAY_READ", - "^MAY_APPEND" + "^MAY_APPEND", + "^MAY_OPENEXEC" }; void *ima_policy_start(struct seq_file *m, loff_t *pos) @@ -1518,6 +1523,8 @@ int ima_policy_show(struct seq_file *m, void *v) seq_printf(m, pt(Opt_mask), mt(mask_read) + offset); if (entry->mask & MAY_APPEND) seq_printf(m, pt(Opt_mask), mt(mask_append) + offset); + if (entry->mask & MAY_OPENEXEC) + seq_printf(m, pt(Opt_mask), mt(mask_openexec) + offset); seq_puts(m, " "); }