DPDK patches and discussions
 help / color / mirror / Atom feed
From: David Marchand <david.marchand@redhat.com>
To: Zhihong Peng <zhihongx.peng@intel.com>
Cc: Thomas Monjalon <thomas@monjalon.net>,
	"Burakov, Anatoly" <anatoly.burakov@intel.com>,
	 "Ananyev, Konstantin" <konstantin.ananyev@intel.com>,
	 Stephen Hemminger <stephen@networkplumber.org>,
	 Cristian Dumitrescu <cristian.dumitrescu@intel.com>,
	"Mcnamara, John" <john.mcnamara@intel.com>,
	 Bruce Richardson <bruce.richardson@intel.com>,
	dev <dev@dpdk.org>,  Xueqin Lin <xueqin.lin@intel.com>
Subject: Re: [dpdk-dev] [PATCH v13 1/4] enable ASan AddressSanitizer
Date: Fri, 29 Oct 2021 11:21:51 +0200	[thread overview]
Message-ID: <CAJFAV8z7kE3354k-jZRj6tbkQoyALsjHrMSQEx-zhOPEqadhBA@mail.gmail.com> (raw)
In-Reply-To: <20211020074643.3004385-1-zhihongx.peng@intel.com>

Replying on this patch since there is no cover letter.

This series looks acceptable to me for rc2.

Patch 3 and 4 will be merged first, since they fix issues that would
be hit with ASan enabled.

I have comments mainly on rewording in commitlogs and documentation.

If you are fine with those comments, I'll fix them before pushing this series.



On Wed, Oct 20, 2021 at 9:47 AM <zhihongx.peng@intel.com> wrote:
>
> From: Zhihong Peng <zhihongx.peng@intel.com>
>
> `AddressSanitizer
> <https://github.com/google/sanitizers/wiki/AddressSanitizer>`_ (ASan)
> is a widely-used debugging tool to detect memory access errors.
> It helps to detect issues like use-after-free, various kinds of buffer
> overruns in C/C++ programs, and other similar errors, as well as
> printing out detailed debug information whenever an error is detected.
>
> We can enable ASan by adding below compilation options:
> -Dbuildtype=debug -Db_lundef=false -Db_sanitize=address
> "-Dbuildtype=debug": This is a non-essential option. When this option
> is added, if a memory error occurs, ASan can clearly show where the
> code is wrong.
> "-Db_lundef=false": When use clang to compile DPDK, this option must
> be added.
>
> Signed-off-by: Xueqin Lin <xueqin.lin@intel.com>
> Signed-off-by: Zhihong Peng <zhihongx.peng@intel.com>
> Acked-by: John McNamara <john.mcnamara@intel.com>

This patch affects the build process so it should be reflected in the
patch title.
I find the commitlog hard to read.


Suggesting following rewording:
"""
build: enable AddressSanitizer

AddressSanitizer [1] a.k.a. ASan is a widely-used debugging tool to detect
memory access errors.
It helps to detect issues like use-after-free, various kinds of buffer
overruns in C/C++ programs, and other similar errors, as well as
printing out detailed debug information whenever an error is detected.

ASan is integrated with gcc and clang and can be enabled via a meson
option: -Db_sanitize=address
See the documentation for details (especially regarding clang).

Enabling ASan has an impact on performance since additional checks are
added to generated binaries.

Enabling ASan with Windows is currently not supported in DPDK.


1: https://github.com/google/sanitizers/wiki/AddressSanitizer
"""

> ---
> v7: 1) Split doc and code into two.
>     2) Modify asan.rst doc
> v8: No change.
> v9: 1) Add the check of libasan library.
>     2) Add release notes.
> v10:1) Split doc and code into two.
>     2) Meson supports asan.
> v11:Modify the document.
> v12:No change.
> v13:Modify the document.
> ---
>  config/meson.build                     | 16 ++++++++++++++
>  devtools/words-case.txt                |  1 +
>  doc/guides/prog_guide/asan.rst         | 30 ++++++++++++++++++++++++++
>  doc/guides/prog_guide/index.rst        |  1 +
>  doc/guides/rel_notes/release_21_11.rst |  9 ++++++++
>  5 files changed, 57 insertions(+)
>  create mode 100644 doc/guides/prog_guide/asan.rst
>
> diff --git a/config/meson.build b/config/meson.build
> index 4cdf589e20..f02b0e9c6d 100644
> --- a/config/meson.build
> +++ b/config/meson.build
> @@ -411,6 +411,22 @@ if get_option('b_lto')
>      endif
>  endif
>
> +if get_option('b_sanitize') == 'address' or get_option('b_sanitize') == 'address,undefined'
> +    if is_windows
> +        error('ASan is not supported on windows')
> +    endif

