[dpdk-dev] sched: fix segmentation fault when freeing port

Message ID 1486402362-15098-1-git-send-email-jblunck@infradead.org (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel compilation fail Compilation issues

Commit Message

Jan Blunck Feb. 6, 2017, 5:32 p.m. UTC
  From: Alan Dewar <adewar@brocade.com>

Prevent a segmentation fault in rte_sched_port_free by only accessing
the port structure after the NULL pointer check has been made.

Fixes: 7b3c4f35 ("sched: fix releasing enqueued packets")

Signed-off-by: Alan Dewar <adewar@brocade.com>
Signed-off-by: Jan Blunck <jblunck@infradead.org>
---
 lib/librte_sched/rte_sched.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
  

Comments

Cristian Dumitrescu Feb. 6, 2017, 6:42 p.m. UTC | #1
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jan Blunck
> Sent: Monday, February 6, 2017 5:33 PM
> To: dev@dpdk.org
> Cc: h.mikita89@gmail.com; Alan Dewar <adewar@brocade.com>
> Subject: [dpdk-dev] [PATCH] sched: fix segmentation fault when freeing port
> 
> From: Alan Dewar <adewar@brocade.com>
> 
> Prevent a segmentation fault in rte_sched_port_free by only accessing
> the port structure after the NULL pointer check has been made.
> 
> Fixes: 7b3c4f35 ("sched: fix releasing enqueued packets")
> 
> Signed-off-by: Alan Dewar <adewar@brocade.com>
> Signed-off-by: Jan Blunck <jblunck@infradead.org>
> ---
>  lib/librte_sched/rte_sched.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/librte_sched/rte_sched.c b/lib/librte_sched/rte_sched.c
> index e6dace2..614705d 100644
> --- a/lib/librte_sched/rte_sched.c
> +++ b/lib/librte_sched/rte_sched.c
> @@ -735,12 +735,14 @@ void
>  rte_sched_port_free(struct rte_sched_port *port)
>  {
>  	uint32_t qindex;
> -	uint32_t n_queues_per_port =
> rte_sched_port_queues_per_port(port);
> +	uint32_t n_queues_per_port;
> 
>  	/* Check user parameters */
>  	if (port == NULL)
>  		return;
> 
> +	n_queues_per_port = rte_sched_port_queues_per_port(port);
> +
>  	/* Free enqueued mbufs */
>  	for (qindex = 0; qindex < n_queues_per_port; qindex++) {
>  		struct rte_mbuf **mbufs = rte_sched_port_qbase(port,
> qindex);
> --
> 2.7.4

Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
  
Thomas Monjalon Feb. 9, 2017, 5:48 p.m. UTC | #2
> > Prevent a segmentation fault in rte_sched_port_free by only accessing
> > the port structure after the NULL pointer check has been made.
> > 
> > Fixes: 7b3c4f35 ("sched: fix releasing enqueued packets")
> > 
> > Signed-off-by: Alan Dewar <adewar@brocade.com>
> > Signed-off-by: Jan Blunck <jblunck@infradead.org>
> 
> Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>

Cc: stable@dpdk.org

Applied, thanks
  

Patch

diff --git a/lib/librte_sched/rte_sched.c b/lib/librte_sched/rte_sched.c
index e6dace2..614705d 100644
--- a/lib/librte_sched/rte_sched.c
+++ b/lib/librte_sched/rte_sched.c
@@ -735,12 +735,14 @@  void
 rte_sched_port_free(struct rte_sched_port *port)
 {
 	uint32_t qindex;
-	uint32_t n_queues_per_port = rte_sched_port_queues_per_port(port);
+	uint32_t n_queues_per_port;
 
 	/* Check user parameters */
 	if (port == NULL)
 		return;
 
+	n_queues_per_port = rte_sched_port_queues_per_port(port);
+
 	/* Free enqueued mbufs */
 	for (qindex = 0; qindex < n_queues_per_port; qindex++) {
 		struct rte_mbuf **mbufs = rte_sched_port_qbase(port, qindex);