Google Summer of Code 2014: Difference between revisions

From QEMU
No edit summary
Line 30: Line 30:


== QEMU projects ==
== QEMU projects ==
=== Device driver framework for low-level testing ===
'''Summary:''' Implement bus drivers and example device tests
It is currently very hard to exercise device emulation code and, as a result,
most device emulation code does not have tests.  The reason for this is that
modern hardware is complex and often requires elaborate setup before it can be
accessed.  This made testing device emulation code "too hard" but this project
will change that!
QEMU has a mode called 'qtest' where it simulates the machine without running
guest code.  Instead, qtest exposes a protocol for accessing memory, detecting
interrupts, and stepping the clock.  Tests use qtest mode to verify that an
emulated device operates according to its specification.
For example, a test case can program the timer chip and then step the clock,
checking if the timer interrupt has been raised.
In order to do this for more complex PCI, I2C, ISA, and USB devices, we need
the equivalent of device driver frameworks that operating system kernels have.
Right now, QEMU's libqos provides a meager set of device driver APIs but much
more is necessary before test cases can be expressed concisely and without a
lot of setup.
'''Links:'''
* [http://git.qemu-project.org/?p=qemu.git;a=tree;f=tests/libqos;h=7b67620d176feb10e40c4278957d1f6a65dea4df;hb=HEAD libqos]
* [http://git.qemu-project.org/?p=qemu.git;a=blob;f=tests/ide-test.c;h=4a0d97f19764b6f704f94e6fe8e17dc32e7104bc;hb=HEAD IDE controller test case]
* [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/linux/pci.h Linux kernel pci.h header file]
'''Details:'''
* Skill level: intermediate to advanced
* Language: C
* Mentor: Stefan Hajnoczi <stefanha@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>
=== Disk image fuzz testing ===
'''Summary:''' Implement fuzz testing for image file formats to identify security vulnerabilities before the bad guys do
QEMU supports a range of image file formats including qcow2, VMDK, and VHDX.
Image files are often uploaded by untrusted users to cloud providers or shared
online as untrusted "demo appliances".  Any bug in QEMU that can be triggered
by a malicious image file could be used to compromise the host opening the
image file.
Fuzz testing is an automated random testing technique that explores a
program's code paths by trying random inputs.  When the program under test
crashes, a bug has been found.  These techniques have been used successfully
in other areas such as testing the Linux system call interface.
Your task is to implement fuzz tests for qcow2, VMDK, and VHDX.  These tests
will be merged into qemu.git and part of the test suite.  You can either fix
bugs found by your tests yourself, or work with the community to report them
and provide fixes.
'''Links:'''
* https://en.wikipedia.org/wiki/Fuzz_testing
* [http://git.qemu-project.org/?p=qemu.git;a=tree;f=tests/qemu-iotests;h=3731f5a20482282c096d280f5e9b3ac132377e50;hb=HEAD qemu-iotests test suite (has no fuzz tests)]
* [http://codemonkey.org.uk/projects/trinity/ Trinity Linux system call fuzzer]
'''Details:'''
* Skill level: intermediate
* Language: Python and/or shell
* Mentor: Stefan Hajnoczi <stefanha@redhat.com>


== Libvirt projects ==
== Libvirt projects ==

Revision as of 15:38, 4 February 2014

Introduction

QEMU is applying as a mentoring organization for Google Summer of Code 2014. This page contains our ideas list and information for students and mentors.

Note to students: Google has not yet announced participating organizations for 2014. We do not know whether or not QEMU can participate this year, so use your time wisely and don't invest too much effort yet.

Find Us

Please contact the mentor for the project idea you are interested in. IRC is usually the quickest way to get an answer.

For general questions about QEMU in GSoC, please contact the following people:

Important links

Project Ideas

This is the listing of suggested project ideas. Students are free to suggest their own projects by emailing qemu-devel@nongnu.org and (optionally) CCing potential mentors.

QEMU projects

Device driver framework for low-level testing

Summary: Implement bus drivers and example device tests

It is currently very hard to exercise device emulation code and, as a result, most device emulation code does not have tests. The reason for this is that modern hardware is complex and often requires elaborate setup before it can be accessed. This made testing device emulation code "too hard" but this project will change that!

QEMU has a mode called 'qtest' where it simulates the machine without running guest code. Instead, qtest exposes a protocol for accessing memory, detecting interrupts, and stepping the clock. Tests use qtest mode to verify that an emulated device operates according to its specification.

For example, a test case can program the timer chip and then step the clock, checking if the timer interrupt has been raised.

In order to do this for more complex PCI, I2C, ISA, and USB devices, we need the equivalent of device driver frameworks that operating system kernels have. Right now, QEMU's libqos provides a meager set of device driver APIs but much more is necessary before test cases can be expressed concisely and without a lot of setup.

Links:

Details:

  • Skill level: intermediate to advanced
  • Language: C
  • Mentor: Stefan Hajnoczi <stefanha@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>

Disk image fuzz testing

Summary: Implement fuzz testing for image file formats to identify security vulnerabilities before the bad guys do

QEMU supports a range of image file formats including qcow2, VMDK, and VHDX. Image files are often uploaded by untrusted users to cloud providers or shared online as untrusted "demo appliances". Any bug in QEMU that can be triggered by a malicious image file could be used to compromise the host opening the image file.

Fuzz testing is an automated random testing technique that explores a program's code paths by trying random inputs. When the program under test crashes, a bug has been found. These techniques have been used successfully in other areas such as testing the Linux system call interface.

Your task is to implement fuzz tests for qcow2, VMDK, and VHDX. These tests will be merged into qemu.git and part of the test suite. You can either fix bugs found by your tests yourself, or work with the community to report them and provide fixes.

Links:

Details:

  • Skill level: intermediate
  • Language: Python and/or shell
  • Mentor: Stefan Hajnoczi <stefanha@redhat.com>

Libvirt projects

Introducing job control to the storage driver

Currently, libvirt support job cancellation and progress reporting on domains. That is, if there's a long running job on a domain, e.g. migration, libvirt reports how much data has already been transferred to the destination and how much still needs to be transferred. However, libvirt lacks such information reporting in storage area, to which libvirt developers refer to as the storage driver. The aim is to report progress on several storage tasks, like volume wiping, file allocation an others.

  • Skill level: intermediate

Your own idea

Just catch me (Michal Privoznik) on IRC and we can discuss what interests you.

Links:

Details:

  • Component: libvirt
  • Skill level: (see description to each item)
  • Language: C
  • Mentor: Michal Privoznik <mprivozn@redhat.com>, mprivozn on IRC (#virt OFTC)
  • Suggested by: Michal Privoznik <mprivozn@redhat.com>

Project idea template

=== TITLE ===
 
 '''Summary:''' Short description of the project
 
 Detailed description of the project.
 
 '''Links:'''
 * Wiki links to relevant material
 * External links to mailing lists or web sites
 
 '''Details:'''
 * Skill level: beginner or intermediate or advanced
 * Language: C
 * Mentor: Email address and IRC nick
 * Suggested by: Person who suggested the idea

Information for mentors

Mentors are responsible for keeping in touch with their student and assessing the student's progress. GSoC has a mid-term evaluation and a final evaluation where both the mentor and student assess each other.

The mentor typically gives advice, reviews the student's code, and has regular communication with the student to ensure progress is being made.

Being a mentor is a significant time commitment, plan for 5 hours per week. Make sure you can make this commitment because backing out during the summer will affect the student's experience.

The mentor chooses their student by reviewing student application forms and conducting IRC interviews with candidates. Depending on the number of candidates, this can be time-consuming in itself. Choosing the right student is critical so that both the mentor and the student can have a successful experience.