I see clang started supporting ASan for Windows in version 8.
https://releases.llvm.org/8.0.0/tools/clang/docs/AddressSanitizer.html

I also found some blog about adding ASan support in MSVC.
https://devblogs.microsoft.com/cppblog/addresssanitizer-asan-for-windows-with-msvc/

Keeping this limitation is acceptable for now, but I added a mention
in commitlog.


> +
> +    if cc.get_id() == 'gcc'
> +        asan_dep = cc.find_library('asan', required: true)
> +        if (not cc.links('int main(int argc, char *argv[]) { return 0; }',
> +                dependencies: asan_dep))
> +            error('broken dependency, "libasan"')
> +        endif
> +        add_project_link_arguments('-lasan', language: 'c')
> +        dpdk_extra_ldflags += '-lasan'
> +    endif
> +endif
> +
>  if get_option('default_library') == 'both'
>      error( '''
>   Unsupported value "both" for "default_library" option.
> diff --git a/devtools/words-case.txt b/devtools/words-case.txt
> index 0bbad48626..ada6910fa0 100644
> --- a/devtools/words-case.txt
> +++ b/devtools/words-case.txt
> @@ -5,6 +5,7 @@ API
>  Arm
>  armv7
>  armv8
> +ASan
>  BAR
>  CRC
>  DCB
> diff --git a/doc/guides/prog_guide/asan.rst b/doc/guides/prog_guide/asan.rst
> new file mode 100644
> index 0000000000..6888fc9a87
> --- /dev/null
> +++ b/doc/guides/prog_guide/asan.rst
> @@ -0,0 +1,30 @@
> +.. SPDX-License-Identifier: BSD-3-Clause
> +   Copyright(c) 2021 Intel Corporation
> +
> +Running AddressSanitizer
> +========================
> +
> +`AddressSanitizer
> +<https://github.com/google/sanitizers/wiki/AddressSanitizer>`_ (ASan)
> +is a widely-used debugging tool to detect memory access errors.
> +It helps to detect issues like use-after-free, various kinds of buffer
> +overruns in C/C++ programs, and other similar errors, as well as
> +printing out detailed debug information whenever an error is detected.
> +
> +AddressSanitizer is a part of LLVM (3.1+) and GCC (4.8+).
> +
> +Add following meson build commands to enable ASan in the meson build system:
> +
> +* gcc::
> +
> +    -Dbuildtype=debug -Db_sanitize=address
> +
> +* clang::
> +
> +    -Dbuildtype=debug -Db_lundef=false -Db_sanitize=address

Suggests adding some explanations here and replacing like:

"""
...

AddressSanitizer is a part of LLVM (3.1+) and GCC (4.8+).

Enabling ASan is done by passing the -Db_sanitize=address option to
the meson build system,
see :ref:`linux_gsg_compiling_dpdk` for details.

The way ASan is integrated with clang requires to allow undefined
symbols when linking code.
To do this, the -Db_lundef=false option must be added.

Additionally, passing -Dbuildtype=debug option might help getting more
readable ASan reports.

Example::

  - gcc: meson setup -Db_sanitize=address <build_dir>
  - clang: meson setup -Db_sanitize=address -Db_lundef=false <build_dir>
"""

> +
> +.. Note::
> +
> +    a) If compile with gcc in centos, libasan needs to be installed separately.
> +    b) If the program is tested using cmdline, you may need to execute the
> +       "stty echo" command when an error occurs.

"""
  - The libasan package must be installed when compiling with gcc in
Centos/RHEL.
  - If the program is tested using cmdline, you may need to execute the
    "stty echo" command when an error occurs.
"""

> diff --git a/doc/guides/prog_guide/index.rst b/doc/guides/prog_guide/index.rst
> index 89af28dacb..b95c460b19 100644
> --- a/doc/guides/prog_guide/index.rst
> +++ b/doc/guides/prog_guide/index.rst
> @@ -71,4 +71,5 @@ Programmer's Guide
>      writing_efficient_code
>      lto
>      profile_app
> +    asan
>      glossary
> diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst
> index 3362c52a73..10f4275b1b 100644
> --- a/doc/guides/rel_notes/release_21_11.rst
> +++ b/doc/guides/rel_notes/release_21_11.rst
> @@ -173,6 +173,15 @@ New Features
>    * Added tests to verify tunnel header verification in IPsec inbound.
>    * Added tests to verify inner checksum.
>
> +* **Enable ASan AddressSanitizer.**

Should be in past form:

* **Added ASan support.**





> +
> +  `AddressSanitizer
> +  <https://github.com/google/sanitizers/wiki/AddressSanitizer>`_ (ASan)
> +  is a widely-used debugging tool to detect memory access errors.
> +  It helps to detect issues like use-after-free, various kinds of buffer
> +  overruns in C/C++ programs, and other similar errors, as well as
> +  printing out detailed debug information whenever an error is detected.


-- 
David Marchand


  parent reply	other threads:[~2021-10-29  9:22 UTC|newest]

Thread overview: 117+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-10  2:01 [dpdk-dev] [PATCH] Enable AddressSanitizer feature on DPDK zhihongx.peng
2021-09-10  2:47 ` Stephen Hemminger
2021-09-13  5:27   ` Peng, ZhihongX
2021-09-13 15:05     ` Stephen Hemminger
2021-09-13 15:22       ` Bruce Richardson
2021-09-13 15:45         ` Stephen Hemminger
2021-09-14  3:17           ` Lin, Xueqin
2021-09-14  3:11         ` Lin, Xueqin
2021-09-10 17:58 ` David Christensen
2021-09-13  5:35   ` Peng, ZhihongX
2021-09-17 20:50     ` David Christensen
2021-09-18  7:21       ` Peng, ZhihongX
2021-09-20 19:41         ` David Christensen
2021-09-21  8:29           ` David Marchand
2021-09-21 10:15             ` Jerin Jacob
2021-09-22  7:32             ` Peng, ZhihongX
2021-09-16  1:38 ` [dpdk-dev] [PATCH v2] " zhihongx.peng
2021-09-17  8:23   ` David Marchand
2021-09-17  9:12     ` Peng, ZhihongX
2021-09-17 14:58       ` Stephen Hemminger
2021-09-18  6:36         ` Peng, ZhihongX
2021-09-18  7:41   ` [dpdk-dev] [PATCH v3] " zhihongx.peng
2021-09-20 10:03     ` David Marchand
2021-09-22  7:26       ` Peng, ZhihongX
2021-09-24  2:20     ` [dpdk-dev] [PATCH v4 1/2] Enable ASan for memory detector " zhihongx.peng
2021-09-24  2:20       ` [dpdk-dev] [PATCH v4 2/2] lib/pipeline: Fix gcc compilation error using ASan zhihongx.peng
2021-09-24  9:33       ` [dpdk-dev] [PATCH v5 1/2] Enable ASan for memory detector on DPDK zhihongx.peng
2021-09-24  9:33         ` [dpdk-dev] [PATCH v5 2/2] Fix gcc compilation error using ASan zhihongx.peng
2021-09-24 10:03       ` [dpdk-dev] [PATCH v5 1/2] Enable ASan for memory detector on DPDK zhihongx.peng
2021-09-24 10:03         ` [dpdk-dev] [PATCH v5 2/2] lib/pipeline: Fix gcc compilation error using ASan zhihongx.peng
2021-09-30  5:27         ` [dpdk-dev] [PATCH v6 1/2] Enable ASan for memory detector on DPDK zhihongx.peng
2021-09-30  5:27           ` [dpdk-dev] [PATCH v6 2/2] lib/pipeline: Fix gcc compilation error using ASan zhihongx.peng
2021-09-30  8:29             ` [dpdk-dev] [dpdk-stable] " David Marchand
2021-10-12  2:41               ` Peng, ZhihongX
2021-09-30  8:20           ` [dpdk-dev] [PATCH v6 1/2] Enable ASan for memory detector on DPDK David Marchand
2021-10-08  8:07             ` Peng, ZhihongX
2021-10-08  8:30               ` David Marchand
2021-10-12  5:41                 ` Peng, ZhihongX
2021-10-12  7:17             ` Peng, ZhihongX
2021-10-13  7:59             ` Bruce Richardson
2021-10-14  6:33               ` Peng, ZhihongX
2021-10-14  6:53                 ` Peng, ZhihongX
2021-09-30 12:59         ` zhihongx.peng
2021-09-30 12:59           ` [dpdk-dev] [PATCH v6 2/2] lib/pipeline: Fix compilation error with gcc ASan zhihongx.peng
2021-09-30 13:59           ` [dpdk-dev] [PATCH v6 1/2] Enable ASan for memory detector on DPDK Burakov, Anatoly
2021-09-30 18:49           ` David Marchand
2021-10-08  9:17           ` [dpdk-dev] [PATCH v7 1/3] " zhihongx.peng
2021-10-08  9:17             ` [dpdk-dev] [PATCH v7 2/3] DPDK code adapts to ASan zhihongx.peng
2021-10-08  9:17             ` [dpdk-dev] [PATCH v7 3/3] lib/pipeline: Fix compilation error with gcc ASan zhihongx.peng
2021-10-11  6:28             ` [dpdk-dev] [PATCH v8 1/3] Enable ASan for memory detector on DPDK zhihongx.peng
2021-10-11  6:28               ` [dpdk-dev] [PATCH v8 2/3] DPDK code adapts to ASan zhihongx.peng
2021-10-11  6:28               ` [dpdk-dev] [PATCH v8 3/3] lib/pipeline: Fix compilation error with gcc ASan zhihongx.peng
2021-10-12  9:43               ` [dpdk-dev] [PATCH v9 1/3] Enable ASan for memory detector on DPDK zhihongx.peng
2021-10-12  9:43                 ` [dpdk-dev] [PATCH v9 2/3] DPDK code adapts to ASan zhihongx.peng
2021-10-13 16:45                   ` David Marchand
2021-10-14 11:45                     ` Peng, ZhihongX
2021-10-12  9:43                 ` [dpdk-dev] [PATCH v9 3/3] pipeline: Fix compilation error with gcc ASan zhihongx.peng
2021-10-15 14:27                   ` [dpdk-dev] [PATCH v10 1/4] Enable ASan for memory detector on DPDK zhihongx.peng
2021-10-15 14:27                     ` [dpdk-dev] [PATCH v10 2/4] DPDK code adapts to ASan zhihongx.peng
2021-10-15 14:27                     ` [dpdk-dev] [PATCH v10 3/4] pipeline: Fix compilation error with gcc ASan zhihongx.peng
2021-10-15 14:27                     ` [dpdk-dev] [PATCH v10 4/4] performance-thread: Fix cross compilation failed zhihongx.peng
2021-10-19  9:02                     ` [dpdk-dev] [PATCH v10 1/4] Enable ASan for memory detector on DPDK Mcnamara, John
2021-10-19  9:28                       ` Peng, ZhihongX
2021-10-15 15:11                   ` zhihongx.peng
2021-10-15 15:11                     ` [dpdk-dev] [PATCH v10 2/4] DPDK code adapts to ASan zhihongx.peng
2021-10-15 15:11                     ` [dpdk-dev] [PATCH v10 3/4] pipeline: Fix compilation error with gcc ASan zhihongx.peng
2021-10-18 12:21                       ` Dumitrescu, Cristian
2021-10-18 12:54                         ` Peng, ZhihongX
2021-10-19 11:26                           ` Dumitrescu, Cristian
2021-10-19 12:11                             ` Peng, ZhihongX
2021-10-15 15:11                     ` [dpdk-dev] [PATCH v10 4/4] performance-thread: Fix cross compilation failed zhihongx.peng
2021-10-19  6:02                       ` Peng, ZhihongX
2021-10-19 10:12                       ` [dpdk-dev] [PATCH v11 1/4] Enable ASan for memory detector on DPDK zhihongx.peng
2021-10-19 10:12                         ` [dpdk-dev] [PATCH v11 2/4] DPDK code adapts to ASan zhihongx.peng
2021-10-19 10:12                         ` [dpdk-dev] [PATCH v11 3/4] pipeline: Fix compilation error with gcc ASan zhihongx.peng
2021-10-19 10:12                         ` [dpdk-dev] [PATCH v11 4/4] performance-thread: Fix cross compilation failed zhihongx.peng
2021-10-19 10:37                           ` Bruce Richardson
2021-10-19 13:04                           ` [dpdk-dev] [PATCH v12 1/4] Enable ASan for memory detector on DPDK zhihongx.peng
2021-10-19 13:04                             ` [dpdk-dev] [PATCH v12 2/4] DPDK code adapts to ASan zhihongx.peng
2021-10-19 13:04                             ` [dpdk-dev] [PATCH v12 3/4] pipeline: Fix compilation error with gcc ASan zhihongx.peng
2021-10-19 13:04                             ` [dpdk-dev] [PATCH v12 4/4] performance-thread: Fix cross compilation failed zhihongx.peng
2021-10-19 13:58                           ` [dpdk-dev] [PATCH v12 1/4] Enable ASan Address Sanitization zhihongx.peng
2021-10-19 13:58                             ` [dpdk-dev] [PATCH v12 2/4] DPDK code adapts to ASan zhihongx.peng
2021-10-19 13:58                             ` [dpdk-dev] [PATCH v12 3/4] Code changes to avoid the ASan error zhihongx.peng
2021-10-19 14:05                               ` Dumitrescu, Cristian
2021-10-19 13:58                             ` [dpdk-dev] [PATCH v12 4/4] performance-thread: Fix cross compilation failed zhihongx.peng
2021-10-19 14:47                             ` [dpdk-dev] [PATCH v12 1/4] Enable ASan Address Sanitization Peng, ZhihongX
2021-10-19 15:17                               ` Mcnamara, John
2021-10-20  1:55                                 ` Peng, ZhihongX
2021-10-19 15:20                               ` David Marchand
2021-10-20  2:41                                 ` Lin, Xueqin
2021-10-19 15:15                           ` [dpdk-dev] [PATCH v12 1/4] Enable ASan AddressSanitizer zhihongx.peng
2021-10-19 15:15                             ` [dpdk-dev] [PATCH v12 2/4] DPDK code adapts to ASan zhihongx.peng
2021-10-19 15:15                             ` [dpdk-dev] [PATCH v12 3/4] Code changes to avoid the ASan error zhihongx.peng
2021-10-19 15:15                             ` [dpdk-dev] [PATCH v12 4/4] performance-thread: Fix cross compilation failed zhihongx.peng
2021-10-20  7:46                               ` [dpdk-dev] [PATCH v13 1/4] enable ASan AddressSanitizer zhihongx.peng
2021-10-20  7:46                                 ` [dpdk-dev] [PATCH v13 2/4] DPDK code adapts to ASan zhihongx.peng
2021-10-29  9:23                                   ` David Marchand
2021-10-29 12:54                                     ` Peng, ZhihongX
2021-10-20  7:46                                 ` [dpdk-dev] [PATCH v13 3/4] code changes to avoid the ASan error zhihongx.peng
2021-10-20  7:46                                 ` [dpdk-dev] [PATCH v13 4/4] performance-thread: avoid cross compilation fail zhihongx.peng
2021-10-25  1:58                                 ` [dpdk-dev] [PATCH v13 1/4] enable ASan AddressSanitizer Peng, ZhihongX
2021-10-29  9:21                                 ` David Marchand [this message]
2021-10-29 12:48                                   ` Peng, ZhihongX
2021-10-29 14:50                                   ` David Marchand
2021-11-01  3:37                                     ` Lin, Xueqin
2021-11-02 17:29                                       ` David Marchand
2021-11-03  9:36                                         ` Lin, Xueqin
2021-11-03  9:44                                           ` David Marchand
2021-10-19 10:24                         ` [dpdk-dev] [PATCH v11 1/4] Enable ASan for memory detector on DPDK Peng, ZhihongX
2021-10-19  5:52                     ` [dpdk-dev] [PATCH v10 " Peng, ZhihongX
2021-10-13 16:44                 ` [dpdk-dev] [PATCH v9 1/3] " David Marchand
2021-10-14  6:46                   ` Peng, ZhihongX
2021-10-14  7:04                     ` Thomas Monjalon
2021-10-14 11:42                   ` Peng, ZhihongX
2021-09-27 12:02     ` [dpdk-dev] [PATCH v3] Enable AddressSanitizer feature " Burakov, Anatoly
2021-09-30  5:18       ` Peng, ZhihongX

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAJFAV8z7kE3354k-jZRj6tbkQoyALsjHrMSQEx-zhOPEqadhBA@mail.gmail.com \
    --to=david.marchand@redhat.com \
    --cc=anatoly.burakov@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=cristian.dumitrescu@intel.com \
    --cc=dev@dpdk.org \
    --cc=john.mcnamara@intel.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=stephen@networkplumber.org \
    --cc=thomas@monjalon.net \
    --cc=xueqin.lin@intel.com \
    --cc=zhihongx.peng@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).