lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 29 Jun 2022 10:42:06 +0800
From:   Li kunyu <kunyu@...china.com>
To:     skhan@...uxfoundation.org
Cc:     kunyu@...china.com, linux-kernel@...r.kernel.org,
        linux-kselftest@...r.kernel.org, shuah@...nel.org
Subject: Re: [PATCH] tools: Strong conversion of void type pointer could be removed


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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