[v10,1/4] Enable ASan for memory detector on DPDK
Checks
Commit Message
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 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>
---
config/meson.build | 16 ++++++++++++
devtools/words-case.txt | 1 +
doc/guides/prog_guide/asan.rst | 35 ++++++++++++++++++++++++++
doc/guides/prog_guide/index.rst | 1 +
doc/guides/rel_notes/release_21_11.rst | 9 +++++++
5 files changed, 62 insertions(+)
create mode 100644 doc/guides/prog_guide/asan.rst
Comments
> -----Original Message-----
> From: Peng, ZhihongX <zhihongx.peng@intel.com>
> Sent: Friday, October 15, 2021 3:28 PM
> To: david.marchand@redhat.com; Burakov, Anatoly
> <anatoly.burakov@intel.com>; Ananyev, Konstantin
> <konstantin.ananyev@intel.com>; stephen@networkplumber.org; Dumitrescu,
> Cristian <cristian.dumitrescu@intel.com>; Mcnamara, John
> <john.mcnamara@intel.com>
> Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; Peng, ZhihongX
> <zhihongx.peng@intel.com>
> Subject: [PATCH v10 1/4] Enable ASan for memory detector on DPDK
>
> From: Zhihong Peng <zhihongx.peng@intel.com>
>
> `AddressSanitizer
Good work on this. It is a good initiative. Some comments on the docs below.
> diff --git a/doc/guides/prog_guide/asan.rst
> b/doc/guides/prog_guide/asan.rst new file mode 100644 index
> 0000000000..b732288af3
> --- /dev/null
> +++ b/doc/guides/prog_guide/asan.rst
> @@ -0,0 +1,35 @@
> +.. Copyright (c) <2021>, Intel Corporation
> + All rights reserved.
> +
> +Memory error detect standard tool - AddressSanitizer(ASan)
> +==========================================================
> +
> +`AddressSanitizer
> +<https://github.com/google/sanitizers/wiki/AddressSanitizer>` (ASan) is
There are a number of minor doc and grammar issues in the rst for this patch. Rather than going through each one here is a rework of the asan.rst with these issues fixed:
.. SPDX-License-Identifier: BSD-3-Clause
Copyright(c) 2021 Intel Corporation
Running Address Sanitizer
==========================================================
`AddressSanitizer
<https://github.com/google/sanitizers/wiki/AddressSanitizer>`_ (ASan)
is a widely-used debugging tool for detecting memory access errors.
It helps detect issues like use-after-free, various kinds of buffer
overruns and similar errors, as well as printing out detailed debug
information whenever an error is detected.
To enable ASan in the meson build system, use following meson build
command:
Example usage:
* gcc::
meson build -Dbuildtype=debug -Db_sanitize=address
ninja -C build
* clang::
meson build -Dbuildtype=debug -Db_lundef=false -Db_sanitize=address
ninja -C build
AddressSanitizer is a part of LLVM (3.1+) and GCC (4.8+).
.. Note::
a) To compile with gcc in Centos, libasan needs to be installed separately.
b) If the program being tested uses cmdline you will need to execute the
"stty echo" command when a error occurs.
> diff --git a/doc/guides/prog_guide/index.rst
> b/doc/guides/prog_guide/index.rst index 2dce507f46..df8a4b93e1 100644
> --- a/doc/guides/prog_guide/index.rst
> +++ b/doc/guides/prog_guide/index.rst
> @@ -71,3 +71,4 @@ Programmer's Guide
> lto
> profile_app
> glossary
> + asan
The asan file should go before "glossary" and after "profile_app".
> diff --git a/doc/guides/rel_notes/release_21_11.rst
> b/doc/guides/rel_notes/release_21_11.rst
> index 4c56cdfeaa..b6c4174dc6 100644
> --- a/doc/guides/rel_notes/release_21_11.rst
> +++ b/doc/guides/rel_notes/release_21_11.rst
> @@ -159,6 +159,15 @@ New Features
> * Added tests to verify tunnel header verification in IPsec inbound.
> * Added tests to verify inner checksum.
>
> +* **Enable ASan for memory detector on DPDK.**
Change to "**Enable ASan Address Sanitization.**"
> +
> + `AddressSanitizer
> + <https://github.com/google/sanitizers/wiki/AddressSanitizer>` (ASan)
This text should match the edited text above.
John
> -----Original Message-----
> From: Mcnamara, John <john.mcnamara@intel.com>
> Sent: Tuesday, October 19, 2021 5:03 PM
> To: Peng, ZhihongX <zhihongx.peng@intel.com>;
> david.marchand@redhat.com; Burakov, Anatoly
> <anatoly.burakov@intel.com>; Ananyev, Konstantin
> <konstantin.ananyev@intel.com>; stephen@networkplumber.org;
> Dumitrescu, Cristian <cristian.dumitrescu@intel.com>
> Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>
> Subject: RE: [PATCH v10 1/4] Enable ASan for memory detector on DPDK
>
> > -----Original Message-----
> > From: Peng, ZhihongX <zhihongx.peng@intel.com>
> > Sent: Friday, October 15, 2021 3:28 PM
> > To: david.marchand@redhat.com; Burakov, Anatoly
> > <anatoly.burakov@intel.com>; Ananyev, Konstantin
> > <konstantin.ananyev@intel.com>; stephen@networkplumber.org;
> > Dumitrescu, Cristian <cristian.dumitrescu@intel.com>; Mcnamara, John
> > <john.mcnamara@intel.com>
> > Cc: dev@dpdk.org; Lin, Xueqin <xueqin.lin@intel.com>; Peng, ZhihongX
> > <zhihongx.peng@intel.com>
> > Subject: [PATCH v10 1/4] Enable ASan for memory detector on DPDK
> >
> > From: Zhihong Peng <zhihongx.peng@intel.com>
> >
> > `AddressSanitizer
>
>
> Good work on this. It is a good initiative. Some comments on the docs below.
>
>
> > diff --git a/doc/guides/prog_guide/asan.rst
> > b/doc/guides/prog_guide/asan.rst new file mode 100644 index
> > 0000000000..b732288af3
> > --- /dev/null
> > +++ b/doc/guides/prog_guide/asan.rst
> > @@ -0,0 +1,35 @@
> > +.. Copyright (c) <2021>, Intel Corporation
> > + All rights reserved.
> > +
> > +Memory error detect standard tool - AddressSanitizer(ASan)
> >
> +=========================================================
> =
> > +
> > +`AddressSanitizer
> > +<https://github.com/google/sanitizers/wiki/AddressSanitizer>` (ASan)
> > +is
>
> There are a number of minor doc and grammar issues in the rst for this patch.
> Rather than going through each one here is a rework of the asan.rst with
> these issues fixed:
>
> .. SPDX-License-Identifier: BSD-3-Clause
> Copyright(c) 2021 Intel Corporation
>
The v11 version will be fixed.
> Running Address Sanitizer
> ==========================================================
>
> `AddressSanitizer
> <https://github.com/google/sanitizers/wiki/AddressSanitizer>`_ (ASan) is a
The v11 version will be fixed.
> widely-used debugging tool for detecting memory access errors.
> It helps detect issues like use-after-free, various kinds of buffer overruns
> and similar errors, as well as printing out detailed debug information
> whenever an error is detected.
>
> To enable ASan in the meson build system, use following meson build
> command:
>
> Example usage:
>
> * gcc::
>
> meson build -Dbuildtype=debug -Db_sanitize=address
> ninja -C build
>
> * clang::
>
> meson build -Dbuildtype=debug -Db_lundef=false -Db_sanitize=address
> ninja -C build
>
> AddressSanitizer is a part of LLVM (3.1+) and GCC (4.8+).
The v11 version will be fixed.
> .. Note::
>
> a) To compile with gcc in Centos, libasan needs to be installed separately.
The v11 version will be fixed.
> b) If the program being tested uses cmdline you will need to execute the
> "stty echo" command when a error occurs.
The v11 version will be fixed.
>
>
>
>
>
> > diff --git a/doc/guides/prog_guide/index.rst
> > b/doc/guides/prog_guide/index.rst index 2dce507f46..df8a4b93e1 100644
> > --- a/doc/guides/prog_guide/index.rst
> > +++ b/doc/guides/prog_guide/index.rst
> > @@ -71,3 +71,4 @@ Programmer's Guide
> > lto
> > profile_app
> > glossary
> > + asan
>
>
> The asan file should go before "glossary" and after "profile_app".
>
>
> > diff --git a/doc/guides/rel_notes/release_21_11.rst
> > b/doc/guides/rel_notes/release_21_11.rst
> > index 4c56cdfeaa..b6c4174dc6 100644
> > --- a/doc/guides/rel_notes/release_21_11.rst
> > +++ b/doc/guides/rel_notes/release_21_11.rst
> > @@ -159,6 +159,15 @@ New Features
> > * Added tests to verify tunnel header verification in IPsec inbound.
> > * Added tests to verify inner checksum.
> >
> > +* **Enable ASan for memory detector on DPDK.**
>
> Change to "**Enable ASan Address Sanitization.**"
>
>
> > +
> > + `AddressSanitizer
> > + <https://github.com/google/sanitizers/wiki/AddressSanitizer>`
> > + (ASan)
>
> This text should match the edited text above.
>
> John
>
@@ -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
+
+ 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.
@@ -5,6 +5,7 @@ API
Arm
armv7
armv8
+ASan
BAR
CRC
DCB
new file mode 100644
@@ -0,0 +1,35 @@
+.. Copyright (c) <2021>, Intel Corporation
+ All rights reserved.
+
+Memory error detect standard tool - AddressSanitizer(ASan)
+==========================================================
+
+`AddressSanitizer
+<https://github.com/google/sanitizers/wiki/AddressSanitizer>` (ASan)
+is a widely-used debugging tool to detect memory access errors.
+It helps 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+).
+
+Usage
+-----
+
+meson build
+^^^^^^^^^^^
+
+To enable ASan in meson build system, use following meson build command:
+
+Example usage::
+
+ gcc : meson build -Dbuildtype=debug -Db_sanitize=address
+ ninja -C build
+ clang: meson build -Dbuildtype=debug -Db_lundef=false -Db_sanitize=address
+ ninja -C build
+
+.. Note::
+
+ a) DPDK test has been completed in ubuntu18.04/ubuntu20.04/redhat8.3. To compile with gcc in
+ centos, libasan needs to be installed separately.
+ b) If the program uses cmdline, when a memory bug occurs, need to execute the "stty echo" command.
@@ -71,3 +71,4 @@ Programmer's Guide
lto
profile_app
glossary
+ asan
@@ -159,6 +159,15 @@ New Features
* Added tests to verify tunnel header verification in IPsec inbound.
* Added tests to verify inner checksum.
+* **Enable ASan for memory detector on DPDK.**
+
+ `AddressSanitizer
+ <https://github.com/google/sanitizers/wiki/AddressSanitizer>` (ASan)
+ is a widely-used debugging tool to detect memory access errors.
+ It helps 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.
+
Removed Items
-------------