lkml.org 
[lkml]   [2012]   [Aug]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [RFC v2 4/7] modsig: add integrity_module_check hook
    From
    On Thu, Aug 16, 2012 at 12:13 AM, Kasatkin, Dmitry
    <dmitry.kasatkin@intel.com> wrote:
    > On Wed, Aug 15, 2012 at 11:16 PM, Serge Hallyn
    > <serge.hallyn@canonical.com> wrote:
    >> Quoting Dmitry Kasatkin (dmitry.kasatkin@intel.com):
    >>> IMA measures/appraises modules when modprobe or insmod opens and read them.
    >>> Unfortunately, there are no guarantees between what is read by userspace and
    >>> what is passed to the kernel via load_module system call. This patch adds a
    >>> hook called integrity_module_check() to verify the integrity of the module
    >>> being loaded.
    >>>
    >>> Signed-off-by: Dmitry Kasatkin <dmitry.kasatkin@intel.com>
    >>> ---
    >>> include/linux/integrity.h | 10 ++++++++++
    >>> kernel/module.c | 9 +++++++++
    >>> 2 files changed, 19 insertions(+)
    >>>
    >>> diff --git a/include/linux/integrity.h b/include/linux/integrity.h
    >>> index 66c5fe9..a80ec06 100644
    >>> --- a/include/linux/integrity.h
    >>> +++ b/include/linux/integrity.h
    >>> @@ -37,4 +37,14 @@ static inline void integrity_inode_free(struct inode *inode)
    >>> return;
    >>> }
    >>> #endif /* CONFIG_INTEGRITY_H */
    >>> +
    >>> +#ifdef CONFIG_INTEGRITY_MODULES
    >>> +int integrity_module_check(const void *hdr, const unsigned long len);
    >>
    >> sadly not bisect-safe, since integrity_module_check() is defined in
    >> the next patch.
    >>
    >
    > Ok.. Hooks come after implementation...
    > Will swap.
    >

    Hi Serge.

    Actually Kconfig option is defined in following implementation patch,
    so CONFIG_INTEGRITY_MODULES is not defined and it will compile inline
    empty function.

    Why is it not bisect-safe?

    - Dmitry

    > Thanks.
    >
    >>> +#else
    >>> +static inline int integrity_module_check(const void *buf, unsigned long len)
    >>> +{
    >>> + return 0;
    >>> +}
    >>> +#endif
    >>> +
    >>> #endif /* _LINUX_INTEGRITY_H */
    >>> diff --git a/kernel/module.c b/kernel/module.c
    >>> index 4edbd9c..791da47 100644
    >>> --- a/kernel/module.c
    >>> +++ b/kernel/module.c
    >>> @@ -58,6 +58,7 @@
    >>> #include <linux/jump_label.h>
    >>> #include <linux/pfn.h>
    >>> #include <linux/bsearch.h>
    >>> +#include <linux/integrity.h>
    >>>
    >>> #define CREATE_TRACE_POINTS
    >>> #include <trace/events/module.h>
    >>> @@ -2437,6 +2438,14 @@ static int copy_and_check(struct load_info *info,
    >>>
    >>> info->hdr = hdr;
    >>> info->len = len;
    >>> +
    >>> + err = integrity_module_check(hdr, len);
    >>> + if (err < 0)
    >>> + goto free_hdr;
    >>> +
    >>> + /* cut signature tail */
    >>> + info->len = err;
    >>> +
    >>> return 0;
    >>>
    >>> free_hdr:
    >>> --
    >>> 1.7.9.5
    >>>
    >>> --
    >>> To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
    >>> the body of a message to majordomo@vger.kernel.org
    >>> More majordomo info at http://vger.kernel.org/majordomo-info.html


    \
     
     \ /
      Last update: 2012-08-17 08:21    [W:0.030 / U:31.588 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site