All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 1/3] gve: Correct available tx qpl check
@ 2021-10-05 23:28 Jeroen de Borst
  2021-10-05 23:28 ` [PATCH net 2/3] gve: Avoid freeing NULL pointer Jeroen de Borst
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Jeroen de Borst @ 2021-10-05 23:28 UTC (permalink / raw)
  To: netdev; +Cc: davem, kuba, Catherine Sullivan, Jeroen de Borst

From: Catherine Sullivan <csully@google.com>

The qpl_map_size is rounded up to a multiple of sizeof(long), but the
number of qpls doesn't have to be.

Fixes: f5cedc84a30d2 ("gve: Add transmit and receive support")

Signed-off-by: Catherine Sullivan <csully@google.com>
Signed-off-by: Jeroen de Borst <jeroendb@google.com>
---
 drivers/net/ethernet/google/gve/gve.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/google/gve/gve.h
index 1d3188e8e3b3..92dc18a4bcc4 100644
--- a/drivers/net/ethernet/google/gve/gve.h
+++ b/drivers/net/ethernet/google/gve/gve.h
@@ -780,7 +780,7 @@ struct gve_queue_page_list *gve_assign_rx_qpl(struct gve_priv *priv)
 				    gve_num_tx_qpls(priv));
 
 	/* we are out of rx qpls */
-	if (id == priv->qpl_cfg.qpl_map_size)
+	if (id == gve_num_tx_qpls(priv) + gve_num_rx_qpls(priv))
 		return NULL;
 
 	set_bit(id, priv->qpl_cfg.qpl_id_map);
-- 
2.33.0.800.g4c38ced690-goog


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

* [PATCH net 2/3] gve: Avoid freeing NULL pointer
  2021-10-05 23:28 [PATCH net 1/3] gve: Correct available tx qpl check Jeroen de Borst
@ 2021-10-05 23:28 ` Jeroen de Borst
  2021-10-05 23:28 ` [PATCH net 3/3] gve: Properly handle errors in gve_assign_qpl Jeroen de Borst
  2021-10-06  1:18 ` [PATCH net 1/3] gve: Correct available tx qpl check Jakub Kicinski
  2 siblings, 0 replies; 4+ messages in thread
From: Jeroen de Borst @ 2021-10-05 23:28 UTC (permalink / raw)
  To: netdev; +Cc: davem, kuba, Tao Liu, Catherine Sully

From: Tao Liu <xliutaox@google.com>

Prevent possible crashes when cleaning up after unsuccessful
initializations.

Fixes: 893ce44df5658 ("gve: Add basic driver framework for Compute Engine Virtual NIC")

Signed-off-by: Tao Liu <xliutaox@google.com>
Signed-off-by: Catherine Sully <csully@google.com>
---
 drivers/net/ethernet/google/gve/gve_main.c | 27 ++++++++++++++--------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c
