diff mbox series

[1/7] selftests/resctrl: Ensure the benchmark commands fits to its array

Message ID 20230808091625.12760-2-ilpo.jarvinen@linux.intel.com (mailing list archive)
State New
Headers show
Series selftests/resctrl: Rework benchmark command handling | expand

Commit Message

Ilpo Järvinen Aug. 8, 2023, 9:16 a.m. UTC
Benchmark command is copied into an array in the stack. The array is
BENCHMARK_ARGS items long but the command line could try to provide a
longer command.

Return error in case the benchmark command does not fit to its array.

Fixes: ecdbb911f22d ("selftests/resctrl: Add MBM test")
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---
 tools/testing/selftests/resctrl/resctrl_tests.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Reinette Chatre Aug. 14, 2023, 5:48 p.m. UTC | #1
Hi Ilpo,

On 8/8/2023 2:16 AM, Ilpo Järvinen wrote:
> Benchmark command is copied into an array in the stack. The array is
> BENCHMARK_ARGS items long but the command line could try to provide a
> longer command.
> 
> Return error in case the benchmark command does not fit to its array.
> 
> Fixes: ecdbb911f22d ("selftests/resctrl: Add MBM test")
> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> ---
>  tools/testing/selftests/resctrl/resctrl_tests.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/tools/testing/selftests/resctrl/resctrl_tests.c b/tools/testing/selftests/resctrl/resctrl_tests.c
> index d511daeb6851..eef9e02516ad 100644
> --- a/tools/testing/selftests/resctrl/resctrl_tests.c
> +++ b/tools/testing/selftests/resctrl/resctrl_tests.c
> @@ -255,6 +255,9 @@ int main(int argc, char **argv)
>  		return ksft_exit_skip("Not running as root. Skipping...\n");
>  
>  	if (has_ben) {
> +		if (argc - ben_ind >= BENCHMARK_ARGS - 1)
> +			ksft_exit_fail_msg("Too long benchmark command");
> +

I think there are two potential issues here: too many arguments and too
long arguments. Current code can handle 64 (63 with last required to be
NULL) arguments each expected to be 64 bytes (63 to end with \0).
The above fix looks to be handling the first issue, with this the
error message could be more accurate if it refers to the
number of arguments instead. It looks to me as though the latter
issue still needs to be handled. I understand that this becomes 
unnecessary via the refactor in following patches but I expect that
this fix needs to be backported (cc. stable also) and thus
it may benefit from a precision added to the sprintf() that follows
the snippet below?

>  		/* Extract benchmark command from command line. */
>  		for (i = ben_ind; i < argc; i++) {
>  			benchmark_cmd[i - ben_ind] = benchmark_cmd_area[i];

Reinette

ps. Unless you have an updated email address that works, could you please
remove Sai's email from future submissions?
Ilpo Järvinen Aug. 15, 2023, 9:10 a.m. UTC | #2
On Mon, 14 Aug 2023, Reinette Chatre wrote:
> On 8/8/2023 2:16 AM, Ilpo Järvinen wrote:
> > Benchmark command is copied into an array in the stack. The array is
> > BENCHMARK_ARGS items long but the command line could try to provide a
> > longer command.
> > 
> > Return error in case the benchmark command does not fit to its array.
> > 
> > Fixes: ecdbb911f22d ("selftests/resctrl: Add MBM test")
> > Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> > ---
> >  tools/testing/selftests/resctrl/resctrl_tests.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/tools/testing/selftests/resctrl/resctrl_tests.c b/tools/testing/selftests/resctrl/resctrl_tests.c
> > index d511daeb6851..eef9e02516ad 100644
> > --- a/tools/testing/selftests/resctrl/resctrl_tests.c
> > +++ b/tools/testing/selftests/resctrl/resctrl_tests.c
> > @@ -255,6 +255,9 @@ int main(int argc, char **argv)
> >  		return ksft_exit_skip("Not running as root. Skipping...\n");
> >  
> >  	if (has_ben) {
> > +		if (argc - ben_ind >= BENCHMARK_ARGS - 1)
> > +			ksft_exit_fail_msg("Too long benchmark command");
> > +
> 
> I think there are two potential issues here: too many arguments and too
> long arguments. Current code can handle 64 (63 with last required to be
> NULL) arguments each expected to be 64 bytes (63 to end with \0).
> The above fix looks to be handling the first issue, with this the
> error message could be more accurate if it refers to the
> number of arguments instead. It looks to me as though the latter
> issue still needs to be handled. I understand that this becomes 
> unnecessary via the refactor in following patches but I expect that
> this fix needs to be backported (cc. stable also) and thus
> it may benefit from a precision added to the sprintf() that follows
> the snippet below?

Thanks for taking a look, yes, both are problems. Third problem which 
still remains is if "fill_buf" is the first argument of -b, the arguments 
are not validated to match the formatting used internally (I guess it 
might be intentional to allow overriding the internal fill_buf arguments 
but just the validation is lacking).

I'll add strlen() check instead of using sprintf() in order to properly 
fail rather than silently truncating the arguments.

> >  		/* Extract benchmark command from command line. */
> >  		for (i = ben_ind; i < argc; i++) {
> >  			benchmark_cmd[i - ben_ind] = benchmark_cmd_area[i];
> 
> Reinette
> 
> ps. Unless you have an updated email address that works, could you please
> remove Sai's email from future submissions?

It's auto-added by git send-email machinery. I guess I can try to make 
an exception to my usual workflow by sending only to manually specified To 
addresses (if I remember). Perhaps one day I'll write a tool to filter out
the addresses from git send-email generated ones but as is I don't have 
one.
Reinette Chatre Aug. 15, 2023, 3:47 p.m. UTC | #3
Hi Ilpo,

On 8/15/2023 2:10 AM, Ilpo Järvinen wrote:
>> ps. Unless you have an updated email address that works, could you please
>> remove Sai's email from future submissions?
> 
> It's auto-added by git send-email machinery. I guess I can try to make 
> an exception to my usual workflow by sending only to manually specified To 
> addresses (if I remember). Perhaps one day I'll write a tool to filter out
> the addresses from git send-email generated ones but as is I don't have 
> one.
> 

Which git send-email machinery are you referring to? If I understand correctly
it does not automatically pick addresses but you can provide custom commands to
it that can do it.

Reinette
Ilpo Järvinen Aug. 16, 2023, 6:32 a.m. UTC | #4
On Tue, 15 Aug 2023, Reinette Chatre wrote:
> On 8/15/2023 2:10 AM, Ilpo Järvinen wrote:
> >> ps. Unless you have an updated email address that works, could you please
> >> remove Sai's email from future submissions?
> > 
> > It's auto-added by git send-email machinery. I guess I can try to make 
> > an exception to my usual workflow by sending only to manually specified To 
> > addresses (if I remember). Perhaps one day I'll write a tool to filter out
> > the addresses from git send-email generated ones but as is I don't have 
> > one.
> > 
> 
> Which git send-email machinery are you referring to? If I understand correctly
> it does not automatically pick addresses but you can provide custom commands to
> it that can do it.

Ah sorry, it is actually scripts/get_maintainer.pl automation I use with 
git send-email to figure out where to send the patches besides the --to & 
--cc entries I provided. For this patch, get_maintainer.pl returns this 
list:

Fenghua Yu <fenghua.yu@intel.com> (supporter:RDT - RESOURCE ALLOCATION,blamed_fixes:1/1=100%)
Reinette Chatre <reinette.chatre@intel.com> (supporter:RDT - RESOURCE ALLOCATION)
Shuah Khan <shuah@kernel.org> (maintainer:KERNEL SELFTEST FRAMEWORK,blamed_fixes:1/1=100%)
Babu Moger <babu.moger@amd.com> (blamed_fixes:1/1=100%)
Sai Praneeth Prakhya <sai.praneeth.prakhya@intel.com> (blamed_fixes:1/1=100%)
linux-kernel@vger.kernel.org (open list:RDT - RESOURCE ALLOCATION)
linux-kselftest@vger.kernel.org (open list:KERNEL SELFTEST FRAMEWORK)

...which includes Sai's address (not much I can do about that, it's 
immutably crafted into git history that those lines were once touched by 
Sai). I've thought of writing yet another wrapper to filter out known 
failing addresses but until that's done, either I need to (remember to) 
manually send the series w/o get_maintainer.pl automation or accept a few 
failures here and there.
Reinette Chatre Aug. 16, 2023, 9:46 p.m. UTC | #5
Hi Ilpo,

On 8/15/2023 11:32 PM, Ilpo Järvinen wrote:
> Ah sorry, it is actually scripts/get_maintainer.pl automation I use with 
> git send-email to figure out where to send the patches besides the --to & 
> --cc entries I provided. For this patch, get_maintainer.pl returns this 
> list:
> 
> Fenghua Yu <fenghua.yu@intel.com> (supporter:RDT - RESOURCE ALLOCATION,blamed_fixes:1/1=100%)
> Reinette Chatre <reinette.chatre@intel.com> (supporter:RDT - RESOURCE ALLOCATION)
> Shuah Khan <shuah@kernel.org> (maintainer:KERNEL SELFTEST FRAMEWORK,blamed_fixes:1/1=100%)
> Babu Moger <babu.moger@amd.com> (blamed_fixes:1/1=100%)
> Sai Praneeth Prakhya <sai.praneeth.prakhya@intel.com> (blamed_fixes:1/1=100%)
> linux-kernel@vger.kernel.org (open list:RDT - RESOURCE ALLOCATION)
> linux-kselftest@vger.kernel.org (open list:KERNEL SELFTEST FRAMEWORK)
> 
> ...which includes Sai's address (not much I can do about that, it's 
> immutably crafted into git history that those lines were once touched by 
> Sai). I've thought of writing yet another wrapper to filter out known 
> failing addresses but until that's done, either I need to (remember to) 
> manually send the series w/o get_maintainer.pl automation or accept a few 
> failures here and there.
> 

You can append Sai's address to .get_maintainer.ignore.

Reinette
diff mbox series

Patch

diff --git a/tools/testing/selftests/resctrl/resctrl_tests.c b/tools/testing/selftests/resctrl/resctrl_tests.c
index d511daeb6851..eef9e02516ad 100644
--- a/tools/testing/selftests/resctrl/resctrl_tests.c
+++ b/tools/testing/selftests/resctrl/resctrl_tests.c
@@ -255,6 +255,9 @@  int main(int argc, char **argv)
 		return ksft_exit_skip("Not running as root. Skipping...\n");
 
 	if (has_ben) {
+		if (argc - ben_ind >= BENCHMARK_ARGS - 1)
+			ksft_exit_fail_msg("Too long benchmark command");
+
 		/* Extract benchmark command from command line. */
 		for (i = ben_ind; i < argc; i++) {
 			benchmark_cmd[i - ben_ind] = benchmark_cmd_area[i];