[dpdk-dev] sched: fix segmentation fault when freeing port
Checks
Commit Message
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
> -----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>
> > 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
@@ -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);