[v12,7/7] kasan: don't run tests in async mode
diff mbox series

Message ID 20210208165617.9977-8-vincenzo.frascino@arm.com
State New, archived
Headers show
Series
  • arm64: ARMv8.5-A: MTE: Add async mode support
Related show

Commit Message

Vincenzo Frascino Feb. 8, 2021, 4:56 p.m. UTC
From: Andrey Konovalov <andreyknvl@google.com>

Asynchronous KASAN mode doesn't guarantee that a tag fault will be
detected immediately and causes tests to fail. Forbid running them
in asynchronous mode.

Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
---
 lib/test_kasan.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

kernel test robot Feb. 9, 2021, 6:32 a.m. UTC | #1
Hi Vincenzo,

I love your patch! Yet something to improve:

[auto build test ERROR on next-20210125]
[cannot apply to arm64/for-next/core xlnx/master arm/for-next soc/for-next kvmarm/next linus/master hnaz-linux-mm/master v5.11-rc6 v5.11-rc5 v5.11-rc4 v5.11-rc6]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Vincenzo-Frascino/arm64-ARMv8-5-A-MTE-Add-async-mode-support/20210209-080907
base:    59fa6a163ffabc1bf25c5e0e33899e268a96d3cc
config: powerpc64-randconfig-r033-20210209 (attached as .config)
compiler: powerpc-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/53907a0b15724b414ddd9201356f92e09571ef90
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Vincenzo-Frascino/arm64-ARMv8-5-A-MTE-Add-async-mode-support/20210209-080907
        git checkout 53907a0b15724b414ddd9201356f92e09571ef90
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=powerpc64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   powerpc-linux-ld: lib/test_kasan.o: in function `kasan_test_init':
   test_kasan.c:(.text+0x849a): undefined reference to `kasan_flag_async'
>> powerpc-linux-ld: test_kasan.c:(.text+0x84a2): undefined reference to `kasan_flag_async'
   powerpc-linux-ld: test_kasan.c:(.text+0x84e2): undefined reference to `kasan_flag_async'

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Vincenzo Frascino Feb. 9, 2021, 11:33 a.m. UTC | #2
On 2/9/21 6:32 AM, kernel test robot wrote:
> Hi Vincenzo,
> 
> I love your patch! Yet something to improve:
> 
> [auto build test ERROR on next-20210125]
> [cannot apply to arm64/for-next/core xlnx/master arm/for-next soc/for-next kvmarm/next linus/master hnaz-linux-mm/master v5.11-rc6 v5.11-rc5 v5.11-rc4 v5.11-rc6]

The patches are based on linux-next/akpm and since they depend on some patches
present on that tree, can be applied only on linux-next/akpm and linux-next/master.

The dependency is reported in the cover letter.

Thanks,
Vincenzo

> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch]
> 
> url:    https://github.com/0day-ci/linux/commits/Vincenzo-Frascino/arm64-ARMv8-5-A-MTE-Add-async-mode-support/20210209-080907
> base:    59fa6a163ffabc1bf25c5e0e33899e268a96d3cc
> config: powerpc64-randconfig-r033-20210209 (attached as .config)
> compiler: powerpc-linux-gcc (GCC) 9.3.0
> reproduce (this is a W=1 build):
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>         chmod +x ~/bin/make.cross
>         # https://github.com/0day-ci/linux/commit/53907a0b15724b414ddd9201356f92e09571ef90
>         git remote add linux-review https://github.com/0day-ci/linux
>         git fetch --no-tags linux-review Vincenzo-Frascino/arm64-ARMv8-5-A-MTE-Add-async-mode-support/20210209-080907
>         git checkout 53907a0b15724b414ddd9201356f92e09571ef90
>         # save the attached .config to linux build tree
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=powerpc64 
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> 
> All errors (new ones prefixed by >>):
> 
>    powerpc-linux-ld: lib/test_kasan.o: in function `kasan_test_init':
>    test_kasan.c:(.text+0x849a): undefined reference to `kasan_flag_async'
>>> powerpc-linux-ld: test_kasan.c:(.text+0x84a2): undefined reference to `kasan_flag_async'
>    powerpc-linux-ld: test_kasan.c:(.text+0x84e2): undefined reference to `kasan_flag_async'
> 
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
>
Catalin Marinas Feb. 9, 2021, 12:02 p.m. UTC | #3
On Mon, Feb 08, 2021 at 04:56:17PM +0000, Vincenzo Frascino wrote:
> From: Andrey Konovalov <andreyknvl@google.com>
> 
> Asynchronous KASAN mode doesn't guarantee that a tag fault will be
> detected immediately and causes tests to fail. Forbid running them
> in asynchronous mode.
> 
> Signed-off-by: Andrey Konovalov <andreyknvl@google.com>

