Skip to content

Commit

Permalink
wl12xx: remove redundant debugfs_remove_recursive() call
Browse files Browse the repository at this point in the history
Upon rmmod, the <debugfs>/ieee80211/phyX dir is being removed.
later, we try to remove <debugfs>/ieee80211/phyX/wl12xx, which
might result in NULL dereference.

Remove the excessive debugfs_remove_recursive() call.
(consequently, there is no more need to save wl->rootdir)

Reported-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
  • Loading branch information
Eliad Peller authored and Luciano Coelho committed Jan 24, 2011
1 parent 4a4fdf2 commit 3c2c04a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 21 deletions.
36 changes: 16 additions & 20 deletions drivers/net/wireless/wl12xx/debugfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,12 +293,13 @@ static const struct file_operations gpio_power_ops = {
.llseek = default_llseek,
};

static int wl1271_debugfs_add_files(struct wl1271 *wl)
static int wl1271_debugfs_add_files(struct wl1271 *wl,
struct dentry *rootdir)
{
int ret = 0;
struct dentry *entry, *stats;

stats = debugfs_create_dir("fw-statistics", wl->rootdir);
stats = debugfs_create_dir("fw-statistics", rootdir);
if (!stats || IS_ERR(stats)) {
entry = stats;
goto err;
Expand Down Expand Up @@ -395,13 +396,13 @@ static int wl1271_debugfs_add_files(struct wl1271 *wl)
DEBUGFS_FWSTATS_ADD(rxpipe, missed_beacon_host_int_trig_rx_data);
DEBUGFS_FWSTATS_ADD(rxpipe, tx_xfr_host_int_trig_rx_data);

DEBUGFS_ADD(tx_queue_len, wl->rootdir);
DEBUGFS_ADD(retry_count, wl->rootdir);
DEBUGFS_ADD(excessive_retries, wl->rootdir);
DEBUGFS_ADD(tx_queue_len, rootdir);
DEBUGFS_ADD(retry_count, rootdir);
DEBUGFS_ADD(excessive_retries, rootdir);

DEBUGFS_ADD(gpio_power, wl->rootdir);
DEBUGFS_ADD(gpio_power, rootdir);

entry = debugfs_create_x32("debug_level", 0600, wl->rootdir,
entry = debugfs_create_x32("debug_level", 0600, rootdir,
&wl12xx_debug_level);
if (!entry || IS_ERR(entry))
goto err;
Expand All @@ -419,7 +420,7 @@ static int wl1271_debugfs_add_files(struct wl1271 *wl)

void wl1271_debugfs_reset(struct wl1271 *wl)
{
if (!wl->rootdir)
if (!wl->stats.fw_stats)
return;

memset(wl->stats.fw_stats, 0, sizeof(*wl->stats.fw_stats));
Expand All @@ -430,13 +431,13 @@ void wl1271_debugfs_reset(struct wl1271 *wl)
int wl1271_debugfs_init(struct wl1271 *wl)
{
int ret;
struct dentry *rootdir;

wl->rootdir = debugfs_create_dir(KBUILD_MODNAME,
wl->hw->wiphy->debugfsdir);
rootdir = debugfs_create_dir(KBUILD_MODNAME,
wl->hw->wiphy->debugfsdir);

if (IS_ERR(wl->rootdir)) {
ret = PTR_ERR(wl->rootdir);
wl->rootdir = NULL;
if (IS_ERR(rootdir)) {
ret = PTR_ERR(rootdir);
goto err;
}

Expand All @@ -450,7 +451,7 @@ int wl1271_debugfs_init(struct wl1271 *wl)

wl->stats.fw_stats_update = jiffies;

ret = wl1271_debugfs_add_files(wl);
ret = wl1271_debugfs_add_files(wl, rootdir);

if (ret < 0)
goto err_file;
Expand All @@ -462,8 +463,7 @@ int wl1271_debugfs_init(struct wl1271 *wl)
wl->stats.fw_stats = NULL;

err_fw:
debugfs_remove_recursive(wl->rootdir);
wl->rootdir = NULL;
debugfs_remove_recursive(rootdir);

err:
return ret;
Expand All @@ -473,8 +473,4 @@ void wl1271_debugfs_exit(struct wl1271 *wl)
{
kfree(wl->stats.fw_stats);
wl->stats.fw_stats = NULL;

debugfs_remove_recursive(wl->rootdir);
wl->rootdir = NULL;

}
1 change: 0 additions & 1 deletion drivers/net/wireless/wl12xx/wl12xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,6 @@ struct wl1271 {
int last_rssi_event;

struct wl1271_stats stats;
struct dentry *rootdir;

__le32 buffer_32;
u32 buffer_cmd;
Expand Down

0 comments on commit 3c2c04a

Please sign in to comment.