Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c2c04a1 authored by Eliad Peller's avatar Eliad Peller Committed by Luciano Coelho
Browse files

wl12xx: remove redundant debugfs_remove_recursive() call



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: default avatarArik Nemtsov <arik@wizery.com>
Signed-off-by: default avatarEliad Peller <eliad@wizery.com>
Signed-off-by: default avatarLuciano Coelho <luciano.coelho@nokia.com>
parent 4a4fdf2e
Loading
Loading
Loading
Loading
+16 −20
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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));
@@ -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,
	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;
	}

@@ -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;
@@ -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;
@@ -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;

}
+0 −1
Original line number Diff line number Diff line
@@ -378,7 +378,6 @@ struct wl1271 {
	int last_rssi_event;

	struct wl1271_stats stats;
	struct dentry *rootdir;

	__le32 buffer_32;
	u32 buffer_cmd;