That's missing your SoB.

> diff --git a/lib/test_kasan.c b/lib/test_kasan.c
> index 7285dcf9fcc1..f82d9630cae1 100644
> --- a/lib/test_kasan.c
> +++ b/lib/test_kasan.c
> @@ -51,6 +51,10 @@ static int kasan_test_init(struct kunit *test)
>  		kunit_err(test, "can't run KASAN tests with KASAN disabled");
>  		return -1;
>  	}
> +	if (kasan_flag_async) {
> +		kunit_err(test, "can't run KASAN tests in async mode");
> +		return -1;
> +	}
>  
>  	multishot = kasan_save_enable_multi_shot();
>  	hw_set_tagging_report_once(false);

I think we can still run the kasan tests in async mode if we check the
TFSR_EL1 at the end of each test by calling mte_check_tfsr_exit().
Vincenzo Frascino Feb. 9, 2021, 12:20 p.m. UTC | #4
On 2/9/21 12:02 PM, Catalin Marinas wrote:
> On Mon, Feb 08, 2021 at 04:56:17PM +0000, Vincenzo Frascino wrote:
>> From: Andrey Konovalov <andreyknvl@google.com>
>>
>> Asynchronous KASAN mode doesn't guarantee that a tag fault will be
>> detected immediately and causes tests to fail. Forbid running them
>> in asynchronous mode.
>>
>> Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
> 
> That's missing your SoB.
>

Yes, I will add it in the next iteration.

>> diff --git a/lib/test_kasan.c b/lib/test_kasan.c
>> index 7285dcf9fcc1..f82d9630cae1 100644
>> --- a/lib/test_kasan.c
>> +++ b/lib/test_kasan.c
>> @@ -51,6 +51,10 @@ static int kasan_test_init(struct kunit *test)
>>  		kunit_err(test, "can't run KASAN tests with KASAN disabled");
>>  		return -1;
>>  	}
>> +	if (kasan_flag_async) {
>> +		kunit_err(test, "can't run KASAN tests in async mode");
>> +		return -1;
>> +	}
>>  
>>  	multishot = kasan_save_enable_multi_shot();
>>  	hw_set_tagging_report_once(false);
> 
> I think we can still run the kasan tests in async mode if we check the
> TFSR_EL1 at the end of each test by calling mte_check_tfsr_exit().
> 

IIUC this was the plan for the future. But I let Andrey comment for more details.
Andrey Konovalov Feb. 9, 2021, 3:02 p.m. UTC | #5
On Tue, Feb 9, 2021 at 1:16 PM Vincenzo Frascino
<vincenzo.frascino@arm.com> wrote:
>
>
>
> On 2/9/21 12:02 PM, Catalin Marinas wrote:
> > On Mon, Feb 08, 2021 at 04:56:17PM +0000, Vincenzo Frascino wrote:
> >> From: Andrey Konovalov <andreyknvl@google.com>
> >>
> >> Asynchronous KASAN mode doesn't guarantee that a tag fault will be
> >> detected immediately and causes tests to fail. Forbid running them
> >> in asynchronous mode.
> >>
> >> Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
> >
> > That's missing your SoB.
> >
>
> Yes, I will add it in the next iteration.
>
> >> diff --git a/lib/test_kasan.c b/lib/test_kasan.c
> >> index 7285dcf9fcc1..f82d9630cae1 100644
> >> --- a/lib/test_kasan.c
> >> +++ b/lib/test_kasan.c
> >> @@ -51,6 +51,10 @@ static int kasan_test_init(struct kunit *test)
> >>              kunit_err(test, "can't run KASAN tests with KASAN disabled");
> >>              return -1;
> >>      }
> >> +    if (kasan_flag_async) {
> >> +            kunit_err(test, "can't run KASAN tests in async mode");
> >> +            return -1;
> >> +    }
> >>
> >>      multishot = kasan_save_enable_multi_shot();
> >>      hw_set_tagging_report_once(false);
> >
> > I think we can still run the kasan tests in async mode if we check the
> > TFSR_EL1 at the end of each test by calling mte_check_tfsr_exit().
> >
>
> IIUC this was the plan for the future. But I let Andrey comment for more details.

If it's possible to implement, then it would be good to have. Doesn't
have to be a part of this series though.
Catalin Marinas Feb. 9, 2021, 5:06 p.m. UTC | #6
On Tue, Feb 09, 2021 at 04:02:25PM +0100, Andrey Konovalov wrote:
> On Tue, Feb 9, 2021 at 1:16 PM Vincenzo Frascino
> <vincenzo.frascino@arm.com> wrote:
> > On 2/9/21 12:02 PM, Catalin Marinas wrote:
> > > On Mon, Feb 08, 2021 at 04:56:17PM +0000, Vincenzo Frascino wrote:
> > >> diff --git a/lib/test_kasan.c b/lib/test_kasan.c
> > >> index 7285dcf9fcc1..f82d9630cae1 100644
> > >> --- a/lib/test_kasan.c
> > >> +++ b/lib/test_kasan.c
> > >> @@ -51,6 +51,10 @@ static int kasan_test_init(struct kunit *test)
> > >>              kunit_err(test, "can't run KASAN tests with KASAN disabled");
> > >>              return -1;
> > >>      }
> > >> +    if (kasan_flag_async) {
> > >> +            kunit_err(test, "can't run KASAN tests in async mode");
> > >> +            return -1;
> > >> +    }
> > >>
> > >>      multishot = kasan_save_enable_multi_shot();
> > >>      hw_set_tagging_report_once(false);
> > >
> > > I think we can still run the kasan tests in async mode if we check the
> > > TFSR_EL1 at the end of each test by calling mte_check_tfsr_exit().
> > >
> >
> > IIUC this was the plan for the future. But I let Andrey comment for more details.
> 
> If it's possible to implement, then it would be good to have. Doesn't
> have to be a part of this series though.

I think it can be part of this series but after the 5.12 merging window
(we are a few days away from final 5.11 and I don't think we should
rush the MTE kernel async support in).

It would be nice to have the kasan tests running with async by the time
we merge the patches (at a quick look, I think it's possible but, of
course, we may hit some blockers when implementing it).
Andrey Konovalov Feb. 9, 2021, 5:26 p.m. UTC | #7
On Tue, Feb 9, 2021 at 6:07 PM Catalin Marinas <catalin.marinas@arm.com> wrote:
>
> On Tue, Feb 09, 2021 at 04:02:25PM +0100, Andrey Konovalov wrote:
> > On Tue, Feb 9, 2021 at 1:16 PM Vincenzo Frascino
> > <vincenzo.frascino@arm.com> wrote:
> > > On 2/9/21 12:02 PM, Catalin Marinas wrote:
> > > > On Mon, Feb 08, 2021 at 04:56:17PM +0000, Vincenzo Frascino wrote:
> > > >> diff --git a/lib/test_kasan.c b/lib/test_kasan.c
> > > >> index 7285dcf9fcc1..f82d9630cae1 100644
> > > >> --- a/lib/test_kasan.c
> > > >> +++ b/lib/test_kasan.c
> > > >> @@ -51,6 +51,10 @@ static int kasan_test_init(struct kunit *test)
> > > >>              kunit_err(test, "can't run KASAN tests with KASAN disabled");
> > > >>              return -1;
> > > >>      }
> > > >> +    if (kasan_flag_async) {
> > > >> +            kunit_err(test, "can't run KASAN tests in async mode");
> > > >> +            return -1;
> > > >> +    }
> > > >>
> > > >>      multishot = kasan_save_enable_multi_shot();
> > > >>      hw_set_tagging_report_once(false);
> > > >
> > > > I think we can still run the kasan tests in async mode if we check the
> > > > TFSR_EL1 at the end of each test by calling mte_check_tfsr_exit().
> > > >
> > >
> > > IIUC this was the plan for the future. But I let Andrey comment for more details.
> >
> > If it's possible to implement, then it would be good to have. Doesn't
> > have to be a part of this series though.
>
> I think it can be part of this series but after the 5.12 merging window
> (we are a few days away from final 5.11 and I don't think we should
> rush the MTE kernel async support in).
>
> It would be nice to have the kasan tests running with async by the time
> we merge the patches (at a quick look, I think it's possible but, of
> course, we may hit some blockers when implementing it).

