Messages in this thread Patch in this message | | | From | Chengyu Song <> | Subject | [PATCH 1/1] nfsd: incorrect check for debugfs returns | Date | Mon, 23 Mar 2015 22:58:05 -0400 |
| |
debugfs_create_dir and debugfs_create_file may return -ENODEV when debugfs is not configured, so the return value should be checked against ERROR_VALUE as well, otherwise the later dereference of the dentry pointer would crash the kernel.
Signed-off-by: Chengyu Song <csong84@gatech.edu> --- fs/nfsd/fault_inject.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/fs/nfsd/fault_inject.c b/fs/nfsd/fault_inject.c index c16bf5a..621d065 100644 --- a/fs/nfsd/fault_inject.c +++ b/fs/nfsd/fault_inject.c @@ -132,19 +132,23 @@ int nfsd_fault_inject_init(void) unsigned int i; struct nfsd_fault_inject_op *op; umode_t mode = S_IFREG | S_IRUSR | S_IWUSR; + struct dentry *dent; - debug_dir = debugfs_create_dir("nfsd", NULL); - if (!debug_dir) + dent = debugfs_create_dir("nfsd", NULL); + if (IS_ERR_OR_NULL(dent)) goto fail; + debug_dir = dent; for (i = 0; i < NUM_INJECT_OPS; i++) { op = &inject_ops[i]; - if (!debugfs_create_file(op->file, mode, debug_dir, op, &fops_nfsd)) + dent = debugfs_create_file(op->file, mode, debug_dir, op, &fops_nfsd); + if (IS_ERR_OR_NULL(dent)) goto fail; + } return 0; fail: nfsd_fault_inject_cleanup(); - return -ENOMEM; + return dent ? PTR_ERR(dent) : -ENOMEM; } -- 2.1.0
| |