Commit Graph

26 Commits

Author SHA1 Message Date
Josh Poimboeuf 5c98ec65a0 kpatch-build: use original vmlinux
There's at least one case in the kernel (ddebug_proc_show) where the
compiled instructions are affected by the source file path given to gcc.
Which means that compiling the kernel with O= will result in many of the
function addresses changing.  This causes a mismatch between the locally
compiled vmlinux and the original vmlinux, which is very dangerous,
since we need the addresses to be correct.

The easy fix is just to use the original vmlinux for all the function
addresses.

Other potential ways to fix it which we might want to consider in the
future:

- use a combination of the old System.map and the new vmlinux to find
  the addresses.  The function ordering should be the same.  For
  non-duplicate symbols, use System.map.  For duplicate symbols, use
  vmlinux to find what order the symbol comes in.  e.g. the 2nd
  occurrence of foo() in System.map.  It adds a little complexity to the
  lookup code, but seems safe and wouldn't require the kernel debuginfo
  package.  However, this may not help us for patching modules.

- do something similar at runtime, i.e. use kallsyms_lookup_name for
  non-dups and kallsyms_on_each_symbol for dups, and look for the nth
  occurrence of the symbol (value of n is decided at build time).  This
  has the complexity of the previous option but it's done at runtime
  rather than build time, so... why?  Doing it at build time is better.

- compile the kernel in place.  This basically means no more caching
  because recompiling with --function-sections causes everything to be
  recompiled again.  This is bad for kpatch developers' SSDs...
2014-05-16 21:19:25 -05:00
Josh Poimboeuf 9f69d1fe61 readme: give a more concrete patch example
I think a more concrete example makes it a little easier to grok.
2014-05-02 22:53:04 -05:00
Udo Seidel 6ea2a2ffcb correct build requirements for Fedora 20; yum-utils was missing 2014-05-02 12:18:36 +02:00
Josh Poimboeuf b5de5a8b25 kmod/core: checkpatch and sparse fixes
- checkpatch doesn't like the FSF address since it's subject to change
- checkpatch doesn't like strings split by line
- whitespace fix
- sparse suggested to change some variables and functions to static
2014-05-01 12:31:33 -05:00
Josh Poimboeuf d76ba0b9a7 readme: taint clarifications 2014-05-01 12:15:58 -05:00
Josh Poimboeuf c85467db04 readme: kpatch is an infrastructure, not a tool 2014-05-01 12:15:30 -05:00
Seth Jennings 86ee4d188f update docs for Ubuntu support
Signed-off-by: Seth Jennings <sjenning@redhat.com>
2014-04-29 13:33:02 -05:00
Josh Poimboeuf d854e7f695 readme: add irc channel info
Fixes #142.
2014-04-28 21:13:50 -05:00
Josh Poimboeuf b7a2862f90 safe kpatch unload
Currently the patch module calls kpatch_unregister in the patch module
exit path.  If the activeness safety check fails in kpatch_unregister,
it's too late for the patch module to stop exiting, so all it can do is
panic.

Prevent this scenario by requiring the user to disable the patch module
via sysfs before allowing the module to be unloaded.  The sysfs write
will fail if the activeness safety check fails.  An rmmod will fail if
the patch is still enabled.

Also add support for this new unloading model in "kpatch unload".
2014-04-25 23:05:26 -05:00
Josh Poimboeuf 7cb574aa22 readme: document WARN macro behavior
Document the WARN behavior, along with a few other updates about the
taint flag and kprobes incompatibility.

Fixes #112.
2014-04-23 14:34:05 -05:00
Josh Poimboeuf d1d79084a3 readme: recommend use of the kpatch utility
The kpatch utility is now user friendly enough that it can be used
instead of direct insmods.  We should encourage people to use it, since
we will soon be adding user space functionality above and beyond
insmod/rmmod when loading and unloading.
2014-04-21 21:44:40 -05:00
Josh Poimboeuf a7efb05c81 update patch module terminology
Try to be more consistent with the terminology.  In various places we
call it a "hotpatch module", "hot patch module", or "patch module".  How
about we just call it a "patch module" everywhere?
2014-04-15 13:47:56 -05:00
Josh Poimboeuf 710a72e1ab readme: add more detail to limitations section 2014-03-21 14:57:52 -05:00
Josh Poimboeuf 8834d25564 readme: small clarification about contributing 2014-03-19 10:29:07 -05:00
Josh Poimboeuf 2d728c4f0d make kpatch-build a first class script
kpatch-build is outgrowing the kpatch script and probably is a better
fit as its own utility instead of being wrapped by kpatch.  Install
kpatch-build into /usr/local/bin, remove the kpatch wrapper around it,
and update the README accordingly.
2014-03-11 10:43:48 -05:00
Josh Poimboeuf c22610646e readme: add some more Q&A's and a limitation 2014-02-20 21:10:46 -06:00
Josh Poimboeuf 7ffc0fdeaa readme typo and grammar fix 2014-02-19 21:32:32 -06:00
Josh Poimboeuf af9887c909 add readme faq 2014-02-19 15:56:14 -06:00
Josh Poimboeuf 84a0b00d5a README: s/to be loaded/to load/ 2014-02-19 09:50:56 -06:00
Josh Poimboeuf 2ecd73abdb README: describe the different components of kpatch 2014-02-18 21:40:14 -06:00
Seth Jennings 586813814c Merge pull request #30 from jpoimboe/readme-caveats
add warnings, limitations, mailing list to README
2014-02-18 18:06:53 -06:00
Josh Poimboeuf 68fe3e6593 add warnings, limitations, mailing list to README 2014-02-18 17:37:12 -06:00
Josh Poimboeuf 35ececbeea ccache README recommendation 2014-02-18 15:56:47 -06:00
Josh Poimboeuf 843a42298b rearrange README and add some more content
- move license to bottom
- clarify dependencies and installation procedure
- move gotchas section to installation section
- move status section to intro
- add more information about how it works
2014-02-18 11:49:35 -06:00
Josh Poimboeuf 8085d0402b build and install core module with make
Build and install the kpatch core module with make and make install,
rather than building it every time with kpatch build.

The only downside to this approach is that the user has to make and make
install kpatch every time they get a new kernel.  But this is only
temporary, until the kpatch module is delivered in an RPM.
2014-02-18 07:44:33 -06:00
Josh Poimboeuf 56e350430b convert README to markdown
This makes it more readable on the github page, since github expects
README to be in markdown format.
2014-02-17 15:15:46 -06:00