OK, sounds good.

If it's possible to put an explicit check for tag faults at the end of
each test, then adding async support shouldn't be hard.

Note, that some of the tests trigger bugs that are detected via
explicit checks within KASAN. For example, KASAN checks that a pointer
that's being freed points to a start of a slab object, or that the
object is accessible when it gets freed, etc. I don't see this being a
problem, so just FYI.

Thanks!
Vincenzo Frascino Feb. 9, 2021, 5:37 p.m. UTC | #8
Hi Andrey,

On 2/9/21 5:26 PM, Andrey Konovalov wrote:
> On Tue, Feb 9, 2021 at 6:07 PM Catalin Marinas <catalin.marinas@arm.com> wrote:
>>
>> On Tue, Feb 09, 2021 at 04:02:25PM +0100, Andrey Konovalov wrote:
>>> On Tue, Feb 9, 2021 at 1:16 PM Vincenzo Frascino
>>> <vincenzo.frascino@arm.com> wrote:
>>>> On 2/9/21 12:02 PM, Catalin Marinas wrote:
>>>>> On Mon, Feb 08, 2021 at 04:56:17PM +0000, Vincenzo Frascino wrote:
>>>>>> diff --git a/lib/test_kasan.c b/lib/test_kasan.c
>>>>>> index 7285dcf9fcc1..f82d9630cae1 100644
>>>>>> --- a/lib/test_kasan.c
>>>>>> +++ b/lib/test_kasan.c
>>>>>> @@ -51,6 +51,10 @@ static int kasan_test_init(struct kunit *test)
>>>>>>              kunit_err(test, "can't run KASAN tests with KASAN disabled");
>>>>>>              return -1;
>>>>>>      }
>>>>>> +    if (kasan_flag_async) {
>>>>>> +            kunit_err(test, "can't run KASAN tests in async mode");
>>>>>> +            return -1;
>>>>>> +    }
>>>>>>
>>>>>>      multishot = kasan_save_enable_multi_shot();
>>>>>>      hw_set_tagging_report_once(false);
>>>>>
>>>>> I think we can still run the kasan tests in async mode if we check the
>>>>> TFSR_EL1 at the end of each test by calling mte_check_tfsr_exit().
>>>>>
>>>>
>>>> IIUC this was the plan for the future. But I let Andrey comment for more details.
>>>
>>> If it's possible to implement, then it would be good to have. Doesn't
>>> have to be a part of this series though.
>>
>> I think it can be part of this series but after the 5.12 merging window
>> (we are a few days away from final 5.11 and I don't think we should
>> rush the MTE kernel async support in).
>>
>> It would be nice to have the kasan tests running with async by the time
>> we merge the patches (at a quick look, I think it's possible but, of
>> course, we may hit some blockers when implementing it).
> 
> OK, sounds good.
> 
> If it's possible to put an explicit check for tag faults at the end of
> each test, then adding async support shouldn't be hard.
> 
> Note, that some of the tests trigger bugs that are detected via
> explicit checks within KASAN. For example, KASAN checks that a pointer
> that's being freed points to a start of a slab object, or that the
> object is accessible when it gets freed, etc. I don't see this being a
> problem, so just FYI.
> 

