Linux wireless drivers development
 help / color / mirror / Atom feed
* [PATCH 0/3] wifi: NULL terminate some user strings
@ 2026-10-01  7:37 Dan Carpenter
  2026-10-01  7:37 ` [PATCH 1/3] wifi: b43: don't pass unterminated string to sscanf() Dan Carpenter
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Dan Carpenter @ 2026-10-01  7:37 UTC (permalink / raw)
  To: linux-wireless
  Cc: Christian Lamparter, b43-dev, David S. Miller, linux-wireless

These strings come from the user and they need to be NUL terminated.

Dan Carpenter (3):
  wifi: b43: don't pass unterminated string to sscanf()
  wifi: b43legacy: debugfs: NUL terminate string in debugfs
  wifi: carl9170: NUL terminate string in debugfs

 drivers/net/wireless/ath/carl9170/debug.c         | 5 +++--
 drivers/net/wireless/broadcom/b43/debugfs.c       | 2 +-
 drivers/net/wireless/broadcom/b43legacy/debugfs.c | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

-- 
2.53.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] wifi: b43: don't pass unterminated string to sscanf()
  2026-10-01  7:37 [PATCH 0/3] wifi: NULL terminate some user strings Dan Carpenter
@ 2026-10-01  7:37 ` Dan Carpenter
  2026-10-01  7:37 ` [PATCH 2/3] wifi: b43legacy: debugfs: NUL terminate string in debugfs Dan Carpenter
  2026-10-01  7:37 ` [PATCH 3/3] wifi: carl9170: " Dan Carpenter
  2 siblings, 0 replies; 7+ messages in thread
From: Dan Carpenter @ 2026-10-01  7:37 UTC (permalink / raw)
  To: b43-dev; +Cc: David S. Miller, linux-wireless, b43-dev

The "buf" buffer is a PAGE_SIZE and allocated with kzalloc().  We store
a string from the user in it and then pass it to sscanf() in the write
functions such as shm32write__write_file().  Only a few numbers are
stored in the buffer so it never comes close to filling up the whole
PAGE_SIZE.  Reserve the last character of the page for a NUL terminator.

This is debugfs so it's root only.

Fixes: 75388acd0cd8 ("[B43LEGACY]: add mac80211-based driver for legacy BCM43xx devices")
Signed-off-by: Dan Carpenter <error27@gmail.com>
---
 drivers/net/wireless/broadcom/b43/debugfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/broadcom/b43/debugfs.c b/drivers/net/wireless/broadcom/b43/debugfs.c
index 31a1ff00c1a4..173ef5db90fc 100644
--- a/drivers/net/wireless/broadcom/b43/debugfs.c
+++ b/drivers/net/wireless/broadcom/b43/debugfs.c
@@ -557,7 +557,7 @@ static ssize_t b43_debugfs_write(struct file *file,
 
 	if (!count)
 		return 0;
-	if (count > PAGE_SIZE)
+	if (count >= PAGE_SIZE)
 		return -E2BIG;
 	dev = file->private_data;
 	if (!dev)
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] wifi: b43legacy: debugfs: NUL terminate string in debugfs
  2026-10-01  7:37 [PATCH 0/3] wifi: NULL terminate some user strings Dan Carpenter
  2026-10-01  7:37 ` [PATCH 1/3] wifi: b43: don't pass unterminated string to sscanf() Dan Carpenter
@ 2026-10-01  7:37 ` Dan Carpenter
  2026-10-01  7:37 ` [PATCH 3/3] wifi: carl9170: " Dan Carpenter
  2 siblings, 0 replies; 7+ messages in thread
From: Dan Carpenter @ 2026-10-01  7:37 UTC (permalink / raw)
  To: b43-dev; +Cc: David S. Miller, linux-wireless

The "buf" buffer is PAGE_SIZE and allocated with kzalloc().  We store a
string from the user in it and then pass it to sscanf() in the write
functions such as tsf_write_file().  The buffer is only used to store a
number so we never come close to filling up the whole PAGE_SIZE.  Reserve
the last character of the page for a NUL terminator.

This is debugfs so it's root only.

Fixes: 75388acd0cd8 ("[B43LEGACY]: add mac80211-based driver for legacy BCM43xx devices")
Signed-off-by: Dan Carpenter <error27@gmail.com>
---
 drivers/net/wireless/broadcom/b43legacy/debugfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/broadcom/b43legacy/debugfs.c b/drivers/net/wireless/broadcom/b43legacy/debugfs.c
index a04d90d7307c..7ce8bcf12f0a 100644
--- a/drivers/net/wireless/broadcom/b43legacy/debugfs.c
+++ b/drivers/net/wireless/broadcom/b43legacy/debugfs.c
@@ -259,7 +259,7 @@ static ssize_t b43legacy_debugfs_write(struct file *file,
 
 	if (!count)
 		return 0;
-	if (count > PAGE_SIZE)
+	if (count >= PAGE_SIZE)
 		return -E2BIG;
 	dev = file->private_data;
 	if (!dev)
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] wifi: carl9170: NUL terminate string in debugfs
  2026-10-01  7:37 [PATCH 0/3] wifi: NULL terminate some user strings Dan Carpenter
  2026-10-01  7:37 ` [PATCH 1/3] wifi: b43: don't pass unterminated string to sscanf() Dan Carpenter
  2026-10-01  7:37 ` [PATCH 2/3] wifi: b43legacy: debugfs: NUL terminate string in debugfs Dan Carpenter
@ 2026-10-01  7:37 ` Dan Carpenter
  2026-10-01 17:58   ` Christian Lamparter
  2026-10-03 22:49   ` Jeff Johnson
  2 siblings, 2 replies; 7+ messages in thread
