From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
ian.campbell@citrix.com, xen-devel@lists.xenproject.org,
wei.liu2@citrix.com, ian.jackson@eu.citrix.com,
jbeulich@suse.com, mpohlack@amazon.de, dgdegra@tycho.nsa.gov
Subject: Re: [PATCH v1 3/4] XENVER_build_id: Provide ld-embedded build-ids
Date: Fri, 9 Oct 2015 13:47:58 +0100 [thread overview]
Message-ID: <5617B77E.3090004@citrix.com> (raw)
In-Reply-To: <1444359390-14153-4-git-send-email-konrad.wilk@oracle.com>
[-- Attachment #1.1: Type: text/plain, Size: 3782 bytes --]
On 09/10/15 03:56, Konrad Rzeszutek Wilk wrote:
> @@ -367,6 +368,35 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg,
> if ( copy_to_guest(arg, saved_cmdline, ARRAY_SIZE(saved_cmdline)) )
> return -EFAULT;
> return 0;
> +
> + case XENVER_build_id:
> + {
> + int rc;
> + char *p = NULL;
> + unsigned int sz = 0;
> +
> + if ( guest_handle_is_null(arg) )
> + return -EINVAL;
A NULL guest handle should return size, in the same way that we have
size queries with other hypercalls. In the future, build-id will
probably extend to sha256 and get//// longer as a result.
> +
> + if ( len == 0 )
> + return -EINVAL;
This check is redundant with the "sz > len" check below.
> +
> + if ( !guest_handle_okay(arg, len) )
> + return -EINVAL;
This check is performed by copy_to_guest() below.
> +
> + rc = xen_build_id(&p, &sz);
> + if ( rc )
> + return rc;
> +
> + if ( sz > len )
> + return -ENOMEM;
ENOBUFS
> +
> + if ( copy_to_guest(arg, p, sz) )
> + return -EFAULT;
> +
> + return sz;
> + }
> +
> }
>
> return -ENOSYS;
> diff --git a/xen/common/version.c b/xen/common/version.c
> index b152e27..26eeadf 100644
> --- a/xen/common/version.c
> +++ b/xen/common/version.c
> @@ -1,5 +1,9 @@
> #include <xen/compile.h>
> #include <xen/version.h>
> +#include <xen/types.h>
> +#include <xen/string.h>
> +#include <xen/elf.h>
> +#include <xen/errno.h>
>
> const char *xen_compile_date(void)
> {
> @@ -55,3 +59,36 @@ const char *xen_banner(void)
> {
> return XEN_BANNER;
> }
> +
> +#ifdef CONFIG_ARM
> +int xen_build_id(char **p, unsigned int *len)
> +{
> + return -ENODATA;
> +}
> +#else
> +#define NT_GNU_BUILD_ID 3
> +
> +extern const Elf_Note __note_gnu_build_id_start; /* Defined in linker script. */
extern const Elf_Note __note_gnu_build_id_start[],
__note_gnu_build_id_end[];
> +extern const char __note_gnu_build_id_end[];
> +int xen_build_id(char **p, unsigned int *len)
> +{
> + const Elf_Note *n = &__note_gnu_build_id_start;
const Elf_Note *n = __note_gnu_build_id_start;
> +
> + /* Something is wrong. */
> + if ( __note_gnu_build_id_end <= (char *)&__note_gnu_build_id_start )
Need to check for a full Note header as well.
if ( &n[1] > __note_gnu_build_id_end )
> + return -ENODATA;
> +
> + /* Check if we really have a build-id. */
> + if ( NT_GNU_BUILD_ID != n->type )
> + return -ENODATA;
> +
> + /* Sanity check, name should be "GNU" for ld-generated build-id. */
> + if ( strncmp(ELFNOTE_NAME(n), "GNU", n->namesz) != 0 )
> + return -ENODATA;
> +
> + *len = n->descsz;
> + *p = ELFNOTE_DESC(n);
This information could be cached in a couple of static variables, so the
sanity checks are only performed once.
> +
> + return 0;
> +}
> +#endif
> diff --git a/xen/include/public/version.h b/xen/include/public/version.h
> index 44f26b0..e575d6b 100644
> --- a/xen/include/public/version.h
> +++ b/xen/include/public/version.h
> @@ -30,7 +30,8 @@
>
> #include "xen.h"
>
> -/* NB. All ops return zero on success, except XENVER_{version,pagesize} */
> +/* NB. All ops return zero on success, except
> + * XENVER_{version,pagesize, build_id} */
>
> /* arg == NULL; returns major:minor (16:16). */
> #define XENVER_version 0
> @@ -83,6 +84,12 @@ typedef struct xen_feature_info xen_feature_info_t;
> #define XENVER_commandline 9
> typedef char xen_commandline_t[1024];
>
> +#define XENVER_build_id 10
> +/*
> + * arg1 == pointer to char array, arg2 == size of char array.
> + * Return value is the actual size.
Return value is the number of bytes written, or -ve error.
~Andrew
[-- Attachment #1.2: Type: text/html, Size: 5700 bytes --]
[-- Attachment #2: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2015-10-09 12:48 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-09 2:56 [PATCH v1] Add build-id to XENVER hypercall Konrad Rzeszutek Wilk
2015-10-09 2:56 ` [PATCH v1 1/4] xsm/libxl/xen_version: Add XSM for some of the xen_version commands Konrad Rzeszutek Wilk
2015-10-09 9:31 ` Ian Campbell
2015-10-30 10:24 ` Martin Pohlack
2015-10-09 12:20 ` Andrew Cooper
2015-10-30 10:24 ` Martin Pohlack
2015-10-09 2:56 ` [PATCH v1 2/4] xen-version: Add third parameter (len) to the do_version hypercall Konrad Rzeszutek Wilk
2015-10-09 8:25 ` Jan Beulich
2015-10-09 12:29 ` Andrew Cooper
2015-10-09 12:46 ` Ian Campbell
2015-10-09 12:58 ` Andrew Cooper
2015-10-09 14:38 ` Jan Beulich
2015-10-09 14:48 ` Ian Campbell
2015-10-28 17:55 ` Konrad Rzeszutek Wilk
2015-10-28 18:34 ` Andrew Cooper
2015-10-28 18:58 ` Konrad Rzeszutek Wilk
2015-10-29 9:06 ` Jan Beulich
2015-10-09 2:56 ` [PATCH v1 3/4] XENVER_build_id: Provide ld-embedded build-ids Konrad Rzeszutek Wilk
2015-10-09 9:35 ` Ian Campbell
2015-10-09 11:40 ` Martin Pohlack
2015-10-09 12:47 ` Andrew Cooper [this message]
2015-10-09 15:18 ` Jan Beulich
2016-01-06 18:07 ` Konrad Rzeszutek Wilk
2015-10-09 2:56 ` [PATCH v1 4/4] libxl: info: Display build_id of the hypervisor Konrad Rzeszutek Wilk
2015-10-09 9:36 ` Ian Campbell
2015-10-09 12:59 ` Andrew Cooper
2015-10-09 13:06 ` Ian Campbell
2015-10-09 13:11 ` Andrew Cooper
2015-10-09 13:14 ` Ian Campbell
2015-10-09 13:16 ` Ian Campbell
2015-10-09 8:17 ` [PATCH v1] Add build-id to XENVER hypercall Jan Beulich
2015-10-09 12:15 ` Andrew Cooper
2015-10-09 13:25 ` Konrad Rzeszutek Wilk
2015-10-09 15:14 ` Jan Beulich
2015-10-28 15:42 ` Konrad Rzeszutek Wilk
2015-10-28 19:00 ` Konrad Rzeszutek Wilk
2015-10-29 8:55 ` Jan Beulich
2015-10-29 19:47 ` Konrad Rzeszutek Wilk
2015-10-30 8:11 ` Jan Beulich
2015-10-09 14:32 ` 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=5617B77E.3090004@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=dgdegra@tycho.nsa.gov \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=konrad.wilk@oracle.com \
--cc=mpohlack@amazon.de \
--cc=wei.liu2@citrix.com \
--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.