All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tariq Toukan <ttoukan.linux@gmail.com>
To: Justin Stitt <justinstitt@google.com>, Kees Cook <kees@kernel.org>
Cc: Tariq Toukan <tariqt@nvidia.com>,
	Andrew Lunn <andrew+netdev@lunn.ch>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Yishai Hadas <yishaih@nvidia.com>,
	netdev@vger.kernel.org, linux-rdma@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org
Subject: Re: [PATCH] net/mlx4_core: Avoid impossible mlx4_db_alloc() order value
Date: Tue, 11 Feb 2025 16:22:43 +0200	[thread overview]
Message-ID: <d11de4d4-1205-43d0-8a7d-a43d55a4f3eb@gmail.com> (raw)
In-Reply-To: <3biiqfwwvlbkvo5tx56nmcl4rzbq5w7u3kxn5f5ctwsolxpubo@isskxigmypwz>



On 11/02/2025 2:01, Justin Stitt wrote:
> On Mon, Feb 10, 2025 at 09:45:05AM -0800, Kees Cook wrote:
>> GCC can see that the value range for "order" is capped, but this leads
>> it to consider that it might be negative, leading to a false positive
>> warning (with GCC 15 with -Warray-bounds -fdiagnostics-details):
>>
>> ../drivers/net/ethernet/mellanox/mlx4/alloc.c:691:47: error: array subscript -1 is below array bounds of 'long unsigned int *[2]' [-Werror=array-bounds=]
>>    691 |                 i = find_first_bit(pgdir->bits[o], MLX4_DB_PER_PAGE >> o);
>>        |                                    ~~~~~~~~~~~^~~
>>    'mlx4_alloc_db_from_pgdir': events 1-2
>>    691 |                 i = find_first_bit(pgdir->bits[o], MLX4_DB_PER_PAGE >> o);                        |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>        |                     |                         |                                                   |                     |                         (2) out of array bounds here
>>        |                     (1) when the condition is evaluated to true                             In file included from ../drivers/net/ethernet/mellanox/mlx4/mlx4.h:53,
>>                   from ../drivers/net/ethernet/mellanox/mlx4/alloc.c:42:
>> ../include/linux/mlx4/device.h:664:33: note: while referencing 'bits'
>>    664 |         unsigned long          *bits[2];
>>        |                                 ^~~~
>>
>> Switch the argument to unsigned int, which removes the compiler needing
>> to consider negative values.
>>
>> Signed-off-by: Kees Cook <kees@kernel.org>
>> ---
>> Cc: Tariq Toukan <tariqt@nvidia.com>
>> Cc: Andrew Lunn <andrew+netdev@lunn.ch>
>> Cc: "David S. Miller" <davem@davemloft.net>
>> Cc: Eric Dumazet <edumazet@google.com>
>> Cc: Jakub Kicinski <kuba@kernel.org>
>> Cc: Paolo Abeni <pabeni@redhat.com>
>> Cc: Yishai Hadas <yishaih@nvidia.com>
>> Cc: netdev@vger.kernel.org
>> Cc: linux-rdma@vger.kernel.org
>> ---
>>   drivers/net/ethernet/mellanox/mlx4/alloc.c | 6 +++---
>>   include/linux/mlx4/device.h                | 2 +-
>>   2 files changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/mellanox/mlx4/alloc.c b/drivers/net/ethernet/mellanox/mlx4/alloc.c
>> index b330020dc0d6..f2bded847e61 100644
>> --- a/drivers/net/ethernet/mellanox/mlx4/alloc.c
>> +++ b/drivers/net/ethernet/mellanox/mlx4/alloc.c
>> @@ -682,9 +682,9 @@ static struct mlx4_db_pgdir *mlx4_alloc_db_pgdir(struct device *dma_device)
>>   }
>>   
>>   static int mlx4_alloc_db_from_pgdir(struct mlx4_db_pgdir *pgdir,
>> -				    struct mlx4_db *db, int order)
>> +				    struct mlx4_db *db, unsigned int order)
>>   {
>> -	int o;
>> +	unsigned int o;
>>   	int i;
>>   
>>   	for (o = order; o <= 1; ++o) {
> 
>    ^ Knowing now that @order can only be 0 or 1 can this for loop (and
>    goto) be dropped entirely?
> 

Maybe I'm missing something...
Can you please explain why you think this can be dropped?


>    The code is already short and sweet so I don't feel strongly either
>    way.
> 
>> @@ -712,7 +712,7 @@ static int mlx4_alloc_db_from_pgdir(struct mlx4_db_pgdir *pgdir,
>>   	return 0;
>>   }
>>   
>> -int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, int order)
>> +int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, unsigned int order)
>>   {
>>   	struct mlx4_priv *priv = mlx4_priv(dev);
>>   	struct mlx4_db_pgdir *pgdir;
>> diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h
>> index 27f42f713c89..86f0f2a25a3d 100644
>> --- a/include/linux/mlx4/device.h
>> +++ b/include/linux/mlx4/device.h
>> @@ -1135,7 +1135,7 @@ int mlx4_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
>>   int mlx4_buf_write_mtt(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
>>   		       struct mlx4_buf *buf);
>>   
>> -int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, int order);
>> +int mlx4_db_alloc(struct mlx4_dev *dev, struct mlx4_db *db, unsigned int order);
>>   void mlx4_db_free(struct mlx4_dev *dev, struct mlx4_db *db);
>>   
>>   int mlx4_alloc_hwq_res(struct mlx4_dev *dev, struct mlx4_hwq_resources *wqres,
>> -- 
>> 2.34.1
>>
> 
> Justin
> 


  reply	other threads:[~2025-02-11 14:22 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-10 17:45 [PATCH] net/mlx4_core: Avoid impossible mlx4_db_alloc() order value Kees Cook
2025-02-11  0:01 ` Justin Stitt
2025-02-11 14:22   ` Tariq Toukan [this message]
2025-02-13  0:10     ` Justin Stitt
2025-02-13 10:13       ` Paolo Abeni
2025-02-15  3:50 ` patchwork-bot+netdevbpf

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=d11de4d4-1205-43d0-8a7d-a43d55a4f3eb@gmail.com \
    --to=ttoukan.linux@gmail.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=justinstitt@google.com \
    --cc=kees@kernel.org \
    --cc=kuba@kernel.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=tariqt@nvidia.com \
    --cc=yishaih@nvidia.com \
    /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.