All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Paris <eparis@redhat.com>
To: Richard Guy Briggs <rgb@redhat.com>
Cc: linux-audit@redhat.com, linux-kernel@vger.kernel.org,
	sgrubb@redhat.com, aviro@redhat.com, pmoore@redhat.com
Subject: Re: [PATCH 3/7] audit: eliminate string copy for new tree rules
Date: Fri, 10 Oct 2014 15:13:40 -0400	[thread overview]
Message-ID: <1412968420.15099.4.camel@redhat.com> (raw)
In-Reply-To: <b1a402e95af08b5a437b987f41639094a18a64e3.1412285491.git.rgb@redhat.com>

On Thu, 2014-10-02 at 22:05 -0400, Richard Guy Briggs wrote:
> New tree rules copy the path twice and discard the intermediary copy.
> 
> This saves one pointer at the expense of one path string copy.
> 
> Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
> ---
>  kernel/audit_tree.c  |    9 +++++----
>  kernel/auditfilter.c |    5 +++--
>  2 files changed, 8 insertions(+), 6 deletions(-)
> 
> diff --git a/kernel/audit_tree.c b/kernel/audit_tree.c
> index bd418c4..ace72ed 100644
> --- a/kernel/audit_tree.c
> +++ b/kernel/audit_tree.c
> @@ -17,7 +17,7 @@ struct audit_tree {
>  	struct list_head list;
>  	struct list_head same_root;
>  	struct rcu_head head;
> -	char pathname[];
> +	char *pathname;
>  };
>  
>  struct audit_chunk {
> @@ -70,11 +70,11 @@ static LIST_HEAD(prune_list);
>  
>  static struct fsnotify_group *audit_tree_group;
>  
> -static struct audit_tree *alloc_tree(const char *s)
> +static struct audit_tree *alloc_tree(char *s)
>  {
>  	struct audit_tree *tree;
>  
> -	tree = kmalloc(sizeof(struct audit_tree) + strlen(s) + 1, GFP_KERNEL);
> +	tree = kmalloc(sizeof(struct audit_tree), GFP_KERNEL);
>  	if (tree) {
>  		atomic_set(&tree->count, 1);
>  		tree->goner = 0;
> @@ -83,7 +83,7 @@ static struct audit_tree *alloc_tree(const char *s)
>  		INIT_LIST_HEAD(&tree->list);
>  		INIT_LIST_HEAD(&tree->same_root);
>  		tree->root = NULL;
> -		strcpy(tree->pathname, s);
> +		tree->pathname = s;
>  	}
>  	return tree;
>  }
> @@ -96,6 +96,7 @@ static inline void get_tree(struct audit_tree *tree)
>  static inline void put_tree(struct audit_tree *tree)
>  {
>  	if (atomic_dec_and_test(&tree->count))
> +		kfree(tree->pathname);
>  		kfree_rcu(tree, head);
>  }

Why does the tree need to be freed after an RCU grace period but the
pathname can be freed immediately?  What's the locking/access that makes
this safe?

>  
> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
> index e3378a4..facd704 100644
> --- a/kernel/auditfilter.c
> +++ b/kernel/auditfilter.c
> @@ -534,9 +534,10 @@ static struct audit_entry *audit_data_to_entry(struct audit_rule_data *data,
>  			entry->rule.buflen += f->val;
>  
>  			err = audit_make_tree(&entry->rule, str, f->op);
> -			kfree(str);
> -			if (err)
> +			if (err) {
> +				kfree(str);
>  				goto exit_free;
> +			}
>  			break;
>  		case AUDIT_INODE:
>  			err = audit_to_inode(&entry->rule, f);

  reply	other threads:[~2014-10-10 19:13 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-02 21:38 [PATCH 0/7] audit fsnotify cleanups for watches and trees Richard Guy Briggs
2014-10-03  2:05 ` [PATCH 1/7] audit: put rule existence check in canonical order Richard Guy Briggs
2014-10-03  2:05   ` Richard Guy Briggs
2014-10-03  2:05 ` [PATCH 2/7] audit: cull redundancy in audit_rule_change Richard Guy Briggs
2014-10-10 19:09   ` Eric Paris
2014-10-03  2:05 ` [PATCH 3/7] audit: eliminate string copy for new tree rules Richard Guy Briggs
2014-10-03  2:05   ` Richard Guy Briggs
2014-10-10 19:13   ` Eric Paris [this message]
2014-10-03  2:05 ` [PATCH 4/7] audit: optimize add to parent skipping needless search and consuming parent ref Richard Guy Briggs
2014-10-03  2:05   ` Richard Guy Briggs
2014-10-10 19:29   ` Eric Paris
2014-10-03  2:05 ` [PATCH 5/7] audit: remove redundant watch refcount Richard Guy Briggs
2014-10-10 19:44   ` Eric Paris
2014-10-03  2:05 ` [PATCH 6/7] audit: remove extra audit_get_parent() Richard Guy Briggs
2014-10-03  2:05   ` Richard Guy Briggs
2014-10-03  2:05 ` [PATCH 7/7] audit: rename audit_log_remove_rule to disambiguate for trees Richard Guy Briggs

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1412968420.15099.4.camel@redhat.com \
    --to=eparis@redhat.com \
    --cc=aviro@redhat.com \
    --cc=linux-audit@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pmoore@redhat.com \
    --cc=rgb@redhat.com \
    --cc=sgrubb@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.