|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 4/5] xen/version: Fold build_id handling into xenver_varbuf_op()
struct xen_build_id and struct xen_varbuf are identical from an ABI point of
view, so XENVER_build_id can reuse xenver_varbuf_op() rather than having it's
own almost identical copy of the logic.
No functional change.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: George Dunlap <George.Dunlap@xxxxxxxxxxxxx>
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Stefano Stabellini <sstabellini@xxxxxxxxxx>
CC: Wei Liu <wl@xxxxxxx>
CC: Julien Grall <julien@xxxxxxx>
v2:
* New
---
xen/common/kernel.c | 49 +++++++++++++-------------------------------
xen/include/public/version.h | 5 ++++-
2 files changed, 18 insertions(+), 36 deletions(-)
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index cc5d8247b04d..7ab410ac7c28 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -476,9 +476,22 @@ static long xenver_varbuf_op(int cmd,
XEN_GUEST_HANDLE_PARAM(void) arg)
struct xen_varbuf user_str;
const char *str = NULL;
size_t sz;
+ int rc;
switch ( cmd )
{
+ case XENVER_build_id:
+ {
+ unsigned int local_sz;
+
+ rc = xen_build_id((const void **)&str, &local_sz);
+ if ( rc )
+ return rc;
+
+ sz = local_sz;
+ goto have_len;
+ }
+
case XENVER_extraversion2:
str = xen_extra_version();
break;
@@ -502,6 +515,7 @@ static long xenver_varbuf_op(int cmd,
XEN_GUEST_HANDLE_PARAM(void) arg)
sz = strlen(str);
+ have_len:
if ( sz > KB(64) ) /* Arbitrary limit. Avoid long-running operations. */
return -E2BIG;
@@ -703,41 +717,6 @@ long do_xen_version(int cmd, XEN_GUEST_HANDLE_PARAM(void)
arg)
}
case XENVER_build_id:
- {
- xen_build_id_t build_id;
- unsigned int sz;
- int rc;
- const void *p;
-
- if ( deny )
- return -EPERM;
-
- /* Only return size. */
- if ( !guest_handle_is_null(arg) )
- {
- if ( copy_from_guest(&build_id, arg, 1) )
- return -EFAULT;
-
- if ( build_id.len == 0 )
- return -EINVAL;
- }
-
- rc = xen_build_id(&p, &sz);
- if ( rc )
- return rc;
-
- if ( guest_handle_is_null(arg) )
- return sz;
-
- if ( sz > build_id.len )
- return -ENOBUFS;
-
- if ( copy_to_guest_offset(arg, offsetof(xen_build_id_t, buf), p, sz) )
- return -EFAULT;
-
- return sz;
- }
-
case XENVER_extraversion2:
case XENVER_capabilities2:
case XENVER_changeset2:
diff --git a/xen/include/public/version.h b/xen/include/public/version.h
index 9287b5d3ff50..ee32d4c6b30b 100644
--- a/xen/include/public/version.h
+++ b/xen/include/public/version.h
@@ -124,8 +124,10 @@ typedef char xen_commandline_t[1024];
/*
* Return value is the number of bytes written, or XEN_Exx on error.
* Calling with empty parameter returns the size of build_id.
+ *
+ * Note: structure only kept for backwards compatibility. Xen operates in
+ * terms of xen_varbuf_t.
*/
-#define XENVER_build_id 10
struct xen_build_id {
uint32_t len; /* IN: size of buf[]. */
unsigned char buf[XEN_FLEX_ARRAY_DIM];
@@ -164,6 +166,7 @@ typedef struct xen_varbuf xen_varbuf_t;
* effect. e.g. Xen has no control over the formatting used for the command
* line.
*/
+#define XENVER_build_id 10
#define XENVER_extraversion2 11
#define XENVER_capabilities2 12
#define XENVER_changeset2 13
--
2.11.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |