tools/libxc: misc: Mark const the parameter 'keys' of xc_send_debug_keys()

OCaml is using a string to describe the parameter 'keys' of
xc_send_debug_keys(). Since Ocaml 4.06.01, String_val() will return a
const char * when using -safe-string. This will result to a build
failure because xc_send_debug_keys() expects a char *.

The function should never modify the parameter 'keys' and therefore the
parameter should be const. Unfortunately, this is not directly possible
because DECLARE_HYPERCALL_BOUNCE() is expecting a non-const variable.

A new macro DECLARE_HYPERCALL_BOUNCE_IN() is introduced and will take
care of const parameter. The first user will be xc_send_debug_keys() but
this can be used in more place in the future.

Reported-by: Dario Faggioli <dfaggioli@suse.com>
Signed-off-by: Julien Grall <jgrall@amazon.com>
Reviewed-by: Ian Jackson <ian.jackson@eu.citrix.com>
(cherry picked from commit 2b8079610e)
This commit is contained in:
Julien Grall authored and Ian Jackson committed 2021-03-19 13:41:20 +00:00
1 parent 23f3adaa37
commit 5c65f9d5fc
3 files changed
+11 -3

No files matched your search

+1 -1
View File
@@ -1225,7 +1225,7 @@ int xc_readconsolering(xc_interface *xch,
unsigned int *pnr_chars,
int clear, int incremental, uint32_t *pindex);
int xc_send_debug_keys(xc_interface *xch, char *keys);
int xc_send_debug_keys(xc_interface *xch, const char *keys);
int xc_set_parameters(xc_interface *xch, char *params);
typedef struct xen_sysctl_physinfo xc_physinfo_t;
+2 -2
View File
@@ -167,11 +167,11 @@ int xc_readconsolering(xc_interface *xch,
return ret;
}
int xc_send_debug_keys(xc_interface *xch, char *keys)
int xc_send_debug_keys(xc_interface *xch, const char *keys)
{
int ret, len = strlen(keys);
DECLARE_SYSCTL;
DECLARE_HYPERCALL_BOUNCE(keys, len, XC_HYPERCALL_BUFFER_BOUNCE_IN);
DECLARE_HYPERCALL_BOUNCE_IN(keys, len);
if ( xc_hypercall_bounce_pre(xch, keys) )
return -1;
+8
View File
@@ -181,6 +181,14 @@ enum {
*/
#define DECLARE_HYPERCALL_BOUNCE(_ubuf, _sz, _dir) DECLARE_NAMED_HYPERCALL_BOUNCE(_ubuf, _ubuf, _sz, _dir)
/*
* Declare a bounce buffer shadowing the named user data pointer that
* cannot be modified.
*/
#define DECLARE_HYPERCALL_BOUNCE_IN(_ubuf, _sz) \
DECLARE_NAMED_HYPERCALL_BOUNCE(_ubuf, (void *)(_ubuf), _sz, \
XC_HYPERCALL_BUFFER_BOUNCE_IN)
/*
* Set the size of data to bounce. Useful when the size is not known
* when the bounce buffer is declared.
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.