smackfs: check for allocation failures in smk_set_access()
Subsystems (2)
PATCH 1/1 smackfs: check for allocation failures in smk_set_access()
smackfs: check for allocation failures in smk_set_access()
While adding a new subject/object pair to smack_list, smk_set_access() didn't check the return of kzalloc().
This patch changes smk_set_access() to return 0 or -ENOMEM, based on kzalloc()'s return. It also updates its caller, smk_write_load(), to check for smk_set_access()'s return, given it is no longer a void return function.
To: Casey Schaufler <[email protected]>
Cc: Ahmed S. Darwish <[email protected]>
Cc: LSM <[email protected]>
Cc: LKLM <[email protected]>
security/smack/smackfs.c | 20 ++++++++++++++++---- 1 files changed, 16 insertions(+), 4 deletions(-)
security/smack/smackfs.c +16 -4
@@ -185,11 +185,15 @@ static int smk_open_load(struct inode *inode, struct file *file)* the subject/object pair and replaces the access that was * there. If the pair isn't found add it with the specified * access. +* +* Returns 0 if nothing goes wrong or -ENOMEM if it fails +* during the allocation of the new pair to add. */ -static void smk_set_access (struct smack_rule *srp) +static int smk_set_access (struct smack_rule *srp) {struct smk_list_entry *sp;struct smk_list_entry *newp; +int ret =0 ;mutex_lock (&smack_list_lock);
@@ -202,14 +206,20 @@ static void smk_set_access(struct smack_rule *srp)if (sp ==NULL ) { newp =kzalloc (sizeof (struct smk_list_entry ),GFP_KERNEL ); +if (newp ==NULL ) { + ret = -ENOMEM ; + goto out; + } + newp->smk_rule = *srp; newp->smk_next = smack_list; smack_list = newp; } +out:mutex_unlock (&smack_list_lock); -return ; +return ret; }/**
@@ -309,8 +319,10 @@ static ssize_t smk_write_load(struct file *file, const char __user *buf, goto out; } -smk_set_access (&rule); - rc = count; + rc =smk_set_access (&rule); + +if (!rc) + rc = count; out:kfree (data);
Quoted 10 lines · Sergio Luis
smackfs: check for allocation failures in
smk_set_access()While adding a new subject/object pair to
smack_list,smk_set_access()didn't check the return ofkzalloc().This patch changes
smk_set_access()to return 0 or-ENOMEM, based on kzalloc()'s return. It also updates its caller,smk_write_load(), to check for smk_set_access()'s return, given it is no longer a void return function.
Quoted 6 lines
Signed-off-by Sergio Luis <[email protected]>To: Casey Schaufler <[email protected]>
Cc: Ahmed S. Darwish <[email protected]>
Cc: LSM <[email protected]>
Cc: LKLM <[email protected]>
Quoted 62 lines
security/smack/smackfs.c | 20 ++++++++++++++++---- 1 files changed, 16 insertions(+), 4 deletions(-)security/smack/smackfs.c +16
-4@@ -185,11 +185,15 @@ static int smk_open_load(struct inode *inode, struct file *file)* the subject/object pair and replaces the access that was * there. If the pair isn't found add it with the specified * access. +* +* Returns 0 if nothing goes wrong or -ENOMEM if it fails +* during the allocation of the new pair to add. */ -static void smk_set_access (struct smack_rule *srp) +static int smk_set_access (struct smack_rule *srp) {struct smk_list_entry *sp;struct smk_list_entry *newp; +int ret =0 ;mutex_lock (&smack_list_lock);@@ -202,14 +206,20 @@ static void smk_set_access(struct smack_rule *srp)if (sp ==NULL ) { newp =kzalloc (sizeof (struct smk_list_entry ),GFP_KERNEL ); +if (newp ==NULL ) { + ret = -ENOMEM ; + goto out; + } + newp->smk_rule = *srp; newp->smk_next = smack_list; smack_list = newp; } +out:mutex_unlock (&smack_list_lock); -return ; +return ret; }/** @@ -309,8 +319,10 @@ static ssize_t smk_write_load(struct file *file, const char __user *buf, goto out; } -smk_set_access (&rule); - rc = count; + rc =smk_set_access (&rule); + +if (!rc) + rc = count; out:kfree (data);
James Morris
maintainerQuoted 9 lines · Casey Schaufler
Quoted 8 lines · Sergio Luis
smackfs: check for allocation failures in
smk_set_access()While adding a new subject/object pair tosmack_list,smk_set_access()didn't check the return ofkzalloc().
This patch changessmk_set_access()to return 0 or-ENOMEM, based on
kzalloc()'s return. It also updates its caller,smk_write_load(), to
check for smk_set_access()'s return, given it is no longer a void return
function.
Quoted 9 lines
Quoted 6 lines
Signed-off-by Sergio Luis <[email protected]>To: Casey Schaufler <[email protected]>
Cc: Ahmed S. Darwish <[email protected]>
Cc: LSM <[email protected]>
Cc: LKLM <[email protected]>Acked-by Casey Schaufler <[email protected]>
Applied to:git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6#next
I'll push this to Linus after he pulls the main security update, or with it on re-send.
Signature · 3 lines
-- James Morris <[email protected]>