dmaengine.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] selftests/dma: fix invalid array access in printf
@ 2025-11-06  3:30 Zhang Chujun
  2025-11-07  0:24 ` Shuah Khan
  0 siblings, 1 reply; 4+ messages in thread
From: Zhang Chujun @ 2025-11-06  3:30 UTC (permalink / raw)
  To: vkoul; +Cc: dmaengine, linux-kselftest, Zhang Chujun

The printf statement attempts to print the DMA direction string using
the syntax 'dir[directions]', which is an invalid array access. The
variable 'dir' is an integer, and 'directions' is a char pointer array.
This incorrect syntax should be 'directions[dir]', using 'dir' as the
index into the 'directions' array. Fix this by correcting the array
access from 'dir[directions]' to 'directions[dir]'.

Signed-off-by: Zhang Chujun <zhangchujun@cmss.chinamobile.com>

diff --git a/tools/testing/selftests/dma/dma_map_benchmark.c b/tools/testing/selftests/dma/dma_map_benchmark.c
index b12f1f9babf8..b925756373ce 100644
--- a/tools/testing/selftests/dma/dma_map_benchmark.c
+++ b/tools/testing/selftests/dma/dma_map_benchmark.c
@@ -118,7 +118,7 @@ int main(int argc, char **argv)
 	}
 
 	printf("dma mapping benchmark: threads:%d seconds:%d node:%d dir:%s granule: %d\n",
-			threads, seconds, node, dir[directions], granule);
+			threads, seconds, node, directions[dir], granule);
 	printf("average map latency(us):%.1f standard deviation:%.1f\n",
 			map.avg_map_100ns/10.0, map.map_stddev/10.0);
 	printf("average unmap latency(us):%.1f standard deviation:%.1f\n",
-- 
2.50.1.windows.1




^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] selftests/dma: fix invalid array access in printf
  2025-11-06  3:30 [PATCH] selftests/dma: fix invalid array access in printf Zhang Chujun
@ 2025-11-07  0:24 ` Shuah Khan
  2025-11-07  1:55   ` [PATCH] dma_map_benchmark: fix incorrect " Zhang Chujun
  0 siblings, 1 reply; 4+ messages in thread
From: Shuah Khan @ 2025-11-07  0:24 UTC (permalink / raw)
  To: Zhang Chujun, vkoul; +Cc: dmaengine, linux-kselftest, Shuah Khan

On 11/5/25 20:30, Zhang Chujun wrote:
> The printf statement attempts to print the DMA direction string using
> the syntax 'dir[directions]', which is an invalid array access. The
> variable 'dir' is an integer, and 'directions' is a char pointer array.
> This incorrect syntax should be 'directions[dir]', using 'dir' as the
> index into the 'directions' array. Fix this by correcting the array
> access from 'dir[directions]' to 'directions[dir]'.
> 
> Signed-off-by: Zhang Chujun <zhangchujun@cmss.chinamobile.com>
> 
> diff --git a/tools/testing/selftests/dma/dma_map_benchmark.c b/tools/testing/selftests/dma/dma_map_benchmark.c
> index b12f1f9babf8..b925756373ce 100644
> --- a/tools/testing/selftests/dma/dma_map_benchmark.c
> +++ b/tools/testing/selftests/dma/dma_map_benchmark.c
> @@ -118,7 +118,7 @@ int main(int argc, char **argv)
>   	}
>   
>   	printf("dma mapping benchmark: threads:%d seconds:%d node:%d dir:%s granule: %d\n",
> -			threads, seconds, node, dir[directions], granule);
> +			threads, seconds, node, directions[dir], granule);
>   	printf("average map latency(us):%.1f standard deviation:%.1f\n",
>   			map.avg_map_100ns/10.0, map.map_stddev/10.0);
>   	printf("average unmap latency(us):%.1f standard deviation:%.1f\n",

Looks like you sent the same patch again. I replied to your previous
patch asking you how you found this problem. It looks like a needed
change. Compiler doesn't complain about it which is strange.

thanks,
-- Shuah

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] dma_map_benchmark: fix incorrect array access in printf
  2025-11-07  0:24 ` Shuah Khan