Once you have your patches ready please send them to me and I will repost
another version. In the meantime I will address the remaining comments.

> Thanks!
>
Rong Chen Feb. 10, 2021, 6:33 a.m. UTC | #9
On 2/9/21 7:33 PM, Vincenzo Frascino wrote:
>
> On 2/9/21 6:32 AM, kernel test robot wrote:
>> Hi Vincenzo,
>>
>> I love your patch! Yet something to improve:
>>
>> [auto build test ERROR on next-20210125]
>> [cannot apply to arm64/for-next/core xlnx/master arm/for-next soc/for-next kvmarm/next linus/master hnaz-linux-mm/master v5.11-rc6 v5.11-rc5 v5.11-rc4 v5.11-rc6]
> The patches are based on linux-next/akpm and since they depend on some patches
> present on that tree, can be applied only on linux-next/akpm and linux-next/master.
>
> The dependency is reported in the cover letter.

Hi Vincenzo,

Thanks for the feedback, we'll take a look.

Best Regards,
Rong Chen

>
> Thanks,
> Vincenzo
>
>> [If your patch is applied to the wrong git tree, kindly drop us a note.
>> And when submitting patch, we suggest to use '--base' as documented in
>> https://git-scm.com/docs/git-format-patch]
>>
>> url:    https://github.com/0day-ci/linux/commits/Vincenzo-Frascino/arm64-ARMv8-5-A-MTE-Add-async-mode-support/20210209-080907
>> base:    59fa6a163ffabc1bf25c5e0e33899e268a96d3cc
>> config: powerpc64-randconfig-r033-20210209 (attached as .config)
>> compiler: powerpc-linux-gcc (GCC) 9.3.0
>> reproduce (this is a W=1 build):
>>          wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
>>          chmod +x ~/bin/make.cross
>>          # https://github.com/0day-ci/linux/commit/53907a0b15724b414ddd9201356f92e09571ef90
>>          git remote add linux-review https://github.com/0day-ci/linux
>>          git fetch --no-tags linux-review Vincenzo-Frascino/arm64-ARMv8-5-A-MTE-Add-async-mode-support/20210209-080907
>>          git checkout 53907a0b15724b414ddd9201356f92e09571ef90
>>          # save the attached .config to linux build tree
>>          COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=powerpc64
>>
>> If you fix the issue, kindly add following tag as appropriate
>> Reported-by: kernel test robot <lkp@intel.com>
>>
>> All errors (new ones prefixed by >>):
>>
>>     powerpc-linux-ld: lib/test_kasan.o: in function `kasan_test_init':
>>     test_kasan.c:(.text+0x849a): undefined reference to `kasan_flag_async'
>>>> powerpc-linux-ld: test_kasan.c:(.text+0x84a2): undefined reference to `kasan_flag_async'
>>     powerpc-linux-ld: test_kasan.c:(.text+0x84e2): undefined reference to `kasan_flag_async'
>>
>> ---
>> 0-DAY CI Kernel Test Service, Intel Corporation
>> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
>>

Patch
diff mbox series

diff --git a/lib/test_kasan.c b/lib/test_kasan.c
index 7285dcf9fcc1..f82d9630cae1 100644
--- a/lib/test_kasan.c
+++ b/lib/test_kasan.c
@@ -51,6 +51,10 @@  static int kasan_test_init(struct kunit *test)
 		kunit_err(test, "can't run KASAN tests with KASAN disabled");
 		return -1;
 	}
+	if (kasan_flag_async) {
+		kunit_err(test, "can't run KASAN tests in async mode");
+		return -1;
+	}
 
 	multishot = kasan_save_enable_multi_shot();
 	hw_set_tagging_report_once(false);