From: Dan Carpenter @ 2026-10-01  7:37 UTC (permalink / raw)
  To: Christian Lamparter; +Cc: linux-wireless

The "buf" buffer comes from the user.  We use it to store a number or
two so it doesn't need to be large.  It gets passed to sscanf() in the
write functions such as carl9170_debugfs_erp_write().  Ensure that
buffer is NUL terminated.

This is debugfs so it's root only.

Fixes: 00c4da27a421 ("carl9170: firmware parser and debugfs code")
Signed-off-by: Dan Carpenter <error27@gmail.com>
---
 drivers/net/wireless/ath/carl9170/debug.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/ath/carl9170/debug.c b/drivers/net/wireless/ath/carl9170/debug.c
index 0498df2a2160..bc6c8e0b1d16 100644
--- a/drivers/net/wireless/ath/carl9170/debug.c
+++ b/drivers/net/wireless/ath/carl9170/debug.c
@@ -119,7 +119,7 @@ static ssize_t carl9170_debugfs_write(struct file *file,
 	if (!count)
 		return 0;
 
-	if (count > PAGE_SIZE)
+	if (count >= PAGE_SIZE)
 		return -E2BIG;
 
 	ar = file->private_data;
@@ -131,7 +131,7 @@ static ssize_t carl9170_debugfs_write(struct file *file,
 	if (!dfops->write)
 		return -ENOSYS;
 
-	buf = vmalloc(count);
+	buf = vmalloc(count + 1);
 	if (!buf)
 		return -ENOMEM;
 
@@ -139,6 +139,7 @@ static ssize_t carl9170_debugfs_write(struct file *file,
 		err = -EFAULT;
 		goto out_free;
 	}
+	buf[count] = '\0';
 
 	if (mutex_trylock(&ar->mutex) == 0) {
 		err = -EAGAIN;
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] wifi: carl9170: NUL terminate string in debugfs
  2026-10-01  7:37 ` [PATCH 3/3] wifi: carl9170: " Dan Carpenter
@ 2026-10-01 17:58   ` Christian Lamparter
  2026-10-01 18:31     ` Dan Carpenter
  2026-10-03 22:49   ` Jeff Johnson
  1 sibling, 1 reply; 7+ messages in thread
From: Christian Lamparter @ 2026-10-01 17:58 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: linux-wireless

On 10/1/26 9:37 AM, Dan Carpenter wrote:
> The "buf" buffer comes from the user.  We use it to store a number or
> two so it doesn't need to be large.  It gets passed to sscanf() in the
> write functions such as carl9170_debugfs_erp_write().  Ensure that
> buffer is NUL terminated.
> 
> This is debugfs so it's root only.

Sure.
> 
> Fixes: 00c4da27a421 ("carl9170: firmware parser and debugfs code")
> Signed-off-by: Dan Carpenter <error27@gmail.com>
Acked-by: Christian Lamparter <chunkeey@gmail.com>

> ---
>   drivers/net/wireless/ath/carl9170/debug.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/carl9170/debug.c b/drivers/net/wireless/ath/carl9170/debug.c
> index 0498df2a2160..bc6c8e0b1d16 100644
> --- a/drivers/net/wireless/ath/carl9170/debug.c
> +++ b/drivers/net/wireless/ath/carl9170/debug.c
> @@ -119,7 +119,7 @@ static ssize_t carl9170_debugfs_write(struct file *file,
>   	if (!count)
>   		return 0;
>   
> -	if (count > PAGE_SIZE)
> +	if (count >= PAGE_SIZE)
heh. It's unnecessary to change this for the max. two numbers we get.
But I'm curious if this is a change that an AI tool added?

But yeah, it's still fine.

>   		return -E2BIG;
>   
>   	ar = file->private_data;
> @@ -131,7 +131,7 @@ static ssize_t carl9170_debugfs_write(struct file *file,
>   	if (!dfops->write)
>   		return -ENOSYS;
>   
> -	buf = vmalloc(count);
> +	buf = vmalloc(count + 1);

I think there's also a vzalloc...

>   	if (!buf)
>   		return -ENOMEM;
>   
> @@ -139,6 +139,7 @@ static ssize_t carl9170_debugfs_write(struct file *file,
>   		err = -EFAULT;
>   		goto out_free;
>   	}
> +	buf[count] = '\0';
which would eliminate that. But yeah, this is fine as well.

>   
>   	if (mutex_trylock(&ar->mutex) == 0) {
>   		err = -EAGAIN;


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] wifi: carl9170: NUL terminate string in debugfs
  2026-10-01 17:58   ` Christian Lamparter
@ 2026-10-01 18:31     ` Dan Carpenter
  0 siblings, 0 replies; 7+ messages in thread
From: Dan Carpenter @ 2026-10-01 18:31 UTC (permalink / raw)
  To: Christian Lamparter; +Cc: linux-wireless

On Thu, Oct 01, 2026 at 07:58:13PM +0200, Christian Lamparter wrote:
> On 10/1/26 9:37 AM, Dan Carpenter wrote:
> > The "buf" buffer comes from the user.  We use it to store a number or
> > two so it doesn't need to be large.  It gets passed to sscanf() in the
> > write functions such as carl9170_debugfs_erp_write().  Ensure that
> > buffer is NUL terminated.
> > 
> > This is debugfs so it's root only.
> 
> Sure.
> > 
> > Fixes: 00c4da27a421 ("carl9170: firmware parser and debugfs code")
> > Signed-off-by: Dan Carpenter <error27@gmail.com>
> Acked-by: Christian Lamparter <chunkeey@gmail.com>
> 
> > ---
> >   drivers/net/wireless/ath/carl9170/debug.c | 5 +++--
> >   1 file changed, 3 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/net/wireless/ath/carl9170/debug.c b/drivers/net/wireless/ath/carl9170/debug.c
> > index 0498df2a2160..bc6c8e0b1d16 100644
> > --- a/drivers/net/wireless/ath/carl9170/debug.c
> > +++ b/drivers/net/wireless/ath/carl9170/debug.c
> > @@ -119,7 +119,7 @@ static ssize_t carl9170_debugfs_write(struct file *file,
> >   	if (!count)
> >   		return 0;
> > -	if (count > PAGE_SIZE)
> > +	if (count >= PAGE_SIZE)
> heh. It's unnecessary to change this for the max. two numbers we get.
> But I'm curious if this is a change that an AI tool added?

No.  The other two patches used kzalloc() to allocate their buffers so
changing "> PAGE_SIZE" to ">= PAGE_SIZE" fixed the bug.  But as I was
writing this, I decided that there was no way I was going to let people
allocat PAGE_SIZE + 1 bytes...  :P  Plus, since I was adding a byte
later it kind of maintained the status quo to subtract one here.

I did use AI to write the Smatch check.  ;)

> 
> But yeah, it's still fine.
> 
> >   		return -E2BIG;
> >   	ar = file->private_data;
> > @@ -131,7 +131,7 @@ static ssize_t carl9170_debugfs_write(struct file *file,
> >   	if (!dfops->write)
> >   		return -ENOSYS;
> > -	buf = vmalloc(count);
> > +	buf = vmalloc(count + 1);
> 
> I think there's also a vzalloc...
> 

I was more considering changing this to kzalloc() but I decided that
was too much change.

> >   	if (!buf)
> >   		return -ENOMEM;
> > @@ -139,6 +139,7 @@ static ssize_t carl9170_debugfs_write(struct file *file,
> >   		err = -EFAULT;
> >   		goto out_free;
> >   	}
> > +	buf[count] = '\0';
> which would eliminate that. But yeah, this is fine as well.

Thanks!

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] wifi: carl9170: NUL terminate string in debugfs
  2026-10-01  7:37 ` [PATCH 3/3] wifi: carl9170: " Dan Carpenter
  2026-10-01 17:58   ` Christian Lamparter
@ 2026-10-03 22:49   ` Jeff Johnson
  1 sibling, 0 replies; 7+ messages in thread
From: Jeff Johnson @ 2026-10-03 22:49 UTC (permalink / raw)
  To: Dan Carpenter, Christian Lamparter, Johannes Berg; +Cc: linux-wireless

On 10/1/2026 12:37 AM, Dan Carpenter wrote:
> The "buf" buffer comes from the user.  We use it to store a number or
> two so it doesn't need to be large.  It gets passed to sscanf() in the
> write functions such as carl9170_debugfs_erp_write().  Ensure that
> buffer is NUL terminated.
> 
> This is debugfs so it's root only.
> 
> Fixes: 00c4da27a421 ("carl9170: firmware parser and debugfs code")
> Signed-off-by: Dan Carpenter <error27@gmail.com>

Johannes, since the other two in the series go through your tree, you might as
well take all three. I've assigned this one to you in patchwork.

Acked-by: Jeff Johnson <jjohnson@kernel.org>


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-10-03 22:49 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-01  7:37 [PATCH 0/3] wifi: NULL terminate some user strings Dan Carpenter
2026-10-01  7:37 ` [PATCH 1/3] wifi: b43: don't pass unterminated string to sscanf() Dan Carpenter
2026-10-01  7:37 ` [PATCH 2/3] wifi: b43legacy: debugfs: NUL terminate string in debugfs Dan Carpenter
2026-10-01  7:37 ` [PATCH 3/3] wifi: carl9170: " Dan Carpenter
2026-10-01 17:58   ` Christian Lamparter
2026-10-01 18:31     ` Dan Carpenter
2026-10-03 22:49   ` Jeff Johnson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox