[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v4 6/9] livepatch: Add parsing for the symbol+0x<offset>



On 09/08/2016 10:22 AM, Konrad Rzeszutek Wilk wrote:
On Wed, Sep 07, 2016 at 02:10:43AM -0600, Jan Beulich wrote:
On 06.09.16 at 21:56, <konrad.wilk@xxxxxxxxxx> wrote:
On Wed, Aug 24, 2016 at 03:08:01AM -0600, Jan Beulich wrote:
On 24.08.16 at 04:22, <konrad.wilk@xxxxxxxxxx> wrote:
--- a/xen/common/livepatch.c
+++ b/xen/common/livepatch.c
@@ -237,13 +237,34 @@ static const char *livepatch_symbols_lookup(unsigned long 
addr,
 static int resolve_old_address(struct livepatch_func *f,
                                const struct livepatch_elf *elf)
 {
+    const char *s;
+    char *plus = NULL;

Pointless initializer.

We need that otherwise this part (which is at the bottom of this function):

    if ( plus )
    {
        *plus = '+';
        f->old_addr += offset;
    }


May be invoked for symbols that that don't have the '+' in them.

I don't see how it would. This

    plus = strchr(f->name, '+');

comes ahead of any paths leading to the code you quote.

Ah. Stale information - the earlier patch had 'slash' and 'plus' variables
to look for - and that was why I needed it.

But with the code you are quoting - it is not needed.

+    /* +<offset> */
+    plus = strchr(f->name, '+');

And I think you should prefer using the local variable here.

<nods>


Furthermore you're losing const here - does f->name really point
to memory that doesn't get mapped r/o?

Yes.

The 'struct livepatch_func' contains the the ->opaque array of 31 bytes
(from which we use 5 bytes) which the hypervisor uses to stash the original
instructions.

How does the patch name end up in (5 bytes of) the opaque field?

I was (ineptly) saying that the struct livepatch_func has fields that are
modified, hence it ends up in .data section.

Wait a minute. The f->name should have a relocation to point to .rodata
instead of .data! And that should have crashed when I modified it.


livepatch-build-tools puts the function names in a read only section (.livepatch.strings), so the approach of fiddling with f->name probably needs to change.

--
Ross Lagerwall

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.