summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2006-02-01 14:05:01 +0300
committerLinus Torvalds <torvalds@g5.osdl.org>2006-02-01 19:53:11 +0300
commitca4a031f6b43edb8745ebc0a1b7307c24719dae4 (patch)
treefdbd3953c93828e588421afb7e07869c520013f4
parented5a92700d3ce2646cb7763792a5f7ad1bade7e8 (diff)
downloadlinux-ca4a031f6b43edb8745ebc0a1b7307c24719dae4.tar.xz
[PATCH] tpm_bios: securityfs error checking fix
These functions return ERR_PTR()s on error, not NULL. Spotted by Randy. Cc: Serge Hallyn <serue@us.ibm.com> Cc: Kylene Jo Hall <kjhall@us.ibm.com> Cc: "Randy.Dunlap" <rdunlap@xenotime.net> Acked-by: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/char/tpm/tpm_bios.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/char/tpm/tpm_bios.c b/drivers/char/tpm/tpm_bios.c
index aedf7a8e6da7..9ffa5643e79d 100644
--- a/drivers/char/tpm/tpm_bios.c
+++ b/drivers/char/tpm/tpm_bios.c
@@ -487,26 +487,35 @@ struct file_operations tpm_binary_bios_measurements_ops = {
.release = tpm_bios_measurements_release,
};
+static int is_bad(void *p)
+{
+ if (!p)
+ return 1;
+ if (IS_ERR(p) && (PTR_ERR(p) != -ENODEV))
+ return 1;
+ return 0;
+}
+
struct dentry **tpm_bios_log_setup(char *name)
{
struct dentry **ret = NULL, *tpm_dir, *bin_file, *ascii_file;
tpm_dir = securityfs_create_dir(name, NULL);
- if (!tpm_dir)
+ if (is_bad(tpm_dir))
goto out;
bin_file =
securityfs_create_file("binary_bios_measurements",
S_IRUSR | S_IRGRP, tpm_dir, NULL,
&tpm_binary_bios_measurements_ops);
- if (!bin_file)
+ if (is_bad(bin_file))
goto out_tpm;
ascii_file =
securityfs_create_file("ascii_bios_measurements",
S_IRUSR | S_IRGRP, tpm_dir, NULL,
&tpm_ascii_bios_measurements_ops);
- if (!ascii_file)
+ if (is_bad(ascii_file))
goto out_bin;
ret = kmalloc(3 * sizeof(struct dentry *), GFP_KERNEL);