[dpdk-dev] net/mlx4: fix mbuf poisoning in debug code
Checks
Commit Message
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
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
>
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.
@@ -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. */