Re: [PATCH net-next] ethtool: tsconfig: reject zero-valued tx_type and rx_filter bitsets

Vadim Fedorenko <[email protected]>
Newsgroups org.kernel.vger.netdev
Message-ID <[email protected]>
On 12.08.2026 17:22, Jakub Kicinski wrote:
> The ffs()/fls() guard in ethnl_set_tsconfig() was meant to enforce
> that the user selects exactly one tx_type (and one rx_filter)
> at a time (off / none are explicit types with non-zero values).
> However, both ffs(0) and fls(0) return 0, so the guard passes
> a zero-valued bitset through.
> 
> The subsequent ffs(req_tx_type) - 1 would produce -1, if user selected
> no bit. net_hwtstamp_validate() catches the invalid -1 downstream,
> but returns a generic error (-ERANGE) without telling the user
> what went wrong. Return -EINVAL + extack instead.
> 
> Replace the ffs()/fls() comparison with a hweight32() == 1 check.
> 
> Signed-off-by: Jakub Kicinski <[email protected]>
> ---
> CC: [email protected]
> CC: [email protected]
> ---
>   net/ethtool/tsconfig.c | 12 ++++++++----
>   1 file changed, 8 insertions(+), 4 deletions(-)
> 
> diff --git a/net/ethtool/tsconfig.c b/net/ethtool/tsconfig.c
> index 24b64862011f..6be3aa5d4bc1 100644
> --- a/net/ethtool/tsconfig.c
> +++ b/net/ethtool/tsconfig.c
> @@ -359,8 +359,10 @@ static int ethnl_set_tsconfig(struct ethnl_req_info *req_base,
>   		if (ret < 0)
>   			goto err_free_hwprov;
>   
> -		/* Select only one tx type at a time */
> -		if (ffs(req_tx_type) != fls(req_tx_type)) {
> +		/* Select exactly one tx type at a time */
> +		if (hweight32(req_tx_type) != 1) {
> +			NL_SET_BAD_ATTR(info->extack,
> +					tb[ETHTOOL_A_TSCONFIG_TX_TYPES]);
>   			ret = -EINVAL;
>   			goto err_free_hwprov;
>   		}
> @@ -380,8 +382,10 @@ static int ethnl_set_tsconfig(struct ethnl_req_info *req_base,
>   		if (ret < 0)
>   			goto err_free_hwprov;
>   
> -		/* Select only one rx filter at a time */
> -		if (ffs(req_rx_filter) != fls(req_rx_filter)) {
> +		/* Select exactly one rx filter at a time */
> +		if (hweight32(req_rx_filter) != 1) {
> +			NL_SET_BAD_ATTR(info->extack,
> +					tb[ETHTOOL_A_TSCONFIG_RX_FILTERS]);
>   			ret = -EINVAL;
>   			goto err_free_hwprov;
>   		}
Reviewed-by: Vadim Fedorenko <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.