summaryrefslogtreecommitdiffstats
path: root/kernel/auditsc.c
diff options
context:
space:
mode:
authorJeff Layton2012-10-10 21:25:28 +0200
committerAl Viro2012-10-13 02:15:08 +0200
commit7ac86265dc8f665cc49d6e60a125e608cd2fca14 (patch)
tree9e7941e2d8dfb2106c5fb28504531dafc72e14e6 /kernel/auditsc.c
parentvfs: define struct filename and have getname() return it (diff)
downloadkernel-qcow2-linux-7ac86265dc8f665cc49d6e60a125e608cd2fca14.tar.gz
kernel-qcow2-linux-7ac86265dc8f665cc49d6e60a125e608cd2fca14.tar.xz
kernel-qcow2-linux-7ac86265dc8f665cc49d6e60a125e608cd2fca14.zip
audit: allow audit code to satisfy getname requests from its names_list
Currently, if we call getname() on a userland string more than once, we'll get multiple copies of the string and multiple audit_names records. Add a function that will allow the audit_names code to satisfy getname requests using info from the audit_names list, avoiding a new allocation and audit_names records. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'kernel/auditsc.c')
-rw-r--r--kernel/auditsc.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index d4d82319eed5..521163a5d65f 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -2021,6 +2021,29 @@ static struct audit_names *audit_alloc_name(struct audit_context *context,
}
/**
+ * audit_reusename - fill out filename with info from existing entry
+ * @uptr: userland ptr to pathname
+ *
+ * Search the audit_names list for the current audit context. If there is an
+ * existing entry with a matching "uptr" then return the filename
+ * associated with that audit_name. If not, return NULL.
+ */
+struct filename *
+__audit_reusename(const __user char *uptr)
+{
+ struct audit_context *context = current->audit_context;
+ struct audit_names *n;
+
+ list_for_each_entry(n, &context->names_list, list) {
+ if (!n->name)
+ continue;
+ if (n->name->uptr == uptr)
+ return n->name;
+ }
+ return NULL;
+}
+
+/**
* audit_getname - add a name to the list
* @name: name to add
*