18

I'm in an operating systems class. Coming up, we have to do some work modifying kernel code. We have been advised not to use personal machines to test (I suppose this means install it) as we could write bad code and write over somewhere we shouldn't. We are given access to a machine in a lab to be safe.

If I were to test using a VM, would that protect the host system from potentially unsafe code? I really want to not have to be stuck to a system at school and snapshots will be useful.

If it is still high risk, any suggestions on what I need to consider to test safely?

We will be using something like linuxmint to start with. If anyone wants to see what will be in the current project: http://www.cs.fsu.edu/~cop4610t/assignments/project2/writeup/specification.pdf

  • It's honestly not so much of a risk to do it on real hardware, especially if you take backups. I have, and I'm sure many other devs have as well. – hobbs Oct 1 '15 at 2:54
  • @hobbs That's because many of us like to live dangerously, usually long enough to regret it. Working on your actual machine is fine if you're a careful developer working on rather small modules. For larger developments (or careless devs), it's probably best to work on an isolated environment. It might also be a good idea to work on a "clean distribution", to make sure no kernel-level customisation can interefere with your module. Keep in mind that kernel module development is where the smallest mistake can have the most dreadful consequences :D – John WH Smith Oct 1 '15 at 16:52
28

The main risks developing kernel modules are that you can crash your system much more easily than with regular code, and you'll probably find that you sometimes create modules that can't be unloaded which means you'll have to reboot to re-load them after you fix what's wrong.

Yes, a VM is fine for this kind of development and it's what I use when I'm working on kernel modules. The VM nicely isolates your test environment from your running system.

If you're going to take and restore snapshots, you should keep your source code checked in to a version control repository outside the VM so you don't accidentally lose your latest code when you discard the VM's current state.

  • 3
    Or it might be possible to snapshot only certain aspects of the VM. Keeping source code on a separate virtual disk, for example. Of course, an out-of-VM source code repository to which you regularly check in code is a good idea anyway; it can save you from many embarassing mistakes, and it teaches good coding practice. – a CVn Oct 1 '15 at 11:02
  • The other side of crashing your system more easily is that when you do crash your system, you have a higher chance of causing collateral corruption. – user253751 Oct 2 '15 at 0:13
14

Assuming you aren't trying to write a driver for actual hardware, this is a great way to work on modules. You can snapshot the working system, and if you blow something up, just go back to the snapshot.

If you can, make a full duplicate of the VM, just in case the snapshot system is weirder than I think. :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.