lkml.org 
[lkml]   [2014]   [Oct]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V5 4/5] audit: avoid double copying the audit_exe path string
    Date
    Make this interface consistent with watch and filter key, avoiding the extra
    string copy and simply consume the new string pointer.

    Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
    ---
    kernel/audit_exe.c | 5 ++++-
    kernel/audit_fsnotify.c | 12 ++----------
    kernel/auditfilter.c | 2 +-
    3 files changed, 7 insertions(+), 12 deletions(-)

    diff --git a/kernel/audit_exe.c b/kernel/audit_exe.c
    index 0c7ee8d..ff6e3d6 100644
    --- a/kernel/audit_exe.c
    +++ b/kernel/audit_exe.c
    @@ -27,10 +27,13 @@ int audit_dup_exe(struct audit_krule *new, struct audit_krule *old)
    struct audit_fsnotify_mark *audit_mark;
    char *pathname;

    - pathname = audit_mark_path(old->exe);
    + pathname = kstrdup(audit_mark_path(old->exe), GFP_KERNEL);
    + if (!pathname)
    + return -ENOMEM;

    audit_mark = audit_alloc_mark(new, pathname, strlen(pathname));
    if (IS_ERR(audit_mark))
    + kfree(pathname);
    return PTR_ERR(audit_mark);
    new->exe = audit_mark;

    diff --git a/kernel/audit_fsnotify.c b/kernel/audit_fsnotify.c
    index f4b3e66..6daf5c3 100644
    --- a/kernel/audit_fsnotify.c
    +++ b/kernel/audit_fsnotify.c
    @@ -94,7 +94,6 @@ struct audit_fsnotify_mark *audit_alloc_mark(struct audit_krule *krule, char *pa
    struct dentry *dentry;
    struct inode *inode;
    unsigned long ino;
    - char *local_pathname;
    dev_t dev;
    int ret;

    @@ -115,20 +114,13 @@ struct audit_fsnotify_mark *audit_alloc_mark(struct audit_krule *krule, char *pa
    ino = dentry->d_inode->i_ino;
    }

    - audit_mark = ERR_PTR(-ENOMEM);
    - local_pathname = kstrdup(pathname, GFP_KERNEL);
    - if (!local_pathname)
    - goto out;
    -
    audit_mark = kzalloc(sizeof(*audit_mark), GFP_KERNEL);
    - if (unlikely(!audit_mark)) {
    - kfree(local_pathname);
    + if (unlikely(!audit_mark))
    goto out;
    - }

    fsnotify_init_mark(&audit_mark->mark, audit_free_fsnotify_mark);
    audit_mark->mark.mask = AUDIT_FS_EVENTS;
    - audit_mark->path = local_pathname;
    + audit_mark->path = pathname;
    audit_mark->ino = ino;
    audit_mark->dev = dev;
    audit_mark->rule = krule;
    diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
    index fff92cf..570e79a 100644
    --- a/kernel/auditfilter.c
    +++ b/kernel/auditfilter.c
    @@ -575,8 +575,8 @@ static struct audit_entry *audit_data_to_entry(struct audit_rule_data *data,
    entry->rule.buflen += f->val;

    audit_mark = audit_alloc_mark(&entry->rule, str, f->val);
    - kfree(str);
    if (IS_ERR(audit_mark)) {
    + kfree(str);
    err = PTR_ERR(audit_mark);
    goto exit_free;
    }
    --
    1.7.1


    \
     
     \ /
      Last update: 2014-10-03 05:41    [W:2.172 / U:0.356 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site