All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Johnson <quic_jjohnson@quicinc.com>
To: Kees Cook <keescook@chromium.org>, Justin Stitt <justinstitt@google.com>
Cc: Kalle Valo <kvalo@kernel.org>, <ath10k@lists.infradead.org>,
	<linux-wireless@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<linux-hardening@vger.kernel.org>
Subject: Re: [PATCH v2] wifi: ath10k: replace deprecated strncpy with memcpy
Date: Tue, 24 Oct 2023 16:19:29 -0700	[thread overview]
Message-ID: <b85a4e54-61c7-45fe-b97d-46338b237a64@quicinc.com> (raw)
In-Reply-To: <202310241428.0AA7B80@keescook>

On 10/24/2023 2:34 PM, Kees Cook wrote:
> On Tue, Oct 24, 2023 at 05:42:16PM +0000, Justin Stitt wrote:
>> strncpy() is deprecated [1] and we should prefer less ambiguous
>> interfaces.
>>
>> In this case, arvif->u.ap.ssid has its length maintained by
>> arvif->u.ap.ssid_len which indicates it may not need to be
>> NUL-terminated. Make this explicit with __nonstring and use a plain old
>> memcpy.
>>
>> This is also consistent with future copies into arvif->u.ap.ssid:
>>
>> 	if (changed & BSS_CHANGED_SSID &&
>> 	    vif->type == NL80211_IFTYPE_AP) {
>> 		arvif->u.ap.ssid_len = vif->cfg.ssid_len;
>> 		if (vif->cfg.ssid_len)
>> 			memcpy(arvif->u.ap.ssid, vif->cfg.ssid,
>> 			       vif->cfg.ssid_len);
>> 		arvif->u.ap.hidden_ssid = info->hidden_ssid;
>> 	}
>>
>> Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
>> Link: https://github.com/KSPP/linux/issues/90
>> Cc: linux-hardening@vger.kernel.org
>> Signed-off-by: Justin Stitt <justinstitt@google.com>
>> ---
>> Changes in v2:
>> - update subject to include wifi
>> - prefer memcpy() over strtomem() (thanks Kalle, Jeff)
>> - rebase onto 6.6-rc7 @d88520ad73b79e71
>> - Link to v1: https://lore.kernel.org/r/20231013-strncpy-drivers-net-wireless-ath-ath10k-mac-c-v1-1-24e40201afa3@google.com
>> ---
>> Note: build-tested only.
>>
>> Found with: $ rg "strncpy\("
>> ---
>>   drivers/net/wireless/ath/ath10k/core.h | 2 +-
>>   drivers/net/wireless/ath/ath10k/mac.c  | 3 +--
>>   2 files changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
>> index 4b5239de4018..ba9795a8378a 100644
>> --- a/drivers/net/wireless/ath/ath10k/core.h
>> +++ b/drivers/net/wireless/ath/ath10k/core.h
>> @@ -607,7 +607,7 @@ struct ath10k_vif {
>>   			u8 tim_bitmap[64];
>>   			u8 tim_len;
>>   			u32 ssid_len;
>> -			u8 ssid[IEEE80211_MAX_SSID_LEN];
>> +			u8 ssid[IEEE80211_MAX_SSID_LEN] __nonstring;
>>   			bool hidden_ssid;
>>   			/* P2P_IE with NoA attribute for P2P_GO case */
>>   			u32 noa_len;
>> diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
>> index 03e7bc5b6c0b..f3f6deb354c6 100644
>> --- a/drivers/net/wireless/ath/ath10k/mac.c
>> +++ b/drivers/net/wireless/ath/ath10k/mac.c
>> @@ -6125,9 +6125,8 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
>>   
>>   		if (ieee80211_vif_is_mesh(vif)) {
>>   			/* mesh doesn't use SSID but firmware needs it */
>> -			strncpy(arvif->u.ap.ssid, "mesh",
>> -				sizeof(arvif->u.ap.ssid));
>>   			arvif->u.ap.ssid_len = 4;
>> +			memcpy(arvif->u.ap.ssid, "mesh", arvif->u.ap.ssid_len);
> 
> This is a behavior change, isn't it? i.e. arvif->u.ap.ssid is no longer
> zero-padded. Is this actually ok for the driver?

yes, it is safe, and consistent with other uses of this field as noted 
in the commit description.


_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k

WARNING: multiple messages have this Message-ID (diff)
From: Jeff Johnson <quic_jjohnson@quicinc.com>
To: Kees Cook <keescook@chromium.org>, Justin Stitt <justinstitt@google.com>
Cc: Kalle Valo <kvalo@kernel.org>, <ath10k@lists.infradead.org>,
	<linux-wireless@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<linux-hardening@vger.kernel.org>
Subject: Re: [PATCH v2] wifi: ath10k: replace deprecated strncpy with memcpy
Date: Tue, 24 Oct 2023 16:19:29 -0700	[thread overview]
Message-ID: <b85a4e54-61c7-45fe-b97d-46338b237a64@quicinc.com> (raw)
In-Reply-To: <202310241428.0AA7B80@keescook>

On 10/24/2023 2:34 PM, Kees Cook wrote:
> On Tue, Oct 24, 2023 at 05:42:16PM +0000, Justin Stitt wrote:
>> strncpy() is deprecated [1] and we should prefer less ambiguous
>> interfaces.
>>
>> In this case, arvif->u.ap.ssid has its length maintained by
>> arvif->u.ap.ssid_len which indicates it may not need to be
>> NUL-terminated. Make this explicit with __nonstring and use a plain old
>> memcpy.
>>
>> This is also consistent with future copies into arvif->u.ap.ssid:
>>
>> 	if (changed & BSS_CHANGED_SSID &&
>> 	    vif->type == NL80211_IFTYPE_AP) {
>> 		arvif->u.ap.ssid_len = vif->cfg.ssid_len;
>> 		if (vif->cfg.ssid_len)
>> 			memcpy(arvif->u.ap.ssid, vif->cfg.ssid,
>> 			       vif->cfg.ssid_len);
>> 		arvif->u.ap.hidden_ssid = info->hidden_ssid;
>> 	}
>>
>> Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
>> Link: https://github.com/KSPP/linux/issues/90
>> Cc: linux-hardening@vger.kernel.org
>> Signed-off-by: Justin Stitt <justinstitt@google.com>
>> ---
>> Changes in v2:
>> - update subject to include wifi
>> - prefer memcpy() over strtomem() (thanks Kalle, Jeff)
>> - rebase onto 6.6-rc7 @d88520ad73b79e71
>> - Link to v1: https://lore.kernel.org/r/20231013-strncpy-drivers-net-wireless-ath-ath10k-mac-c-v1-1-24e40201afa3@google.com
>> ---
>> Note: build-tested only.
>>
>> Found with: $ rg "strncpy\("
>> ---
>>   drivers/net/wireless/ath/ath10k/core.h | 2 +-
>>   drivers/net/wireless/ath/ath10k/mac.c  | 3 +--
>>   2 files changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h
>> index 4b5239de4018..ba9795a8378a 100644
>> --- a/drivers/net/wireless/ath/ath10k/core.h
>> +++ b/drivers/net/wireless/ath/ath10k/core.h
>> @@ -607,7 +607,7 @@ struct ath10k_vif {
>>   			u8 tim_bitmap[64];
>>   			u8 tim_len;
>>   			u32 ssid_len;
>> -			u8 ssid[IEEE80211_MAX_SSID_LEN];
>> +			u8 ssid[IEEE80211_MAX_SSID_LEN] __nonstring;
>>   			bool hidden_ssid;
>>   			/* P2P_IE with NoA attribute for P2P_GO case */
>>   			u32 noa_len;
>> diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
>> index 03e7bc5b6c0b..f3f6deb354c6 100644
>> --- a/drivers/net/wireless/ath/ath10k/mac.c
>> +++ b/drivers/net/wireless/ath/ath10k/mac.c
>> @@ -6125,9 +6125,8 @@ static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
>>   
>>   		if (ieee80211_vif_is_mesh(vif)) {
>>   			/* mesh doesn't use SSID but firmware needs it */
>> -			strncpy(arvif->u.ap.ssid, "mesh",
>> -				sizeof(arvif->u.ap.ssid));
>>   			arvif->u.ap.ssid_len = 4;
>> +			memcpy(arvif->u.ap.ssid, "mesh", arvif->u.ap.ssid_len);
> 
> This is a behavior change, isn't it? i.e. arvif->u.ap.ssid is no longer
> zero-padded. Is this actually ok for the driver?

yes, it is safe, and consistent with other uses of this field as noted 
in the commit description.


  reply	other threads:[~2023-10-24 23:20 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-24 17:42 [PATCH v2] wifi: ath10k: replace deprecated strncpy with memcpy Justin Stitt
2023-10-24 17:42 ` Justin Stitt
2023-10-24 18:14 ` Jeff Johnson
2023-10-24 18:14   ` Jeff Johnson
2023-10-24 21:34 ` Kees Cook
2023-10-24 21:34   ` Kees Cook
2023-10-24 23:19   ` Jeff Johnson [this message]
2023-10-24 23:19     ` Jeff Johnson
2023-10-31  7:46 ` Kalle Valo
2023-10-31  7:46   ` Kalle Valo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b85a4e54-61c7-45fe-b97d-46338b237a64@quicinc.com \
    --to=quic_jjohnson@quicinc.com \
    --cc=ath10k@lists.infradead.org \
    --cc=justinstitt@google.com \
    --cc=keescook@chromium.org \
    --cc=kvalo@kernel.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.