|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH net-next v4] xen-netback: Adding debugfs "io_ring_qX" files
On Mon, Aug 11, 2014 at 01:17:48PM +0100, Zoltan Kiss wrote:
> On 11/08/14 11:38, Wei Liu wrote:
> >On Sun, Aug 10, 2014 at 10:57:51PM +0800, SeeChen Ng wrote:
> >>Hi, I'm a noob to linux kernel, I tried to figure out the usage of the
> >>function
> >>"simple_write_to_buffer", and I got confused about the code here.
> >>
> >>>+static ssize_t
> >>>+xenvif_write_io_ring(struct file *filp, const char __user *buf, size_t
> >>>count,
> >>>+ loff_t *ppos)
> >>>+{
> >>>+ struct xenvif_queue *queue =
> >>>+ ((struct seq_file *)filp->private_data)->private;
> >>>+ int len;
> >>>+ char write[sizeof(XENVIF_KICK_STR)];
> >>>+
> >>>+ /* don't allow partial writes and check the length */
> >>>+ if (*ppos != 0)
> >>>+ return 0;
> >>>+ if (count < sizeof(XENVIF_KICK_STR) - 1)
> >>>+ return -ENOSPC;
> >>The statement here is trying to verify the value of "count" is smaller
> >>than the size of array "write", make sure that the array got
> >>enough space for the write operation, right?
> >>
> >
> >Yes I think so.
> >
> >>So, I think the statement should be:
> >>
> >> if (count >= sizeof(XENVIF_KICK_STR))
> >> return -ENOSPC;
> >>
> >
> > * sizeof(XENVIF_KICK_STR) = 5
> > * count is the number of bytes needs to be written, in the case of "kick"
> "count" is the number of bytes in the incoming buffer. We don't necessarily
> need all of them.
>
> > it's 5 because the tailing '\0' is also counted.
> >
> >so the correct fix should be
> >
> > if (count > sizeof(XENVIF_KICK_STR))
> > return -ENOSPC;
> That would fail if e.g. there is a newline character after the 4 letters of
> "kick". I've crafted this check in this way so we don't have to worry what
> is after that 4 character. This check makes sure there is at least 4
> character, and strncmp check exactly those ones. If there is anything after
> that, we don't care about it.
>
I think current code is wrong in two ways.
a) echo "k" > io_ring_q0 -> returns -ENOSPC
when there's still space in the array, -EINVAL is more appropriate
b) echo "kick1234" > io_ring_q0 -> succeeds but "kick1234" is not a
defined command
My preferred option here is to check the lenght of the input for
excactly what you want. If you only support "kick", that means you
*only* allow the input to be "kick", nothing less, nothing more.
In any case -ENOSPC when there is still space is wrong. -EINVAL is more
appropriate.
So another fix will be
if (count is less than expected)
return -EINVAL;
if (count is more than expected)
return -ENOSPC;
Wei.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |