kpatch-build: download correct source for the current kernel (for ubuntu)

As per issue #239.
kpatch-build: add error message if dpkg -x fails to extract source
kpatch-build: redirect output of wget, dpkg, and tar to log file, add error message if tar fails
Merge pull request #240 from flaming-toast/issue239

kpatch-build: download correct source for the current kernel (for ubuntu)
kpatch-build: ubuntu fix for vmlinux_3 error

kpatch load fails on Ubuntu with:

  kpatch: unable to find module 'vmlinux_3'

The root cause is that the vmlinux file on Ubuntu is named
vmlinux-3.13.0-24-generic instead of just vmlinux.

Let's just call it "vmlinux" in the objname field.
kpatch-build: add ccache symlinks to PATH

On Ubuntu, the ccache symlinks aren't automatically added to the PATH,
so update PATH accordingly.

On Fedora, the PATH is updated automatically when installing ccache.
_But_, it requires a new bash session to be created after installing
ccache before the new PATH takes effect.  So it's a good idea to fix it
for Fedora as well.
Merge pull request #241 from jpoimboe/ubuntu-fixes

Ubuntu fixes
kmod/core: fix kpatch_put_modules call order

kpatch_put_modules() should be called _after_ removing the ftrace
filters.
kmod/core: fix kpatch_put_modules call in error path

If kpatch_ftrace_add_func fails, num_funcs will be one less than what it
needs to be for kpatch_put_modules to work properly.  Instead give it
the full array size, and it can figure out which modules to put based on
whether func->mod is nonzero.
kmod/core: fix error path for kpatch_verify_symbol_match failure

If kpatch_verify_symbol_match() fails, set the num_funcs variable so
that the ftrace rollback only removes the filter for the affected
functions.
kmod/core: protect find_module with module_mutex
kmod/core: use single quotes

Use single quotes when printing the name of a patch module, rather than
double quotes.  This is more consistent with other printk messages, and
looks better too!
kmod/core: add ftrace helper functions

Move all the ftrace filtering and registering logic into a couple of new
helper functions.  Change kpatch_num_registered to kpatch_num_patched,
which now tracks the number of patched functions rather than the number
of patch modules.

This simplifies the code a bit and will also prevent a future loaded
module scenario where ftrace_ops can be registered with an empty filter,
resulting in _all_ kernel functions getting registered with ftrace.
kmod/core: move kpatch_write_relocations call

Write the relocations _after_ calling kpatch_calculate_old_addr() so
that we'll have a reference to the affected modules.
kmod/core: get rid of kpatch_internal

The kpatch_internal struct is a good idea, in that it documents which
parts of kpatch_module shouldn't be used by the patch module.  But it
creates extra code and will require more extra code if we want to keep a
list of kpmods, which is needed to create a module notifier for module
patching of future loaded modules.

Embedding the private data directly in the public struct allows the code
to be simpler: no extra kmallocs/kfrees, no need to store pointers
between the public and private structs.  I think the simpler code is
worth the tradeoff (exposing implementation detail).  Kernel code
usually doesn't bother with hiding a internal struct data from other
kernel code anyway.  For example, see ftrace_ops or struct kprobe.

The private fields are documented with a "private" comment.
kmod/core: create global kpmod_list

Create a list of registered patch modules, which will be used in the
module notifier to patch future loaded modules.  It will also be used to
fix the kpatch replace race condition where it calls module_put too
early.
kmod/core: fix replace race condition

In the replace case, stop calling module_put on a patch module before
we're potentially done with it.

This will also be needed for future module patching if we want to
properly replace a patch module which only patches a future loaded
module (that's a mouthful).

Fixes #165.
kmod/core: support for patching of future loaded modules

This allows a patch module to contain patched functions for modules
which haven't been loaded yet.  If/when the module is loaded later, it
will be patched from the module notifier function.
kpatch-build: revert previous module building interface

Revert the previous kpatch-build module building interface commits to
prepare for a completely different approach which builds vmlinux and all
the modules in a single pass.

This reverts commit fac9d706127ed900dd6ea7eb523914c811abac11.
This reverts commit d166fb4379fa6cdcd60553ee4d42e5fc6377b741.
kpatch-build: kpatch-build module patching support

This adds support to kpatch-build for patching modules.  It builds the
entire kernel tree, vmlinux and modules, in a single pass and then
detects which modules need to be patched.  This is the easiest case
(since the user doesn't need to care about which binaries are affected)
and the safest (since the user could be wrong).

The first build with no ccache takes a long time, but after the cache is
populated, it only takes about two minutes on my laptop.  It does take
up a TON of space in the cache now though (~/.kpatch/obj is now 8GB).

Next we can add the '-t' cmdline option for advanced users to specify
build targets.