All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: sstabellini@kernel.org, keir@xen.org, andrew.cooper3@citrix.com,
	mpohlack@amazon.com, ross.lagerwall@citrix.com,
	julien.grall@arm.com, sasha.levin@oracle.com,
	xen-devel@lists.xenproject.org
Subject: Re: [PATCH v8.1 11/27] xsplice: Implement payload loading
Date: Wed, 20 Apr 2016 11:59:34 -0400	[thread overview]
Message-ID: <20160420155913.GA29455@localhost.localdomain> (raw)
In-Reply-To: <571489B102000078000E6B6C@prv-mh.provo.novell.com>

> >+void arch_xsplice_free_payload(void *va)
> >+{
> >+    vfree_xen(va);
> >+}
> 
> What is the idea behind having this hook (instead of generic code just calling
> vfree_xen() [or really just vfree()])?

To have an symmetry with the allocation one. I don't know enough about
ARM to know whether this logic above can be hoisted in the common code
and hence called (or compiled) on ARM.

Let me try.
> 
> >@@ -29,6 +30,13 @@ struct payload {
>      >uint32_t state;                      /* One of the XSPLICE_STATE_*. */
>      >int32_t rc;                          /* 0 or -XEN_EXX. */
>      >struct list_head list;               /* Linked to 'payload_list'. */
> >+    void *text_addr;                     /* Virtual address of .text. */
> >+    size_t text_size;                    /* .. and its size. */
> >+    void *rw_addr;                       /* Virtual address of .data. */
> >+    size_t rw_size;                      /* .. and its size (if any). */
> >+    void *ro_addr;                       /* Virtual address of .rodata. */
> >+    size_t ro_size;                      /* .. and its size (if any). */
> 
> And again the question: Do these pointers really need to be non-const?

I know I tried making them const and the compiler was not happy. I will
follow up with the reasoning.
> 
> >+ size_t pages; /* Total pages for [text,rw,ro]_addr */
> 
> Why size_t and not just unsigned int?

Oh. I was somehow under the impression you liked size_t more than
unsignged int! I will change it over.
> 
> >+static void calc_section(struct xsplice_elf_sec *sec, size_t *size)
> >+{
> >+    Elf_Shdr *s = sec->sec;
> >+    size_t align_size;
> >+
> >+    align_size = ROUNDUP(*size, s->sh_addralign);
> >+    s->sh_entsize = align_size;
> 
> So this is one of the places (the only one?) where the section header gets
> altered. Are you not expecting problems down the road resulting from
> overwriting this field? After all it's used not just in control sections...

The 'man elf' tells me :
"Some  sections  hold a table of fixed-sized entries, such as a symbol
table.  For such a section, this member gives the size in bytes for each entry.
 This member contains zero if the section does not hold  a  table  of 
fixed-size entries."

We may have an value for an payload with one symbol but we don't depend
on this value having any value and just re-use.

We could change the logic to save the aligned size (which would then alter
the amount of pages to allocate along with the amount of bytes to copy)
in some 'per-section' temporary variable (so adding an extra field in
'struct xsplice_elf_sec').

Let me prototype that.
> 
> >+static int move_payload(struct payload *payload, struct xsplice_elf *elf)
> >+{
..snip..

> >+    for ( i = 1; i < elf->hdr->e_shnum; i++ )
> >+    {
> >+        if ( !(elf->sec[i].sec->sh_flags & SHF_ALLOC) &&
> >+             (elf->sec[i].sec->sh_flags & SHF_EXECINSTR) &&
> >+             (elf->sec[i].sec->sh_flags & SHF_WRITE) )
> >+        {
> >+            dprintk(XENLOG_ERR, XSPLICE "%s: No WX sections!\n", elf->name);
> >+            return -EINVAL;
> >+        }
> 
> Is there any reason to have four loops here, with quite a bit of redundancy in
> the if()s, instead of just one loop with a if/else sequence?

There was a historical reason - we wre re-using 'size' but that is no
longer the case.
> 
> Also it's not really clear whether you really mean to honor non-progbits, non-
> nobits sections with SHF_ALLOC set. Perhaps such would better be refused
> for the now at least.

OK. 
> 
> >+    for ( i = 1; i < elf->hdr->e_shnum; i++ )
> >+    {
> >+        if ( elf->sec[i].sec->sh_flags & SHF_ALLOC )
> >+        {
> >+            if ( (elf->sec[i].sec->sh_flags & SHF_EXECINSTR) )
> >+                 buf = payload->text_addr;
> >+            else if ( (elf->sec[i].sec->sh_flags & SHF_WRITE) )
> >+                buf = payload->rw_addr;
> >+             else
> 
> Something's wrong with indentation here (not visible above anymore due to
> the limitations of this web frontend of our mail system).
> 
> >+            /* Don't copy NOBITS - such as BSS. */
> >+            if ( elf->sec[i].sec->sh_type != SHT_NOBITS )
> >+            {
> >+                memcpy(elf->sec[i].load_addr, elf->sec[i].data,
> >+                       elf->sec[i].sec->sh_size);
> >+                dprintk(XENLOG_DEBUG, XSPLICE "%s: Loaded %s at 0x%p\n",
> >+                        elf->name, elf->sec[i].name, elf->sec[i].load_addr);
> >+            }
> 
> "else memset();" is what I would have expected here. Now I see that the
> allocation function clears the pages (in a bogusly open coded way, instead
> of using vzalloc()), but why is that so?

B/c we end up having vzalloc_xen (oh wait, we made that go away). Yes
we do need an memset or introduce vzalloc_xen (and keep vmalloc_xen?).

Your call - memset or introduce vzalloc_xen ?
> 
> >+int xsplice_elf_resolve_symbols(struct xsplice_elf *elf)
.. snip..
> >+        default:
> >+            /* SHN_COMMON and SHN_ABS are above. */
> >+            if ( idx > SHN_LORESERVE )
> 
> >=
> 
> >+                rc = -EOPNOTSUPP;
> >+            /* SHN_UNDEF (0) above. */
> >+            else if ( idx > elf->hdr->e_shnum && idx < SHN_LORESERVE )
> 
> >= and the right side of the && seems pointless due to the preceding if().
> 
> >+            if ( !(elf->sec[idx].sec->sh_flags & SHF_ALLOC) )
> >+                break;
> 
> If you really mean to check this, shouldn't this be done earlier, avoiding needless
> errors on unsupported symbol kinds above?

Right! Will move those  checks right above the switch statement.

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

  reply	other threads:[~2016-04-20 16:00 UTC|newest]

Thread overview: 126+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-13 22:01 [PATCH v8.1] xSplice v1 design and implementation Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 01/27] Revert "libxc/libxl/python/xenstat/ocaml: Use new XEN_VERSION hypercall" Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 02/27] Revert "HYPERCALL_version_op. New hypercall mirroring XENVER_ but sane." Konrad Rzeszutek Wilk
2016-04-14 16:14   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 03/27] xsplice: Design document Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 04/27] xen/xsplice: Hypervisor implementation of XEN_XSPLICE_op Konrad Rzeszutek Wilk
2016-04-14 16:36   ` Jan Beulich
2016-04-15  2:28     ` Konrad Rzeszutek Wilk
2016-04-17  8:05       ` Jan Beulich
2016-04-18  7:48         ` Konrad Rzeszutek Wilk
2016-04-18 16:33           ` Jan Beulich
2016-04-19 10:14             ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 05/27] libxc: Implementation of XEN_XSPLICE_op in libxc Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 06/27] xen-xsplice: Tool to manipulate xsplice payloads Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 07/27] arm/x86: Use struct virtual_region to do bug, symbol, and (x86) exception tables lookup Konrad Rzeszutek Wilk
2016-04-14 16:50   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 08/27] arm/x86/vmap: Add vmalloc_xen, vfree_xen and vm_init_type Konrad Rzeszutek Wilk
2016-04-17 20:17   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 09/27] x86/mm: Introduce modify_xen_mappings() Konrad Rzeszutek Wilk
2016-04-14  4:07   ` Jan Beulich
2016-04-14 13:34     ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 10/27] xsplice: Add helper elf routines Konrad Rzeszutek Wilk
2016-04-17 20:55   ` Jan Beulich
2016-04-18  5:53     ` Konrad Rzeszutek Wilk
2016-04-18  6:23       ` Jan Beulich
2016-04-20 16:07         ` Konrad Rzeszutek Wilk
2016-04-20 16:59           ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 11/27] xsplice: Implement payload loading Konrad Rzeszutek Wilk
2016-04-18  6:16   ` Jan Beulich
2016-04-20 15:59     ` Konrad Rzeszutek Wilk [this message]
2016-04-20 17:05       ` Jan Beulich
2016-04-20 17:36         ` Konrad Rzeszutek Wilk
2016-04-21  6:41           ` Jan Beulich
2016-04-21 15:15       ` Konrad Rzeszutek Wilk
2016-04-21 15:36         ` Jan Beulich
2016-04-21 16:47           ` Konrad Rzeszutek Wilk
2016-04-22  7:40             ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 12/27] xsplice: Implement support for applying/reverting/replacing patches Konrad Rzeszutek Wilk
2016-04-19  6:27   ` Jan Beulich
2016-04-21  0:28     ` Konrad Rzeszutek Wilk
2016-04-21  6:44       ` Jan Beulich
2016-04-21 20:27         ` Konrad Rzeszutek Wilk
2016-04-22  7:44           ` Jan Beulich
2016-04-22 10:51             ` Konrad Rzeszutek Wilk
2016-04-22 17:26     ` Konrad Rzeszutek Wilk
2016-04-25  7:55       ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 13/27] x86/xen_hello_world.xsplice: Test payload for patching 'xen_extra_version' Konrad Rzeszutek Wilk
2016-04-19 17:40   ` Jan Beulich
2016-04-20 16:10     ` Konrad Rzeszutek Wilk
2016-04-20 17:06       ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 14/27] xsplice, symbols: Implement symbol name resolution on address Konrad Rzeszutek Wilk
2016-04-19 19:31   ` Jan Beulich
2016-04-20 12:55     ` Ross Lagerwall
2016-04-21  0:26     ` Konrad Rzeszutek Wilk
2016-04-21  6:46       ` Jan Beulich
     [not found]         ` <CACJDEmrucgYZpCDv3EAkDJUOtdcP9P2T=Vine1o2pzUmwJDY1w@mail.gmail.com>
     [not found]           ` <CACJDEmrzieYh6__MHJH_okoZPk+RA56PuQKv-oid0j1t1po1oQ@mail.gmail.com>
     [not found]             ` <CACJDEmrdi3sTZjGowkvGP67-_DH3+TLvArC8qZfArsyPb6fpuA@mail.gmail.com>
     [not found]               ` <CACJDEmrQ6onv-xqYOi3nekioCSASb4c1eZHJ-rzMxU3Wa7SXTQ@mail.gmail.com>
2016-04-21 13:56                 ` Konrad Rzeszutek Wilk
2016-04-21 14:25                   ` Jan Beulich
2016-04-22  7:17       ` Ross Lagerwall
2016-04-22  7:51         ` Jan Beulich
2016-04-22  8:45           ` Ross Lagerwall
2016-04-22 10:08             ` Jan Beulich
2016-04-22 10:28               ` Konrad Rzeszutek Wilk
2016-04-22 10:50                 ` Jan Beulich
2016-04-22 11:08                   ` Konrad Rzeszutek Wilk
2016-04-22 11:18                     ` Jan Beulich
2016-04-24 21:41                       ` Konrad Rzeszutek Wilk
2016-04-25  8:02                         ` Jan Beulich
2016-04-22 11:13               ` Ross Lagerwall
2016-04-22 11:24                 ` Jan Beulich
2016-04-22 21:10                   ` Konrad Rzeszutek Wilk
2016-04-25  6:41                     ` Ross Lagerwall
2016-04-25  8:15                       ` Jan Beulich
2016-04-22 14:17                 ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 15/27] xsplice, symbols: Implement fast symbol names -> virtual addresses lookup Konrad Rzeszutek Wilk
2016-04-19 19:52   ` Jan Beulich
2016-04-22 15:21     ` Konrad Rzeszutek Wilk
2016-04-25  8:38       ` Jan Beulich
2016-04-25 14:12         ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 16/27] x86, xsplice: Print payload's symbol name and payload name in backtraces Konrad Rzeszutek Wilk
2016-04-19 20:09   ` Jan Beulich
2016-04-13 22:01 ` [PATCH v8.1 17/27] xsplice: Add support for bug frames Konrad Rzeszutek Wilk
2016-04-19 20:17   ` Jan Beulich
2016-04-21  0:29     ` Konrad Rzeszutek Wilk
2016-04-21  6:49       ` Jan Beulich
2016-04-22 10:10         ` Konrad Rzeszutek Wilk
2016-04-22 10:28           ` Jan Beulich
2016-04-22 10:54             ` Konrad Rzeszutek Wilk
2016-04-22 10:58               ` Jan Beulich
2016-04-22 11:10                 ` Konrad Rzeszutek Wilk
2016-04-13 22:01 ` [PATCH v8.1 18/27] xsplice: Add support for exception tables Konrad Rzeszutek Wilk
2016-04-19 20:31   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 19/27] xsplice: Add support for alternatives Konrad Rzeszutek Wilk
2016-04-20  6:28   ` Jan Beulich
2016-04-21  0:30     ` Konrad Rzeszutek Wilk
2016-04-21  6:55       ` Jan Beulich
2016-04-21  0:31     ` Konrad Rzeszutek Wilk
2016-04-21  6:56       ` Jan Beulich
2016-04-22 16:06     ` Konrad Rzeszutek Wilk
2016-04-13 22:02 ` [PATCH v8.1 20/27] build_id: Provide ld-embedded build-ids Konrad Rzeszutek Wilk
2016-04-20  7:14   ` Jan Beulich
2016-04-21  0:33     ` Konrad Rzeszutek Wilk
2016-04-21  6:59       ` Jan Beulich
2016-04-21 20:30         ` Konrad Rzeszutek Wilk
2016-04-22 16:16         ` Konrad Rzeszutek Wilk
2016-04-13 22:02 ` [PATCH v8.1 21/27] xsplice: Print build_id in keyhandler and on bootup Konrad Rzeszutek Wilk
2016-04-13 22:02 ` [PATCH v8.1 22/27] XENVER_build_id/libxc: Provide ld-embedded build-id Konrad Rzeszutek Wilk
2016-04-14 15:03   ` Wei Liu
2016-04-14 15:04   ` Daniel De Graaf
2016-04-20  7:19   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 23/27] libxl: info: Display build_id of the hypervisor Konrad Rzeszutek Wilk
2016-04-14 15:06   ` Wei Liu
2016-04-13 22:02 ` [PATCH v8.1 24/27] xsplice: Stacking build-id dependency checking Konrad Rzeszutek Wilk
2016-04-20  7:49   ` Jan Beulich
2016-04-22 10:46     ` Konrad Rzeszutek Wilk
2016-04-22 10:55       ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 25/27] xsplice/xen_replace_world: Test-case for XSPLICE_ACTION_REPLACE Konrad Rzeszutek Wilk
2016-04-20 11:12   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 26/27] xsplice: Prevent duplicate payloads from being loaded Konrad Rzeszutek Wilk
2016-04-20 11:16   ` Jan Beulich
2016-04-13 22:02 ` [PATCH v8.1 27/27] MAINTAINERS/xsplice: Add myself and Ross as the maintainers Konrad Rzeszutek Wilk
2016-04-14 14:26 ` [PATCH v8.1] xSplice v1 design and implementation Konrad Rzeszutek Wilk
2016-04-14 14:29   ` Julien Grall
2016-04-14 15:12   ` Andrew Cooper
2016-04-14 15:17     ` Jan Beulich
2016-04-15  0:55       ` Konrad Rzeszutek Wilk
2016-04-17  8:00         ` Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160420155913.GA29455@localhost.localdomain \
    --to=konrad.wilk@oracle.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien.grall@arm.com \
    --cc=keir@xen.org \
    --cc=mpohlack@amazon.com \
    --cc=ross.lagerwall@citrix.com \
    --cc=sasha.levin@oracle.com \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.