qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] linux-user: allow NULL msg in recvfrom


From: Peter Maydell
Subject: Re: [PATCH] linux-user: allow NULL msg in recvfrom
Date: Fri, 26 Mar 2021 13:28:55 +0000

On Fri, 26 Mar 2021 at 13:24, Laurent Vivier <laurent@vivier.eu> wrote:
>
> Le 26/03/2021 à 05:05, Zach Reizner a écrit :
> > The kernel allows a NULL msg in recvfrom so that he size of the next
> > message may be queried before allocating a correctly sized buffer. This
> > change allows the syscall translator to pass along the NULL msg pointer
> > instead of returning early with EFAULT.
> >
> > Signed-off-by: Zach Reizner <zachr@google.com>
> > ---
> >  linux-user/syscall.c | 2 --
> >  1 file changed, 2 deletions(-)
> >
> > diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> > index 1e508576c7..332544b43c 100644
> > --- a/linux-user/syscall.c
> > +++ b/linux-user/syscall.c
> > @@ -3680,8 +3680,6 @@ static abi_long do_recvfrom(int fd, abi_ulong
> > msg, size_t len, int flags,
> >      abi_long ret;
> >
> >      host_msg = lock_user(VERIFY_WRITE, msg, len, 0);
> > -    if (!host_msg)
> > -        return -TARGET_EFAULT;
> >      if (target_addr) {
> >          if (get_user_u32(addrlen, target_addrlen)) {
> >              ret = -TARGET_EFAULT;
> >
>
> Applied to my linux-user-for-6.0 branch

Doesn't this mean we'll now incorrectly treat "guest passed
a bad address" the same as "guest passed NULL" ? lock_user()
returns NULL for errors, so if you need to handle NULL input
specially you want something like

   if (!msg) {
       host_msg = NULL;
   } else {
       host_msg = lock_user(VERIFY_WRITE, msg, len, 0);
       if (!host_msg) {
           return -TARGET_EFAULT;
       }
   }

I think ?

thanks
-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]