[dpdk-dev] net/mlx4: fix mbuf poisoning in debug code

Message ID 513298ea9e590eda85def2ef4bc7029879dbcb32.1499243201.git.vasilyf@mellanox.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

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

Commit Message

Vasily Philipov July 5, 2017, 11:49 a.m. UTC
  In debug mode, all mbuf ol_flags are temporarily enabled while sitting in
the Rx queue to detect otherwise silent data corruption, however some of
them are special (indirect and control) and must be cleared before
returning mbufs to the pool to avoid crashing.

Fixes: 7fae69eeff13 ("mlx4: new poll mode driver")
CC: stable@dpdk.org

Signed-off-by: Vasily Philipov <vasilyf@mellanox.com>
---
 drivers/net/mlx4/mlx4.c | 7 +++++++
 1 file changed, 7 insertions(+)
  

Comments

Adrien Mazarguil July 5, 2017, 2:35 p.m. UTC | #1
On Wed, Jul 05, 2017 at 02:49:22PM +0300, Vasily Philipov wrote:
> In debug mode, all mbuf ol_flags are temporarily enabled while sitting in
> the Rx queue to detect otherwise silent data corruption, however some of
> them are special (indirect and control) and must be cleared before
> returning mbufs to the pool to avoid crashing.
> 
> Fixes: 7fae69eeff13 ("mlx4: new poll mode driver")
> CC: stable@dpdk.org
> 
> Signed-off-by: Vasily Philipov <vasilyf@mellanox.com>

Thanks Vasily, except for the minor nit below,

Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>

> ---
>  drivers/net/mlx4/mlx4.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
> index 16cafae..03c5c98 100644
> --- a/drivers/net/mlx4/mlx4.c
> +++ b/drivers/net/mlx4/mlx4.c
> @@ -3008,6 +3008,13 @@ struct txq_mp2mr_mbuf_check_data {
>  			NB_SEGS(rep) = 0x2a;
>  			PORT(rep) = 0x2a;
>  			rep->ol_flags = -1;
> +			/*
> +			 * Clear special flags in membuf to avoid

"membuf" => "mbuf"

> +			 * crashing while freeing.
> +			 */
> +			rep->ol_flags &=
> +				~(uint64_t)(IND_ATTACHED_MBUF |
> +					    CTRL_MBUF_FLAG);
>  #endif
>  			assert(rep->buf_len == seg->buf_len);
>  			/* Reconfigure sge to use rep instead of seg. */
> -- 
> 1.8.3.1
>
  
Ferruh Yigit July 5, 2017, 2:46 p.m. UTC | #2
On 7/5/2017 3:35 PM, Adrien Mazarguil wrote:
> On Wed, Jul 05, 2017 at 02:49:22PM +0300, Vasily Philipov wrote:
>> In debug mode, all mbuf ol_flags are temporarily enabled while sitting in
>> the Rx queue to detect otherwise silent data corruption, however some of
>> them are special (indirect and control) and must be cleared before
>> returning mbufs to the pool to avoid crashing.
>>
>> Fixes: 7fae69eeff13 ("mlx4: new poll mode driver")
>> CC: stable@dpdk.org
>>
>> Signed-off-by: Vasily Philipov <vasilyf@mellanox.com>
> 
> Thanks Vasily, except for the minor nit below,
> 
> Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>

Applied to dpdk-next-net/master, thanks.


> "membuf" => "mbuf"
Fixed while applying.
  

Patch

diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
index 16cafae..03c5c98 100644
--- a/drivers/net/mlx4/mlx4.c
+++ b/drivers/net/mlx4/mlx4.c
@@ -3008,6 +3008,13 @@  struct txq_mp2mr_mbuf_check_data {
 			NB_SEGS(rep) = 0x2a;
 			PORT(rep) = 0x2a;
 			rep->ol_flags = -1;
+			/*
+			 * Clear special flags in membuf to avoid
+			 * crashing while freeing.
+			 */
+			rep->ol_flags &=
+				~(uint64_t)(IND_ATTACHED_MBUF |
+					    CTRL_MBUF_FLAG);
 #endif
 			assert(rep->buf_len == seg->buf_len);
 			/* Reconfigure sge to use rep instead of seg. */