diff mbox series

tools: Strong conversion of void type pointer could be removed

Message ID 20220627085654.2902-1-kunyu@nfschina.com (mailing list archive)
State Changes Requested
Headers show
Series tools: Strong conversion of void type pointer could be removed | expand

Commit Message

Li kunyu June 27, 2022, 8:56 a.m. UTC
The void pointer argument does not require a cast assignment because it
is the address passed.

Signed-off-by: Li kunyu <kunyu@nfschina.com>
---
 tools/testing/selftests/x86/fsgsbase.c      | 2 +-
 tools/testing/selftests/x86/test_vsyscall.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Comments

Shuah Khan June 27, 2022, 7:57 p.m. UTC | #1
On 6/27/22 2:56 AM, Li kunyu wrote:
> The void pointer argument does not require a cast assignment because it
> is the address passed.
> 

Please include information on you found this problem with output
from the tool if any used. Send v2 with that information included
in the commit log.

> Signed-off-by: Li kunyu <kunyu@nfschina.com>
> ---
>   tools/testing/selftests/x86/fsgsbase.c      | 2 +-
>   tools/testing/selftests/x86/test_vsyscall.c | 2 +-
>   2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/testing/selftests/x86/fsgsbase.c b/tools/testing/selftests/x86/fsgsbase.c
> index 8c780cce941d..5d99261317e1 100644
> --- a/tools/testing/selftests/x86/fsgsbase.c
> +++ b/tools/testing/selftests/x86/fsgsbase.c
> @@ -63,7 +63,7 @@ static void clearhandler(int sig)
>   
>   static void sigsegv(int sig, siginfo_t *si, void *ctx_void)
>   {
> -	ucontext_t *ctx = (ucontext_t*)ctx_void;
> +	ucontext_t *ctx = ctx_void;
>   
>   	if (!want_segv) {
>   		clearhandler(SIGSEGV);
> diff --git a/tools/testing/selftests/x86/test_vsyscall.c b/tools/testing/selftests/x86/test_vsyscall.c
> index 5b45e6986aea..2416941a0952 100644
> --- a/tools/testing/selftests/x86/test_vsyscall.c
> +++ b/tools/testing/selftests/x86/test_vsyscall.c
> @@ -184,7 +184,7 @@ static volatile unsigned long segv_err;
>   
>   static void sigsegv(int sig, siginfo_t *info, void *ctx_void)
>   {
> -	ucontext_t *ctx = (ucontext_t *)ctx_void;
> +	ucontext_t *ctx = ctx_void;
>   
>   	segv_err =  ctx->uc_mcontext.gregs[REG_ERR];
>   	siglongjmp(jmpbuf, 1);
> 

thanks,
-- Shuah
Li kunyu June 29, 2022, 2:42 a.m. UTC | #2
Hi Shuah, now I can't paste the test code, so I could write a demo and paste it:


-------------source---------------

#include <stdio.h>
#include <stdlib.h>

struct ucontext {
	struct ucontext         *uc_link;
	unsigned long           uc_flags;
	sigset_t                uc_sigmask;
	struct ucontext         *uc_mcontext;
};
typedef struct ucontext ucontext_t;

void sigsegv(void *ctx_void)
{
	ucontext_t *ctx = (ucontext_t*)ctx_void;
	ucontext_t *ctx2 = (int *)ctx_void;
	ucontext_t *ctx3 = ctx_void;
	printf("ctx:%p, ctx2:%p, ctx3:%p.\n", ctx, ctx2, ctx3);
}

int main() {
	ucontext_t *test = malloc(sizeof(ucontext_t));
	sigsegv(test);
	return 0;
}

--------------------------------------

The result is CTX: 0x563D96CE5010, CTX2:0x563D96CE5010, CTx3:0x563D96CE5010.
Now force ucontext_t and int pointers are the same as the addresses obtained without forced conversion.

Now I'll paste the assembly code for them:


|0x700 <sigsegv>         push   %rbp                                                  │
│0x701 <sigsegv+1>       mov    %rsp,%rbp                                             │
│0x704 <sigsegv+4>       sub    $0x30,%rsp                                            │
│0x708 <sigsegv+8>       mov    %rdi,-0x28(%rbp)                                      │
│0x70c <sigsegv+12>      mov    -0x28(%rbp),%rax                                      │
│0x710 <sigsegv+16>      mov    %rax,-0x8(%rbp)                                       │
│0x714 <sigsegv+20>      mov    -0x28(%rbp),%rax                                      │
│0x718 <sigsegv+24>      mov    %rax,-0x10(%rbp)                                      │
│0x71c <sigsegv+28>      mov    -0x28(%rbp),%rax                                      │
│0x720 <sigsegv+32>      mov    %rax,-0x18(%rbp)                                      │
│0x724 <sigsegv+36>      mov    -0x18(%rbp),%rcx                                      │
│0x728 <sigsegv+40>      mov    -0x10(%rbp),%rdx                                      │
│0x72c <sigsegv+44>      mov    -0x8(%rbp),%rax                                       │
│0x730 <sigsegv+48>      mov    %rax,%rsi                                             │
│0x733 <sigsegv+51>      lea    0xba(%rip),%rdi        # 0x7f4                        │
│0x73a <sigsegv+58>      mov    $0x0,%eax                                             │
│0x73f <sigsegv+63>      callq  0x5a0 <printf@plt>                                    │
│0x744 <sigsegv+68>      nop                                                          │
│0x745 <sigsegv+69>      leaveq                                                       │
│0x746 <sigsegv+70>      retq
Shuah Khan June 29, 2022, 11:09 p.m. UTC | #3
On 6/28/22 8:42 PM, Li kunyu wrote:
> 
> Hi Shuah, now I can't paste the test code, so I could write a demo and paste it:
> 
> 

What is the "test code"?

How did you find the problem? Which tool did you use it?

thanks,
-- Shuah
diff mbox series

Patch

diff --git a/tools/testing/selftests/x86/fsgsbase.c b/tools/testing/selftests/x86/fsgsbase.c
index 8c780cce941d..5d99261317e1 100644
--- a/tools/testing/selftests/x86/fsgsbase.c
+++ b/tools/testing/selftests/x86/fsgsbase.c
@@ -63,7 +63,7 @@  static void clearhandler(int sig)
 
 static void sigsegv(int sig, siginfo_t *si, void *ctx_void)
 {
-	ucontext_t *ctx = (ucontext_t*)ctx_void;
+	ucontext_t *ctx = ctx_void;
 
 	if (!want_segv) {
 		clearhandler(SIGSEGV);
diff --git a/tools/testing/selftests/x86/test_vsyscall.c b/tools/testing/selftests/x86/test_vsyscall.c
index 5b45e6986aea..2416941a0952 100644
--- a/tools/testing/selftests/x86/test_vsyscall.c
+++ b/tools/testing/selftests/x86/test_vsyscall.c
@@ -184,7 +184,7 @@  static volatile unsigned long segv_err;
 
 static void sigsegv(int sig, siginfo_t *info, void *ctx_void)
 {
-	ucontext_t *ctx = (ucontext_t *)ctx_void;
+	ucontext_t *ctx = ctx_void;
 
 	segv_err =  ctx->uc_mcontext.gregs[REG_ERR];
 	siglongjmp(jmpbuf, 1);