Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP1:GA
xen.25148
xsa115-2.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xsa115-2.patch of Package xen.25148
From e8076f73de65c4816f69d6ebf75839c706145fcd Mon Sep 17 00:00:00 2001 From: Juergen Gross <jgross@suse.com> Date: Thu, 11 Jun 2020 16:12:38 +0200 Subject: [PATCH 02/10] tools/xenstore: ignore transaction id for [un]watch Instead of ignoring the transaction id for XS_WATCH and XS_UNWATCH commands as it is documented in docs/misc/xenstore.txt, it is tested for validity today. Really ignore the transaction id for XS_WATCH and XS_UNWATCH. This is part of XSA-115. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Julien Grall <jgrall@amazon.com> Reviewed-by: Paul Durrant <paul@xen.org> --- tools/xenstore/xenstored_core.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c index b43e1018babd..bb2f9fd4e76e 100644 --- a/tools/xenstore/xenstored_core.c +++ b/tools/xenstore/xenstored_core.c @@ -1268,13 +1268,17 @@ static int do_set_perms(struct connection *conn, struct buffered_data *in) static struct { const char *str; int (*func)(struct connection *conn, struct buffered_data *in); + unsigned int flags; +#define XS_FLAG_NOTID (1U << 0) /* Ignore transaction id. */ } const wire_funcs[XS_TYPE_COUNT] = { [XS_CONTROL] = { "CONTROL", do_control }, [XS_DIRECTORY] = { "DIRECTORY", send_directory }, [XS_READ] = { "READ", do_read }, [XS_GET_PERMS] = { "GET_PERMS", do_get_perms }, - [XS_WATCH] = { "WATCH", do_watch }, - [XS_UNWATCH] = { "UNWATCH", do_unwatch }, + [XS_WATCH] = + { "WATCH", do_watch, XS_FLAG_NOTID }, + [XS_UNWATCH] = + { "UNWATCH", do_unwatch, XS_FLAG_NOTID }, [XS_TRANSACTION_START] = { "TRANSACTION_START", do_transaction_start }, [XS_TRANSACTION_END] = { "TRANSACTION_END", do_transaction_end }, [XS_INTRODUCE] = { "INTRODUCE", do_introduce }, @@ -1296,7 +1300,7 @@ static struct { static const char *sockmsg_string(enum xsd_sockmsg_type type) { - if ((unsigned)type < XS_TYPE_COUNT && wire_funcs[type].str) + if ((unsigned int)type < ARRAY_SIZE(wire_funcs) && wire_funcs[type].str) return wire_funcs[type].str; return "**UNKNOWN**"; @@ -1311,7 +1315,14 @@ static void process_message(struct connection *conn, struct buffered_data *in) enum xsd_sockmsg_type type = in->hdr.msg.type; int ret; - trans = transaction_lookup(conn, in->hdr.msg.tx_id); + if ((unsigned int)type >= XS_TYPE_COUNT || !wire_funcs[type].func) { + eprintf("Client unknown operation %i", type); + send_error(conn, ENOSYS); + return; + } + + trans = (wire_funcs[type].flags & XS_FLAG_NOTID) + ? NULL : transaction_lookup(conn, in->hdr.msg.tx_id); if (IS_ERR(trans)) { send_error(conn, -PTR_ERR(trans)); return; @@ -1320,12 +1331,7 @@ static void process_message(struct connection *conn, struct buffered_data *in) assert(conn->transaction == NULL); conn->transaction = trans; - if ((unsigned)type < XS_TYPE_COUNT && wire_funcs[type].func) - ret = wire_funcs[type].func(conn, in); - else { - eprintf("Client unknown operation %i", type); - ret = ENOSYS; - } + ret = wire_funcs[type].func(conn, in); if (ret) send_error(conn, ret); -- 2.17.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor