2017-03-26 15:04 GMT+02:00 Wei Liu <wei.l...@citrix.com>:

> On Sun, Mar 26, 2017 at 01:33:08PM +0200, Felix Schmoll wrote:
> [...]
> > > So just one last time to be clear about this: You can't just ignore
> > interrupts and write all other edges to a shared memory region, like the
> > KCOV feature the syzkaller uses does,
>
> Yes, you can.
>
> Since you mention that, let's break things down a bit more.
>
> Yes, you need to ignore interrupt and write the execution path to
> somewhere. This is one thing.
>
> The other thing is you need to pass that back to userspace.  KCOV does
> that by inserting the buffer in which the execution path is stored into
> the calling process's address space. You can do that for this project as
> well.  Or, you can make Xen copy that to a userspace buffer. Either way,
> you need to make a hypercall.
>
> I think having Xen copy the to a buffer is simpler because  you don't
> need to worry about plumbing through the kernel. Less work for you.
>
> > but have to find a way to clean the
> > execution path from whatever Xen is doing under the hood, which is what
> > makes it difficult? Or is it that afl-gcc is actually doing much more
> than
> > inserting that snippet?
>
> It does a bit more than inserting "that snippet". It also provide a
> fork-server, which would stop before executing main function. Xen
> doesn't support fork, nor has a main function. Having VM-forking support
> is a nebulous goal.
>
> You can, of course, modify afl toolchain to suite your need. But I would
> avoid doing that because the changes can't be fed back into AFL
> upstream, and we're not interested in maintaining a fork of AFL.
>
> Basically I want to do everything properly since day one. By that I mean
> everything should be upstreamable.
>
> The major difficulty is to get things into a shape that can be committed
> into xen.git. Yes, getting a prototype working might not be too
> difficult for you, but our ultimate goal is make upstream Xen able to
> run it on a regular basis.
>
> Even though you're asked to work on this one thing, along the way you
> might discover other things that need fixing. You code can't break other
> bits of Xen, so you need to at least have basic ideas of what is what
> and how they fit together. This is going to take time. First thing that
> comes to mind is Xen's build system might not fit for the task yet.
>
> There are other factors, too. Like, you need to learn the dynamics of
> the community; reviewers may not have the bandwidth to give you quick
> feedback. The non-technical side also plays a significant part in the
> whole project, too.
>
> And this is just for the first of all three goals. I'm sure there will
> be a lot more hidden obstacles along the way because there are so many
> moving parts. Over the years I think I've become more and more
> conservative in estimating work. :-)
>
> With all that said --  maybe you're mostly interested in hacking
> together a working prototype? I think that's acceptable, too.  We need
> to be on the same page so that we can work out a feasible plan.
>
> Feel free to speak your thought. This project is meant to be beneficial
> to both you and the Xen project. I would be quite delighted to hear your
> understanding of the project.


Principally I would be fine with either the tracing or the prototype, I
find it however much more difficult to imagine what successfully
implementing the tracing would look like and how to write a good proposal
that goes into specifics. Writing a proof-of-concept/prototype is easier in
that regard as success would be just defined by "does it run".

What I'm having in my mind right now is still a rather vague notion of how
the tracing output looks like and an a bunch of ideas on what afl and
syzkaller do, combined with huge gaps in how Xen "really" works. That will
certainly start to clear up once I start really digging into it, but until
then I have to rely mostly on your intuition in terms of what is realistic
in what timeframe.

Now if I have to decide between the two, I'd still prefer the tracing,
since on the one hand being the author of a hypercall seems to be pretty
cool, and on the other hand learning the actual contribution process and
writing something ready for deployment seems much more valuable.

Felix

>
> >
> > Is there any particular format you're thinking of for the execution path,
> > i.e. can the three-line snippet be used, or would that already belong to
> > #2, and you would want to have something like a sequence of
> > left-/right-branch-taken decisions?
>
> No, I don't have preference on the format.
>
> >
> > Also, just for my general understanding, one would in the end still have
> to
> > build some infrastructure similar to what syzkaller does to actually run
> > the hypervisor, i.e. some virtualisation environment to run the
> hypervisor
> > in, and so on, right?
> >
>
> No. That would be too much work. Some critical pieces are still missing.
>
> > Lastly, do you have any suggestions for what would be a good
> > midterm-deliverable? Based on the assumption that the answer to my first
> > question is affirmative I was thinking of a thorough idea on how the
> > hypercall is implemented.
> >
>
> Please read above --  we need to be on the same page.
>
> Wei.
>
> > Thanks once again
> > Felix
> >
> > > Wei.
> > >
>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

Reply via email to