On 01/11/22(Tue) 15:26, Masato Asou wrote:
> Hi,
> 
> Return error number instead of call panic().

Makes sense to me.  Do you know how this error can occur?  Is is a logic
error or are we trusting values produced by a third party?

> comment, ok?
> --
> ASOU Masato
> 
> diff --git a/sys/dev/pv/xenstore.c b/sys/dev/pv/xenstore.c
> index 1e4f15d30eb..dc89ba0fa6d 100644
> --- a/sys/dev/pv/xenstore.c
> +++ b/sys/dev/pv/xenstore.c
> @@ -118,6 +118,7 @@ struct xs_msg {
>       struct xs_msghdr         xsm_hdr;
>       uint32_t                 xsm_read;
>       uint32_t                 xsm_dlen;
> +     int                      xsm_error;
>       uint8_t                 *xsm_data;
>       TAILQ_ENTRY(xs_msg)      xsm_link;
>  };
> @@ -566,9 +567,7 @@ xs_intr(void *arg)
>       }
>  
>       if (xsm->xsm_hdr.xmh_len > xsm->xsm_dlen)
> -             panic("message too large: %d vs %d for type %d, rid %u",
> -                 xsm->xsm_hdr.xmh_len, xsm->xsm_dlen, xsm->xsm_hdr.xmh_type,
> -                 xsm->xsm_hdr.xmh_rid);
> +             xsm->xsm_error = EMSGSIZE;
>  
>       len = MIN(xsm->xsm_hdr.xmh_len - xsm->xsm_read, avail);
>       if (len) {
> @@ -800,7 +799,9 @@ xs_cmd(struct xs_transaction *xst, int cmd, const char 
> *path,
>               error = xs_geterror(xsm);
>               DPRINTF("%s: xenstore request %d \"%s\" error %s\n",
>                   xs->xs_sc->sc_dev.dv_xname, cmd, path, xsm->xsm_data);
> -     } else if (mode == READ) {
> +     } else if (xsm->xsm_error != 0)
> +             error = xsm->xsm_error;
> +     else if (mode == READ) {
>               KASSERT(iov && iov_cnt);
>               error = xs_parse(xst, xsm, iov, iov_cnt);
>       }
> 

Reply via email to