@ 2025-11-07  1:55   ` Zhang Chujun
  2025-11-19 22:02     ` Shuah Khan
  0 siblings, 1 reply; 4+ messages in thread
From: Zhang Chujun @ 2025-11-07  1:55 UTC (permalink / raw)
  To: skhan; +Cc: dmaengine, linux-kselftest, vkoul, zhangchujun

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=y, Size: 1384 bytes --]

On Tue, Nov 05, 2025 at 08:30:00PM +0800, Zhang Chujun wrote:
> The printf statement attempts to print the DMA direction string using
> the syntax 'dir[directions]', which is an invalid array access. The
> variable 'dir' is an integer, and 'directions' is a char pointer array.
> This incorrect syntax should be 'directions[dir]', using 'dir' as the
> index into the 'directions' array. Fix this by correcting the array
> access from 'dir[directions]' to 'directions[dir]'.

Hi Shuah,

Thanks for your patience.

I found this issue while carefully reading the code in
`dma_map_benchmark.c`. The expression `dir[directions]` stood out because
`dir` is an integer (enum or int), while `directions` is a string array —
so using `dir` as the index into `directions` is the correct form.
Although C allows `a[b]` and `b[a]` syntactically due to pointer arithmetic,
in this context `dir[directions]` is logically wrong and would print an
unexpected (likely garbage) string, since it treats the address of the
string array as an array indexed by a small integer.

The compiler doesn’t warn because `dir[directions]` is technically valid
C (equivalent to `*(directions + dir)`), but semantically it’s backwards
and breaks the intended output.

Sorry for sending the patch twice, I’ll make sure to follow the proper
mailing list guidelines going forward.

Best regards,
Zhang Chujun



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] dma_map_benchmark: fix incorrect array access in printf
  2025-11-07  1:55   ` [PATCH] dma_map_benchmark: fix incorrect " Zhang Chujun
@ 2025-11-19 22:02     ` Shuah Khan
  0 siblings, 0 replies; 4+ messages in thread
From: Shuah Khan @ 2025-11-19 22:02 UTC (permalink / raw)
  To: Zhang Chujun; +Cc: dmaengine, linux-kselftest, vkoul, Shuah Khan

On 11/6/25 18:55, Zhang Chujun wrote:
> On Tue, Nov 05, 2025 at 08:30:00PM +0800, Zhang Chujun wrote:
>> The printf statement attempts to print the DMA direction string using
>> the syntax 'dir[directions]', which is an invalid array access. The
>> variable 'dir' is an integer, and 'directions' is a char pointer array.
>> This incorrect syntax should be 'directions[dir]', using 'dir' as the
>> index into the 'directions' array. Fix this by correcting the array
>> access from 'dir[directions]' to 'directions[dir]'.
> 
> Hi Shuah,
> 
> Thanks for your patience.
> 
> I found this issue while carefully reading the code in
> `dma_map_benchmark.c`. The expression `dir[directions]` stood out because
> `dir` is an integer (enum or int), while `directions` is a string array —
> so using `dir` as the index into `directions` is the correct form.
> Although C allows `a[b]` and `b[a]` syntactically due to pointer arithmetic,
> in this context `dir[directions]` is logically wrong and would print an
> unexpected (likely garbage) string, since it treats the address of the
> string array as an array indexed by a small integer.
> 
> The compiler doesn’t warn because `dir[directions]` is technically valid
> C (equivalent to `*(directions + dir)`), but semantically it’s backwards
> and breaks the intended output.
> 

Applied to linux-kselftest next for Linux 6.19-rc1

thanks,
-- Shuah

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-11-19 22:02 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-06  3:30 [PATCH] selftests/dma: fix invalid array access in printf Zhang Chujun
2025-11-07  0:24 ` Shuah Khan
2025-11-07  1:55   ` [PATCH] dma_map_benchmark: fix incorrect " Zhang Chujun
2025-11-19 22:02     ` Shuah Khan

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).