From dad459e052dc73493a4058b0f05f7e210691a0ba Mon Sep 17 00:00:00 2001 From: Tiezhu Yang Date: Sat, 26 May 2018 22:46:22 +0800 Subject: [PATCH] staging: rtlwifi: use single_open and single_release properly single_open() returns -ENOMEM when malloc failed, so the caller function rtl_debugfs_open_rw() should not always return 0. In addition, when using single_open(), we should use single_release() instead of seq_release() in the file_operations structure to avoid a memory leak. Signed-off-by: Tiezhu Yang Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rtlwifi/debug.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/staging/rtlwifi/debug.c b/drivers/staging/rtlwifi/debug.c index c041bc3..bf360f8 100644 --- a/drivers/staging/rtlwifi/debug.c +++ b/drivers/staging/rtlwifi/debug.c @@ -95,7 +95,7 @@ static const struct file_operations file_ops_common = { .open = dl_debug_open_common, .read = seq_read, .llseek = seq_lseek, - .release = seq_release, + .release = single_release, }; static int rtl_debug_get_mac_page(struct seq_file *m, void *v) @@ -485,18 +485,20 @@ static int rtl_debug_get_phydm_cmd(struct seq_file *m, void *v) static int rtl_debugfs_open_rw(struct inode *inode, struct file *filp) { + int ret = 0; + if (filp->f_mode & FMODE_READ) - single_open(filp, rtl_debug_get_common, inode->i_private); + ret = single_open(filp, rtl_debug_get_common, inode->i_private); else filp->private_data = inode->i_private; - return 0; + return ret; } static int rtl_debugfs_close_rw(struct inode *inode, struct file *filp) { if (filp->f_mode == FMODE_READ) - seq_release(inode, filp); + single_release(inode, filp); return 0; } -- 2.7.4