[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 2/8] gdbstub: Try unlinking the unix socket before binding
From: |
Alex Bennée |
Subject: |
Re: [PATCH v3 2/8] gdbstub: Try unlinking the unix socket before binding |
Date: |
Wed, 08 Jan 2025 16:10:08 +0000 |
User-agent: |
mu4e 1.12.8; emacs 29.4 |
Ilya Leoshkevich <iii@linux.ibm.com> writes:
> In case an emulated process execve()s another emulated process, bind()
> will fail, because the socket already exists. So try deleting it.
>
> Note that it is not possible to handle this in do_execv(): deleting
> gdbserver_user_state.socket_path before safe_execve() is not correct,
> because the latter may fail, and afterwards we may lose control.
>
> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
> ---
> gdbstub/user.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/gdbstub/user.c b/gdbstub/user.c
> index ef52f249ce9..c900d0a52fe 100644
> --- a/gdbstub/user.c
> +++ b/gdbstub/user.c
> @@ -337,6 +337,7 @@ static int gdbserver_open_socket(const char *path)
>
> sockaddr.sun_family = AF_UNIX;
> pstrcpy(sockaddr.sun_path, sizeof(sockaddr.sun_path) - 1, path);
> + unlink(sockaddr.sun_path);
Should we be checking for errors here? What do we expect when attempting
to unlink a non-existent path? -EIO?
> ret = bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
> if (ret < 0) {
> perror("bind socket");
--
Alex Bennée
Virtualisation Tech Lead @ Linaro
- Re: [PATCH v3 2/8] gdbstub: Try unlinking the unix socket before binding,
Alex Bennée <=