* [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring @ 2021-08-27 5:12 Li Feng 2021-09-01 5:01 ` Li Feng ` (2 more replies) 0 siblings, 3 replies; 13+ messages in thread From: Li Feng @ 2021-08-27 5:12 UTC (permalink / raw) To: Maxime Coquelin, Chenbo Xia; +Cc: dev, Li Feng When getting reqs from the avail ring, the id may exceed inflight queue size. Then the dpdk will crash forever. Signed-off-by: Li Feng <fengli@smartx.com> --- lib/vhost/vhost_user.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c index 29a4c9af60..f09d0f6a48 100644 --- a/lib/vhost/vhost_user.c +++ b/lib/vhost/vhost_user.c @@ -1823,8 +1823,14 @@ vhost_check_queue_inflights_split(struct virtio_net *dev, last_io = inflight_split->last_inflight_io; if (inflight_split->used_idx != used->idx) { - inflight_split->desc[last_io].inflight = 0; - rte_atomic_thread_fence(__ATOMIC_SEQ_CST); + if (unlikely(last_io >= inflight_split->desc_num)) { + VHOST_LOG_CONFIG(ERR, "last_inflight_io '%"PRIu16"' exceeds inflight " + "queue size (%"PRIu16").\n", last_io, + inflight_split->desc_num); + } else { + inflight_split->desc[last_io].inflight = 0; + rte_atomic_thread_fence(__ATOMIC_SEQ_CST); + } inflight_split->used_idx = used->idx; } -- 2.31.1 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring 2021-08-27 5:12 [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring Li Feng @ 2021-09-01 5:01 ` Li Feng 2021-10-14 8:17 ` Maxime Coquelin 2021-10-14 12:40 ` [dpdk-dev] [PATCH v2] vhost: add sanity check when operating the " Li Feng 2 siblings, 0 replies; 13+ messages in thread From: Li Feng @ 2021-09-01 5:01 UTC (permalink / raw) To: Maxime Coquelin, Chenbo Xia; +Cc: dev ping... BTW, how could I retrigger the failure CI? The failure is not about this patch. Thanks, Feng Li Li Feng <fengli@smartx.com> 于2021年8月27日周五 下午1:16写道: > > When getting reqs from the avail ring, the id may exceed inflight > queue size. Then the dpdk will crash forever. > > Signed-off-by: Li Feng <fengli@smartx.com> > --- > lib/vhost/vhost_user.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c > index 29a4c9af60..f09d0f6a48 100644 > --- a/lib/vhost/vhost_user.c > +++ b/lib/vhost/vhost_user.c > @@ -1823,8 +1823,14 @@ vhost_check_queue_inflights_split(struct virtio_net *dev, > last_io = inflight_split->last_inflight_io; > > if (inflight_split->used_idx != used->idx) { > - inflight_split->desc[last_io].inflight = 0; > - rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > + if (unlikely(last_io >= inflight_split->desc_num)) { > + VHOST_LOG_CONFIG(ERR, "last_inflight_io '%"PRIu16"' exceeds inflight " > + "queue size (%"PRIu16").\n", last_io, > + inflight_split->desc_num); > + } else { > + inflight_split->desc[last_io].inflight = 0; > + rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > + } > inflight_split->used_idx = used->idx; > } > > -- > 2.31.1 > Li Feng <fengli@smartx.com> 于2021年8月27日周五 下午1:16写道: > > When getting reqs from the avail ring, the id may exceed inflight > queue size. Then the dpdk will crash forever. > > Signed-off-by: Li Feng <fengli@smartx.com> > --- > lib/vhost/vhost_user.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c > index 29a4c9af60..f09d0f6a48 100644 > --- a/lib/vhost/vhost_user.c > +++ b/lib/vhost/vhost_user.c > @@ -1823,8 +1823,14 @@ vhost_check_queue_inflights_split(struct virtio_net *dev, > last_io = inflight_split->last_inflight_io; > > if (inflight_split->used_idx != used->idx) { > - inflight_split->desc[last_io].inflight = 0; > - rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > + if (unlikely(last_io >= inflight_split->desc_num)) { > + VHOST_LOG_CONFIG(ERR, "last_inflight_io '%"PRIu16"' exceeds inflight " > + "queue size (%"PRIu16").\n", last_io, > + inflight_split->desc_num); > + } else { > + inflight_split->desc[last_io].inflight = 0; > + rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > + } > inflight_split->used_idx = used->idx; > } > > -- > 2.31.1 > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring 2021-08-27 5:12 [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring Li Feng 2021-09-01 5:01 ` Li Feng @ 2021-10-14 8:17 ` Maxime Coquelin 2021-10-14 8:25 ` Maxime Coquelin 2021-10-14 11:25 ` Li Feng 2021-10-14 12:40 ` [dpdk-dev] [PATCH v2] vhost: add sanity check when operating the " Li Feng 2 siblings, 2 replies; 13+ messages in thread From: Maxime Coquelin @ 2021-10-14 8:17 UTC (permalink / raw) To: Li Feng, Chenbo Xia, JinYu; +Cc: dev Hi Li, Adding Jin Yu who introduced this function. On 8/27/21 07:12, Li Feng wrote: > When getting reqs from the avail ring, the id may exceed inflight > queue size. Then the dpdk will crash forever. You need to add Fixes tag and Cc stable@dpdk.org so that it can be backported. > Signed-off-by: Li Feng <fengli@smartx.com> > --- > lib/vhost/vhost_user.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c > index 29a4c9af60..f09d0f6a48 100644 > --- a/lib/vhost/vhost_user.c > +++ b/lib/vhost/vhost_user.c > @@ -1823,8 +1823,14 @@ vhost_check_queue_inflights_split(struct virtio_net *dev, > last_io = inflight_split->last_inflight_io; > > if (inflight_split->used_idx != used->idx) { > - inflight_split->desc[last_io].inflight = 0; > - rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > + if (unlikely(last_io >= inflight_split->desc_num)) { > + VHOST_LOG_CONFIG(ERR, "last_inflight_io '%"PRIu16"' exceeds inflight " > + "queue size (%"PRIu16").\n", last_io, > + inflight_split->desc_num); If such error happens, shouldn't we return RTE_VHOST_MSG_RESULT_ERR instead of just logging an error? > + } else { > + inflight_split->desc[last_io].inflight = 0; > + rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > + } > inflight_split->used_idx = used->idx; > } > > Regards, Maxime ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring 2021-10-14 8:17 ` Maxime Coquelin @ 2021-10-14 8:25 ` Maxime Coquelin 2021-10-14 8:28 ` Xia, Chenbo 2021-10-14 11:25 ` Li Feng 1 sibling, 1 reply; 13+ messages in thread From: Maxime Coquelin @ 2021-10-14 8:25 UTC (permalink / raw) To: Li Feng, Chenbo Xia; +Cc: dev On 10/14/21 10:17, Maxime Coquelin wrote: > Hi Li, > > Adding Jin Yu who introduced this function. Looks like Jin Yu has left Intel, Chenbo, could you find someone from the Intel SPDK team to look at it? > On 8/27/21 07:12, Li Feng wrote: >> When getting reqs from the avail ring, the id may exceed inflight >> queue size. Then the dpdk will crash forever. > > You need to add Fixes tag and Cc stable@dpdk.org so that it can be > backported. > >> Signed-off-by: Li Feng <fengli@smartx.com> >> --- >> lib/vhost/vhost_user.c | 10 ++++++++-- >> 1 file changed, 8 insertions(+), 2 deletions(-) >> >> diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c >> index 29a4c9af60..f09d0f6a48 100644 >> --- a/lib/vhost/vhost_user.c >> +++ b/lib/vhost/vhost_user.c >> @@ -1823,8 +1823,14 @@ vhost_check_queue_inflights_split(struct >> virtio_net *dev, >> last_io = inflight_split->last_inflight_io; >> if (inflight_split->used_idx != used->idx) { >> - inflight_split->desc[last_io].inflight = 0; >> - rte_atomic_thread_fence(__ATOMIC_SEQ_CST); >> + if (unlikely(last_io >= inflight_split->desc_num)) { >> + VHOST_LOG_CONFIG(ERR, "last_inflight_io '%"PRIu16"' >> exceeds inflight " >> + "queue size (%"PRIu16").\n", last_io, >> + inflight_split->desc_num); > > If such error happens, shouldn't we return RTE_VHOST_MSG_RESULT_ERR > instead of just logging an error? > >> + } else { >> + inflight_split->desc[last_io].inflight = 0; >> + rte_atomic_thread_fence(__ATOMIC_SEQ_CST); >> + } >> inflight_split->used_idx = used->idx; >> } >> > > Regards, > Maxime ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring 2021-10-14 8:25 ` Maxime Coquelin @ 2021-10-14 8:28 ` Xia, Chenbo 2021-10-18 1:01 ` Liu, Changpeng 0 siblings, 1 reply; 13+ messages in thread From: Xia, Chenbo @ 2021-10-14 8:28 UTC (permalink / raw) To: Maxime Coquelin, Li Feng, Liu, Changpeng; +Cc: dev Hi Changpeng, > -----Original Message----- > From: Maxime Coquelin <maxime.coquelin@redhat.com> > Sent: Thursday, October 14, 2021 4:26 PM > To: Li Feng <fengli@smartx.com>; Xia, Chenbo <chenbo.xia@intel.com> > Cc: dev@dpdk.org > Subject: Re: [PATCH v1] vhost: add sanity check for resubmiting reqs in split > ring > > > > On 10/14/21 10:17, Maxime Coquelin wrote: > > Hi Li, > > > > Adding Jin Yu who introduced this function. > > Looks like Jin Yu has left Intel, Chenbo, could you find someone from > the Intel SPDK team to look at it? Could you or your team member help check this? Thanks, Chenbo > > > On 8/27/21 07:12, Li Feng wrote: > >> When getting reqs from the avail ring, the id may exceed inflight > >> queue size. Then the dpdk will crash forever. > > > > You need to add Fixes tag and Cc stable@dpdk.org so that it can be > > backported. > > > >> Signed-off-by: Li Feng <fengli@smartx.com> > >> --- > >> lib/vhost/vhost_user.c | 10 ++++++++-- > >> 1 file changed, 8 insertions(+), 2 deletions(-) > >> > >> diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c > >> index 29a4c9af60..f09d0f6a48 100644 > >> --- a/lib/vhost/vhost_user.c > >> +++ b/lib/vhost/vhost_user.c > >> @@ -1823,8 +1823,14 @@ vhost_check_queue_inflights_split(struct > >> virtio_net *dev, > >> last_io = inflight_split->last_inflight_io; > >> if (inflight_split->used_idx != used->idx) { > >> - inflight_split->desc[last_io].inflight = 0; > >> - rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > >> + if (unlikely(last_io >= inflight_split->desc_num)) { > >> + VHOST_LOG_CONFIG(ERR, "last_inflight_io '%"PRIu16"' > >> exceeds inflight " > >> + "queue size (%"PRIu16").\n", last_io, > >> + inflight_split->desc_num); > > > > If such error happens, shouldn't we return RTE_VHOST_MSG_RESULT_ERR > > instead of just logging an error? > > > >> + } else { > >> + inflight_split->desc[last_io].inflight = 0; > >> + rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > >> + } > >> inflight_split->used_idx = used->idx; > >> } > >> > > > > Regards, > > Maxime ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring 2021-10-14 8:28 ` Xia, Chenbo @ 2021-10-18 1:01 ` Liu, Changpeng 0 siblings, 0 replies; 13+ messages in thread From: Liu, Changpeng @ 2021-10-18 1:01 UTC (permalink / raw) To: Xia, Chenbo, Maxime Coquelin, Li Feng; +Cc: dev I agree with Maxime, just add an error log doesn't help anything, there might be something wrong in other places, I don't have the context for this issue, if this can be reproduced in SPDK, I suggest to submit an issue to SPDK first. > -----Original Message----- > From: Xia, Chenbo <chenbo.xia@intel.com> > Sent: Thursday, October 14, 2021 4:28 PM > To: Maxime Coquelin <maxime.coquelin@redhat.com>; Li Feng > <fengli@smartx.com>; Liu, Changpeng <changpeng.liu@intel.com> > Cc: dev@dpdk.org > Subject: RE: [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring > > Hi Changpeng, > > > -----Original Message----- > > From: Maxime Coquelin <maxime.coquelin@redhat.com> > > Sent: Thursday, October 14, 2021 4:26 PM > > To: Li Feng <fengli@smartx.com>; Xia, Chenbo <chenbo.xia@intel.com> > > Cc: dev@dpdk.org > > Subject: Re: [PATCH v1] vhost: add sanity check for resubmiting reqs in split > > ring > > > > > > > > On 10/14/21 10:17, Maxime Coquelin wrote: > > > Hi Li, > > > > > > Adding Jin Yu who introduced this function. > > > > Looks like Jin Yu has left Intel, Chenbo, could you find someone from > > the Intel SPDK team to look at it? > > Could you or your team member help check this? > > Thanks, > Chenbo > > > > > > On 8/27/21 07:12, Li Feng wrote: > > >> When getting reqs from the avail ring, the id may exceed inflight > > >> queue size. Then the dpdk will crash forever. > > > > > > You need to add Fixes tag and Cc stable@dpdk.org so that it can be > > > backported. > > > > > >> Signed-off-by: Li Feng <fengli@smartx.com> > > >> --- > > >> lib/vhost/vhost_user.c | 10 ++++++++-- > > >> 1 file changed, 8 insertions(+), 2 deletions(-) > > >> > > >> diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c > > >> index 29a4c9af60..f09d0f6a48 100644 > > >> --- a/lib/vhost/vhost_user.c > > >> +++ b/lib/vhost/vhost_user.c > > >> @@ -1823,8 +1823,14 @@ vhost_check_queue_inflights_split(struct > > >> virtio_net *dev, > > >> last_io = inflight_split->last_inflight_io; > > >> if (inflight_split->used_idx != used->idx) { > > >> - inflight_split->desc[last_io].inflight = 0; > > >> - rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > > >> + if (unlikely(last_io >= inflight_split->desc_num)) { > > >> + VHOST_LOG_CONFIG(ERR, "last_inflight_io '%"PRIu16"' > > >> exceeds inflight " > > >> + "queue size (%"PRIu16").\n", last_io, > > >> + inflight_split->desc_num); > > > > > > If such error happens, shouldn't we return RTE_VHOST_MSG_RESULT_ERR > > > instead of just logging an error? > > > > > >> + } else { > > >> + inflight_split->desc[last_io].inflight = 0; > > >> + rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > > >> + } > > >> inflight_split->used_idx = used->idx; > > >> } > > >> > > > > > > Regards, > > > Maxime ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring 2021-10-14 8:17 ` Maxime Coquelin 2021-10-14 8:25 ` Maxime Coquelin @ 2021-10-14 11:25 ` Li Feng 2021-10-14 11:38 ` Maxime Coquelin 1 sibling, 1 reply; 13+ messages in thread From: Li Feng @ 2021-10-14 11:25 UTC (permalink / raw) To: Maxime Coquelin; +Cc: Chenbo Xia, JinYu, dev Thank you for your response. On Thu, Oct 14, 2021 at 4:17 PM Maxime Coquelin <maxime.coquelin@redhat.com> wrote: > > Hi Li, > > Adding Jin Yu who introduced this function. > > On 8/27/21 07:12, Li Feng wrote: > > When getting reqs from the avail ring, the id may exceed inflight > > queue size. Then the dpdk will crash forever. > > You need to add Fixes tag and Cc stable@dpdk.org so that it can be > backported. OK, I will send the v2 version. > > > Signed-off-by: Li Feng <fengli@smartx.com> > > --- > > lib/vhost/vhost_user.c | 10 ++++++++-- > > 1 file changed, 8 insertions(+), 2 deletions(-) > > > > diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c > > index 29a4c9af60..f09d0f6a48 100644 > > --- a/lib/vhost/vhost_user.c > > +++ b/lib/vhost/vhost_user.c > > @@ -1823,8 +1823,14 @@ vhost_check_queue_inflights_split(struct virtio_net *dev, > > last_io = inflight_split->last_inflight_io; > > > > if (inflight_split->used_idx != used->idx) { > > - inflight_split->desc[last_io].inflight = 0; > > - rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > > + if (unlikely(last_io >= inflight_split->desc_num)) { > > + VHOST_LOG_CONFIG(ERR, "last_inflight_io '%"PRIu16"' exceeds inflight " > > + "queue size (%"PRIu16").\n", last_io, > > + inflight_split->desc_num); > > If such error happens, shouldn't we return RTE_VHOST_MSG_RESULT_ERR > instead of just logging an error? I think ignoring the error is ok. No one could handle this error correctly. At this time the guest virtio driver of this virtqueue may be in an incorrect state. > > > + } else { > > + inflight_split->desc[last_io].inflight = 0; > > + rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > > + } > > inflight_split->used_idx = used->idx; > > } > > > > > > Regards, > Maxime > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring 2021-10-14 11:25 ` Li Feng @ 2021-10-14 11:38 ` Maxime Coquelin 2021-10-14 11:54 ` Li Feng 0 siblings, 1 reply; 13+ messages in thread From: Maxime Coquelin @ 2021-10-14 11:38 UTC (permalink / raw) To: Li Feng; +Cc: Chenbo Xia, JinYu, dev On 10/14/21 13:25, Li Feng wrote: > Thank you for your response. > > On Thu, Oct 14, 2021 at 4:17 PM Maxime Coquelin > <maxime.coquelin@redhat.com> wrote: >> >> Hi Li, >> >> Adding Jin Yu who introduced this function. >> >> On 8/27/21 07:12, Li Feng wrote: >>> When getting reqs from the avail ring, the id may exceed inflight >>> queue size. Then the dpdk will crash forever. >> >> You need to add Fixes tag and Cc stable@dpdk.org so that it can be >> backported. > OK, I will send the v2 version. > >> >>> Signed-off-by: Li Feng <fengli@smartx.com> >>> --- >>> lib/vhost/vhost_user.c | 10 ++++++++-- >>> 1 file changed, 8 insertions(+), 2 deletions(-) >>> >>> diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c >>> index 29a4c9af60..f09d0f6a48 100644 >>> --- a/lib/vhost/vhost_user.c >>> +++ b/lib/vhost/vhost_user.c >>> @@ -1823,8 +1823,14 @@ vhost_check_queue_inflights_split(struct virtio_net *dev, >>> last_io = inflight_split->last_inflight_io; >>> >>> if (inflight_split->used_idx != used->idx) { >>> - inflight_split->desc[last_io].inflight = 0; >>> - rte_atomic_thread_fence(__ATOMIC_SEQ_CST); >>> + if (unlikely(last_io >= inflight_split->desc_num)) { >>> + VHOST_LOG_CONFIG(ERR, "last_inflight_io '%"PRIu16"' exceeds inflight " >>> + "queue size (%"PRIu16").\n", last_io, >>> + inflight_split->desc_num); >> >> If such error happens, shouldn't we return RTE_VHOST_MSG_RESULT_ERR >> instead of just logging an error? > I think ignoring the error is ok. No one could handle this error correctly. > At this time the guest virtio driver of this virtqueue may be in an > incorrect state. Not sure to understand how it can happen. But I see that last_io is actually vq->inflight_split->last_inflight_io, which is set only by rte_vhost_set_last_inflight_io_split() API. Shouldn't there be a sanity check there to ensure that last_inflight_io is smaller than desc_num value set by the frontend? Returning an error is the right thing to do anyway. >> >>> + } else { >>> + inflight_split->desc[last_io].inflight = 0; >>> + rte_atomic_thread_fence(__ATOMIC_SEQ_CST); >>> + } >>> inflight_split->used_idx = used->idx; >>> } >>> >>> >> >> Regards, >> Maxime >> > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring 2021-10-14 11:38 ` Maxime Coquelin @ 2021-10-14 11:54 ` Li Feng 0 siblings, 0 replies; 13+ messages in thread From: Li Feng @ 2021-10-14 11:54 UTC (permalink / raw) To: Maxime Coquelin; +Cc: Chenbo Xia, dev On Thu, Oct 14, 2021 at 7:38 PM Maxime Coquelin <maxime.coquelin@redhat.com> wrote: > > > > On 10/14/21 13:25, Li Feng wrote: > > Thank you for your response. > > > > On Thu, Oct 14, 2021 at 4:17 PM Maxime Coquelin > > <maxime.coquelin@redhat.com> wrote: > >> > >> Hi Li, > >> > >> Adding Jin Yu who introduced this function. > >> > >> On 8/27/21 07:12, Li Feng wrote: > >>> When getting reqs from the avail ring, the id may exceed inflight > >>> queue size. Then the dpdk will crash forever. > >> > >> You need to add Fixes tag and Cc stable@dpdk.org so that it can be > >> backported. > > OK, I will send the v2 version. > > > >> > >>> Signed-off-by: Li Feng <fengli@smartx.com> > >>> --- > >>> lib/vhost/vhost_user.c | 10 ++++++++-- > >>> 1 file changed, 8 insertions(+), 2 deletions(-) > >>> > >>> diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c > >>> index 29a4c9af60..f09d0f6a48 100644 > >>> --- a/lib/vhost/vhost_user.c > >>> +++ b/lib/vhost/vhost_user.c > >>> @@ -1823,8 +1823,14 @@ vhost_check_queue_inflights_split(struct virtio_net *dev, > >>> last_io = inflight_split->last_inflight_io; > >>> > >>> if (inflight_split->used_idx != used->idx) { > >>> - inflight_split->desc[last_io].inflight = 0; > >>> - rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > >>> + if (unlikely(last_io >= inflight_split->desc_num)) { > >>> + VHOST_LOG_CONFIG(ERR, "last_inflight_io '%"PRIu16"' exceeds inflight " > >>> + "queue size (%"PRIu16").\n", last_io, > >>> + inflight_split->desc_num); > >> > >> If such error happens, shouldn't we return RTE_VHOST_MSG_RESULT_ERR > >> instead of just logging an error? > > I think ignoring the error is ok. No one could handle this error correctly. > > At this time the guest virtio driver of this virtqueue may be in an > > incorrect state. > > Not sure to understand how it can happen. > But I see that last_io is actually vq->inflight_split->last_inflight_io, > which is set only by rte_vhost_set_last_inflight_io_split() API. The polluted value is from the frontend driver. My environment occurs this issue, and a VM is hang, so I guess this bad value comes from it. > > Shouldn't there be a sanity check there to ensure that last_inflight_io > is smaller than desc_num value set by the frontend? Yes, putting a check in rte_vhost_set_last_inflight_io_split is also ok. I will send the v2 version that includes this. Thanks. > > Returning an error is the right thing to do anyway. OK. > > >> > >>> + } else { > >>> + inflight_split->desc[last_io].inflight = 0; > >>> + rte_atomic_thread_fence(__ATOMIC_SEQ_CST); > >>> + } > >>> inflight_split->used_idx = used->idx; > >>> } > >>> > >>> > >> > >> Regards, > >> Maxime > >> > > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* [dpdk-dev] [PATCH v2] vhost: add sanity check when operating the split ring 2021-08-27 5:12 [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring Li Feng 2021-09-01 5:01 ` Li Feng 2021-10-14 8:17 ` Maxime Coquelin @ 2021-10-14 12:40 ` Li Feng 2021-10-15 8:51 ` Maxime Coquelin 2 siblings, 1 reply; 13+ messages in thread From: Li Feng @ 2021-10-14 12:40 UTC (permalink / raw) To: Maxime Coquelin, Chenbo Xia, Lin Li, Jin Yu, Yu Zhang, Xun Ni Cc: dev, Li Feng, stable The idx in rte_vhost_set_last_inflight_io_split is from the frontend driver, check if it's in the virtqueue range. Fixes: bb0c2de9602b ("vhost: add APIs to operate inflight ring") Cc: stable@dpdk.org Signed-off-by: Li Feng <fengli@smartx.com> --- lib/vhost/vhost.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c index 9540522dac..3b674ac320 100644 --- a/lib/vhost/vhost.c +++ b/lib/vhost/vhost.c @@ -1226,6 +1226,9 @@ rte_vhost_set_last_inflight_io_split(int vid, uint16_t vring_idx, if (unlikely(!vq->inflight_split)) return -1; + if (unlikely(idx >= vq->size)) + return -1; + vq->inflight_split->last_inflight_io = idx; return 0; } -- 2.31.1 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v2] vhost: add sanity check when operating the split ring 2021-10-14 12:40 ` [dpdk-dev] [PATCH v2] vhost: add sanity check when operating the " Li Feng @ 2021-10-15 8:51 ` Maxime Coquelin 2021-10-15 9:25 ` Li Feng 0 siblings, 1 reply; 13+ messages in thread From: Maxime Coquelin @ 2021-10-15 8:51 UTC (permalink / raw) To: Li Feng, Chenbo Xia, Lin Li, Jin Yu, Yu Zhang, Xun Ni; +Cc: dev, stable The title is too vague, I would put something like: vhost: add sanity check on inflight last index On 10/14/21 14:40, Li Feng wrote: > The idx in rte_vhost_set_last_inflight_io_split is from the frontend s/idx/index/ > driver, check if it's in the virtqueue range. > > Fixes: bb0c2de9602b ("vhost: add APIs to operate inflight ring") > Cc: stable@dpdk.org > > Signed-off-by: Li Feng <fengli@smartx.com> > --- > lib/vhost/vhost.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c > index 9540522dac..3b674ac320 100644 > --- a/lib/vhost/vhost.c > +++ b/lib/vhost/vhost.c > @@ -1226,6 +1226,9 @@ rte_vhost_set_last_inflight_io_split(int vid, uint16_t vring_idx, > if (unlikely(!vq->inflight_split)) > return -1; > > + if (unlikely(idx >= vq->size)) > + return -1; > + > vq->inflight_split->last_inflight_io = idx; > return 0; > } > Other than that, this is fine to me: Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com> If my suggestions are fine for you, I can fix while applying. Thanks, Maxime ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v2] vhost: add sanity check when operating the split ring 2021-10-15 8:51 ` Maxime Coquelin @ 2021-10-15 9:25 ` Li Feng 2021-10-21 12:32 ` Maxime Coquelin 0 siblings, 1 reply; 13+ messages in thread From: Li Feng @ 2021-10-15 9:25 UTC (permalink / raw) To: Maxime Coquelin; +Cc: Chenbo Xia, Lin Li, Jin Yu, Yu Zhang, Xun Ni, dev, stable On Fri, Oct 15, 2021 at 4:52 PM Maxime Coquelin <maxime.coquelin@redhat.com> wrote: > > The title is too vague, I would put something like: > > vhost: add sanity check on inflight last index > > On 10/14/21 14:40, Li Feng wrote: > > The idx in rte_vhost_set_last_inflight_io_split is from the frontend > > s/idx/index/ > > > driver, check if it's in the virtqueue range. > > > > Fixes: bb0c2de9602b ("vhost: add APIs to operate inflight ring") > > Cc: stable@dpdk.org > > > > Signed-off-by: Li Feng <fengli@smartx.com> > > --- > > lib/vhost/vhost.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c > > index 9540522dac..3b674ac320 100644 > > --- a/lib/vhost/vhost.c > > +++ b/lib/vhost/vhost.c > > @@ -1226,6 +1226,9 @@ rte_vhost_set_last_inflight_io_split(int vid, uint16_t vring_idx, > > if (unlikely(!vq->inflight_split)) > > return -1; > > > > + if (unlikely(idx >= vq->size)) > > + return -1; > > + > > vq->inflight_split->last_inflight_io = idx; > > return 0; > > } > > > > Other than that, this is fine to me: > > Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com> > > If my suggestions are fine for you, I can fix while applying. > It's fine. > Thanks, > Maxime > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [dpdk-dev] [PATCH v2] vhost: add sanity check when operating the split ring 2021-10-15 9:25 ` Li Feng @ 2021-10-21 12:32 ` Maxime Coquelin 0 siblings, 0 replies; 13+ messages in thread From: Maxime Coquelin @ 2021-10-21 12:32 UTC (permalink / raw) To: Li Feng; +Cc: Chenbo Xia, Lin Li, Jin Yu, Yu Zhang, Xun Ni, dev, stable On 10/15/21 11:25, Li Feng wrote: > On Fri, Oct 15, 2021 at 4:52 PM Maxime Coquelin > <maxime.coquelin@redhat.com> wrote: >> >> The title is too vague, I would put something like: >> >> vhost: add sanity check on inflight last index >> >> On 10/14/21 14:40, Li Feng wrote: >>> The idx in rte_vhost_set_last_inflight_io_split is from the frontend >> >> s/idx/index/ >> >>> driver, check if it's in the virtqueue range. >>> >>> Fixes: bb0c2de9602b ("vhost: add APIs to operate inflight ring") >>> Cc: stable@dpdk.org >>> >>> Signed-off-by: Li Feng <fengli@smartx.com> >>> --- >>> lib/vhost/vhost.c | 3 +++ >>> 1 file changed, 3 insertions(+) >>> >>> diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c >>> index 9540522dac..3b674ac320 100644 >>> --- a/lib/vhost/vhost.c >>> +++ b/lib/vhost/vhost.c >>> @@ -1226,6 +1226,9 @@ rte_vhost_set_last_inflight_io_split(int vid, uint16_t vring_idx, >>> if (unlikely(!vq->inflight_split)) >>> return -1; >>> >>> + if (unlikely(idx >= vq->size)) >>> + return -1; >>> + >>> vq->inflight_split->last_inflight_io = idx; >>> return 0; >>> } >>> >> >> Other than that, this is fine to me: >> >> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com> >> >> If my suggestions are fine for you, I can fix while applying. >> > It's fine. > >> Thanks, >> Maxime >> > Applied to dpdk-next-virtio/main. Thanks, Maxime ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2021-10-21 12:32 UTC | newest] Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-08-27 5:12 [dpdk-dev] [PATCH v1] vhost: add sanity check for resubmiting reqs in split ring Li Feng 2021-09-01 5:01 ` Li Feng 2021-10-14 8:17 ` Maxime Coquelin 2021-10-14 8:25 ` Maxime Coquelin 2021-10-14 8:28 ` Xia, Chenbo 2021-10-18 1:01 ` Liu, Changpeng 2021-10-14 11:25 ` Li Feng 2021-10-14 11:38 ` Maxime Coquelin 2021-10-14 11:54 ` Li Feng 2021-10-14 12:40 ` [dpdk-dev] [PATCH v2] vhost: add sanity check when operating the " Li Feng 2021-10-15 8:51 ` Maxime Coquelin 2021-10-15 9:25 ` Li Feng 2021-10-21 12:32 ` Maxime Coquelin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).