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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).