From: "Michael S. Tsirkin" <mst@redhat.com>
To: "Longpeng (Mike)" <longpeng2@huawei.com>
Cc: weifuqiang@huawei.com, "Jason Wang" <jasowang@redhat.com>,
qemu-devel@nongnu.org, alex.williamson@redhat.com,
arei.gonglei@huawei.com, huangzhichao@huawei.com,
"Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: Re: [PATCH RESEND 2/3] vhost: fix a null pointer reference of vhost_log
Date: Tue, 10 Mar 2020 08:18:29 -0400 [thread overview]
Message-ID: <20200310081723-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <6d5f2e31-cbf2-f7e5-adbd-7a3a03fb67ee@huawei.com>
On Tue, Mar 10, 2020 at 08:02:30PM +0800, Longpeng (Mike) wrote:
> 在 2020/3/10 16:23, Michael S. Tsirkin 写道:
> > On Tue, Mar 10, 2020 at 04:04:35PM +0800, Longpeng (Mike, Cloud Infrastructure Service Product Dept.) wrote:
> >>
> >>
> >> On 2020/3/10 13:57, Michael S. Tsirkin wrote:
> >>> On Mon, Feb 24, 2020 at 02:42:18PM +0800, Longpeng(Mike) wrote:
> >>>> From: Longpeng <longpeng2@huawei.com>
> >>>>
> >>>> vhost_log_alloc() may fails and returned pointer of log is null.
> >>>> However there're two places derefernce the return pointer without
> >>>> check.
> >>>>
> [...]
>
> >>>> static inline void vhost_dev_log_resize(struct vhost_dev *dev, uint64_t size)
> >>>> {
> >>>> - struct vhost_log *log = vhost_log_get(size, vhost_dev_log_is_shared(dev));
> >>>> - uint64_t log_base = (uintptr_t)log->log;
> >>>> + struct vhost_log *log;
> >>>> + uint64_t log_base;
> >>>> int r;
> >>>>
> >>>> + log = vhost_log_get(size, vhost_dev_log_is_shared(dev));
> >>>> + if (!log) {
> >>>> + return;
> >>>> + }
> >>>> +
> >>>
> >>> I'm not sure silently failing like this is safe. Callers assume
> >>> log can be resized. What can be done? I suspect not much
> >>> beside exiting ...
> >>> Speaking of which, lots of other failures in log resizing
> >>> path seem to be silently ignored.
> >>> I guess we should propagate them, and fix callers to check
> >>> the return code?
> >>>
> >> How about to let the callers treat the failure of log_resize as a fatal error ?
> >>
> [...]
>
> >>
> >> @@ -510,7 +525,9 @@ static void vhost_commit(MemoryListener *listener)
> >> #define VHOST_LOG_BUFFER (0x1000 / sizeof *dev->log)
> >> /* To log more, must increase log size before table update. */
> >> if (dev->log_size < log_size) {
> >> - vhost_dev_log_resize(dev, log_size + VHOST_LOG_BUFFER);
> >> + if (vhost_dev_log_resize(dev, log_size + VHOST_LOG_BUFFER) < 0) {
> >> + abort();
> >> + }
> >> }
> >> r = dev->vhost_ops->vhost_set_mem_table(dev, dev->mem);
> >> if (r < 0) {
> >> @@ -518,7 +535,9 @@ static void vhost_commit(MemoryListener *listener)
> >> }
> >> /* To log less, can only decrease log size after table update. */
> >> if (dev->log_size > log_size + VHOST_LOG_BUFFER) {
> >> - vhost_dev_log_resize(dev, log_size);
> >> + if (vhost_dev_log_resize(dev, log_size + VHOST_LOG_BUFFER) < 0) {
> >> + abort();
> >> + }
> >> }
> >>
> >> out:
> >
> >
> > I think the suggested handling is
> > error_report() and exit().
> > we also need to propagate errno. So how about passing in Error then?
> >
> vhost_dev_log_resize
> vhost_log_get
> vhost_log_alloc
> error_report_err (fail path, errno is in the errp)
> VHOST_OPS_DEBUG (if ->vhost_set_log_base fail)
> error_report (errno)
>
> Um, it seems log_resize will report error with errno internal, do we need
> error_report once more ?
Well we need to convert this over to something other than
VHOST_OPS_DEBUG, that will go away at some point.
> >
> >> @@ -818,7 +837,11 @@ static int vhost_migration_log(MemoryListener *listener,
> >> int enable)
> >> }
> >> vhost_log_put(dev, false);
> >> } else {
> >> - vhost_dev_log_resize(dev, vhost_get_log_size(dev));
> >> + r = vhost_dev_log_resize(dev, vhost_get_log_size(dev));
> >> + if (r < 0) {
> >> + return r;
> >> + }
> >> +
> >> r = vhost_dev_set_log(dev, true);
> >> if (r < 0) {
> >> return r;
> >>
> >>
> >>>
> >>> .
> >>>
> >>
> >> --
> >> ---
> >> Regards,
> >> Longpeng(Mike)
> >
> >
> > .
> >
>
>
> --
> Regards,
> Longpeng(Mike)
next prev parent reply other threads:[~2020-03-10 12:19 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-24 6:42 [PATCH RESEND 0/3] fix some warnings by static code scan tool Longpeng(Mike)
2020-02-24 6:42 ` [PATCH RESEND 1/3] vfio/pci: fix a null pointer reference in vfio_rom_read Longpeng(Mike)
2020-02-24 16:04 ` Alex Williamson
2020-02-24 23:48 ` Longpeng (Mike, Cloud Infrastructure Service Product Dept.)
2020-03-10 16:11 ` Alex Williamson
2020-03-10 23:14 ` Laszlo Ersek
2020-03-11 1:36 ` Alex Williamson
2020-03-11 7:08 ` Markus Armbruster
2020-03-11 10:28 ` Laszlo Ersek
2020-03-11 10:26 ` Laszlo Ersek
2020-03-11 11:54 ` Markus Armbruster
2020-03-11 13:00 ` Laszlo Ersek
2020-03-11 7:04 ` Markus Armbruster
[not found] ` <20200311093939.494bfe27@w520.home>
2020-03-12 5:50 ` Markus Armbruster
2020-03-12 14:07 ` Alex Williamson
2020-02-24 6:42 ` [PATCH RESEND 2/3] vhost: fix a null pointer reference of vhost_log Longpeng(Mike)
2020-03-10 2:11 ` Longpeng (Mike, Cloud Infrastructure Service Product Dept.)
2020-03-10 5:57 ` Michael S. Tsirkin
2020-03-10 8:04 ` Longpeng (Mike, Cloud Infrastructure Service Product Dept.)
2020-03-10 8:23 ` Michael S. Tsirkin
2020-03-10 12:02 ` Longpeng (Mike)
2020-03-10 12:18 ` Michael S. Tsirkin [this message]
2020-02-24 6:42 ` [PATCH RESEND 3/3] util/pty: fix a null pointer reference in qemu_openpty_raw Longpeng(Mike)
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=20200310081723-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=arei.gonglei@huawei.com \
--cc=huangzhichao@huawei.com \
--cc=jasowang@redhat.com \
--cc=longpeng2@huawei.com \
--cc=marcandre.lureau@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=weifuqiang@huawei.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.