[{"id":26141,"web_url":"https://patchwork.libcamera.org/comment/26141/","msgid":"<a35ac0bc-5b99-8417-1c4c-953576bacc95@ideasonboard.com>","date":"2022-12-23T16:39:56","subject":"Re: [libcamera-devel] [PATCH v1 2/4] test: v4l2_compat: Enable test\n\twith ASan","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi Laurent\n\nThank you for this patch\n\nOn 12/22/22 6:31 AM, Laurent Pinchart via libcamera-devel wrote:\n> When libcamera is compiled with the address sanitizer enabled, the\n> v4l2_compat test generates failures in the link order runtime check, as\n> the host v4l2-ctl and v4l2-compliance tools are not (generally) linked\n> to ASan. For this reason, the test is disabled, which sadly shrinks test\n> coverage.\n>\n> Fix this by loading the ASan runtime using LD_PRELOAD. This needs to be\n> done from within the v4l2_compat_test.py Python script, as the Python\n> interpreter itself leaks memory and would cause test failures if run\n> with ASan.\n>\n> To LD_PRELOAD the ASan runtime, the path to the binary needs to be\n> known. gcc gives us a generic way to get the path, but that doesn't work\n> with clang as the ASan runtime file name depends on the clang version\n> and target architecture. We thus have to keep the v4l2_compat test\n> disabled with ASan is enabled and libcamera is compiled with clang.\ns/disabled with ASan/disabled when ASan/  probably?\n\nOh dear - quite a case to deal with`\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>   test/meson.build                     | 16 ++++++++++++++++\n>   test/v4l2_compat/meson.build         | 21 ++++++++++++++-------\n>   test/v4l2_compat/v4l2_compat_test.py | 18 +++++++++++++-----\n>   3 files changed, 43 insertions(+), 12 deletions(-)\n>\n> diff --git a/test/meson.build b/test/meson.build\n> index 05a54d5cad2f..19726f37421d 100644\n> --- a/test/meson.build\n> +++ b/test/meson.build\n> @@ -7,6 +7,22 @@ endif\n>   \n>   test_enabled = true\n>   \n> +# When ASan is enabled, find the path to the ASan runtime needed by multiple\n> +# tests. This currently works with gcc only, as clang uses different file names\n> +# depending on the compiler version and target architecture.\n> +asan_enabled = false\n> +asan_runtime_missing = false\n> +\n> +if get_option('b_sanitize').contains('address')\n> +    asan_enabled = true\n> +\n> +    if cc.get_id() == 'gcc'\n> +        asan_runtime = run_command(cc, '-print-file-name=libasan.so', check : true).stdout().strip()\n> +    else\n> +        asan_runtime_missing = true\n> +    endif\n> +endif\n> +\n>   subdir('libtest')\n>   \n>   subdir('camera')\n> diff --git a/test/v4l2_compat/meson.build b/test/v4l2_compat/meson.build\n> index 10c4675286b3..da2e7a6d9045 100644\n> --- a/test/v4l2_compat/meson.build\n> +++ b/test/v4l2_compat/meson.build\n> @@ -4,19 +4,26 @@ if not is_variable('v4l2_compat')\n>       subdir_done()\n>   endif\n>   \n> -# If ASan is enabled, the link order runtime check will fail as v4l2-ctl and\n> -# v4l2-compliance are not linked to ASan. Skip the test in that case.\n> -#\n> -# TODO: Find a way to LD_PRELOAD the ASan dynamic library instead, in a\n> -# cross-platform way with support for both gcc and clang.\n> +# If ASan is enabled but the ASan runtime shared library missing,\n> +# v4l2_compat_test.py won't be able to LD_PRELOAD it, resulting in a link order\n> +# runtime check failure as v4l2-ctl and v4l2-compliance are not linked to ASan.\n> +# Skip the test in that case.\n>   \n> -if get_option('b_sanitize').contains('address')\n> +if asan_runtime_missing\n> +    warning('Unable to get path to ASan runtime, v4l2_compat test disabled')\n>       subdir_done()\n>   endif\n>   \n>   v4l2_compat_test = files('v4l2_compat_test.py')\n> +v4l2_compat_args = []\n> +\n> +if asan_enabled\n> +    v4l2_compat_args += ['-s', asan_runtime]\n> +endif\n> +\n> +v4l2_compat_args += [v4l2_compat]\n>   \n>   test('v4l2_compat_test', v4l2_compat_test,\n> -     args : v4l2_compat,\n> +     args : v4l2_compat_args,\n>        suite : 'v4l2_compat',\n>        timeout : 60)\n\nLooks good till here, taking a break to review the python diffs below\n> diff --git a/test/v4l2_compat/v4l2_compat_test.py b/test/v4l2_compat/v4l2_compat_test.py\n> index a77585fc2f49..bd89d4962c16 100755\n> --- a/test/v4l2_compat/v4l2_compat_test.py\n> +++ b/test/v4l2_compat/v4l2_compat_test.py\n> @@ -57,8 +57,8 @@ def extract_result(result):\n>       return ret\n>   \n>   \n> -def test_v4l2_compliance(v4l2_compliance, v4l2_compat, device, base_driver):\n> -    ret, output = run_with_stdout(v4l2_compliance, '-s', '-d', device, env={'LD_PRELOAD': v4l2_compat})\n> +def test_v4l2_compliance(v4l2_compliance, ld_preload, device, base_driver):\n> +    ret, output = run_with_stdout(v4l2_compliance, '-s', '-d', device, env={'LD_PRELOAD': ld_preload})\n>       if ret < 0:\n>           output.append(f'Test for {device} terminated due to signal {signal.Signals(-ret).name}')\n>           return TestFail, output\n> @@ -82,13 +82,21 @@ def main(argv):\n>       parser = argparse.ArgumentParser()\n>       parser.add_argument('-a', '--all', action='store_true',\n>                           help='Test all available cameras')\n> +    parser.add_argument('-s', '--sanitizer', type=str,\n> +                        help='Path to the address sanitizer (ASan) runtime')\n>       parser.add_argument('-v', '--verbose', action='store_true',\n>                           help='Make the output verbose')\n>       parser.add_argument('v4l2_compat', type=str,\n>                           help='Path to v4l2-compat.so')\n>       args = parser.parse_args(argv[1:])\n>   \n> -    v4l2_compat = args.v4l2_compat\n> +    # Compute the LD_PRELOAD value by first loading ASan (if specified) and\n> +    # then the V4L2 compat layer.\n> +    ld_preload = []\n> +    if args.sanitizer:\n> +        ld_preload.append(args.sanitizer)\n> +    ld_preload.append(args.v4l2_compat)\n> +    ld_preload = ':'.join(ld_preload)\n>   \n>       v4l2_compliance = shutil.which('v4l2-compliance')\n>       if v4l2_compliance is None:\n> @@ -118,7 +126,7 @@ def main(argv):\n>       failed = []\n>       drivers_tested = {}\n>       for device in dev_nodes:\n> -        ret, out = run_with_stdout(v4l2_ctl, '-D', '-d', device, env={'LD_PRELOAD': v4l2_compat})\n> +        ret, out = run_with_stdout(v4l2_ctl, '-D', '-d', device, env={'LD_PRELOAD': ld_preload})\n>           if ret < 0:\n>               failed.append(device)\n>               print(f'v4l2-ctl failed on {device} with v4l2-compat')\n> @@ -144,7 +152,7 @@ def main(argv):\n>               continue\n>   \n>           print(f'Testing {device} with {driver} driver... ', end='')\n> -        ret, msg = test_v4l2_compliance(v4l2_compliance, v4l2_compat, device, driver)\n> +        ret, msg = test_v4l2_compliance(v4l2_compliance, ld_preload, device, driver)\n>           if ret == TestFail:\n>               failed.append(device)\n>               print('failed')\n\nLooks good to me and adequately  documented\n\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 7D837C3200\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 23 Dec 2022 16:40:05 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CA29B623AF;\n\tFri, 23 Dec 2022 17:40:04 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 507B962398\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 23 Dec 2022 17:40:03 +0100 (CET)","from [IPV6:2401:4900:1f3f:cd5d:4e48:3b91:9262:9565] (unknown\n\t[IPv6:2401:4900:1f3f:cd5d:4e48:3b91:9262:9565])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id E4405492;\n\tFri, 23 Dec 2022 17:40:01 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1671813604;\n\tbh=h8jdKQcC0KGV553YtLpHpl6M+Y1/pM1UK2paXiGkh2Q=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=sHbKdVckW7A2AoGzEvAUkJSHZyxTwO7qL/wHV7HJPs7D1bUZj1dhsFFf1X5vwJ0Zq\n\tZMNyKNgueRwR3wX466cZSNZNaPmXo7u5QiihGqB8+lyiM98ziWqdncV8ExQtJsdAJo\n\t0vl+E259ctIhYi0OiB3E7hqPJ7rR+3PK9oRkTccTZE5RfX/mMMqMxVI7DmgkzLpVEY\n\teiqQa7Tyx0Xr/eq4Hl81s1qs4JeSFfHLNLBxSmvr4GAldYzmv6TAWGQ1a7EbDolqcs\n\t20a8vtGYKtb6ks7OjiaoMT958TRIH+tDcHhRMdMFbdBbR4L39FQpJ+uMp8vXLTdKsP\n\tGjJBli0ujsUkA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1671813602;\n\tbh=h8jdKQcC0KGV553YtLpHpl6M+Y1/pM1UK2paXiGkh2Q=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=pdlX3lyKPbdLonhFyQCtBkdiZGjNSmXNE8DosBrQm7zwyaD8TCkC4EPKKfnzUjdwI\n\tYNkBqcn3g4TQQ7yvqM7cJMuRsXN5C1G8fDQjWGDtC1Jsz2vd/NW13lysz0tJBReFdQ\n\t0xmoaWEJs3EQzY0suQHL4WNFSkbF+qudiyyt0R1E="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"pdlX3lyK\"; dkim-atps=neutral","Message-ID":"<a35ac0bc-5b99-8417-1c4c-953576bacc95@ideasonboard.com>","Date":"Fri, 23 Dec 2022 22:09:56 +0530","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101\n\tThunderbird/102.5.1","Content-Language":"en-US","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20221222010132.22177-1-laurent.pinchart@ideasonboard.com>\n\t<20221222010132.22177-3-laurent.pinchart@ideasonboard.com>","In-Reply-To":"<20221222010132.22177-3-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH v1 2/4] test: v4l2_compat: Enable test\n\twith ASan","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Umang Jain via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Umang Jain <umang.jain@ideasonboard.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":26149,"web_url":"https://patchwork.libcamera.org/comment/26149/","msgid":"<Y6ZFZ5NsnC6XQPdw@pyrite.rasen.tech>","date":"2022-12-24T00:18:47","subject":"Re: [libcamera-devel] [PATCH v1 2/4] test: v4l2_compat: Enable test\n\twith ASan","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"On Thu, Dec 22, 2022 at 03:01:30AM +0200, Laurent Pinchart via libcamera-devel wrote:\n> When libcamera is compiled with the address sanitizer enabled, the\n> v4l2_compat test generates failures in the link order runtime check, as\n> the host v4l2-ctl and v4l2-compliance tools are not (generally) linked\n> to ASan. For this reason, the test is disabled, which sadly shrinks test\n> coverage.\n> \n> Fix this by loading the ASan runtime using LD_PRELOAD. This needs to be\n> done from within the v4l2_compat_test.py Python script, as the Python\n> interpreter itself leaks memory and would cause test failures if run\n> with ASan.\n> \n> To LD_PRELOAD the ASan runtime, the path to the binary needs to be\n> known. gcc gives us a generic way to get the path, but that doesn't work\n> with clang as the ASan runtime file name depends on the clang version\n> and target architecture. We thus have to keep the v4l2_compat test\n> disabled with ASan is enabled and libcamera is compiled with clang.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  test/meson.build                     | 16 ++++++++++++++++\n>  test/v4l2_compat/meson.build         | 21 ++++++++++++++-------\n>  test/v4l2_compat/v4l2_compat_test.py | 18 +++++++++++++-----\n>  3 files changed, 43 insertions(+), 12 deletions(-)\n> \n> diff --git a/test/meson.build b/test/meson.build\n> index 05a54d5cad2f..19726f37421d 100644\n> --- a/test/meson.build\n> +++ b/test/meson.build\n> @@ -7,6 +7,22 @@ endif\n>  \n>  test_enabled = true\n>  \n> +# When ASan is enabled, find the path to the ASan runtime needed by multiple\n> +# tests. This currently works with gcc only, as clang uses different file names\n> +# depending on the compiler version and target architecture.\n> +asan_enabled = false\n> +asan_runtime_missing = false\n> +\n> +if get_option('b_sanitize').contains('address')\n> +    asan_enabled = true\n> +\n> +    if cc.get_id() == 'gcc'\n> +        asan_runtime = run_command(cc, '-print-file-name=libasan.so', check : true).stdout().strip()\n> +    else\n> +        asan_runtime_missing = true\n> +    endif\n> +endif\n> +\n>  subdir('libtest')\n>  \n>  subdir('camera')\n> diff --git a/test/v4l2_compat/meson.build b/test/v4l2_compat/meson.build\n> index 10c4675286b3..da2e7a6d9045 100644\n> --- a/test/v4l2_compat/meson.build\n> +++ b/test/v4l2_compat/meson.build\n> @@ -4,19 +4,26 @@ if not is_variable('v4l2_compat')\n>      subdir_done()\n>  endif\n>  \n> -# If ASan is enabled, the link order runtime check will fail as v4l2-ctl and\n> -# v4l2-compliance are not linked to ASan. Skip the test in that case.\n> -#\n> -# TODO: Find a way to LD_PRELOAD the ASan dynamic library instead, in a\n> -# cross-platform way with support for both gcc and clang.\n> +# If ASan is enabled but the ASan runtime shared library missing,\n\ns/missing/is missing/\n\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> +# v4l2_compat_test.py won't be able to LD_PRELOAD it, resulting in a link order\n> +# runtime check failure as v4l2-ctl and v4l2-compliance are not linked to ASan.\n> +# Skip the test in that case.\n>  \n> -if get_option('b_sanitize').contains('address')\n> +if asan_runtime_missing\n> +    warning('Unable to get path to ASan runtime, v4l2_compat test disabled')\n>      subdir_done()\n>  endif\n>  \n>  v4l2_compat_test = files('v4l2_compat_test.py')\n> +v4l2_compat_args = []\n> +\n> +if asan_enabled\n> +    v4l2_compat_args += ['-s', asan_runtime]\n> +endif\n> +\n> +v4l2_compat_args += [v4l2_compat]\n>  \n>  test('v4l2_compat_test', v4l2_compat_test,\n> -     args : v4l2_compat,\n> +     args : v4l2_compat_args,\n>       suite : 'v4l2_compat',\n>       timeout : 60)\n> diff --git a/test/v4l2_compat/v4l2_compat_test.py b/test/v4l2_compat/v4l2_compat_test.py\n> index a77585fc2f49..bd89d4962c16 100755\n> --- a/test/v4l2_compat/v4l2_compat_test.py\n> +++ b/test/v4l2_compat/v4l2_compat_test.py\n> @@ -57,8 +57,8 @@ def extract_result(result):\n>      return ret\n>  \n>  \n> -def test_v4l2_compliance(v4l2_compliance, v4l2_compat, device, base_driver):\n> -    ret, output = run_with_stdout(v4l2_compliance, '-s', '-d', device, env={'LD_PRELOAD': v4l2_compat})\n> +def test_v4l2_compliance(v4l2_compliance, ld_preload, device, base_driver):\n> +    ret, output = run_with_stdout(v4l2_compliance, '-s', '-d', device, env={'LD_PRELOAD': ld_preload})\n>      if ret < 0:\n>          output.append(f'Test for {device} terminated due to signal {signal.Signals(-ret).name}')\n>          return TestFail, output\n> @@ -82,13 +82,21 @@ def main(argv):\n>      parser = argparse.ArgumentParser()\n>      parser.add_argument('-a', '--all', action='store_true',\n>                          help='Test all available cameras')\n> +    parser.add_argument('-s', '--sanitizer', type=str,\n> +                        help='Path to the address sanitizer (ASan) runtime')\n>      parser.add_argument('-v', '--verbose', action='store_true',\n>                          help='Make the output verbose')\n>      parser.add_argument('v4l2_compat', type=str,\n>                          help='Path to v4l2-compat.so')\n>      args = parser.parse_args(argv[1:])\n>  \n> -    v4l2_compat = args.v4l2_compat\n> +    # Compute the LD_PRELOAD value by first loading ASan (if specified) and\n> +    # then the V4L2 compat layer.\n> +    ld_preload = []\n> +    if args.sanitizer:\n> +        ld_preload.append(args.sanitizer)\n> +    ld_preload.append(args.v4l2_compat)\n> +    ld_preload = ':'.join(ld_preload)\n>  \n>      v4l2_compliance = shutil.which('v4l2-compliance')\n>      if v4l2_compliance is None:\n> @@ -118,7 +126,7 @@ def main(argv):\n>      failed = []\n>      drivers_tested = {}\n>      for device in dev_nodes:\n> -        ret, out = run_with_stdout(v4l2_ctl, '-D', '-d', device, env={'LD_PRELOAD': v4l2_compat})\n> +        ret, out = run_with_stdout(v4l2_ctl, '-D', '-d', device, env={'LD_PRELOAD': ld_preload})\n>          if ret < 0:\n>              failed.append(device)\n>              print(f'v4l2-ctl failed on {device} with v4l2-compat')\n> @@ -144,7 +152,7 @@ def main(argv):\n>              continue\n>  \n>          print(f'Testing {device} with {driver} driver... ', end='')\n> -        ret, msg = test_v4l2_compliance(v4l2_compliance, v4l2_compat, device, driver)\n> +        ret, msg = test_v4l2_compliance(v4l2_compliance, ld_preload, device, driver)\n>          if ret == TestFail:\n>              failed.append(device)\n>              print('failed')","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id E3635C3200\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 24 Dec 2022 00:18:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 564A5623AF;\n\tSat, 24 Dec 2022 01:18:56 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 581B761507\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 24 Dec 2022 01:18:54 +0100 (CET)","from pyrite.rasen.tech (unknown\n\t[IPv6:2604:2d80:ad8a:9000:1bf9:855b:22de:3645])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 276A64DD;\n\tSat, 24 Dec 2022 01:18:52 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1671841136;\n\tbh=6SNIcIY1J2tSe0sjkdIcNslZmSUfsL4RshVvlYsJEzE=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=O8/v4Iso4X0u7LMi0SODrXdeesd3ysGbVqDEnEv0qCj61jnVNsfk4bG68kjQo3aGY\n\tZdCVyMvLPn2dW6pS3OBensZlLJQOI2yWbEvERKchZQxoZ87VDJCMbSOqHGq/OqEsiv\n\tDIQHyQW51mSIqmHlIhezCzNkUfRu4/b00ugPzQLOvh5Ik4iEP4V7wk7/0YlYds1kix\n\t/6DNnw3ZlkQdPU5mcFkz35vsfeuR+/gT6ZPZIQaaIs1Z0LkEUlb8Zghfhaa9ZdpOQO\n\t34PTmK8QbdbXZggS8hL7Gk7KqlkzQXwV9KF132b8bpXCK8Xi6yWwcq+ZUD6LjHl5AY\n\tkeYRjyUG+9Rwg==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1671841133;\n\tbh=6SNIcIY1J2tSe0sjkdIcNslZmSUfsL4RshVvlYsJEzE=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=bJaxf0egNb0vNpWU9bHMSLL4hN7jjteoHmTJ8UKR4p2gcL9KtTSUt7Jms+SbHDkqa\n\tm8/5TnaHp0GAtKNw9rIR64oPKRDvn3yegqzJlhV3pHnVj3D1TSw79Vmedstxoe8g9S\n\tEq8fnvEtWOCy6A1EK+hRwb1sFYaqCDym7HkubuaQ="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"bJaxf0eg\"; dkim-atps=neutral","Date":"Fri, 23 Dec 2022 18:18:47 -0600","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<Y6ZFZ5NsnC6XQPdw@pyrite.rasen.tech>","References":"<20221222010132.22177-1-laurent.pinchart@ideasonboard.com>\n\t<20221222010132.22177-3-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20221222010132.22177-3-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v1 2/4] test: v4l2_compat: Enable test\n\twith ASan","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Paul Elder via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Paul Elder <paul.elder@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]