index 099a2bc5ae67..29c5f994f92e 100644
--- a/drivers/net/ethernet/google/gve/gve_main.c
+++ b/drivers/net/ethernet/google/gve/gve_main.c
@@ -82,6 +82,9 @@ static int gve_alloc_counter_array(struct gve_priv *priv)
 
 static void gve_free_counter_array(struct gve_priv *priv)
 {
+	if (!priv->counter_array)
+		return;
+
 	dma_free_coherent(&priv->pdev->dev,
 			  priv->num_event_counters *
 			  sizeof(*priv->counter_array),
@@ -142,6 +145,9 @@ static int gve_alloc_stats_report(struct gve_priv *priv)
 
 static void gve_free_stats_report(struct gve_priv *priv)
 {
+	if (!priv->stats_report)
+		return;
+
 	del_timer_sync(&priv->stats_report_timer);
 	dma_free_coherent(&priv->pdev->dev, priv->stats_report_len,
 			  priv->stats_report, priv->stats_report_bus);
@@ -370,18 +376,19 @@ static void gve_free_notify_blocks(struct gve_priv *priv)
 {
 	int i;
 
-	if (priv->msix_vectors) {
-		/* Free the irqs */
-		for (i = 0; i < priv->num_ntfy_blks; i++) {
-			struct gve_notify_block *block = &priv->ntfy_blocks[i];
-			int msix_idx = i;
+	if (!priv->msix_vectors)
+		return;
 
-			irq_set_affinity_hint(priv->msix_vectors[msix_idx].vector,
-					      NULL);
-			free_irq(priv->msix_vectors[msix_idx].vector, block);
-		}
-		free_irq(priv->msix_vectors[priv->mgmt_msix_idx].vector, priv);
+	/* Free the irqs */
+	for (i = 0; i < priv->num_ntfy_blks; i++) {
+		struct gve_notify_block *block = &priv->ntfy_blocks[i];
+		int msix_idx = i;
+
+		irq_set_affinity_hint(priv->msix_vectors[msix_idx].vector,
+				      NULL);
+		free_irq(priv->msix_vectors[msix_idx].vector, block);
 	}
+	free_irq(priv->msix_vectors[priv->mgmt_msix_idx].vector, priv);
 	dma_free_coherent(&priv->pdev->dev,
 			  priv->num_ntfy_blks * sizeof(*priv->ntfy_blocks),
 			  priv->ntfy_blocks, priv->ntfy_block_bus);
-- 
2.33.0.800.g4c38ced690-goog


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

* [PATCH net 3/3] gve: Properly handle errors in gve_assign_qpl
  2021-10-05 23:28 [PATCH net 1/3] gve: Correct available tx qpl check Jeroen de Borst
  2021-10-05 23:28 ` [PATCH net 2/3] gve: Avoid freeing NULL pointer Jeroen de Borst
@ 2021-10-05 23:28 ` Jeroen de Borst
  2021-10-06  1:18 ` [PATCH net 1/3] gve: Correct available tx qpl check Jakub Kicinski
  2 siblings, 0 replies; 4+ messages in thread
From: Jeroen de Borst @ 2021-10-05 23:28 UTC (permalink / raw)
  To: netdev; +Cc: davem, kuba, Catherine Sullivan, Jeroen de Borst

From: Catherine Sullivan <csully@google.com>

Ignored errors would result in crash.

Fixes: ede3fcf5ec67f ("gve: Add support for raw addressing to the rx path")

Signed-off-by: Catherine Sullivan <csully@google.com>
Signed-off-by: Jeroen de Borst <jeroendb@google.com>
---
 drivers/net/ethernet/google/gve/gve_rx.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/google/gve/gve_rx.c b/drivers/net/ethernet/google/gve/gve_rx.c
index bb8261368250..94941d4e4744 100644
--- a/drivers/net/ethernet/google/gve/gve_rx.c
+++ b/drivers/net/ethernet/google/gve/gve_rx.c
@@ -104,8 +104,14 @@ static int gve_prefill_rx_pages(struct gve_rx_ring *rx)
 	if (!rx->data.page_info)
 		return -ENOMEM;
 
-	if (!rx->data.raw_addressing)
+	if (!rx->data.raw_addressing) {
 		rx->data.qpl = gve_assign_rx_qpl(priv);
+		if (!rx->data.qpl) {
+			kvfree(rx->data.page_info);
+			rx->data.page_info = NULL;
+			return -ENOMEM;
+		}
+	}
 	for (i = 0; i < slots; i++) {
 		if (!rx->data.raw_addressing) {
 			struct page *page = rx->data.qpl->pages[i];
-- 
2.33.0.800.g4c38ced690-goog


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

* Re: [PATCH net 1/3] gve: Correct available tx qpl check
  2021-10-05 23:28 [PATCH net 1/3] gve: Correct available tx qpl check Jeroen de Borst
  2021-10-05 23:28 ` [PATCH net 2/3] gve: Avoid freeing NULL pointer Jeroen de Borst
  2021-10-05 23:28 ` [PATCH net 3/3] gve: Properly handle errors in gve_assign_qpl Jeroen de Borst
@ 2021-10-06  1:18 ` Jakub Kicinski
  2 siblings, 0 replies; 4+ messages in thread
From: Jakub Kicinski @ 2021-10-06  1:18 UTC (permalink / raw)
  To: Jeroen de Borst; +Cc: netdev, davem, Catherine Sullivan

On Tue,  5 Oct 2021 16:28:21 -0700 Jeroen de Borst wrote:
> Fixes: f5cedc84a30d2 ("gve: Add transmit and receive support")
> 
> Signed-off-by: Catherine Sullivan <csully@google.com>
> Signed-off-by: Jeroen de Borst <jeroendb@google.com>

No empty line between Fixes and the other tags. Please fix & repost.

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

end of thread, other threads:[~2021-10-06  1:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-05 23:28 [PATCH net 1/3] gve: Correct available tx qpl check Jeroen de Borst
2021-10-05 23:28 ` [PATCH net 2/3] gve: Avoid freeing NULL pointer Jeroen de Borst
2021-10-05 23:28 ` [PATCH net 3/3] gve: Properly handle errors in gve_assign_qpl Jeroen de Borst
2021-10-06  1:18 ` [PATCH net 1/3] gve: Correct available tx qpl check Jakub Kicinski

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.