Skip to content

Commit 2f177c1

Browse files
Venkateswara NaralasettyKalle Valo
authored andcommitted
ath10k: fix information leak in debugfs
During write to some of debugfs in ath10k, few variables exposing stack data when process user input. which leads to possible information leak. This patch fix this issue by initializing buffer and checks the return valure of 'simple_write_to_buffer'. Signed-off-by: Venkateswara Naralasetty <[email protected]> Signed-off-by: Kalle Valo <[email protected]>
1 parent 51c1275 commit 2f177c1

File tree

2 files changed

+25
-25
lines changed

2 files changed

+25
-25
lines changed

drivers/net/wireless/ath/ath10k/debug.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -987,13 +987,13 @@ static ssize_t ath10k_write_htt_max_amsdu_ampdu(struct file *file,
987987
{
988988
struct ath10k *ar = file->private_data;
989989
int res;
990-
char buf[64];
990+
char buf[64] = {0};
991991
unsigned int amsdu, ampdu;
992992

993-
simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
994-
995-
/* make sure that buf is null terminated */
996-
buf[sizeof(buf) - 1] = 0;
993+
res = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos,
994+
user_buf, count);
995+
if (res <= 0)
996+
return res;
997997

998998
res = sscanf(buf, "%u %u", &amsdu, &ampdu);
999999

@@ -1043,14 +1043,14 @@ static ssize_t ath10k_write_fw_dbglog(struct file *file,
10431043
{
10441044
struct ath10k *ar = file->private_data;
10451045
int ret;
1046-
char buf[96];
1046+
char buf[96] = {0};
10471047
unsigned int log_level;
10481048
u64 mask;
10491049

1050-
simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
1051-
1052-
/* make sure that buf is null terminated */
1053-
buf[sizeof(buf) - 1] = 0;
1050+
ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos,
1051+
user_buf, count);
1052+
if (ret <= 0)
1053+
return ret;
10541054

10551055
ret = sscanf(buf, "%llx %u", &mask, &log_level);
10561056

drivers/net/wireless/ath/ath10k/debugfs_sta.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -254,12 +254,12 @@ static ssize_t ath10k_dbg_sta_write_addba(struct file *file,
254254
struct ath10k *ar = arsta->arvif->ar;
255255
u32 tid, buf_size;
256256
int ret;
257-
char buf[64];
257+
char buf[64] = {0};
258258

259-
simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
260-
261-
/* make sure that buf is null terminated */
262-
buf[sizeof(buf) - 1] = '\0';
259+
ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos,
260+
user_buf, count);
261+
if (ret <= 0)
262+
return ret;
263263

264264
ret = sscanf(buf, "%u %u", &tid, &buf_size);
265265
if (ret != 2)
@@ -305,12 +305,12 @@ static ssize_t ath10k_dbg_sta_write_addba_resp(struct file *file,
305305
struct ath10k *ar = arsta->arvif->ar;
306306
u32 tid, status;
307307
int ret;
308-
char buf[64];
309-
310-
simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
308+
char buf[64] = {0};
311309

312-
/* make sure that buf is null terminated */
313-
buf[sizeof(buf) - 1] = '\0';
310+
ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos,
311+
user_buf, count);
312+
if (ret <= 0)
313+
return ret;
314314

315315
ret = sscanf(buf, "%u %u", &tid, &status);
316316
if (ret != 2)
@@ -355,12 +355,12 @@ static ssize_t ath10k_dbg_sta_write_delba(struct file *file,
355355
struct ath10k *ar = arsta->arvif->ar;
356356
u32 tid, initiator, reason;
357357
int ret;
358-
char buf[64];
359-
360-
simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
358+
char buf[64] = {0};
361359

362-
/* make sure that buf is null terminated */
363-
buf[sizeof(buf) - 1] = '\0';
360+
ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos,
361+
user_buf, count);
362+
if (ret <= 0)
363+
return ret;
364364

365365
ret = sscanf(buf, "%u %u %u", &tid, &initiator, &reason);
366366
if (ret != 3)

0 commit comments

Comments
 (0)