All of lore.kernel.org
 help / color / mirror / Atom feed
From: Souptick Joarder <jrdr.linux@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Jason Gunthorpe <jgg@ziepe.ca>,
	Dan Williams <dan.j.williams@intel.com>,
	Greg KH <gregkh@linuxfoundation.org>,
	timur@freescale.com, linux-kernel@vger.kernel.org,
	Dan Carpenter <dan.carpenter@oracle.com>,
	John Hubbard <jhubbard@nvidia.com>
Subject: Re: [linux-next PATCH v4] drivers/virt/fsl_hypervisor: Fix error handling path
Date: Sat, 5 Sep 2020 06:46:24 +0530	[thread overview]
Message-ID: <CAFqt6zaB_wcrUzmOJ6kQWMqdcPrENyJO4FNc_UU5z-AQQh_e3w@mail.gmail.com> (raw)
In-Reply-To: <a3b36dfa-b7bb-e69b-95d5-e7d6dd7bda3f@nvidia.com>

Hi Andrew,

On Wed, Sep 2, 2020 at 3:00 AM John Hubbard <jhubbard@nvidia.com> wrote:
>
> On 9/1/20 2:21 PM, Souptick Joarder wrote:
> > First, when memory allocation for sg_list_unaligned failed, there
> > is a bug of calling put_pages() as we haven't pinned any pages.
> >
> > Second, if get_user_pages_fast() failed we should unpin num_pinned
> > pages.
> >
> > This will address both.
> >
> > As part of these changes, minor update in documentation.
> >
> > Fixes: 6db7199407ca ("drivers/virt: introduce Freescale hypervisor
> > management driver")
> > Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
> > Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
> > Reviewed-by: John Hubbard <jhubbard@nvidia.com>
> > ---
>
> This looks good to me.

Can you please take this patch through the mm tree ?

>
> thanks,
> --
> John Hubbard
> NVIDIA
>
> > v2:
> >     Added review tag.
> >
> > v3:
> >     Address review comment on v2 from John.
> >     Added review tag.
> >
> > v4:
> >    Address another set of review comments from John.
> >
> >   drivers/virt/fsl_hypervisor.c | 17 ++++++++---------
> >   1 file changed, 8 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/virt/fsl_hypervisor.c b/drivers/virt/fsl_hypervisor.c
> > index 1b0b11b..46ee0a0 100644
> > --- a/drivers/virt/fsl_hypervisor.c
> > +++ b/drivers/virt/fsl_hypervisor.c
> > @@ -157,7 +157,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
> >
> >       unsigned int i;
> >       long ret = 0;
> > -     int num_pinned; /* return value from get_user_pages() */
> > +     int num_pinned = 0; /* return value from get_user_pages_fast() */
> >       phys_addr_t remote_paddr; /* The next address in the remote buffer */
> >       uint32_t count; /* The number of bytes left to copy */
> >
> > @@ -174,7 +174,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
> >               return -EINVAL;
> >
> >       /*
> > -      * The array of pages returned by get_user_pages() covers only
> > +      * The array of pages returned by get_user_pages_fast() covers only
> >        * page-aligned memory.  Since the user buffer is probably not
> >        * page-aligned, we need to handle the discrepancy.
> >        *
> > @@ -224,7 +224,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
> >
> >       /*
> >        * 'pages' is an array of struct page pointers that's initialized by
> > -      * get_user_pages().
> > +      * get_user_pages_fast().
> >        */
> >       pages = kcalloc(num_pages, sizeof(struct page *), GFP_KERNEL);
> >       if (!pages) {
> > @@ -241,7 +241,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
> >       if (!sg_list_unaligned) {
> >               pr_debug("fsl-hv: could not allocate S/G list\n");
> >               ret = -ENOMEM;
> > -             goto exit;
> > +             goto free_pages;
> >       }
> >       sg_list = PTR_ALIGN(sg_list_unaligned, sizeof(struct fh_sg_list));
> >
> > @@ -250,7 +250,6 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
> >               num_pages, param.source != -1 ? FOLL_WRITE : 0, pages);
> >
> >       if (num_pinned != num_pages) {
> > -             /* get_user_pages() failed */
> >               pr_debug("fsl-hv: could not lock source buffer\n");
> >               ret = (num_pinned < 0) ? num_pinned : -EFAULT;
> >               goto exit;
> > @@ -292,13 +291,13 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
> >               virt_to_phys(sg_list), num_pages);
> >
> >   exit:
> > -     if (pages) {
> > -             for (i = 0; i < num_pages; i++)
> > -                     if (pages[i])
> > -                             put_page(pages[i]);
> > +     if (pages && (num_pinned > 0)) {
> > +             for (i = 0; i < num_pinned; i++)
> > +                     put_page(pages[i]);
> >       }
> >
> >       kfree(sg_list_unaligned);
> > +free_pages:
> >       kfree(pages);
> >
> >       if (!ret)
> >
>

  reply	other threads:[~2020-09-05  1:16 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-01 21:21 [linux-next PATCH v4] drivers/virt/fsl_hypervisor: Fix error handling path Souptick Joarder
2020-09-01 21:30 ` John Hubbard
2020-09-05  1:16   ` Souptick Joarder [this message]
2020-09-05  1:21     ` John Hubbard
2020-09-06  2:17       ` Souptick Joarder
2020-09-06  7:39         ` Joe Perches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAFqt6zaB_wcrUzmOJ6kQWMqdcPrENyJO4FNc_UU5z-AQQh_e3w@mail.gmail.com \
    --to=jrdr.linux@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=dan.carpenter@oracle.com \
    --cc=dan.j.williams@intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jgg@ziepe.ca \
    --cc=jhubbard@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=timur@freescale.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.